Document 1307
MEM /A 
3/31/92

Novell Desktop Systems Group

INTRODUCTION

DR DOS 6.0's MEM command has several different options for displaying
current Memory status.  MEM /A is the most widely used MEM option for
troubleshooting Memory configuration issues.  This displays a
combination of all MEM options available.  Please see pages 258-259 of
the DR DOS User Guide for additional information regarding the MEM
command.

NOTES

Please note that the MEM /A listing differs from system to system.
Also, changes to the machine's hardware or to various operating system
configuration files, namely CONFIG.SYS and AUTOEXEC.BAT, will also affect
a MEM /A listing.  A recommended method for determining changes to this
listing is to start examination of the MEM /A listing with a stripped
software configuration (i.e. a simple CONFIG.SYS and AUTOEXEC.BAT).  

NOTE: this document assumes that the reader has an in-depth understanding
of DOS memory management principles and terms.  A user may find it
beneficial to brush up on memory management principles by examining any
or all of the Digital Research memory management references listed below.

DR DOS 6.0 User Guide
DR DOS 6.0 Optimization and Configuration Tips 
DR DOS 6.0 Tips #1300 through 1306

MEM /A DESCRIPTION

Address refers to the address at which an item (drivers, TSRs, programs
etc.) is located in RAM.  Segment address range 0000-9FFF refers to the
Conventional Memory Area; Address A000-BFFF refers to Video Memory Area;
Address C000-EFFF refers to the Upper Memory Area; Address FFFF-11000
refers to the High Memory Area.  One can determine where a device driver,
TSR, or program is by looking at the first four digits of the address and c
hecking against the above ranges.  In the attached example,  MOUSE is at
address E72E:0000 and is therefore in the Upper Memory Area.

Owner refers to the actual driver, TSR, or program name which is the owner
of the address range.  For example MOUSE owns address  E72E:000 which is
an Upper Memory address.    

Size refers to the size of the actual device driver, TSR, or program in
memory.  Size appears in both hexadecimal and decimal formats.  For example
MOUSE is 13,936 bytes in size or approximately 13 kilobytes.  (13,936 bytes
/ 1024 bytes per kilobyte =  approximately 13 kilobytes)  

Also notice that MOUSE is the owner of the Conventional Memory Address
A54:0000.  Here, MOUSE's size is only 288 bytes.  As one can see the bulk
of the program MOUSE is in Upper Memory at address E72E:0000.   This
smaller amount (288 bytes) of MOUSE remains in Conventional Memory at
ddress A54:0000 as a link or pointer to the rest of MOUSE at address
E72E:0000.  Many program types will leave a portion of their code, called
a "foot print", in Conventional Memory in order to point to the rest of
the program in Upper or High Memory.

Type defines what occupies each particular address whether it be a Loadable
device driver, Built-in device driver, FREE space, Environment, or other
program type. Many of the program types are outlined below. 
	
Note: One may notice an identical Owner-Type specification both in
Conventional Memory and Upper or High Memory.  This is because applications
may need something in Conventional Memory to find or reference the rest of
the program in Upper or Conventional Memory.

RAM refers to an addressed area of Random Access Memory.  RAM acts as a
heading for a certain range of addressable memory.  In the example RAM
shows a size of 655,360 which refers to all of the 640k of Conventional
Memory.
	
Interrupt Vectors refers to the address reserved for the interrupt vector
tables.  In the example, Interrupt vectors own the first address in RAM of
0:0000 and is 1,024 bytes in size.
	
ROM BIOS Data Area refers to the addresses in RAM of certain ROM BIOS
information needed by DOS.  In the example, the ROM BIOS data area owns
address 40:0000 and is 256 bytes in size.
	
DOS Data Area refers to the address reserved as a DOS work area.  In the
example, the DOS data area owns address 50:000 and is 512 bytes in size.       
	
Device Drivers is a header for the Built-in device drivers, listed below
this line. In the example, Device drivers own the addresses ranging from
70:050B to    70:0671 and add up to 2,912 bytes in size.  
	
Built-in device driver refers to the addresses of DOS's built in I/O
functions.  In the example, there are many Built-in device drivers which
own addresses ranging from 70:050B to 70:0671.   
	
