CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



NAME
     concache.exe - DOS concurrent disk cache

SYNOPSIS
     concache   [memory-arguments]   [drive-arguments]   [option]
     [flags]

     device=concache.exe   [memory-arguments]   [drive-arguments]
     [option] [flags]

     concache VECTOR [interrupt-number interrupt-id]

COMMAND LINE RULES
     Command line has following rules

     -    Operands  consist of options and terminating ';' (semi-
          colon).  Except for ';' , the order is unimportant.

     -    The character ';' (semicolon) terminates command  line.
          Operands after the character are ignored.

     -    All  operands are case sensitive, and generally must be
          in lower case.  In this  version  VECTOR  is  the  only
          upper  case  operand.  On config.sys line, operands are
          converted to lower case and then interpreted.

     -    The character '/' can be placed anywhere ' ' (the white
          space) can be placed.

     -    Alphabetic part of an option can be abbreviated down to
          one character, if there is no ambiguities.  For example
          the delete option has the syntax [d[e[l[e[t[e]]]]]].

     -    Where drives are written, the character ':' (colon) can
          be written, if adjacent to drive  letter,  as  many  as
          wanted.  For  example,  in  concache.exe  command line,
          "sfg" is equivalent to "s:f:g:", "sf:g::", and so on.

     The   bitmap_length=   and    buffer_size=    options    and
     gang_interrupts  and  gnaw_interrupt  options  are  the only
     those that at least leading two letters disambiguate.

DESCRIPTION
     Conc286.exe has the  same  functionality  with  concache.exe
     except that it runs also on 286 based compatibles with obvi-
     ous limitation it is loaded only below 640kb of main  memory
     when under 286 CPU.

     The  concache.exe is the disk cache program for DOS environ-
     ments. The other programs ccdisk.exe and floppies.exe  works

Concache 1.10       Last Update:  20 June 1996                  1



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



     under the control of this program.

     It  is  possible to load concache.exe into UMB (upper memory
     block) by appropriate  load  command,  such  as  devicehigh=
     instead  of  device=  or  using  loadhigh command.  Also, it
     loads its resident part into UMB with its option.  This  can
     be  convenient  since this method is not affected by initial
     concache.exe program size.  See below for more.

     After loaded as a character device driver or as a TSR  (Ter-
     minate  and  Stay Resident) program, concache.exe can change
     most of parameters from command.com command line.

     If used without any operand, concache.exe lists the flags in
     effect,  state  of  memory, and state of disks in use.  con-
     cache.exe gets this information from  resident  concache.exe
     program.

     After  concache.exe  has  become  resident,  if  windows  is
     started, concache.exe is expected to be  readable  from  the
     same drive and directory as it is loaded. For example, if it
     is loaded from a floppy drive, the floppy  media  is  refer-
     enced at the same drive when windows starts.


  Memory Arguments
     These  arguments  determines  the  cache data area and their
     sizes to be used for keeping copies of disk data.  At  least
     one of them must be present for concache.exe to go resident.
     Each of the named memories are examined and if enough memory
     is  available to satisfy the argument then they are used for
     cache data area.  Memory argument takes following forms

     x[size]
          Allocate/redefine  extended  memory  according  to  XMS
          (Extended Memory Specification) 2.0.

     e[size]
          Allocate/redefine  expanded  memory  according  to  EMS
          (Expanded Memory Specification) 4.0.  Concache.exe does
          not use page frames.

     p[size]
          Allocate  raw  protected  memory,  retrievable via BIOS
          int15.

     where size is the size to start or to continue concache.exe.
     If  size  is  not  given, concache.exe uses all of available
     memory of the type.


