lab4: 进程管理

在lab2和lab3中,我们已经将物理内存纳入了掌控,并且实现了虚拟内存的机制,使得我们可以建立一些真正操作系统级别的抽象。在本章和下一章当中,我们要实现操作系统当中非常重要的一个部分:进程管理。我们主要分成了两个部分来实现,在本章中我们会实现内核进程的管理,在下一章再实现用户进程的管理。

内核进程和用户进程有什么区别呢?首先,内核进程运行于内核态,而用户进程一般处于用户态,只有在需要系统调用时才会进入内核态。其次,内核进程不需要很复杂的内存管理,共用整个内核内存空间。这是因为内核进程往往用来完成很多和操作系统有关的任务,操作系统应当信任内核进程;而用户进程由用户提供,为了避免恶意的用户影响操作系统以及其他进程的运行状态,需要对于地址空间进行隔离。

下面我们从一些进程的基本概念讲起,来看一看ucore是如何实现内核进程的~

项目组成

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

最后更新于