System is a header for a group of program types defined below the System
type line.  Notice that the amount of bytes occupied by the System is
usually greater than the total of the listed programs.  We will assign
the term System Overhead to the difference in amount.  In the example,
System owns addresses 126:0000 to 126:0048 and is 2,528 bytes in size. 
	
Loadable device driver generally refers to an address occupied by those
device drivers and TSRs which are loaded from the CONFIG.SYS file.  In
the example, there are loadable device drivers which own addresses
255:0000 (EMM386.SYS), 2BC:0000 (SuperStor's SSTORDRV.SYS), and
DF02:0000 (CON,which is ANSI.SYS).  
	
Program refers to the address of an executable (.EXE or .COM) which is
currently in RAM.  In the example, Program owns addresses A0A:0000
(COMMAND.COM), A78:0000 (MEM.EXE), E72E:0000 (MOUSE.COM), FFFF:00E0
(COMMAND.COM), and FFFF:EFE3 (SuperStor code).

NOTE: Notice how MEM owns address A78:0000 and is 80,608 bytes in size.
MEM will only take up memory during execution and will release itself
from memory upon completion.  This is why the 80,608 bytes MEM takes up
is not subtracted from the final amount of available Conventional Memory.
	  
Environment refers to an address which is owned by environment space set
aside by a particular program.  A ceiling for environment space is set up
via DR DOS 6.0's /E:xxxx switch on the SHELL= statement in CONFIG.SYS
Note: generally 16 bytes are added to the environment size.  Example: if
your environment size is 512 bytes, the size of the environment shown by
the MEM command is 528 bytes (512 bytes + 16 bytes).  In the example,
Environment owns addresses A2B:000 (Environment set up by COMMAND.COM),
A54:000 (Environment set up by MOUSE.COM), and A66:0000 (Environment set
up by MEM.EXE).

FREE refers to the address of a block of RAM space available for use by
programs.  In the example, address 1E26:000 and beyond are FREE (a total
of 531 Kbytes).

NOTE: A user may add the amount of MEM.EXE in memory (80,608 bytes) and
the amount reported by the FREE at 1E26:000 (531,856 bytes) to determine
total available Conventional Memory (612,192).  Notice that this number
differs to that reported in the Standard Memory Allocation Reporting
which reports 612,736 bytes.  We term this difference "System Overhead"
as it represents a small amount of unreported memory (272 bytes).

Upper System Memory refers to the address of an EXCLUDED area of memory.
Excluded memory is memory which has been made exempt from DOS use or
manipulation.  In the example, Upper system memory owns address
9FFF:0000 to DF00:0000 (Upper RAM) for an amount of 258,064.  This range
actually represents a contiguous block that includes the first two
segments of Video Memory plus ROMs, Shadow ROMs, the LIM page frame (EMS
memory) and the EMM386 driver code which DR DOS does not make available.

Extended ROM BIOS Data Area refers to an address of system memory
allocated for BIOS use.  We would generally term this area BIOS Scratch
Area.  Many BIOSes have the ability to set aside 1 kilobyte of BIOS
Scratch Area for BIOS use.  This 1 kilobyte amount will be subtracted
from the overall Conventional Memory total which is generally 640
kilobytes (640 kilobytes - 1 kilobyte = 639 kilobytes).  In the example,
there is not an address owned by the Extended ROM BIOS data area.
	
XMS Upper Memory Block refers to an address owned by a program which put
a portion of itself into Upper Memory without the assistance of a HILOAD,
HIINSTALL, HIDEVICE, or similar command.  SuperStor's device driver,
SSTORDRV.SYS, is one such program.  SSTORDRV.SYS may not be put into
Upper Memory using of the commands above.  However, SSTORDRV. SYS will
put a portion of itself into Upper Memory as long as it is loaded after
a memory manager which creates Upper Memory Blocks (EMM386.SYS).  In the
example, XMS Upper Memory Blocks own addresses E004:0000, E207:0000, and
E6FC:0000 (SHARE.EXE).
	
DR DOS BIOS Code refers to an address of DR DOS's own Basic Input Output
System functions.  In the example, DR DOS BIOS code owns address FFFF:1590
and is 2,552 bytes in size.
 
DR DOS Kernel Code refers to the address which is occupied by the DR DOS
Operating System kernel.  This address is affected by the DR DOS 6.0 memory
manager's /BDOS switch.  In the example, DR DOS kernel code owns address
FFFF:2370 and is 37,952 bytes in size.
 	
Disk Buffers refers to an address which is occupied by small areas or
blocks of memory called buffers.  The placement of buffers is a result of
the DR DOS 6.0 BUFFERS/HIBUFFERS command issued in the CONFIG.SYS file.
In the example, Disk buffers owns addresses E47E:0000 (3 buffers in Upper
Memory which were unable to fit into High Memory), and FFFF:B833
(27 buffers).  Notice that each buffer takes up 512 bytes.

ROM refers to an address owned by a Read Only Memory chip.  In the example,
ROMs own addresses C000:0000, C700:0000, and F900:0000.
	
Upper RAM serves as a title or header for a group of program types defined
below.  In the example, Upper RAM owns address DF00:0000 and is 69,632
bytes in size.  
	
NOTE: A user may add up all of the amounts of the resident programs between
addresses DF00:0000 and EA95:0000 (75,296 bytes) to determine Upper RAM.
Notice that this number differs from that reported by Upper RAM, which is
69,632 bytes.  We term this difference "System Overhead" as it represents a
small amount of unreported memory (5664 bytes).

Shadow ROM refers to an address which is occupied by an area shadowed from
a ROM chip into faster RAM either through EMM386.SYS's /ROM switch or
through CMOS's shadowing functions.  In the example, Shadow ROM owns
addresses C6000:0000 and F800:0000.

Conventional Memory

----------------------------------------------------------------------------
Address   Owner        Size                       Type
----------------------------------------------------------------------------
0:0000    -------- A0000h, 655,360   ------------- RAM ---------------
0:0000    --------   400h,   1,024   Interrupt vectors
40:0000   --------   100h,     256   ROM BIOS data area
50:0000   DR DOS     200h,     512   DOS data area
70:0000   DR BIOS    B60h,   2,912   Device drivers
70:0553   AUX                                  Built-in device driver
70:0565   COM1                                 Built-in device driver
70:0577   COM2                                 Built-in device driver
70:0589   COM3                                 Built-in device driver
70:059B   COM4                                 Built-in device driver
70:0602   CLOCK$                               Built-in device driver
70:0645   CON                                  Built-in device driver
70:0671   A:-D:                                Built-in device driver
126:0000  DR DOS    11B0h,   4,528   System
126:0048  NUL                                  Built-in device driver
241:0000  DR DOS    2030h,   8,240   System
255:0000  EMMXXX0    640h,   1,632   Loadable device driver
2BC:000   E:        5C30h,  23,600   Loadable device driver
A0A:0000  COMMAND    210h,     528   Program
A2B:0000  COMMAND    210h,     528   Environment
A4C:0000  --------    80h,     128   FREE
A54:0000  MOUSE      120h,     288   Environment
A66:0000  MEM        160h,     352   Environment
A78:0000  MEM      13AE0h,  80,608   Program
1E26:0000 -------- 81D90h, 548,848   FREE
9FFF:0000 EXCLUDED 3F010h, 258,064   Upper system memory
----------------------------------------------------------------------------



Upper Memory

C000:0000 --------  6000h,  24,576   ------------- ROM -------------------
C600:0000 --------  1000h,   4,096   ---------- Shadow ROM -----------
C700:0000 --------  1000h,   4,096   ------------- ROM --------------------
C800:0000 EMS      10000h,  65,536   -----------EMS memory-------------
----------------------------------------------------------------------------
D800:0000 EMM386    7000h,  28,672       EMM386 device driver code
----------------------------------------------------------------------------
DF00:0000 -------- 11000h,  69,632   ---------- Upper RAM --------------
----------------------------------------------------------------------------
DF00:0000 DR DOS    1040h,   4,160   System
DF02:0000 CON       1020h,   4,128   Loadable device driver
E004:0000 DR DOS    1F90h,   8,240   XMS Upper Memory Block
E207:0000 DR DOS    2290h,   8,848   XMS Upper Memory Block
E430:0000 DRDOS     2CC0h,   11,456  System
E47E:0000 DRDOS      600h,    1,536  3 Disk buffers
E6FC:0000 SHARE      320h,      800  XMS Upper Memory Block
E72E:0000 MOUSE     3670h,   13,936  Program
EA95:0000 --------  56B0h,   22,192  FREE
----------------------------------------------------------------------------
F800:0000 --------  1000h,    4,096  ---------- Shadow ROM -----------
F900:0000 --------  7000h,   28,672  ------------- ROM ---------------

High Memory

----------------------------------------------------------------------------
FFFF:00E0 COMMAND   1380h,   4,992   Program
FFFF:1470 --------   120h,     288   FREE
FFFF:1590 DR DOS     DE0h,   3,552   DR DOS BIOS code
FFFF:2370 DR DOS    9440h,  37,952   DR DOS kernel code
FFFF:B7B0 --------    83h,     131   FREE
FFFF:B833 DR DOS    3600h,  13,824   27 Disk buffers
FFFF:EFE3 System    101Dh,  4,125    Program
----------------------------------------------------------------------------


BASIC MEMORY ALLOCATION REPORTING - MEM

NOTE: The following description covers the final section of the MEM /A
listing, or the listing resulting from a simple MEM command.  Also, the
following description includes sub-headings which are not found on either
of the above two command listings.  These subheadings are included to help
the user understand other memory areas generally referenced within the DR
DOS operating system.


Memory Type         Total Bytes  ( Kbytes  )         Available
                                                                          
Conventional          655,360    (     640K)        612,736 (  598K )
Upper                  69,632    (      68K)         22,192 (   21K )
High                   65,520    (      64K)            419 (    0K )
Extended            3,145,728    (   3,072K)              0 (    0K )
Extended via XMS              N/A                 2,932,736 ( 2,864K)
EMS                 2,932,736    (   2,864K)      2,932,736 ( 2,864K)

Conventional refers to the RAM memory between 0-640 kilobytes.
Conventional Memory consists of the Low Memory Area and the Temporary
Program Area or TPA.  
	
Low Memory Area refers to the first 64k of Conventional Memory. Low Memory
Area is where the DOS kernel and its associated structures had to reside
previous to recent improvements in memory management.  Since such
improvements, the DOS kernel and its associated structures may be moved
into the Upper Memory Area or High Memory Area.  The Low Memory Area area
can be disabled (not used by applications) or enabled (used by programs)
with the MEMMAX +/- L command.  Enabling the Low Memory Area makes it a
part of the Temporary Program Area.
	
Transient (Temporary) Program Area refers to the RAM memory area in which
applications run.

Upper refers to the RAM memory between 640 kilobytes and 1 megabyte.
Under certain circumstances a user may want to use the MEMMAX +/- U
command to enable or disable Upper Memory.

Video Memory Area refers to the first 128 kilobytes of the Upper Memory
area in RAM.  This area allows for the paging of video memory from system
RAM to the video card's RAM and visa versa.  Basically, DOS pages video
memory off of the video card into system RAM where the application can
access it. Additional  Upper Memory may be used by video (eg. for Super
VGA).  Please see your video card's manual for the complete Upper Memory
Requirements (addresses) of the card.  Under certain circumstances the
MEMMAX +/- V switch may allow for the usage of certain unused Video Memory
as Conventional Memory.  Please refer to page 581 of the DR DOS User Guide
for additional information regarding memory paging.

640 kilobytes to 704 kilobytes is the range that EGA and VGA graphics
cards use to page data.  This area may go unused with a CGA or Hercules
card.  

704 kilobytes to 768 kilobytes is used for video memory.  Roughly half of
this area is used for monochrome or Hercules graphics, roughly half is
reserved for CGA, EGA or VGA.

768 kilobytes to 1024 kilobytes refers to the Upper Memory Range used to
HILOAD, HIDEVICE and HIINSTALL device drivers, TSRs and programs.  This
area may also be utilized by special hardware cards and ROMs.

NOTE: The amount of Total Upper Memory in bytes corresponds to the amount
of Upper RAM shown at address DF00:0000.  The amount of Available Upper
Memory in bytes corresponds to FREE shown at address EA95:0000.

High refers to the first 64 kilobytes of RAM memory above 1 megabyte.  

Extended refers to all RAM memory which is beyond 1 megabyte and has not
yet been defined by a specification.

Extended via XMS refers to Extended memory which has been converted to the
XMS specification.

EMS refers to Extended memory which has been converted to the EMS or
Expanded Memory specification.
