home *** CD-ROM | disk | FTP | other *** search
- Hello there, and welcome to the (almost working ;-) world of VMem!
-
- VMem attempts to add virtual memory to the standard Amiga OS. This version
- requires a 68030 based Amiga. You can change the following #defines in
- vmem.c to fine-tune vmem (at least until a debugged version parses the command
- line):
-
- DEF_SWAP_FILE_NAME = "work:.VMEM_PAGES"
- DEF_NUMFRAMES = 0x80 /* 1M of frame space */
- DEF_NUMPAGES = 0x200 /* 4M of pages */
-
- Please note that the current version was developed and compiled under 1.3, but
- preliminary tests indicate that it works (or doesn't work) under 2.x as well.
- Use the memtest program to test VMem. Be very careful running programs that
- write to disk while VMem is running, since it still crashes in nasty and
- unexpected ways (you have been warned :-).
-
- There are a few known design bugs which I am aware of:
-
- 1) DMA devices that write to virtual memory are hosed. One solution would be
- to hook the dos.library vectors to Read() and Write(), and change those
- functions so they work one page at a time. The hook could then force a page
- into memory before DMA took place (just an idea). This would also fix the
- problem with the paging device driver faulting---this event means the page
- daemon can't replace faulted pages! For now, don't try running disk IO tasks
- as VMem tests!
-
- 2) Access to the system free memory list is not arbitrated with a semaphore.
- This could cause big problems, since a task could fault while AllocMem()ing,
- another task could modify the mem list, then the faulted task could restart
- and be holding on to a corrupt list (since Forbid() was broken!). Solution-
- hook AllocMem()/FreeMem() and add a semaphore for the virtual memory pool.
- That way only one task could fault at a time.
-
- 3) Anyone breaking the rules concerning the use of MEMF_PUBLIC where it needs
- to be used is hosed. This is a good thing as far as I'm concerned.
-
- Please use me as a clearing house for bug fixes to VMem. If you absolutely
- HAVE to release your very own version (like if it runs only on very weird
- hardware or something), please append your initials to the version number.
-
- Tech Notes:
-
- VMem works by setting up a page table with the '030's MMU, keeping track of
- in-use frames with a background page ageing daemon, and handling the page
- faults by putting the faulted task to sleep. Putting the faulted task to
- sleep correctly was the tricky part, and had to be coded in assembly.
- (The rest of VMem compiles with LC 5.1) The trick is pretty simple really:
- when a task faults, record its stack frame and state into an allocated
- buffer, fake in a harmless exception in a new stack (also part of the buffer),
- signal the page daemon and go to sleep. The page daemon then fixes up the
- fault, replaces the saved fault frame, restarts the faulted task and deallocates
- the buffer.
-
- Have fun!
-
- - Ed
-
- Internet: eah1@cec1.wustl.edu
-
- USNail: Edward Hutchins,
- #1W 6635 Washington Ave.,
- St. Louis, MO 63130
-
- Legal stuff:
-
- VMem - a virtual memory system for the Amiga
- Version 0.1 Copyright ©1990,91 Hutchins Software
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-