Google
 

Trailing-Edge - PDP-10 Archives - SRI_NIC_PERM_SRC_3_19910112 - stanford/5-swskit/monitor-address-space.memos
There are 5 other files named monitor-address-space.memos in the archive. Click here to see a list.


      ---------------
      |d|i|g|i|t|a|l|                   INTEROFFICE MEMORANDUM
      ---------------
      
      
      TO: TOPS-20 Monitor Memo List     DATE: 20-Aug-79
                                        FROM: Mike Gilbert/David Bell
                                        DEPT: Marlboro Support Group,
                                        EXT:  231-5058 Software Services
                                        LOC/MAIL STOP: MR1-2/S43
      
                                        FILE: [DOC-SPECS]HIDSYM.RNO
                                        PDM:  JNG-78-001-01-S



      SUBJ:  More Address Space for the TOPS-20 Monitor



      This  spec  was  reviewed  at  the  TOPS-20  monitor  meeting   of
      11-Dec-78.  This is the final version of the spec.





      1.0  SUMMARY

           This memo describes some changes to be made  to  the  TOPS-20
      monitor,  BOOT,  and  DDT in order to reclaim about 80 (120 octal)
      pages of virtual address space  that  is  now  used  to  hold  the
      monitor's  symbol  table.  The strategy is to put the symbols into
      an address space owned by the SPT, and then  modify  DDT  and  the
      SNOOP% JSYS to be able to find them there.



      2.0  MOTIVATION FOR CHANGE

           THe TOPS-20 monitor is completely out of address space.  This
      means  that  release 4 in its current state cannot be built if all
      of the committed functionality is installed.  Extended  addressing
      cannot  be  used  to  solve  the  problem, since the 2020 does not
      support extended addressing.

           Given that something must  be  moved  out  of  the  monitor's
      address  space,  the  symbol table is the obvious (and perhaps the
      only) choice.  It is large (120604 octal words in 2102's monitor),
      and  references to it are isolated to DDT and the SNOOP% JSYS.  It
      is also not normally referenced when the  system  is  running,  so
      making  it harder to access will not degrade system performance at
      customer sites.
      More Address Space for the TOPS-20 Monitor                  Page 2


      3.0  THE WAY IT WORKS NOW

           In order to make the changes below easier to understand,  the
      following  short  description  of the current address space layout
      and build procedure has been included for contrast.



      3.1  The Current Address Space Layout

           After loading by LINK, the monitor's address  space  is  laid
      out as follows:
      
      
      <----------RSCOD----------> INCOD<---------RSVAR----------><----
      *********************************0000000000000000000000000000000
                                       <1>
      
      
      --------------(free)--------------> 2<NRVAR><-------------------
      00000000000000000000000000000000000000000000********************
      
      
      
      -----------------------NRCOD------------------------><----------
      *****************************************************00000000000
                                                           <-3->4<----
      
      
      ----NPVAR----><----(free)---><-----------JSVAR----------><PSVAR>
      0000000000000000000000000000000000000000000000000000000000000000
      -----------Symbol Table----------->
      
      
           *: Non-zero code or data     0: Zero space (allocated only)
      
           1. POSTLD      2. PPVAR      3. BGSTR      4. BGPTR
      
      
      where  areas  above the line indicate code or data loaded into its
      final resting place, and areas  below  the  line  have  just  been
      temporarily  loaded overlapping zeros while awaiting processing by
      POSTLD.

           After loading, the monitor is started at POSTLD, which  takes
      the following actions:

      1.  Moves the symbol table to after the RSVAR area.

      2.  Writes BUGSTRINGS.TXT, then appends the BGSTR and BGPTR  areas
          to the NRCOD area.

      3.  Deletes itself.
      More Address Space for the TOPS-20 Monitor                  Page 3


           After POSTLD is finished, the final layout  as  seen  by  the
      running monitor is as follows:
      
      
      <----------RSCOD----------> INCOD<---------RSVAR----------><----
      *********************************00000000000000000000000000*****
      
      
      
      -----------Symbol Table-----------> 1<NRVAR><-------------------
      ***********************************000000000********************
      
      
      
      -----------------------NRCOD------------------------><----------
      *****************************************************00000000000
      
      
      
      ----NPVAR----><----(free)---><-----------JSVAR----------><PSVAR>
      0000000000000000000000000000000000000000000000000000000000000000
         <--------BOOT Area------->
      
      
           *: Non-zero code or data     0: Zero space (allocated only)
      
           1. PPVAR



      3.2  BOOT

           When BOOT is initially run, it only reads in  the  first  340
      pages  of  the  above address space (through the end of the symbol
      table plus some number  of  zero  pages).   That  portion  of  the
      monitor then starts up job 0, which calls BOOT back to read in the
      rest of the monitor a piece at a time, swapping it out as it  goes
      to make room for the next piece.

           Since BOOT must stay around in the monitor's virtual  address
      space  until  after  all of the non-zero parts of the monitor have
      been read in and job 0 has been  running  for  a  while,  it  must
      overlap a zero area of the monitor that will not be used while all
      this is happening.  The only areas that meet  this  criterion  are
      the  NRVAR area, the latter part of the NPVAR area (the first part
      is the resident free pool and is used when PS:  is  mounted),  and
      any unused areas.
      More Address Space for the TOPS-20 Monitor                  Page 4


           BOOT has a hard-wired in origin, so the  address  chosen  for
      BOOT  must  always  lie  in one of the above areas in all monitors
      built, no matter how much the PSECT origins are  moved  around  by
      developers  desperate  for  address  space.   In practice, BOOT is
      built to lie in the middle of the space formed by the end  of  the
      NPVAR  area and the unused region beyond it (marked "BOOT area" in
      the above diagram), and the system works because the PSECT origins
      are  not generally moved far enough to make BOOT fall outside this
      area, though it may move around inside it.

           This system started failing when the directory was moved  out
      of the JSB for 2060 monitors, because the JSB shrunk significantly
      and everything moved up a lot.  The current state of the world  is
      that  there  are  two  versions  of  BOOT, a model A and a model B
      version, which are  identical  except  that  they  have  different
      origins to try and stay within the BOOT area.

           Another constraint to worry about is that the NRCOD area must
      start  above  340000 or MTBOOT will not work.  The problem is that
      if the first part of the NRCOD area is read in initially by  BOOT,
      then  the  tape  will  already be positioned past the start of the
      area, so that Job 0's attempt to  read  in  the  entire  swappable
      monitor  will  fail.  This is frequently broken by accident, since
      there are no ill effects to anything except MTBOOT.



      3.3  Small Systems

           For the system to be sucessfully booted on  a  128K  machine,
      the  symbol table must end by about 350000 in order for BOOT to be
      able to read it in with the resident monitor, and still leave room
      for  BOOT  itself and an area to read the swappable monitor into a
      piece at a time.  This is generally not  a  problem,  because  the
      RSVAR  area (which contains the CSTs, the SPT, etc.) is smaller on
      a small system.
      More Address Space for the TOPS-20 Monitor                  Page 5


      4.0  THE PROPOSED CHANGES

           This section describes in detail all of the changes  proposed
      to move the symbol table out of the monitor's address space, along
      with an explanation where appropriate of why  plausible  alternate
      implementations were rejected.



      4.1  The New Address Space Layout

           In order for the symbols to be available from monitor startup
      time,  they  must  reside in the MONITR.EXE file and be read in by
      BOOT.  Any scheme to put them into a  different  file  would  mean
      that  they  would  not  be around until after all of the monitor's
      disk mounting and other startup  code  had  been  executed,  which
      means  that  EDDT would have no symbols to debug that startup code
      with.  Having two files also promotes version skew.

           To put the symbols into the EXE file without overwriting code
      or data, an all-zero area big enough to hold them must be found or
      created.  This area must also be right after the  RSVAR  area,  so
      the  symbols  will  be  read in by BOOT with the resident monitor.
      The RSVAR area itself cannot be used, because it is  used  by  the
      monitor very early in system startup.

           Given this, the only way to generate a zero area  big  enough
      to hold the symbols is to concatenate the NPVAR area with the JSB,
      and move them both to somewhere below 340000.  These are  the  two
      largest zero areas, and the symbol table is so large that the only
      way to get enough room is to use both of them.
      More Address Space for the TOPS-20 Monitor                  Page 6


           The new address space layout looks like this:
      
      
      <----------RSCOD----------> INCOD<---------RSVAR----------> 1<--
      *********************************0000000000000000000000000000000
                                                                   <--
      
      
      -2-><----------JSVAR-----------><---------NPVAR---------><------
      000000000000000000000000000000000000000000000000000000000*******
      ----------Symbol Table--------------->
      
      
      ----------------------------NRCOD-------------------------------
      ****************************************************************
      
      
      
      -><-3->4<-------------------(free)----------------------><NRVAR>
      ********00000000000000000000000000000000000000000000000000000000
                                                               < BOOT>
      
      
           *: Non-zero code or data     0: Zero space (allocated only)
      
           1. PPVAR      2. PSVAR       3. BGSTR      4. BGPTR
      
      
      Note  that  this  is the layout after LINK is finished loading and
      also what the monitor will see;  POSTLD  will  no  longer  do  any
      reorganizing  after  loading.   The  area  marked "(free)" is that
      freed up by getting rid of the symbol table, and can  be  parceled
      out  as  needed  to the other PSECTs by adjusting the LINK command
      file.



      4.2  BOOT

           Since most of the zero space in the monitor is  now  used  to
      hold the symbols in the EXE file, the monitor can no longer afford
      to allocate a large zero area for  BOOT  and  hope  that  it  will
      overlap  properly.   However, overlapping BOOT with a smaller zero
      area means that the monitor and BOOT must agree exactly where BOOT
      will fit, and no shuffling of the adjacent PSECT boundaries can be
      allowed.

           The solution to this problem is to move BOOT to the very  end
      of  the  monitor's  virtual address space, and overlap it with the
      NRVAR area, which is just about the same size  as  BOOT.   Putting
      BOOT  and  the NRVAR area at the end of memory means that the only
      PSECT boundary moving that will ever be needed will be moving  the
      start  of  the  NRVAR area down if it grows larger, which will not
      hurt BOOT.  It also means that the model A and model B versions of
      BOOT can be recombined.
      More Address Space for the TOPS-20 Monitor                  Page 7


           The other change to BOOT  is  to  move  its  default  highest
      address  to  read in from 340000 to the last address in the symbol
      table, as calculated by looking at .JBSYM.  This  will  allow  the
      growth  of  the CSTs etc.  on large systems to push the end of the
      symbol table above 340000 without harm, and will  also  allow  the
      bottom  of  the  NRCOD area to drop below 340000 if needed without
      breaking MTBOOT.



      4.3  EDDT

           When the monitor has been loaded by BOOT but not started, the
      symbols  will  be  in the monitor's virtual address space and EDDT
      can access them as it does now.  However, once the monitor has set
      up  MMAP  and  turned  on paging, the symbols will vanish from the
      virtual address space (although they will  still  be  in  physical
      memory), so EDDT must know how to find them in physical memory.

           In order to tell EDDT where the symbols are, the monitor will
      set up an alternate MMAP that describes an alternate address space
      containing only page 0, EDDT, the symbols, and the hardware paging
      tables (SPT etc.).  When EDDT wants to search the symbol table, it
      will first change KIEPT to switch to the alternate address  space.
      When  it  wants  to  do almost anything else, it will first change
      KIEPT to return to the monitor's address space.

           The   changing   KIEPT   was   selected   rather    than    a
      "length,,address"  or list of pages scheme because it is simple to
      implement inside EDDT.  This mechanism is also fairly  independent
      of  the  type  of paging enabled, so TOPS-10 7.01 can use the same
      EDDT to get more address space in their monitor.

           In order to pass the necessary parameters  to  EDDT,  we  are
      going  to define location .JBEDV=112 ("Exec Data Vector") to point
      to a block of data for communication with the  monitor.   This  is
      one  of  only three locations left that are still unused in page 0
      of both the TOPS-10 and  TOPS-20  monitors,  and  using  a  common
      location   cuts   back  somewhat  on  the  wild  proliferation  of
      conditionals inside DDT.  For the format of the block itself,  see
      its definition in MONSYM and STG.
      More Address Space for the TOPS-20 Monitor                  Page 8


      4.4  MDDT

           When MDDT wants to access the symbol  table,  we  propose  to
      have  it  map  a few pages of the symbol table at a time through a
      window in the JSB.  Doing this will also have  the  pleasant  side
      effect  of  forcing a centralization and cleanup of DDT's internal
      symbol processing code.

           Instead of having MDDT call MSETMP directly  or  inventing  a
      new  MRPAC-style  JSYS,  we  are  going  to  define  a new monitor
      subroutine called .IMOPR (Internal Monitor  OPeRation)  that  MDDT
      can  call whenever it needs the monitor to do something.  We chose
      a well-defined monitor subroutine because it is much faster than a
      JSYS  (symbol searching is already slow enough!), and the standard
      interface keeps MDDT from breaking every time the calling sequence
      to  an  internal subroutine like MSETMP changes.  We also want the
      interface to be standard enough so that an MDDT on  TOPS-10  could
      perform  the  same  functions  by  calling  an  .IMOPR entry point
      defined inside the TOPS-10 monitor.

           The format of a call to .IMOPR is fairly simple, so it is not
      explicitly  described here.  The eventual intent is to have MRPAC,
      SWPMWE/SWPMWP, and anything else  that  MDDT  may  need  from  the
      monitor  available  as functions to .IMOPR, but the only functions
      currently planned are allocate JSB window and  map  symbols.   The
      interested   reader   is   referred   to  the  listings  for  more
      information.



      4.5  The SNOOP% JSYS

           The SNOOP% JSYS will be made to do symbol  windowing  through
      the  JSB  just  like  MDDT,  using  the .IMOPR functions mentioned
      above.



      4.6  LCKINI/ULKINI

           These subroutines are called from the monitor and  by  WHEELs
      from  MDDT to lock or unlock EDDT (the INCOD PSECT) and the symbol
      table.  They will be made smart enough  to  lock  and  unlock  the
      symbol table.



      4.7  JSB/PSB Assumptions

           If the JSB and PSB are moved from the  end  of  memory,  some
      assumptions  in  the monitor will no longer be valid and will have
      to be fixed.  So far, we have only been able  to  find  four  such
      assumptions (all in PAGEM), but there may be more.
      More Address Space for the TOPS-20 Monitor                  Page 9


      4.8  POSTLD

           After this project is finished, all that  will  be  left  for
      POSTLD to do will be to write the BUGSTRINGS.TXT file.  A possible
      future one plus would be to write a  utility  that  would  read  a
      MONITR.EXE  and  produce  a  BUGSTRINGS.TXT.  POSTLD could then be
      deleted entirely, which would simplify the monitor  build  process
      and control files.



      4.9  PSECT Boundary Symbols

           While  working  on  this  project,  we  frequently  found  it
      necessary  to  range check addresses or page numbers against PSECT
      boundaries.  This is currently difficult, because  PSECT  boundary
      symbol names are inconsistent or missing.  We would like to define
      a consistent set of symbols as follows (assume xxxxx is  the  name
      of a PSECT):
      
      
           xxxxxP    The first page of the PSECT
      
           xxxxx     The first address of the PSECT (xxxxxP*1000)
      
           xxxxxL    The last page of the PSECT
      
           xxxxxZ    The last address of the PSECT (xxxxxL*1000+777)
      
      



      5.0  GENERAL INFORMATION

      5.1  Feature Tests

           This project will define a  feature  test  called  HIDSYM  in
      PARAMS.   If  the  feature  test  is  on,  then  the hidden symbol
      processing described in section 4 will occur.   If  it  is  turned
      off,  then  the symbols will live in the monitor's virtual address
      space between the PPVAR and PSVAR areas, and EDDT, MDDT and SNOOP%
      will all access the symbols directly, as they always have.

           Another feature test called BUGSTF will  be  cleaned  up  and
      moved  from  POSTLD to PARAMS.  This feature test controls whether
      or not the bug strings are kept in the monitor address  space,  so
      they  will be available for typeout when BUGCHKs or BUGINFs occur.
      The feature test will be turned on because it  provides  a  useful
      facility and only takes 10 pages of monitor virtual address space,
      but it can be turned back off in the future if those 10 pages  are
      needed.
      More Address Space for the TOPS-20 Monitor                 Page 10


      5.2  Monitor Data Locations

           The  following  locations  are   of   interest   to   monitor
      programmers:


           HIDSYF       Non-zero if HIDSYM was turned on;   the  monitor
                        has or intends to hide the symbols.

           HSYPAG       Less  than  zero  if  the  symbols  are  in  the
                        monitor's  virtual  address space (they have not
                        yet been hidden or are not  going  to  be).   If
                        positive,   .JBSYM   points  into  an  alternate
                        address space, not the monitor's.  This  is  the
                        word that EDDT looks at.

           SYMBAS       The  SPT  index  of  the  alternate  MMAP   that
                        describes the symbol address space.

           DDTPRS       Non-zero if EDDT and the symbols are  locked  in
                        memory.   If  zero,  they are swappable, so EDDT
                        cannot be used until LCKINI is  called  to  lock
                        them.

           BUGTP        Non-zero if the  bug  strings  are  present  (in
                        which case it points to them).



      6.0  IMPLEMENTATION

           This project will be implemented in  the  following  discrete
      steps.   The  completion  of each step should result in a runnable
      monitor,  which  can  be  brought  up  and  checked   out   before
      proceeding.

      1.  Put up the new MDDT for general use by the monitor group.

      2.  Put up the new EDDT for general use by the monitor group.

      3.  Put in the feature tests (turned off), and the monitor code.

      4.  Re-arrange the PSECTs, and fix POSTLD  and  BOOT.   Note  that
          this  BOOT  will  not bring up an old monitor, nor will an old
          BOOT bring up this monitor.

      5.  Turn on the feature tests.  The  extra  address  space  should
          appear at this point.

      The actual implementation schedule will depend on how  the  review
      of this spec and the merging of code go.

           [End of Monitor Address Space Spec]


      ---------------
      |d|i|g|i|t|a|l|                   INTEROFFICE MEMORANDUM
      ---------------
      
      
      TO: Folklore                      DATE: 20-Aug-79
                                        FROM: Mike Gilbert
                                        DEPT: Marlboro Support Group,
                                        EXT:  231-5058 Software Services
                                        LOC/MAIL STOP: MR1-2/S43



      SUBJ:  Monitor Psects and Boot Procedure






           This memo collects in one place a bunch of random facts about
      the  TOPS-20  monitor address space layout, which Psects are where
      and why, and how this all relates to the monitor's boot procedure.

           For  some  additional  information   on   this   topic,   see
      [DOC-SPECS]HIDSYM.MEM.   Be  warned  that  parts  of that file are
      obsolete.



      1.0  LIST OF PSECTS

           The following is a list  of  all  of  the  TOPS-20  monitor's
      psects,  along  with  a  description  of each one.  Note that each
      psect whose name ends in VAR is all zero, and  is  not  filled  in
      until the monitor starts running.

      1.  Page 0 (and 1 on 2020s) - Not really a psect, these pages  are
          loaded  with  LOC  statements,  and  are full of miscellaneous
          communication areas, flags, etc.

      2.  RSCOD (Resident code) - This psect contains the code and  data
          that  can never be swapped out.  This psect is hard-wired into
          the monitor as the first one, and the location MONCOR contains
          the last page number in it.

      3.  INCOD  (Initialization  code)  -  This  psect  contains   some
          routines  used  only  during monitor initialization (including
          the 143$G dialog).  It also contains Exec DDT.  This psect  is
          locked  when  the  monitor  is  started,  but gets unlocked at
          GETSWM unless EDDT is needed.

      4.  PPVAR (Per-processor variables) - This psect  doesn't  contain
          anything.   It  is used to reserve a few slots in MMAP for use
          in setting up temporary mappings to memory pages.  APRSRV uses
                                                                  Page 2


          these map slots to recover from parity errors, for example.

      5.  RSVAR (Resident variables) - This psect contains the monitor's
          variables that must always remain resident, including the EPT,
          MMAP, and the CSTs.

      6.  SYVAR (Symbol variables) - This psect contains everything that
          (like  the  symbols)  should  appear  only in EDDT's alternate
          address space, and not in the monitor's normal address  space.
          The  symbols get appended to this psect early in the monitor's
          initialization, and then both the symbols and  the  psect  get
          "hidden".    This   psect  is  of  zero  size  if  the  HIDSYM
          conditional is not set.

      7.  PSVAR (PSB variables) - This psect contains the PSB.

      8.  JSVAR (JSB variables) - This psect contains the JSB.

      9.  NRVAR (Non-resident variables) - This psect  contains  monitor
          data locations that can be swapped.

     10.  NRCOD (Non-resident code) - This psect  contains  the  monitor
          code  that  can  be swapped, including the processing routines
          for all the JSYSes.  This psect is usually write-locked.

     11.  BGSTR (Bugstrings) - This psect contains  ASCIZ  strings  that
          describe  each  BUGINF,  BUGCHK, and BUGHLT.  Like NRCOD, this
          psect is swappable and write-locked.

     12.  BGPTR (Bugpointers) - This psect contains a few words for each
          BUGxxx,  including  the addtional arguments and pointer to the
          corresponding Bugstring.  This psect  is  also  swappable  and
          write-locked.

     13.  NPVAR (Non-resident page  variables)  -  This  psect  contains
          monitor variables that are allocated a page at a time and that
          can be swapped.  One of the main things in this psect  is  the
          resident  free pool (RESFRP), whose pages get locked in memory
          one at a time as they are allocated.




      2.0  BOOT

           BOOT is read in by the front  end  at  some  random  physical
      address  (currently  on  top of the RSCOD psect) and started.  The
      first thing it does is find the highest 20 pages in section  0  of
      physical memory, and move itself there.  It then sets up a mapping
      that is straight physical to virtual, except that it  always  maps
      itself at the end of virtual memory (pages 760000 and beyond).

           After the above initialization, BOOT  reads  the  monitor  in
      around  itself  in  virtual  memory.   Since  BOOT needs to remain
      mapped and functioning until the swappable monitor has  been  read
                                                                  Page 3


      in  and  started,  it  must  not  lie in any part of the monitor's
      virtual  address  space  that  will  be  used  by  the   monitor's
      initialization code, including the memory mapping code, the device
      mounting and checkout code, the scheduler, etc.

           The only three areas that satisfy the requirements are a  gap
      between  psects,  the  NRVAR  psect, or the last part of the NPVAR
      psect (the first part of the NPVAR  psect  contains  the  resident
      free  pool,  which  is  used  by the disk mounting code and by the
      swapper).  BOOT currently overlaps the end  of  the  NPVAR  psect,
      which is the last psect in the monitor.



      3.0  WHY THE PSECTS ARE WHERE THEY ARE

           In addition to the problem with BOOT mentioned  above,  there
      are  several  rules  that  must  be followed when re-arranging the
      psects, as follows:

      1.  RSCOD must be first.  Checks to see  if  an  address  lies  in
          RSCOD  are  just  CAMLE  MONCOR, which won't work if any psect
          falls below RSCOD.

      2.  All of the psects in the part of the monitor that  is  started
          first  and  that reads in the swappable monitor must be first.
          In addition, the last thing in that part of the  monitor  must
          be  the  symbol table.  This includes the RSCOD, INCOD, PPVAR,
          RSVAR, and SYVAR psects.  The code in these psects  must  work
          before any swapping or paging is going on, so they must all be
          low  enough  to  fit  in  physical  memory  on  the   smallest
          configuration  supported.   In addition, BOOT stops reading in
          the resident monitor when it hits the end of the symbol table,
          so  the  symbol  table must be the last thing in this group of
          psects.

      3.  The group of non-zero psects that swap are treated as  a  unit
          by  certain  parts  of  the  monitor,  and should therefore be
          together.  These psects are NRCOD, BGSTR, and BGPTR.

      4.  PSVAR, JSVAR, POSTCD, NRVAR, and NPVAR can  generally  be  put
          anywhere.  They have been moved in the past with good success.




      4.0  WHAT PSECTS CAN OVERLAP

           The POSTCD psect can overlap any xxVAR psect, since  it  will
      be  gone  by  the  time  MONITR.EXE  is  generated.   The psect is
      currently allocated its own three pages  to  avoid  psect  overlap
      warnings from LINK (a cosmetic precaution only).
                                                                  Page 4


           If HIDSYF is set and hidden symbol processing is being  done,
      then  the  SYVAR  psect and the symbol table can overlap any other
      xxVAR psects.  The SYVAR psect is currently allocated its own page
      to avoid psect overlap warning messages from LINK.

           If BUGSTF is not set and the bugstrings and  bugpointers  are
      not  present  in  the  running  monitor,  then the BGSTR and BGPTR
      psects can overlap any xxVAR psect.  In the current monitor,  they
      would   probably   be  overlapped  with  the  NPVAR  psect,  which
      immediately follows them.

           No other psect overlaps can be allowed without  breaking  the
      monitor.



      5.0  HOW TO CONTROL THE SYMBOL TABLE ORIGIN

           The psect origins of all the real psects  are  controlled  by
      /SET  switches  in the LINK .CCL file.  The symbol table, however,
      must be controlled in a more indirect way, via the  LINK  switches
      /SYMSEG and /UPTO.

           The /SYMSEG:PSECT:name switch  directs  LINK  to  append  the
      symbol table to the named psect.  If symbols are hidden, then then
      symbols should be appended to INCOD.  If not, then they should  be
      appended  to SYVAR.  The symbols will not normally start until 200
      words after the end of the preceeding psect.  The extra 200  words
      are the PAT.. area.

           The /UPTO:address switch tells LINK the highest legal address
      for  the  symbol  table.   If there are enough symbols to make the
      symbol table attempt to exceed the specified  address,  then  LINK
      will  output a warning message and truncate the symbol table.  The
      resulting monitor should still run if this  occurs.   The  address
      should  be  set  to one less than the base of the first psect that
      the symbol table cannot overlap.



      6.0  THE MONITOR BOOT PROCEDURE

           The following is a step by step  description  of  the  memory
      management  going on when the monitor first comes up.  Those steps
      marked with an asterisk  (*)  are  not  applicable  unless  hidden
      symbol processing is going on.

      1.  BOOT reads in the portion of the monitor up through the end of
          the symbol table, then starts the monitor.

      2.  * STG moves the symbol table up to immediately  following  the
          SYVAR  psect  in physical memory.  It does this to free up the
          RSVAR and PPVAR psects so that MMAP and the CSTs can be set up
          to  turn on paging.  After the symbol table is moved, it lives
          in physical memory overlapping part of where the  non-resident
                                                                  Page 5


          code (NRCOD) will go in virtual memory.

      3.  PGRINI in PAGEM  sets  up  KIEPT,  MMAP,  the  CSTs,  and  the
          replacable queue.

      4.  * PGRINI sets up SYMMAP to point to an alternate address space
          containing  EDDT, the symbols, and parts of the monitor.  EDDT
          and the symbols live at the same  addresses  in  this  virtual
          address space as they do in physical memory.  The symbols will
          not appear in the monitor's main address space at all.

      5.  PGRINI turns on paging.  If the symbols are being hidden,  the
          symbols become inaccessible to the monitor at that point.

      6.  The resident monitor (MEXEC) calls BOOT with a JSP  repeatedly
          to  read  in  the  swappable  monitor  a piece at a time.  The
          pieces are mapped at their correct home in virtual  memory  as
          they  are read in, but they are put in any free physical pages
          available, including gaps between resident psects.   If  there
          are  not  enough  free  physical  pages  to hold the swappable
          monitor, then some of  it  is  paged  out  to  make  room  for
          incoming new parts being read in by BOOT.

      7.  BOOT is deleted, and the monitor unlocks  INCOD,  then  starts
          SYSJOB and PTYCON, and finishes coming up.


           A  possible  memory  map  at  various   stages   of   monitor
      initialization  is  as  follows  (assume  a 128K system and hidden
      symbol processing):
      
              Physical        Monitor VAS     Symbol VAS
      
      Just before the monitor is started:
      
              RSCOD           RSCOD
              INCOD           INCOD
              Symbols         Symbols
              ...             ...
      128K    BOOT            ...
                              ...
      256K                    BOOT
      
      Just after paging is turned on:
      
              RSCOD           RSCOD           RSCOD
              INCOD           INCOD           INCOD
              PPVAR           PPVAR
              RSVAR           RSVAR           RSVAR
              SYVAR                           SYVAR
              Symbols         PSVAR           Symbols
                |             JSVAR             |
      128K      v             NRVAR             v
                              ...
                              ...
                                                                  Page 6


      256K                    BOOT
      
      After the swappable monitor has been read in:
      
              RSCOD           RSCOD           RSCOD
              INCOD           INCOD           INCOD
              PPVAR           PPVAR
              RSVAR           RSVAR           RSVAR
              SYVAR                           SYVAR
              Symbols         PSVAR           Symbols
                |             JSVAR             |
                |             NRVAR             |
                |             NRCOD             |
                v             NRCOD             v
              NRCOD (pieces,  NRCOD
              NRCOD mostly    NRCOD
              NRCOD swapped)  NRCOD
      128K    BOOT            NRCOD
                              ...
                              NRCOD
                              NRCOD
      256K                    BOOT
      
      

           [End of MONPSC.MEM]


