1. What things absolutely must be done in the kernel?
2. Is it possible to have a server to handle scheduling and is it worth it?
3. What syscalls are needed? I've come up with a few[1]
4. Is this a practical use of hardware rings? If not, can you suggest a better layout?
5. Could you list some pros/cons of AMP vs. SMP? The Wiki doesn't really say anything about AMP and doesn't list pros and cons of SMP. I've also googled this and checked the forums.
Thank you.
[1]
Code: Select all
+--------+----------------------+------+-------------------------------------+
| Device | Syscall | Ring | Description |
+--------+----------------------+------+-------------------------------------+
| Memory | peek[b/w/d]() | 2 | Read a byte/word/dword from memory |
| Memory | poke[b/w/d]() | 2 | Write a byte/word/dword to memory |
| Memory | idt_set_vector() | 2 | Create an interrupt vector |
| Video | change_vmode() | 2 | Change the video mode |
| Video | draw_pixel() | 2 | Draw a pixel (if vmode appropriate) |
| Video | draw_char() | 2 | Draw a character (if appropriate) |
| Video | get_screen_attribs() | 3 | Get screen attributes (w, h, bpp) |
| Video | set_screen_attribs() | 3 | Set screen attributes (w, h, bpp) |
| Disk | read_disk_bytes() | 2 | Read data from disk |
| Disk | write_disk_bytes() | 2 | Write data to disk |
| Disk | get_disk_geometry() | 3 | Get the disk geometry |
| Disk | set_disk_geometry() | 2 | Set the disk geometry |
+--------+----------------------+------+-------------------------------------+
Ring 0 : Kernel
Ring 1 : Drivers
Ring 2 : Servers
Ring 3 : Userspace programs