在lab2和lab3中,我们已经将物理内存纳入了掌控,并且实现了虚拟内存的机制,使得我们可以建立一些真正操作系统级别的抽象。在本章和下一章当中,我们要实现操作系统当中非常重要的一个部分:进程管理。我们主要分成了两个部分来实现,在本章中我们会实现内核进程的管理,在下一章再实现用户进程的管理。
内核进程和用户进程有什么区别呢?首先,内核进程运行于内核态,而用户进程一般处于用户态,只有在需要系统调用时才会进入内核态。其次,内核进程不需要很复杂的内存管理,共用整个内核内存空间。这是因为内核进程往往用来完成很多和操作系统有关的任务,操作系统应当信任内核进程;而用户进程由用户提供,为了避免恶意的用户影响操作系统以及其他进程的运行状态,需要对于地址空间进行隔离。
lab4
├── Makefile
├── kern
│ ├── debug
│ │ ├── assert.h
│ │ ├── kdebug.c
│ │ ├── kdebug.h
│ │ ├── kmonitor.c
│ │ ├── kmonitor.h
│ │ ├── panic.c
│ │ └── stab.h
│ ├── driver
│ │ ├── clock.c
│ │ ├── clock.h
│ │ ├── console.c
│ │ ├── console.h
│ │ ├── ide.c
│ │ ├── ide.h
│ │ ├── intr.c
│ │ ├── intr.h
│ │ ├── kbdreg.h
│ │ ├── picirq.c
│ │ └── picirq.h
│ ├── fs
│ │ ├── fs.h
│ │ ├── swapfs.c
│ │ └── swapfs.h
│ ├── init
│ │ ├── entry.S
│ │ └── init.c
│ ├── libs
│ │ ├── readline.c
│ │ └── stdio.c
│ ├── mm
│ │ ├── default_pmm.c
│ │ ├── default_pmm.h
│ │ ├── kmalloc.c
│ │ ├── kmalloc.h
│ │ ├── memlayout.h
│ │ ├── mmu.h
│ │ ├── pmm.c
│ │ ├── pmm.h
│ │ ├── swap.c
│ │ ├── swap.h
│ │ ├── swap_fifo.c
│ │ ├── swap_fifo.h
│ │ ├── vmm.c
│ │ └── vmm.h
│ ├── process
│ │ ├── entry.S
│ │ ├── proc.c
│ │ ├── proc.h
│ │ └── switch.S
│ ├── schedule
│ │ ├── sched.c
│ │ └── sched.h
│ ├── sync
│ │ └── sync.h
│ └── trap
│ ├── trap.c
│ ├── trap.h
│ └── trapentry.S
├── lab4.md
├── libs
│ ├── atomic.h
│ ├── defs.h
│ ├── elf.h
│ ├── error.h
│ ├── hash.c
│ ├── list.h
│ ├── printfmt.c
│ ├── rand.c
│ ├── riscv.h
│ ├── sbi.h
│ ├── stdarg.h
│ ├── stdio.h
│ ├── stdlib.h
│ ├── string.c
│ └── string.h
└── tools
├── boot.ld
├── function.mk
├── gdbinit
├── grade.sh
├── kernel.ld
├── sign.c
└── vector.c
13 directories, 73 files