Concache 1.10       Last Update:  20 June 1996                  2



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



     Int15 memory is not allowed to change its  size  after  once
     concache.exe  is loaded.  Changing its size is only possible
     by unloading and reloading concache.exe.

     Extended and expanded memory can  be  changed  at  any  time
     after  concache.exe  is  loaded.   However, this must not be
     exercised frequently, since this causes voiding  accumulated
     cached data in memory.

     Size  is  written  in  decimal or in 0x preceded hexadecimal
     value optionally followed by no space intervening m, mb,  k,
     kb,  or  b for megabytes, kilobytes, or bytes, respectively.
     (A trailing b is for "bytes".  If the  hexadecimal  is  fol-
     lowed by 'b' then it is interpreted as part of value but not
     to mean "bytes".)  The size is truncated to nearest multiple
     of  64  kb.   If  total  usable  memory is less than 128 kb,
     caching is not done.

     The total maximum value concache.exe handles is 64 mb.


  Drive Arguments
     Drive arguments define cache  refreshment  policy  for  each
     drive.  They take the forms

     c[drives] (default)
          to refresh cache using concurrent method, that is, con-
          cache.exe refreshes unwritten (wet) cache data back  to
          drives  concurrently  with  user  programs and DOS, and
          possibly with the other devices,

     a[drives]
          to refresh cache not using concurrent method but  using
          write after,

     w[drives]
          to  refresh cache with "write through" method.  This is
          the safest traditional disk cache method,

     s[drives]
          not to cache the data for the drives.

     Drives are written after each c, a,  w,  s  letter  with  no
     spaces  and  tabs.  Range expressions of drives are allowed.
     For example, wja-df-h is equivalent  to  wabcdfghj  to  mean
     drives  a:, b:, c:, d:, f:, g:, h:, j: are to be cached with
     write through method but drives e:, i:, and those  after  j:
     are not.

     It  makes no sense to specify different refreshment policies

Concache 1.10       Last Update:  20 June 1996                  3



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



     for drives on the same devices. In these cases  concache.exe
     uses  the most pessimistic policy for the drive.  Note actu-
     ally this happens only between concurrent  and  write  after
     methods.

     If  no  drives are specified after any of c, a, w, s letter,
     then it means "all the other" drives.  For  example  aabc  w
     specifies  drives  a:,  b:,  c:  are cached with write after
     method but all the other drives are write through.


     With similar syntax, following cache controls are available.

     r[drives]
          means  refresh  unwritten  cache data back immediately.
          The command awaits the completion of the writes.

     f[drives]
          means discard all data for the  drive  unconditionally,
          written  back  or  not.   In  practice, flush is seldom
          used. If however, for example, floppy change line  does
          not  work,  then cached data for the device may have to
          be flushed with this method.

     n[drives]
          disallows  prereading  on  the  drives.  Normally  con-
          cache.exe  schedules  one  block  preread  after a read
          request is completed.

     o[drives]
          reenables  prereading  on  the   drives   disabled   by
          n[drives].

     The  r[drives]  and f[drives] are only meaningful after con-
     cache.exe is loaded.  Thus these two are meaningless on con-
     fig.sys command line.


  Options.
     Among  available  options,  the most frequently use ones are
     load_umb, io_buffers_low, and delete.  All other options are
     for  fine control of efficiency on particular configurations
     or applications, or for solving possible  incompatibilities.

     bitmap_length=nbytes
          The  value  for  nbytes must be less than 128 and even.
          This directs how the cache data area  given  by  memory
          arguments  described  above  is to be split into arenas
          which are multiple of 16kb.  This option can be  useful
          for very small or large cache data area, or the area is

Concache 1.10       Last Update:  20 June 1996                  4



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



          frequently changed.  Since the bit map length is corre-
          lated  with max_directory_size= option, a more explana-
          tion is given below.


     buffer_size=nbytes
          The option specifies the size of each  io  buffer  that
          may  be  specified by io_buffers= option (see below) to
          be used for cache io, which defaults  to  the  size  of
          largest block disks, normally 512 bytes.  The value can
          be any multiple of this default.


     concurrency=max_concurrency
          The option specifies the number  of  devices  that  can
          perform  io in parallel.  The value must be larger than
          1.  This option is used to prepare stacks  and  working
          spaces for concurrency.


     delete
          The  delete  option  is  the  option  to  tell resident
          (loaded as TSR) concache.exe to be unloaded  from  mem-
          ory. It ignores all the other operands.

          This  option  tries to refresh unwritten data before it
          attempts to delete the resident code and data.

          If delete is unsuccessful for  any  reason,  then  con-
          cache.exe stays in memory with stop mode.


     gang_interrupts
          This  option  is  seldom, probably never, necessary. It
          tells concache.exe  that  programs  other  than  multi-
          taskers  and concache.exe need BIOS multitasking inter-
          rupts.

          Normally, concache.exe terminates int159[01]  chain  to
          prevent  from stack overflow. However, if TSR or device
          driver loaded before concache.exe needs the interrupts,
          then this option must be used.

          If  this  option  is  used  then stacksize= (see below)
          option should be specified to a larger value.


     gnaw_interrupt
          This option should be seldom necessary.  Normally  con-
          cache.exe  handles  floppy  and  IDE disk interrupts by

