mike@prg.ox.ac.uk (Mike Spivey) (03/13/91)
I'm working on (and now have working) a larger buffer cache for MINIX on the PC. The problem with the present arrangement is that the cache has to be entirely inside the FS's address space, and that severely limits its size. So I use a large area outside the address space that's allocated like the RAM disk. Has anyone else tried this? A few questions have come up that readers may be able to answer more easily than me: 1. Is DMA on the PC (and AT) limited to the first meg of memory? The comment on line 6059 (kernel/floppy.c) seems to indicate that the DMA address is only 20 bits. I need to be able to set up DMA transfers into the cache, so that would mean it can't be put in extended memory. 2.. What is the reason for having both the macros proc_addr and cproc_addr on lines 2118-9 (kernel/proc.h)? As far as I can tell, the assignment on line 7443 (kernel/main.c) establishes the invariant proc_addr(p) == cproc_addr(p). But both are used in several places, even after the kernel is initialised. This interests me because I want to eliminate umap() and just have numap() -- but sometimes one macro and sometimes the other is used to derive the first argument of umap() in the existing code. 3. What purpose is served by the "temporary kludge" on line 15210 (fs/device.c)? It has to do with non-blocking I/O, but as far as I can see, non-blocking I/O is not used or supported elsewhere. Maybe it has something to do with the Amoeba networking? I don't have the disk space to unpack the sources. Sorry to ask such a technical (and maybe pedantic) series of questions. -- Mike Spivey.