lab 4

2018-05-03  本文已影响0人  ZoltanJin

Part A: Multiprocessor Support and Cooperative Multitasking


这部分需要实现多处理器的支持,并且实现一些新的系统调用来支持合作的循环调度。

要让 JOS 支持 SMP(symmetric multiprocessing),但在 boot 几阶段 cpu 被分为两类:一类是 BSP(bootstrap processor),负责在系统 boot 过程中运行 boot 相关代码;另一类是 APs (application processors),在系统 boot 完成后由 BSP 唤醒,之后一直运行。

一个处理器和它对应的 LAPIC 之间通信使用的是 MMIO(memory mapped I/O),为了支持 MMIO,我们把 virtual memory 的最高 32MB 映射为 Memory mapped I/O。


JOS Memory Layout

I'm not brave enough

Part B: Copy-on-Write Fork


这个 lab 的第二部分需要实现 COW(写时拷贝)。

之后 kernel 会调度当前的 user env(就是触发 pgfault 的同一个)在 exception stack 上执行 pgfault handler。

如果发生 pagefault 的时候,已经在 user exception stack 上了,说明在执行 pagefault handler 的时候又出发了 pagefault(嵌套)。这时候需要把新的 UTrapframe push 在老的 UTrapframe 下方,而不是覆盖。具体判断方法,检查当前的 tf->tf_esp 是否在范围 [UXSTACKTOP-PGSIZE, UXSTACKTOP-1] 之内。

Part C: Preemptive Multitasking and Inter-Process communication (IPC)



未实现 challenge

上一篇 下一篇

猜你喜欢

热点阅读