Concache 1.10       Last Update:  20 June 1996                  5



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



          itself to guard against  interrupt  handlings  of  some
          BIOSes  which  cause stack overflow.  This option tells
          disk interrupts should be handled by genuine BIOS.   If
          this  option is used then stacksize= (see below) option
          might be necessary to be a larger value.


     h[{c|d|h|m|w}...]
          The option controls status display  from  concache.exe,
          where 'c' displays the values of options in effect. The
          'd' drive status, the 'h', together  with  'd',  clears
          drive  statistics, the 'm' displays state of cache data
          area, and the 'w' displays concache.exe overall  condi-
          tions.

          The  'c',  'd', 'm', 'w', and 'h' can be combined (with
          no intervening space) into one operand. If 'h' alone is
          given then concache.exe behaves as if hcdmw is given.


     io_buffers_low
          This  option  directs  allocation  of io buffers in low
          (conventional) memory.  If this  option  is  not  used,
          then io buffers are allocated at the same region as for
          resident part of concache.exe.


     io_buffers=number-of-entries
          This option specifies the number of disk and floppy  io
          buffers.   The  default is 16 (8kb if buffer_size = 512
          bytes).  Increasing this value improves performance.


     largest_io_buffer=number-of-entries
          This option specifies the maximum number of io  buffers
          to  be  used  for  each  buffer refresh operation.  The
          default value is the value  given  by  io_buffers=  and
          bitmap_length= above, of whichever is smaller. But set-
          ting this value larger than these values has no effect,

          Specifying  the  value smaller than default can improve
          concurrency, but  can  make  individual  io  operations
          slower.


     load_umb
          This option specifies the resident part of concache.exe
          be loaded into UMB if possible.  If used  with  device-
          high  or  loadhigh  command then this option is ignored
          (i.e., naturally satisfied).

Concache 1.10       Last Update:  20 June 1996                  6



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



     max_directory_space=nbytes
          The default value is computed as the trade off  between
          space   required  and  hash  table  access  efficiency.
          Although concache.exe computes this value and  the  bit
          map  length  and  allocates space for all necessary bit
          map at start up, the value can  be  improper  when  the
          cache  data area was changed without recomputing it, or
          when very large cache data area is  used.   The  option
          allows  redefine the size of concache.exe directory for
          cache data area.


     stackspace=nbytes
          specifies size of each  stack  space  for  concurrently
          driven devices.


     tick_delay=number-of-seconds
          This  option  specifies  the  delay  after any DOS disk
          access to begin writing wet data back to devices.   The
          value can be up to 254.  Default value is one.  Because
          io request clash is most expensive, a larger delay tend
          to avoid that of request to write back by concache.exe,
          the background, and requests that come  from  DOS,  the
          foreground.   Also, the more writes accumulate in cache
          data area, the smaller the number  of   actual  writes.
          On  the  other  hand,  refreshing  quickly  may prepare
          future write requests' cache data area.


     unknown_drives_allowed
          This option tells concache.exe that drives  unknown  to
          it  must  be treated just like hard disks.  In the case
          such as two drives are unknown but only one of them  is
          to  be  handled  as  a  hard  disk, the remaining truly
          unknown one must be marked with s drive argument.  Fol-
          lowing  types of drives are treated as "unknown" drives
          by concache.exe.


          Number of fats are not two.
               These drives may represent ram disks, which  don't
               need to be cached.

          Not a physical disk.
               In  current directory structure in DOS, each drive
               is marked  as  a  physical  drive  or  not.   Con-
               cache.exe faithfully believes this information.



Concache 1.10       Last Update:  20 June 1996                  7



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



          Extraordinary block size devices.
               If physical block size is not 512 bytes or if log-
               ical block size is not 512, 1024, 2048,  4098,  or
               8192 bytes  then the device is unknown.

          Drive is neither disk or floppy.
               If  device  parameter  reports otherwise, then the
               drive is considered unknown.

          No device parameters.
               Drives on device driver which does  not  implement
               ioctl  function  (int21440d,  get drive parameters
               call).

          Only this last type of disk drives  can  be  forcefully
          "known"   to   concache.exe   by   using   the   option
          unknown_drives_allowed, in which case the drive is han-
          dled  as  if  a  known disk.  Typically, device drivers
          that predate DOS 3.3 lack (or have undetectable) device
          parameters are rescued with this option.


  More on load_umb And io_buffers_low Options
     The  load_umb option alone specifies that both resident part
     and io buffers are to be loaded high. If it  is  accompanied
     with  io_buffers_low  then io buffers are tried to load into
     low memory and resident part is attempted  to  be  in  upper
     memory.  In  the  latter case if there is no upper memory to
     load resident memory both will be loaded low.  The  load_umb
     option is treated as a hint; if no upper memory to load res-
     ident part is found then the resident part is  loaded  where
     it  happened  to  find  adequate  space.  On the other hand,
     io_buffers_low is regarded as a  mandatory  requirement;  if
     there  is no low memory to load io buffers, then the loading
     concache.exe will be aborted.



  Flags
     Flags are specified after "+" or "-" to mean  set  or  reset
     the flags.  Default states of flags are all reset, irrespec-
     tive of options and arguments.


     h    The flag h is to "hold" the cached data. If  this  flag
          is effective, no additional cache is made, while cached
          data are retrievable. This flag is useful to prevent  a
          large copy of files from flushing useful cached data.



