"米家龙同学的实验报告,实验主题为数据科学与计算机学院2018级软工3班的'实验5内核线程管理',旨在了解内核线程的创建、执行管理过程及基本调度。实验内容包括分配并初始化进程控制块、为新内核线程分配资源,以及分析proc_run函数实现的进程切换。实验环境为基于Ubuntu的虚拟机,并使用VSCode的RemoteSSH插件进行文件编辑和运行。"
在这个实验中,我们涉及了以下几个关键知识点:
1. **内核线程**:内核线程是操作系统内核直接管理的线程,它们始终运行在内核态,不需像用户进程那样在用户态和内核态之间切换。它们共享同一内核内存空间,不为每个线程维护独立的内存区域,这使得内核线程的切换更为高效。
2. **进程控制块(PCB)**:在练习1中,学生需要分配并初始化进程控制块。PCB是操作系统用来记录和控制进程状态的重要数据结构,包含了进程的基本信息,如进程ID、状态、资源分配等,是进程调度的基础。
3. **进程创建**:在练习2中,学生要完成`do_fork()`函数,这涉及到创建新的内核线程。`do_fork()`通常会复制父进程的PCB,分配必要的资源,并设置新进程的状态。
4. **进程切换**:实验的第三部分,学生需要分析`proc_run()`函数及其调用的函数,理解如何实现进程切换。进程切换是操作系统核心的一个重要功能,它涉及到保存当前进程的上下文,恢复下一个要执行进程的上下文,以便在不同的进程间快速地来回切换。
5. **内核态与用户态**:用户进程在执行时可能会因为系统调用或异常进入内核态,而内核线程始终在内核态执行,无需进行这种状态转换。
6. **实验环境**:实验使用了基于Ubuntu的虚拟机,操作系统版本为3.13.0-24-generic,通过VSCode的RemoteSSH插件在Windows环境下进行开发和调试,利用WSL(Windows Subsystem for Linux)提供了与Linux环境的交互。
7. **资源分配**:在创建新内核线程时,需要合理分配和初始化必要的资源,如内存、文件描述符等,以确保线程能正常运行。
8. **代码阅读与理解**:通过阅读和分析`proc_run()`函数,学生可以深入理解操作系统如何调度和切换内核线程,这对于理解操作系统的内核工作原理至关重要。
实验总结阶段,学生需要对比ucore_lab的参考答案,描述实验结果与参考答案的差异,同时指出实验中未覆盖到的知识点,这有助于深化对内核线程管理的理解,并查漏补缺。