By: Rob Thorpe (robert.thorpe.delete@this.antenova.com), May 17, 2006 12:43 am
Room: Moderated Discussions
rwessel (robertwessel@yahoo.com) on 5/16/06 wrote:
---------------------------
>Rob Thorpe (robert.thorpe@antenova.com) on 5/16/06 wrote:
>---------------------------
>>You could do something like this:
>>
>>* Have a kernel containing the most essential things, scheduler, start-up etc.
>>* Have a small compiler hooked to the kernel capable of compiling from some simple
>>intermediate language into machine code. (Maybe it need not be in the kernel)
>>* Have less core things, like device drivers, and file systems held in intermediate code.
>>
>>When a sub-system is needed it is compiled. To compile it there is a function something like
>>
>>compiler (code_block, allowable_mem_accesses, allowable_io, etc);
>>
>>I.e. the compiler takes as argument what memory and IO the code is permitted to
>>access. It then compiles the code with those limits. Anything it statically verifies
>>are inside the limits is compiled directly, for anything it can't it inserts checks.
>>
>>The compilation could be done for device drivers etc when their memory spaces are
>>known. Which may be boot time or build time or some other time later.
>>
>>
>>This seems a complex way to go about the problem, the compiler would have to be
>>good. But there again most kernels are fairly complex anyway.
>
>
>I can see it now... Device drivers written in Java... ;-)
>
>But seriously, that seems like overkill. Any trustworthy compiler for a type-safe
>language will do the trick. They just have to accept (well typed) pointers to the
>objects they reference. And I/O ports are mostly ignorable - since essentially
>nothing that's performance critical uses them, you can provide access though an
>(checked) API (at least on platforms that actually support I/O port instructions
>- implementations that fake PCI ports with memory mappings are obviously in the original scenario).
I don't think that could quite work.
Lets say a device has a region of memory it uses to communicate with the it's driver. The data in the region is to the language using it untyped, it must be cast into the correct types. e.g. The driver knows that at memory address 56a3fb21 is a struct something_t. This is why I was proposing some method for loosening checking, for a restricted range of memory.
There are two different thing to think about here though:-
* The correctness of types
* Whether the driver can steamroller other code
Even with perfectly checked and verified types it's still possible to address completely the wrong things, write to the wrong places etc.
---------------------------
>Rob Thorpe (robert.thorpe@antenova.com) on 5/16/06 wrote:
>---------------------------
>>You could do something like this:
>>
>>* Have a kernel containing the most essential things, scheduler, start-up etc.
>>* Have a small compiler hooked to the kernel capable of compiling from some simple
>>intermediate language into machine code. (Maybe it need not be in the kernel)
>>* Have less core things, like device drivers, and file systems held in intermediate code.
>>
>>When a sub-system is needed it is compiled. To compile it there is a function something like
>>
>>compiler (code_block, allowable_mem_accesses, allowable_io, etc);
>>
>>I.e. the compiler takes as argument what memory and IO the code is permitted to
>>access. It then compiles the code with those limits. Anything it statically verifies
>>are inside the limits is compiled directly, for anything it can't it inserts checks.
>>
>>The compilation could be done for device drivers etc when their memory spaces are
>>known. Which may be boot time or build time or some other time later.
>>
>>
>>This seems a complex way to go about the problem, the compiler would have to be
>>good. But there again most kernels are fairly complex anyway.
>
>
>I can see it now... Device drivers written in Java... ;-)
>
>But seriously, that seems like overkill. Any trustworthy compiler for a type-safe
>language will do the trick. They just have to accept (well typed) pointers to the
>objects they reference. And I/O ports are mostly ignorable - since essentially
>nothing that's performance critical uses them, you can provide access though an
>(checked) API (at least on platforms that actually support I/O port instructions
>- implementations that fake PCI ports with memory mappings are obviously in the original scenario).
I don't think that could quite work.
Lets say a device has a region of memory it uses to communicate with the it's driver. The data in the region is to the language using it untyped, it must be cast into the correct types. e.g. The driver knows that at memory address 56a3fb21 is a struct something_t. This is why I was proposing some method for loosening checking, for a restricted range of memory.
There are two different thing to think about here though:-
* The correctness of types
* Whether the driver can steamroller other code
Even with perfectly checked and verified types it's still possible to address completely the wrong things, write to the wrong places etc.
Topic | Posted By | Date |
---|---|---|
Hybrid (micro)kernels | Tzvetan Mikov | 2006/05/08 04:41 PM |
Hybrid (micro)kernels | S. Rao | 2006/05/08 06:14 PM |
Hybrid (micro)kernels | Bill Todd | 2006/05/08 06:16 PM |
Hybrid (micro)kernels | Tzvetan Mikov | 2006/05/08 07:21 PM |
Hybrid (micro)kernels | nick | 2006/05/08 07:50 PM |
Hybrid (micro)kernels | Bill Todd | 2006/05/09 01:26 AM |
There aren't enough words... | Rob Thorpe | 2006/05/09 02:39 AM |
There aren't enough words... | Tzvetan Mikov | 2006/05/09 03:10 PM |
There aren't enough words... | Rob Thorpe | 2006/05/15 12:25 AM |
Hybrid (micro)kernels | Tzvetan Mikov | 2006/05/09 11:17 AM |
Hybrid (micro)kernels | Bill Todd | 2006/05/09 04:05 PM |
Hybrid (micro)kernels | rwessel | 2006/05/08 11:23 PM |
Hybrid kernel, not NT | Richard Urich | 2006/05/09 06:03 AM |
Hybrid kernel, not NT | _Arthur | 2006/05/09 07:06 AM |
Hybrid kernel, not NT | Rob Thorpe | 2006/05/09 07:40 AM |
Hybrid kernel, not NT | _Arthur | 2006/05/09 08:30 AM |
Hybrid kernel, not NT | Rob Thorpe | 2006/05/09 09:07 AM |
Hybrid kernel, not NT | _Arthur | 2006/05/09 09:36 AM |
Linux vs MacOSX peformance, debunked | _Arthur | 2006/05/18 07:30 AM |
Linux vs MacOSX peformance, debunked | Rob Thorpe | 2006/05/18 08:19 AM |
Linux vs MacOSX peformance, debunked | Anonymous | 2006/05/18 12:31 PM |
Hybrid kernel, not NT | Linus Torvalds | 2006/05/09 08:16 AM |
Hybrid kernel, not NT | Andi Kleen | 2006/05/09 02:32 PM |
Hybrid kernel, not NT | myself | 2006/05/09 03:24 PM |
Hybrid kernel, not NT | myself | 2006/05/09 03:41 PM |
Hybrid kernel, not NT | Brendan | 2006/05/09 05:26 PM |
Hybrid kernel, not NT | Linus Torvalds | 2006/05/09 08:06 PM |
Hybrid kernel, not NT | Brendan | 2006/05/13 01:35 AM |
Hybrid kernel, not NT | nick | 2006/05/13 04:40 AM |
Hybrid kernel, not NT | Brendan | 2006/05/13 09:48 AM |
Hybrid kernel, not NT | nick | 2006/05/13 07:41 PM |
Hybrid kernel, not NT | Brendan | 2006/05/13 09:51 PM |
Hybrid kernel, not NT | nick | 2006/05/14 05:57 PM |
Hybrid kernel, not NT | Brendan | 2006/05/14 10:40 PM |
Hybrid kernel, not NT | nick | 2006/05/14 11:46 PM |
Hybrid kernel, not NT | Brendan | 2006/05/15 04:00 AM |
Hybrid kernel, not NT | rwessel | 2006/05/15 07:21 AM |
Hybrid kernel, not NT | Brendan | 2006/05/15 08:55 AM |
Hybrid kernel, not NT | Linus Torvalds | 2006/05/15 09:49 AM |
Hybrid kernel, not NT | nick | 2006/05/15 04:41 PM |
Hybrid kernel, not NT | tony roth | 2008/01/31 02:20 PM |
Hybrid kernel, not NT | nick | 2006/05/15 06:33 PM |
Hybrid kernel, not NT | Brendan | 2006/05/16 01:39 AM |
Hybrid kernel, not NT | nick | 2006/05/16 02:53 AM |
Hybrid kernel, not NT | Brendan | 2006/05/16 05:37 AM |
Hybrid kernel, not NT | Anonymous | 2008/05/01 10:31 PM |
Following the structure of the tree | Michael S | 2008/05/02 04:19 AM |
Following the structure of the tree | Dean Kent | 2008/05/02 05:31 AM |
Following the structure of the tree | Michael S | 2008/05/02 06:02 AM |
Following the structure of the tree | David W. Hess | 2008/05/02 06:48 AM |
Following the structure of the tree | Dean Kent | 2008/05/02 09:14 AM |
Following the structure of the tree | David W. Hess | 2008/05/02 10:05 AM |
LOL! | Dean Kent | 2008/05/02 10:33 AM |
Following the structure of the tree | anonymous | 2008/05/02 03:04 PM |
Following the structure of the tree | Dean Kent | 2008/05/02 07:52 PM |
Following the structure of the tree | Foo_ | 2008/05/03 02:01 AM |
Following the structure of the tree | David W. Hess | 2008/05/03 06:54 AM |
Following the structure of the tree | Dean Kent | 2008/05/03 10:06 AM |
Following the structure of the tree | Foo_ | 2008/05/04 01:06 AM |
Following the structure of the tree | Michael S | 2008/05/04 01:22 AM |
Hybrid kernel, not NT | Linus Torvalds | 2006/05/09 05:19 PM |
Microkernel Vs Monolithic Kernel | Kernel_Protector | 2006/05/09 09:41 PM |
Microkernel Vs Monolithic Kernel | David Kanter | 2006/05/09 10:30 PM |
Sigh, Stand back, its slashdotting time. (NT) | Anonymous | 2006/05/09 10:44 PM |
Microkernel Vs Monolithic Kernel | blah | 2006/05/12 08:58 PM |
Microkernel Vs Monolithic Kernel | Rob Thorpe | 2006/05/15 01:41 AM |
Hybrid kernel, not NT | AnalGuy | 2006/05/16 03:10 AM |
Theory versus practice | David Kanter | 2006/05/16 12:55 PM |
Distributed algorithms | Rob Thorpe | 2006/05/17 12:53 AM |
Theory versus practice | Howard Chu | 2006/05/17 02:54 AM |
Theory versus practice | JS | 2006/05/17 04:29 AM |
Play online poker, blackjack !!! | Gamezonex | 2007/08/16 01:49 PM |
Hybrid kernel, not NT (NT) | atle rene mossik | 2020/12/12 09:31 AM |
Hybrid (micro)kernels | philt | 2006/05/14 09:15 PM |
Hybrid (micro)kernels | Linus Torvalds | 2006/05/15 08:20 AM |
Hybrid (micro)kernels | Linus Torvalds | 2006/05/15 11:56 AM |
Hybrid (micro)kernels | Rob Thorpe | 2006/05/16 01:22 AM |
Hybrid (micro)kernels | rwessel | 2006/05/16 11:23 AM |
Hybrid (micro)kernels | Rob Thorpe | 2006/05/17 12:43 AM |
Hybrid (micro)kernels | rwessel | 2006/05/17 01:33 AM |
Hybrid (micro)kernels | Rob Thorpe | 2006/05/19 07:51 AM |
Hybrid (micro)kernels | rwessel | 2006/05/19 12:27 PM |
Hybrid (micro)kernels | techIperson | 2006/05/15 01:25 PM |
Hybrid (micro)kernels | mas | 2006/05/15 05:17 PM |
Hybrid (micro)kernels | Linus Torvalds | 2006/05/15 05:39 PM |
Hybrid (micro)kernels | Colonel Kernel | 2006/05/15 09:17 PM |
Hybrid (micro)kernels | Wink Saville | 2006/05/15 10:31 PM |
Hybrid (micro)kernels | Linus Torvalds | 2006/05/16 10:08 AM |
Hybrid (micro)kernels | Wink Saville | 2006/05/16 09:55 PM |
Hybrid (micro)kernels | rwessel | 2006/05/16 11:31 AM |
Hybrid (micro)kernels | Linus Torvalds | 2006/05/16 12:00 PM |
Hybrid (micro)kernels | Brendan | 2006/05/16 01:36 AM |
Hybrid (micro)kernels | Paul Elliott | 2006/09/03 08:44 AM |
Hybrid (micro)kernels | Rob Thorpe | 2006/09/04 09:25 AM |
Hybrid (micro)kernels | philt | 2006/05/16 12:55 AM |
Hybrid (micro)kernels | pgerassi | 2007/08/16 07:41 PM |
Another questionable entry on Wikipedia? | Chung Leong | 2006/05/18 10:33 AM |
Hybrid (micro)kernels | israel | 2006/05/20 04:25 AM |
Hybrid (micro)kernels | Rob Thorpe | 2006/05/22 08:35 AM |