Concache 1.10       Last Update:  20 June 1996                  8



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



     l, u The  flag  l  "lock"s  the  succeeding cached data.  To
          "unlock" the lock, use u flag. This flag starts  unlock
          previously  locked  cache  data.  The +l starts locking
          referenced data, while -l stops locking  further.   The
          locked  cached  data  are not purged out of cache until
          worst case (where no unwritten cache data area exist to
          additionally  cache) arises.  After l flag is set, con-
          cache.exe marks the data in cache as locked,  to  indi-
          cate  subsequent  space  hunter  keep  away  from those
          marked. If the flag is reset by either -l  concache.exe
          stops the marking.  The +u says start unlocking if data
          blocks touched are in locked state, while -u tells stop
          unlocking on further data reference.  "Unlocking" means
          unmark the locked data  touched  while  u  flag  is  in
          effect.  These data in cache becomes ordinary member of
          cached data.  After this, space  hunter  can  take  the
          piece of memory into consideration.

          Since it is illogical to allow both locking and unlock-
          ing at the same time, the +l and the +u are  considered
          to  implicitly  deny each other.  The command line does
          not allow +ul or -ul.

          Locking is not a write protection. Locked data may  get
          "wet". They obey the usual cache refreshment policy.

          There are two points to note.

          If  too  much records are locked, cache performance can
          degrade because concache.exe uses  only  the  remaining
          space for the other.

          For  write  operations,  if  space  to  write cannot be
          found, an  arbitrarily  chosen  locked  space  will  be
          silently  unlocked and used as an ordinary cache space.


     n    The flag +n says not to perform prereads on any  drive.
          -n  restarts preread operation on drives that have no n
          specified.


     c, a, w, s
          These flags are alternate  ways  to  define  the  cache
          refreshment  policy for all drives.  The +c flag speci-
          fies all drives specified by c argument  to  use  fully
          concurrent  write  back.   The  +a  flag  specifies all
          drives  specified  by  c  or  a  argment  to  use  non-
          concurrent  write  back. It allows concache.exe to syn-
          chronize with DOS.  The +w flag  specifies  all  drives

Concache 1.10       Last Update:  20 June 1996                  9



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



          specified  by  c,  a,  or w argument to use write back.
          The flag +s specifies cache should not be done.   These
          flags  are  mutually  exclusive,  and specifying one of
          these flags resets the other flags automatically.

          Resetting flags with -a, -w, and -s respectively resets
          +a,  +w,  and +s.  (Note -c "resets" the +c but this is
          meaningless.)  In general, each of them  is  meaningful
          iff the corresponding flag is set.

          Since  these  flags  are  specified  independently from
          drive arguments, the overall refreshment policy can  be
          maintained keeping the drive's default policies.

          The  flag set is combined with drive refreshment policy
          and the pessimistic value is used for the drive's  pol-
          icy.

          Resetting  these  options  lets  concache.exe go to the
          default c refreshment  policy,  even  if  -c  is  used.
          These options are asymmetric in this sense.


  VECTOR argument
     This argument is used to change interrupt convention used to
     communicate between resident and  transient  parts  of  con-
     cache.exe,  ccdisk.exe,  and  floppies.exe.  The programs do
     not become resident by  invoking  the  programs  using  this
     argument.   No  interactions to resident programs are tried.
     They merely rewrite themselves and exit immediately.

     This argument must be written by its own; no other arguments
     can be written together.  VECTOR must be in upper case.

     If  interrupt-number  and  interrupt-id are missing then the
     current settings of interrupt conditions  for  the  commands
     are displayed.

     The  interrupt-number  is a two digit hexadecimal number and
     interrupt-id is a four digit hexadecimal  number  loaded  in
     register  AX  when  the  interrupt is used.  They are inter-
     preted as hexadecimal values without leading 0x or  trailing
     h.

     The  default  values  are interrupt-number = 0xbe and inter-
     rupt-id = 0xefed.  This default interrupt number is known to
     be  used  by IBM ROM BASIC.  If the machine is using it, the
     interrupt number for above programs must be changed  to  the
     other than the range 0x86 - 0xf0.


