
                        Artisoft Technical Bulletin

                              Dated: 04.11.94
                 LANtastic NOS v6.0 and Memory Management
                               Engineer: MWF
                  

       New features in NOS 6.0 include the modular design of the 
       REDIR.EXE and SERVER.EXE programs. Previous NOS versions 
       would load all REDIR.EXE and SERVER.EXE code whether that 
       function was enabled or not. Now it is possible to disable 
       printing, auditing, notification, etc. in SERVER.EXE and 
       the code needed to support these functions will not be loaded 
       into memory thus making it possible to have a small installed 
       SERVER.EXE program. Of course, increasing Network Tasks, Network 
       Buffers, Cached resources, etc. will increase memory usage.

       To accommodate the modular design of loading REDIR and SERVER, 
       a loading function, called DOSLOAD, was incorporated into these
       programs. DOSLOAD can use Upper Memory Blocks (UMBs) to load into, 
       thus allowing more room for REDIR and SERVER to load.

       DOSLOAD Examples:

       Example 1: When SERVER is executed, DOSLOAD determines if there 
       are UMBs available. If a UMB of sufficient size is available 
       (greater than 50K) and SERVER is being loaded low (into a 
       conventional memory address), DOSLOAD code will load into the 
       UMB and parse the SERVER command line switches (or NET_MGR 
       settings). If enough memory exists (in this case, conventional 
       memory) to load this configuration of SERVER, a check will then 
       be made to see if enough memory exists to load COMMAND.COM after 
       SERVER is installed. If any memory test fails, an error message 
       is displayed ("Not enough memory - Reduce files, tasks, buffer 
       size, ....") and SERVER is not loaded. If all memory tests pass, 
       then SERVER is loaded into conventional memory (immediately 
       above the last installed program), DOSLOAD terminates and 
       unloads, freeing the UMB it was occupying. If a memory check for
       loading of COMMAND.COM were not made, and there was not enough 
       memory available for COMMAND.COM to load, the server would lock 
       and display"Cannot load COMMAND.COM, System halted" immediately 
       after SERVER installed (not a good thing in most cases).

       Example 2: EMM386.EXE loading SERVER.EXE high: DOSLOAD loads into 
       conventional memory, reads the command line switches and loads 
       SERVER into a UMB. Since SERVER is loading outside the conven-
       tional memory address range (greater than 80000h), a check for 
       COMMAND.COM space is not made. Only the needed portions of SERVER 
       are loaded so the initialization size is very close to the 
       installed size. Using LH (LOADHIGH) it is possible to load a 59K 
       (installed) SERVER.EXE into a 59K UMB! After SERVER is installed, 
       DOSLOAD terminates and unloads, freeing the conventional memory 
       it was using.

       Example 3: QEMM386's LOADHI.COM loading SERVER high: QEMM386 
       defines regions (available portions of upper memory) where 
       programs can load and attempts to load programs into a specific 
       region. To do this, LOADHI.COM "masks" all other memory regions 
       including all conventional memory (making them appear as used) 
       and "forces" SERVER to load into the desired region. Since there 
       is no other memory available, DOSLOAD cannot load into conventional 
       memory or another UMB, so the memory region must be large enough 
       to hold the DOSLOAD code and the installed size of SERVER. Plan on 
       105K minimum. As with EMM386's LOADHIGH, no check is made for 
       COMMAND.COM space since the address is above 80000h.

       SERVER will fail to load if the upper memory region is not large 
       enough for DOSLOAD and SERVER code. There is no option for SERVER 
       to load low because there is no conventional memory available (all
       used by LOADHI.COM).

       Example 4: SERVER's "/NO_UMB" command line switch: This forces 
       DOSLOAD code into conventional memory (from the top down). SERVER 
       will then be installed either low or high, depending on the SERVER 
       command line. 

       Tips on QEMM386: 

       1.   If the region that SERVER will load into is less than 105K, try
       removing the region specifier from the QEMM command line:
     
            From:     C:\QEMM\LOADHI /R:2 SERVER
            To:       C:\QEMM\LOADHI SERVER
     
       LOADHI.COM will not "mask" all other available regions and there
       may one region for DOSLOAD to use while it loads SERVER into
       another.
     
       2.   If a page frame exists (EMS memory is active), try adding the
       "/SQUEEZEF" switch to the LOADHI command:
     
            C:\QEMM\LOADHI /SQUEEZEF SERVER
     
       3.   This switch "squeezes" the EMS page frame out to increase the
       size of an adjacent memory region, making it appear as though the
       region is now 60K+ larger. After the program installs and goes
       resident, the page frame is restored.
     
       4.   Use MS-DOS's (MS-DOS, PC-DOS, IBM-DOS) LH (LOADHIGH) command to
       load SERVER into an upper memory region. The UMBs were created by
       QEMM386.SYS and LOADHIGH will load SERVER into one of the
       available UMBs. Unfortunately, there is no control over which
       region the program will be loaded into.
     
       Tips on 386MAX: 
     
       386MAX may have a problem with DOSLOAD's usage of UMB's which may
       result in "Memory allocation error, Cannot load COMMAND, system
       halted" messages accompanied by computer lockups (however, SERVER
       continues to function in the background). This has been observed when
       loading SERVER low (allowing DOSLOAD to use a UMB) and when removing
       REDIR and/or SERVER (this calls DOSLOAD also). Adding the "/NO_UMB"
       switch to REDIR and SERVER command lines has been successful:
          
       SERVER/NO_UMB            ;To load SERVER
       SERVER/REMOVE/NO_UMB     ;To unload SERVER
       REDIR/REMOVE/NO_UMB      ;To unload REDIR
     
       ARTISOFT, Inc. makes no warranties as to the completeness or accuracy
       of this document. LANtastic is a registered trademark of ARTISOFT,
       Inc. Company names, brand names, and product names are trademarks or
       registered trademarks of their respective companies. 