home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 070.TECH05.TXT < prev    next >
Text File  |  1993-07-30  |  18KB  |  358 lines

  1.  
  2.                         Thanks for the Memory
  3.  
  4.               By Ken Johnson, Chicago Computer Society
  5.  
  6.  
  7.      This month we'll look at one of the most confusing issues in
  8.      personal computers, even to experienced users: memory.  There is
  9.      conventional memory, reserved memory, expanded memory, extended
  10.      memory, upper memory and high memory.  Some programs use
  11.      extended, some need expanded (expanded, extended -- who named
  12.      these things??).  And then there is upper memory and high memory:
  13.  
  14.      what goes where?!?
  15.  
  16.      Like it or not, memory management is becoming increasingly
  17.      important to even the novice computer user.  We are using larger
  18.      and more sophisticated programs that require more memory (and
  19.      certain kinds of memory).  To get the most out of operating
  20.      environments such as Windows or Desqview, we need memory
  21.      configured in a certain way.  We're using more device drivers and
  22.      Terminate and Stay Resident (TSR) programs, all of which make
  23.      demands on precious memory.
  24.  
  25.      By properly using memory management techniques, we can get the
  26.      most out of the memory we have in our computers.  DOS 5.0 now
  27.      includes specialize memory drivers and programs, meaning you no
  28.      longer have to invest in specialized memory management hardware
  29.      or software (though you may want to).  In this column we'll look
  30.      at five kinds of memory:  conventional memory, expanded memory,
  31.      extended memory, the "reserved" upper memory area (sometimes
  32.      called Upper Memory Blocks, or UMBs), and the high memory area
  33.      (HMA).  We'll also discuss a little about memory management with
  34.      DOS 5.0.
  35.  
  36.  
  37.      Conventional Memory, Reserved Memory and the Upper Memory Blocks
  38.  
  39.      The original Intel 8088 processor used in the first personal
  40.      computers could only address 1 megabyte of memory.  It was
  41.      assumed that 640 kilobytes would be more memory than applications
  42.      would ever need, so that 1 Megabyte was divided into two areas.
  43.      The first 640K would be "conventional" memory where DOS resides,
  44.      applications run, and data  manipulated.  The remaining upper
  45.      384K of the 1 Mb was "reserved" for system and hardware services:
  46.  
  47.      things like video RAM, system ROM, hardware ROM, video adapters,
  48.      and system BASIC.
  49.  
  50.      Unfortunately, as programs and processors evolved, two things
  51.      became clear.  First, 640K was not enough memory for our growing
  52.      programs, device drivers, and TSRs.  We started experiencing the
  53.      dreaded "RAM Cram".  Secondly, there were areas of memory within
  54.      the reserved 384K that were not being used; in essence sitting
  55.      there empty.  These normally empty areas are called Upper Memory
  56.      Blocks, or UMBs.  Part of memory management is to find a way to
  57.      put these (otherwise wasted) Upper Memory Blocks to work, and the
  58.      way was found with the 386 processor.
  59.  
  60.      A special feature of 386 and 486 processors is the ability to
  61.      "remap" memory addresses, by translating physical addresses to
  62.      logical addresses and giving the logical addresses to the
  63.      application programs.  These processors can take portions of
  64.      extended memory and map them into the unused Upper Memory Blocks,
  65.      making that space available for device drivers and TSR programs.
  66.      To use the UMBs there must be sufficient extended memory to
  67.      remap, and a control program (such as DOS 5.0's EMM386.EXE) that
  68.      implements the feature.
  69.  
  70.      Once they are available and recognized by DOS, the UMBs can be
  71.      filled with device drivers and TSR programs that would normally
  72.      be occupying space in conventional memory.  DOS 5.0 includes two
  73.      new commands for loading drivers and TSRs into the UMBs:
  74.      DEVICEHIGH and LOADHIGH.  We'll look at these below.
  75.  
  76.  
  77.      Expanded Memory
  78.  
  79.      One of the first efforts to break through the 640K barrier came
  80.      in 1985 when Lotus, Intel, and Microsoft developed the Expanded
  81.      Memory Specification (EMS), a technique for swapping data in and
  82.      out of conventional memory.  An add-in memory board would provide
  83.      a large storage area, with a "page frame" (generally 16K) created
  84.      within conventional memory.  Through swapping pages of memory,
  85.      data and program code could be moved back and forth between the
  86.      memory board and conventional memory, where they could be acted
  87.      upon.
  88.  
  89.      The Lotus-Intel-Microsoft (LIM) expanded memory specification can
  90.      make more memory available to your programs, even on an 8088
  91.      computer.  Both program code and data can be brought into
  92.      conventional memory when needed, and then swapped out when not.
  93.      A memory board is required for expanded memory with an 8088 or
  94.      286 processor, with the appropriate EMS driver.  On a 386
  95.      processor a memory manager can convert extended memory into
  96.      expanded memory for applications that need it, so an add-in board
  97.      is not required.
  98.  
  99.      One way of remembering exPanded memory is to think of the
  100.      Porthole on a ship.  Looking through the porthole you see just a
  101.      small part of the ocean at a time -- though it's a large ocean
  102.      there.  As the boat moves, you see different parts of the ocean
  103.      through the porthole.  Think about the ocean as expanded memory
  104.      and the porthole as the page frame; just as the porthole provides
  105.      access to the ocean a portion at a time, the page frame provides
  106.      access to expanded memory a page at a time.
  107.  
  108.  
  109.      Extended Memory
  110.  
  111.      Extended memory is directly addressable memory above 1 megabyte,
  112.      available on computers with 286, 386, or 486 processors.
  113.      Although DOS can't address this memory in it's default "real"
  114.      mode, 286/386/486 processors can access this memory by switching
  115.      into "protected" mode.  Microsoft, in collaboration with Intel,
  116.      AST Research, and Lotus Development Corporation, developed the
  117.      eXtended Memory Specification (XMS), which allows programs to
  118.      request memory above 1 Mb for use.  Access is provided by a XMS
  119.      manager such as HIMEM.SYS.
  120.  
  121.      Since there is often confusion between exTended and exPanded
  122.      memory, here is a way to remember the difference:
  123.  
  124.      ExPanded Memory is memory that is Paged into conventional memory.
  125.      ExTended Memory is memory that sits on Top of 1 megabyte.
  126.  
  127.  
  128.      High Memory Area
  129.  
  130.      The High Memory Area (HMA) is a special portion of extended
  131.      memory, the first 64K block directly above 1 megabyte.  It's
  132.      available on 286/386/486 processors with at least 64K of extended
  133.      memory.  The HMA is a contiguous area, unlike the UMBs that are
  134.      often fragmented.
  135.  
  136.      The importance of the HMA is that with version 5.0, DOS can load
  137.      itself and its BUFFERS into this area, thus freeing about 50K of
  138.      conventional memory for your programs.  To load DOS into the HMA,
  139.      you need to install HIMEM.SYS, DOS' extended memory manager and
  140.      tell DOS to load itself "high".  We'll see how next.
  141.  
  142.  
  143.      Configuring Memory with DOS 5.0
  144.  
  145.      Third party memory managers such as QEMM-386 and 386Max have been
  146.      available for several years.  But with the release of DOS 5.0
  147.      last year, memory management tools are now available as part of
  148.      DOS itself.  Unfortunately configuring memory with DOS 5.0 isn't
  149.      automatic; it takes some work and experimentation to get your
  150.      system optimized.  (One selling point of QEMM-386 and 386MAX is
  151.      that they can easily configure your system for you, and often
  152.      provide more usable upper memory space than DOS itself can.)
  153.  
  154.      Configuring memory on a 386 or 486 computer with DOS 5.0 involves
  155.      loading HIMEM.SYS and EMM386.EXE, telling DOS to load high and
  156.      make UMBs available, then loading device drivers and TSRs into
  157.      the upper memory blocks.  When you install DOS 5.0, it will
  158.      normally modify your CONFIG.SYS file to do everything except load
  159.      drivers and TSRs into the UMBs; that you have to do yourself.
  160.  
  161.      Let's look at each of these steps.  Remember though that these
  162.      are for a 386 or 486 processor.  If you have a 286 processor you
  163.      cannot use EMM386.EXE, DEVICEHIGH, or LOADHIGH; you can still use
  164.      HIMEM.SYS and load DOS into the HMA though.  With an 8088, you
  165.      don't have extended memory, or expanded memory without an add-in
  166.      board and it's EMS software.
  167.  
  168.  
  169.      1.  Load HIMEM.SYS in your CONFIG.SYS file
  170.  
  171.      HIMEM.SYS is the eXtended Memory Specification device driver
  172.      provided with DOS 5.0.  HIMEM.SYS provides XMS services, makes
  173.      the High Memory Area available, and allows you to install
  174.      EMM386.EXE for access to the UMBs (on 386 and 486 processors).
  175.      HIMEM.SYS also provides access to extended memory for DOS'
  176.      RAMDRIVE.SYS (RAM disk driver) and SMARTDRV.SYS (disk cache),
  177.      also Windows 3.0 in standard and enhanced modes.
  178.  
  179.           HIMEM.SYS is installed via the Device statement:
  180.  
  181.           DEVICE=C:\DOS\HIMEM.SYS [/MACHINE=id]
  182.  
  183.      There are additional switches on the DEVICE= statement that can
  184.      be used to fine tune your system, but most are not required.  An
  185.      exception may be the /MACHINE=id switch,  which specifies a
  186.      particular brand of PC.  For example, the IBM PS2 uses the switch
  187.      "/MACHINE=2".  Check the DOS 5.0 manual for specific machines
  188.      that need this switch.
  189.  
  190.  
  191.      2.  Load EMM386.EXE in your CONFIG.SYS file
  192.  
  193.      EMM386.EXE's primary purpose is to make the UMBs available for
  194.      drivers and TSRs, but it also has another benefit:  it can
  195.      convert exTended memory into exPanded memory.  It will provide
  196.      LIM-EMS support for programs that use exPanded memory but not
  197.      exTended memory.  EMM386.EXE can set up a 64K page frame in an
  198.      Upper Memory Block, then convert part of exTended memory (256K is
  199.      the default) for use as exPanded.  The syntax for loading
  200.      EMM386.EXE is:
  201.  
  202.           DEVICE=C:\DOS\EMM386.EXE [RAM | NOEMS] [X=nnnn-nnnn]
  203.           [I=nnnn-nnnn]
  204.  
  205.      The RAM and NOEMS switches determine whether exPanded memory will
  206.      be made available.  The RAM switch provides access to both
  207.      exPanded memory and the Upper Memory Blocks.  NOEMS provides
  208.      access to the UMBs, but no exPanded memory services.  By
  209.      preventing EMM386.EXE from allocating the 64K EMS page frame,
  210.      more room in the upper memory area will be available for drivers
  211.      and TSRs.  If you don't need expanded memory, use the NOEMS
  212.      switch.
  213.  
  214.      The X= and I= switches can be used to fine tune the upper memory
  215.      area, by including (I=) or excluding (X=) memory addresses.  For
  216.      example, my computer has a Plus HardCard II as my D: drive.  The
  217.      HardCard's device driver uses the memory address C800-C9FF.  By
  218.      excluding X=C800-C9FF, I make sure that no other program tries to
  219.      use that area of memory.
  220.  
  221.      A word of warning:  Be careful when you start including and/or
  222.      excluding memory addresses.  Make sure that you have a boot disk
  223.      handy.  If you make a mistake, memory conflicts can cause your
  224.      computer to freeze when you boot up.  You'll have to boot from
  225.      the floppy, then change the EMM386.EXE statement.
  226.  
  227.      You must load HIMEM.SYS before EMM386.EXE, so be careful of the
  228.      order the statements appear in your CONFIG.SYS file.  The
  229.      EMM386.EXE statement also must appear before any DEVICEHIGH=
  230.      statements.  By the way, don't try to use DEVICEHIGH= with
  231.      EMM386.EXE or HIMEM.SYS; both have to be in conventional memory.
  232.  
  233.  
  234.  
  235.      3.  Load DOS into the HMA, and make UMBs available
  236.  
  237.      The next step is to tell DOS to load itself into the High Memory
  238.      Area, and to enable loading of drivers and TSRs into the UMBs.
  239.      This is done with the new DOS= command in CONFIG.SYS:
  240.  
  241.           DOS=HIGH,UMB
  242.  
  243.      As you might expect, "HIGH" tells DOS to load into the HMA and
  244.      "UMB" makes the Upper Memory Blocks accessible.  (On a 286
  245.      computer, since it can use the HMA but not the UMBs, simply
  246.      specify DOS=HIGH.)  Remember that you must first load HIMEM.SYS
  247.      and EMM386.EXE before issuing this command.
  248.  
  249.      Unfortunately, DOS won't automatically tell you if it loaded
  250.      successfully in the HMA.  You can easily tell by issuing the MEM
  251.      command from the DOS command line.   The last line of the output
  252.      should read "MS-DOS Resident in High Memory Area", showing that
  253.      DOS was loaded into the HMA.  We'll use the MEM command again to
  254.      see what was actually loaded into the Upper Memory Blocks.
  255.  
  256.  
  257.      4.  Load Device Drivers and TSR programs into Upper Memory Blocks
  258.  
  259.      To load device drivers into the UMBs, use the DEVICEHIGH=
  260.      statement in CONFIG.SYS (rather than the normal DEVICE=
  261.      statement).  The syntax is
  262.  
  263.           DEVICEHIGH=[path]filename.ext [parms]
  264.  
  265.      where "filename.ext" is the name of the device driver and "parms"
  266.      are any parameters for that driver.  Let's say I want to load the
  267.      SMARTDRV disk cache, my HardCard ATDOSXL driver, and ANSI.SYS
  268.      into upper memory.  The CONFIG.SYS statements would look like
  269.      this:
  270.  
  271.           DEVICE=C:\DOS\HIMEM.SYS
  272.           DEVICE=C:\DOS\EMM386.EXE RAM X=C800-C9FF
  273.           DOS=HIGH,UMB
  274.           DEVICEHIGH=C:\DOS\SMARTDRV.SYS 1024 521
  275.           DEVICEHIGH=C:\ATDOSXL.SYS
  276.           DEVICEHIGH=C:\DOS\ANSI.SYS
  277.  
  278.      To load TSRs, simply include the LOADHIGH (or LH) statement
  279.      before each program name in your AUTOEXEC.BAT file.  Most TSRs
  280.      can be loaded into the UMBs, if there is enough space.  Let's say
  281.      we want to load Mirror's delete tracking for the C: and D:
  282.      drives, the mouse, and DOSKey into upper memory.  The
  283.      AUTOEXEC.BAT statements would look so:
  284.  
  285.           LOADHIGH MIRROR /TC /TD
  286.           LOADHIGH C:\WINDOWS\MOUSE.COM /Y
  287.           LOADHIGH C:\DOS\DOSKEY /BUFSIZE=1024
  288.  
  289.  
  290.      5.  Use the MEM command to see if it worked
  291.  
  292.      Unfortunately, it is not obvious when something is loaded into
  293.      the Upper Memory Blocks.  If DEVICEHIGH= or LOADHIGH can't fit a
  294.      driver or program into the UMBs, it will be loaded "silently"
  295.      into conventional memory -- there is no message indicating it is
  296.      loading below 640K.  By using the MEM command with the "/C"
  297.      classify switch, you can see what programs are in conventional
  298.      memory and which are in Upper Memory.
  299.  
  300.      The MEM /C command's output has three main sections.  The first,
  301.      labeled "Conventional Memory:" lists the programs currently in
  302.      conventional memory, with their size.  It also shows free memory.
  303.  
  304.      The second section, labeled "Upper Memory:", shows the program
  305.      names and sizes in the upper memory blocks.  Finally, at the
  306.      bottom of the listing is a summary of the extended memory,
  307.      including total extended memory and available XMS memory.  There
  308.      also will be a message indicating if DOS is resident in the High
  309.      Memory Area.  By the way, don't be mislead by a line stating "0
  310.      bytes available contiguous extended memory".  This simply means
  311.      that HIMEM.SYS is controlling all the extended memory.
  312.  
  313.      The MEM /C output is usually longer than a screen in length, so
  314.      you'll want to either print it out or pause the screen display.
  315.      You can get a printed copy by redirecting the output to your
  316.      printer:
  317.  
  318.           MEM /C > PRN
  319.  
  320.      To pause the screen when full, redirect the output into the MORE
  321.      filter using the DOS pipe symbol:
  322.  
  323.           MEM /C | MORE
  324.  
  325.      The MEM command may report a program or driver in conventional
  326.      memory when you tried to load it into Upper Memory.  Why didn't
  327.      it work?  To begin with, remember that the Upper Memory area can
  328.      contain several UMBs of varying size.  DOS always begins loading
  329.      into the largest UMB first, so the order you load drivers and
  330.      programs is important.  In general, you'll want to load the
  331.      largest first.  It is possible that a few small drivers or
  332.      programs will fill part of a large UMB and not leave enough room
  333.      for a large program or driver.  You can experiment with the order
  334.      of DEVICEHIGH= and LOADHIGH statements, using the MEM command to
  335.      see what order works best.  Remember that DEVICEHIGH= statements
  336.      will always execute before LOADHIGH commands, since they are in
  337.      the CONFIG.SYS file.
  338.  
  339.      Some TSR programs can never reside in Upper Memory, because they
  340.      require a large amount of memory when first loading.  Typically
  341.      they release most of this initialization memory after loading,
  342.      but there is not enough room in the Upper Memory Blocks so DOS
  343.      always places them in conventional memory.  For example,
  344.      Borland's Sidekick 2.0 occupies about 40K when running as a TSR.
  345.      But it takes over 300K when loading, meaning it is next to
  346.      impossible to load into Upper Memory.  Unfortunately there is
  347.      usually not an easy way to identify such programs, though the
  348.      documentation is a good place to start.
  349.  
  350.      Conclusion
  351.  
  352.      Understanding and configuring memory isn't the easiest task in
  353.      the world; though DOS 5.0 gives us the tools, it still requires
  354.      some effort, experimentation and finesse to get the most out of
  355.      your computer's memory.  I hope that this column has taken some
  356.      mystery out of memory and how to use it.  Now try some
  357.      experimenting (but make sure you have a boot disk first!)
  358.