Return to BSD News archive
Path: sserve!newshost.anu.edu.au!munnari.oz.au!constellation!convex!convex!cs.utexas.edu!swrinde!gatech!prism!gt8134b From: gt8134b@prism.gatech.EDU (Howlin' Bob) Newsgroups: comp.os.386bsd.development Subject: Re: V86 mode & the BIOS (was Need advice: Which OS to port to?) Message-ID: <108457@hydra.gatech.EDU> Date: 12 Aug 93 04:39:21 GMT References: <3390@vall.dsv.su.se> <CB11pL.D12@imag.fr> <107181@hydra.gatech.EDU> <1993Aug4.073826.24956@fcom.cc.utah.edu> <107725@hydra.gatech.EDU> <245jrfINNrc0@bonnie.tcd-dresden.de> Organization: Georgia Institute of Technology Lines: 43 In <245jrfINNrc0@bonnie.tcd-dresden.de> j@bonnie.tcd-dresden.de (J Wunsch) writes: >In <107725@hydra.gatech.EDU> gt8134b@prism.gatech.EDU (Howlin' Bob) writes: >>can use them), but all this is done by the Linux ioperm() system >>call, which makes use of the 386's TSS I/O bitmap field. >Does this mean, you've a 64 K IO bitmap there? If so, process context >switch must be terribly slow. If not, what do you do with those recent >grafx adaptors that care to use IO ports above 0x3ff? No, a 128 byte bitmap, which allows (as you surmised) direct control over ports up to 0x3ff. For ports above 0x3ff, what few there are, dosemu provides another scheme: 1. I/O accesses to an address above 0x3ff fault into the dosemu task which accessed it (more than one can be running :-) 2. dosemu unravels the instruction, notices the port is above 0x3ff, and checks its internal list to see what sort of I/O is allowed to that port. 3. If any is, dosemu sets IOPL to 3, does the appropriate I/O to/from that port. 4. dosemu sets the IOPL back to 0. 5. dosemu then applies any andmasking/ormasking as defined in the I/O permissions list, and puts the result into the appropriate register. 6. dosemu advances IP and re-enters V86 mode. I wouldn't mind a special case in the Linux kernel for the dosemu task(s) to have the full 64k bitmaps, but that's a bit difficult and not really necesary. I don't think the ports above 0x3ff are often used. As for slow task switching, the 386 doesn't access the I/O permissions bitmap until an I/O instruction occurs. The size of the bitmap has no effect on task switching performance. Linux has rather zippy task switching, in my opinion. -- Robert Sanders Georgia Institute of Technology, Atlanta Georgia, 30332 uucp: ...!{decvax,hplabs,ncar,purdue,rutgers}!gatech!prism!gt8134b Internet: gt8134b@prism.gatech.edu