• 基于markdown格式来完成,以文本方式为主
    • 完成实验后,请分析ucore_lab中提供的参考答案,并请在实验报告中说明你的实现与参考答案的区别
    • 列出你认为本实验中重要的知识点,以及与对应的OS原理中的知识点,并简要说明你对二者的含义,关系,差异等方面的理解(也可能出现实验中的知识点没有对应的原理知识点)
    • 列出你认为OS原理中很重要,但在实验中没有对应上的知识点

    练习0:填写已有实验

    本实验依赖实验1/2/3。请把你做的实验1/2/3的代码填入本实验中代码中有“LAB1”,“LAB2”,“LAB3”的注释相应部分。

    练习1:分配并初始化一个进程控制块(需要编码)

    alloc_proc函数(位于kern/process/proc.c中)负责分配并返回一个新的struct proc_struct结构,用于存储新建立的内核线程的管理信息。ucore需要对这个结构进行最基本的初始化,你需要完成这个初始化过程。

    请在实验报告中简要说明你的设计实现过程。请回答如下问题:

    • 请说明proc_struct中和成员变量含义和在本实验中的作用是啥?(提示通过看代码和编程调试可以判断出来)

    练习2:为新创建的内核线程分配资源(需要编码)

    • 调用alloc_proc,首先获得一块用户信息块。
    • 为进程分配一个内核栈。
    • 复制原进程上下文到新进程
    • 将新进程添加到进程列表
    • 唤醒新进程
    • 返回新进程号

    请在实验报告中简要说明你的设计实现过程。请回答如下问题:

    • 请说明ucore是否做到给每个新fork的线程一个唯一的id?请说明你的分析和理由。

    练习3:阅读代码,理解 proc_run 函数和它调用的函数如何完成进程切换的。(无编码工作)

    请在实验报告中简要说明你对proc_run函数的分析。并回答如下问题:

    • 在本实验的执行过程中,创建且运行了几个内核线程?

    完成代码编写后,编译并运行代码:make qemu

    如果可以得到如 附录A所示的显示内容(仅供参考,不是标准答案输出),则基本正确。

    扩展练习Challenge:实现支持任意大小的内存分配算法

    【注意】下面是相关的Linux实现文档,供参考

    SLOB

    http://en.wikipedia.org/wiki/SLOB

    SLAB