精品文档---下载后可任意编辑学号 姓名一. 作业题目Nachos 的线程管理模块升级二. 本作业要求本实习项目希望通过修改 Nachos 系统平台的底层源代码来实现以下目标:1. 扩充线程数据结构。增加“用户 ID、线程 ID”两个数据成员,同时在Nachos 现有的线程管理机制中增加对这两个数据成员的维护机制。(必选)2. 扩展现有的线程状态。Nachos 平台中的线程状态只有“初启态”、“就绪态”、“堵塞态”、“运行态”四种情况。请增加“挂起(suspending)”这个状态,所谓“挂起”是指当前的线程映象保存在磁盘文件而不是内存中。“挂起”状态是未来实现“虚拟内存管理”的重要基础。3. 修改线程调度算法。将 Nachos 平台的线程管理机制调整为“抢占式”。具体可选择“时间片轮转”、“优先级调度”、“多级队列”等不同的调度算法。(必选)4. 增加全局性的线程管理机制。扩充 Nachos 平台的现有操作命令,例如可以增加一个名为“ThreadView”的命令,执行该命令,可以在屏幕上显示目前所有存在的线程信息,包括“用户 ID“、“线程 ID”、“当前状态”等。5. 实现一个同步与互斥的例子。在完成以上修改后,可编写一个实例程序,来实现某个“同步-互斥”经典问题的正确解法。例如可选择“哲学家就餐”问题,实例程序会创建 5 个哲学家线程,这些线程拥有同样的用户 ID,可以遵循“信号量”机制来正确的运行。也可以选择“生产者-消费者”问题、“睡眠理发师问题”等其他经典 IPC 问题。(可选)三. 实践过程详细说明:在 Thread 类中增加线程 ID,增加整形变量 tid,增加全局变量 id_port对 tid 进行管理,tid 的分配是从 0 开始扫描直到最大的线程数,看是否已经被分配,寻找到一个最小的未被分配的 tid 分配给新建的线程,可以增精品文档---下载后可任意编辑加一些函数来维护线程 ID。因为没有理解用户 ID 号是什么,所以在这次的实验中没有扩充用户 ID。2.扩展现有的线程状态:在 ThreadStatus 中增加俩个元素STATIC_READY 和 STATIC_BLOCKED 状态,增加了俩个成员函数Thread::suspend()和 Thread::active(),分别为挂起线程和激活线程。在挂起时,推断线程的状态,若为正在运行或者就绪,则把线程状态修改为STATIC_READY;若为堵塞,则修改为 STATIC_BLOCKED,并把此线程加入挂起队列中。在 active()中根据给定的线程的 id 在挂起队列中找到指定线程并修改其状态。 注: 由于时间有限,如...