home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!pmafire!news.dell.com!swrinde!mips!darwin.sura.net!convex!news.utdallas.edu!corpgate!crchh327!crchh424!gryphon
- From: gryphon@crchh424.BNR.CA (Joe Widows)
- Newsgroups: comp.os.minix
- Subject: Re: Microkernel discussion
- Message-ID: <1992Jul22.225432.28861@bnr.ca>
- Date: 22 Jul 92 22:54:32 GMT
- References: <1992Jul22.072333.1552@ica.philips.nl> <1992Jul21.093145.328@ica.philips.nl> <1992Jul21.135917.3527@philce.ce.philips.nl>
- Sender: news@bnr.ca (News on crchh327)
- Reply-To: gryphon@bnrrch43.bnr.rich
- Organization: BNR
- Lines: 67
- Nntp-Posting-Host: crchh424
-
- I have been following the discussion on Micro Kernel avidly. And I wanted
- to put out a suggestion related to the idea of 'loadable' drivers.
-
- The BIG DMS switches that we sell, use a language called PROTEL ( thats
- BNR lingo for 'STRANGE PASCAL/ADA/PROTEL') but among its many stange parts
- it allows 'GATING'
-
- It works this way:
-
- A generic process ( scheduler for instance) has an array of pointers to code.
- It also has a mechanism for loading a pointer into this array dynamically.
- (Yes, I am not telling you how we did this, just what we do) Our switches
- can be running call processing and drivers can be changed on the fly.
-
- I realize that we would have to create the mechanism, but gating the process
- to application defined code would solve some of this. Yes, it means the
- kernel/driver set could modify itself. That is the point of GATING.
-
- example:
- /* this is in 'ALGOL' to specify the actions */
- /* an external procedure that updates the process table is called */
-
- /* a global structure is defined for drivers ( selection and priority
- as well as the new pointer) the offsets are defined globally */
-
- /* a structure for the data */
-
- EXTERNAL ADDRESS ARRAY proc_values[*,*];
- EXTERNAL PROCEDURE system_values RETURNS BOOLEAN;
-
-
-
- PROCEDURE handler_code( what ) RETURNS BOOLEAN;
- ADDRESS what
- BEGIN
- % realtime handler code here
- END
-
-
- proc_values[handler_definition, class] := HANDLER_KIND;
- proc_values[handler_definition, priority] := HANDLER_PRIORITY;
- proc_values[handler_definition, interrupt_class] := DMA;
- proc_values[handler_definition, entry_point] := address(handler_code);
-
- IF system_values() = FALSE
- THEN DO
- ERROR( ' system_values_update FAILED ' );
- RETURN;
- END
- END
-
- So, the upshot is that 'system_values' knows the offsets for the SCHEDULER
- but no-one else does.
-
- This is a cut and paste activity.
-
- Just a suggestion
-
- Widows
- LINGUIST in the dark.
-
- DISCLAIMER: BNR builds telephones, not opinions.
- ANTIDISCLAIMER: The wrong stuff is mine, ( the right stuff, too).
-
-
-
-
-