Concache 1.10       Last Update:  20 June 1996                 10



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



     Unfortunately,  there  are many settings that cause conflict
     with other programs.  Further, there are no absolutely  con-
     flict free values. Following are a few of known reminders.

     -    External interrupts should not be chosen since they can
          have any value in register AX at the instance of inter-
          rupts.

     -    Also,  there  are  a  few  interrupts that can have any
          value in register AX, such as 0x00 - 0x0f, 0x18,  0x19,
          0x20, 0x28, and 0x2e.

     -    A  few interrupt numbers are not really used for inter-
          rupts but rather for table  addresses.  These  includes
          0x1d - 0x1f.

     -    Frequently  used  interrupts  such as 0x21, 0x2a, 0x2f,
          and 0x13 should be avoided since such  interrupts  must
          pass through the chain of interrupt unnecessarily.

     -    Larger  interrupt-id  values  cause  less conflicts, in
          general.

WHEN TO USE DESCRIPTIONS
     Each of arguments on command line can or must  be  specified
     at  load  time  or  after loaded.  Following clarifies these
     conditions.

     Arguments missing in the tables below can be used either  at
     load time or after loaded.

     1) Must be at load time
          Memory argument is the minimal must.

          The  raw  protected  memory is specifiable only at load
          time.

          In addition, following options are only  meaningful  at
          load time.

         buffer_size=   gang_interrupts          gnaw_interrupt
         io_buffers=    io_buffer_low            largest_io_buffer=
         load_umb       max_director_spaces=     stackspace=
         tick_delay=    unknown_device_allowed

     2)Used only after loaded
          Options   delete  and  h[c|d|h|m|w],  device  arguments
          o[drives], r[drives], and f[drives] are meaningful only
          after loaded.


Concache 1.10       Last Update:  20 June 1996                 11



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



WHEN TO LOAD CONCACHE.EXE
     Under  DOS  environment,  it  is  important  to  load device
     drivers and TSRs in a specific order. Below is  the  loading
     order related to concache.exe.

     1)   Concache.exe  must be loaded after block device drivers
          intended to be cached.  It intercepts DOS device driver
          requests.

     2)   Ccdisk.exe  must  be loaded after ASPI manager, but due
          to the condition above, it must be loaded  before  con-
          cache.exe.  Ccdisk.exe is loaded only by config.sys.

     3)   Floppies.exe  may  be  loaded  independent  of  all the
          other.

     4)   If disk-in-disk type of device drivers are  used,  then
          concache.exe  must  be  loaded  before them, except for
          those specifically noted.


EXAMPLES
     Locking all executable's directory entries and stop locking

          concache /+l
          missing     /nonexisting exe file
          concache /-l


     Using 2megabytes of EMS and XMS each at startup

          concache /x2m /e2m


     Startup anyway. The exact memory size other  than  raw  pro-
     tected memory will be given afterwards.

          concache /x0


     Change vectors for concache.exe, ccdisk.exe and floppies.exe
     to interrupt-number = 0x16 and interrupt-id = 0xbeef.

          concache V 16 beef
          ccdisk VE 16 beef
          floppies VEC 16 beef


SEE ALSO
     ccdisk.txt, floppies.txt, eqanda.txt, overview.txt.

Concache 1.10       Last Update:  20 June 1996                 12



CONCACHE.EXE    COPYRIGHT 1995-1996 horio shoichi    CONCACHE.EXE



     Ralf Brown, Jim Kyle "PC interrupts" 2nd ed., Addison Wesly


FEATURES
     Concache.exe works only on local physical block devices.  No
     redirected nor character devices are considered.

     Depending  on  interrupt  overlay  order with the other pro-
     grams, delete option may not always work.

     The  option  io_buffers_low  is  effectively  impossible  if
     loaded  by loadhigh or devicehigh= command, since the latter
     preoccupies whole conventional memory.






































Concache 1.10       Last Update:  20 June 1996                 13