+---------------+
! d i g i t a l !   I N T E R O F F I C E  M E M O R A N D U M
+---------------+

TO:  S. Hemphill  
     P. Mierswa                        DATE:  21-Aug-79
     B. Teegarden
     B. Tomczak                        FROM:  Clair Grant
     G. Zima
                                       DEPT:  LCG Software
                                              Engineering

                                       LOC:   MR1-2/E37

                                       EXT:   6036


SUBJ:  Overlapping BGSTR to Build Monitors

     Some TOPS-20 systems  are  encountering  problems  when
attempting  to  build their monitor because they are running
out of address space.  Sites that add monitor code of  their
own  and sites that simply increase configuration parameters
have both been faced with this situation.

     The following discussion refers to the monitor at  Ford
Motor  but  the  solution may be applied to any situation in
which there is a need to redefine the PSECT  boundaries  and
acquire  a  few  more pages of address space.  This is by no
means the first time this has been done but the need to know
how to do it seems to be increasing rapidly.

     Ford simply wanted to increase their swapping space  to
10,000  pages.   They  made the appropriate change in PARAM0
and submitted TOPS20.CTL.  The  build  failed  because  LINK
couldn't  fit everything in 256K;  also, they got some PSECT
overlaps.  

     The cause  of  their  problem  was  that  in  order  to
accommodate   the  larger  swapping  size  the  RSVAR  PSECT
requires considerably more space and a couple  other  PSECTs
need a page or two more.  Unfortunately, there is not enough
spare address space to simply redefine the PSECT  boundaries
and  have  everything  fit.   Something  must  be eliminated
(actually, intentionally overlapped).  The BGSTR  and  BGPTR
PSECTs  were seen as candidates for elimination.  So, making
believe BGSTR and BGPTR  were  still  to  be  included,  the
entire set of PSECT boundaries were redefined to so that the
ones which required more space  were  satisfied.   Then  the
very  last  PSECT  in  the address space NRVAR was given the
same boundary as BGSTR.  You end  up  with  something  which
looks like:
                                                      Page 2



      BGSTR  732000
      BGPTR  743000
      POSTCD 745000
      NRVAR  732000   ;NPVAR if you already have Gilbert's
                       rearrangement

     You must also set the contents of BUGSTF to 0 in STG.

     This still causes LINK to find 3 PSECT  overlap  errors
but they are to be expected.  The consequence of BGSTR being
eliminated is  that  when  the  system  gets  a  BUGxxx  the
descriptive  string  will  not be available.  Note, however,
that BUGSTRINGS.TXT still gets written.