1 操作系统实践设计报告学号姓名一. 作业题目 Nachos 的线程管理模块升级二. 本作业要求本实****项目希望通过修改 Nachos 系统平台的底层源代码来实现以下目标: 。增加“用户 ID、线程 ID”两个数据成员,同时在 Nacho s 现有的线程管理机制中增加对这两个数据成员的维护机制。(必选) 。 Nachos 平台中的线程状态只有“初启态”、“就绪态”、“阻塞态”、“运行态”四种情况。请增加“挂起( suspending )”这个状态, 所谓“挂起”是指当前的线程映象保存在磁盘文件而不是内存中。“挂起”状态是未来实现“虚拟内存管理”的重要基础。 。将 Nachos 平台的线程管理机制调整为“抢占式”。具体可选择“时间片轮转”、“优先级调度”、“多级队列”等不同的调度算法。(必选)。扩充 Nachos 平台的现有操作命令,例如可以增加一个名为“ ThreadView ”的命令,执行该命令,可以在屏幕上显示目前所有存在的线程信息,包括“用户 ID“、“线程 ID”、“当前状态”等。 。在完成以上修改后,可编写一个实例程序,来实现某个“同步-互斥”经典问题的正确解法。例如可选择“哲学家就餐”问题,实例程序会创建 5个哲学家线程,这些线程拥有同样的用户 ID,可以遵循“信号量”机制来正确的运行。也可以选择“生产者-消费者”问题、“睡眠理发师问题”等其他经典 IPC 问题。(可选) 2 三. 实践过程详细说明 1. 扩充线程数据结构:在 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在挂起队列中找到指定线程并修改其状态。注: 由于时间有限,如何把线程保存到磁盘文件中的功能未实现。 3. 修改线程调度算法: 分为时间片轮转和多级队列算法。时间片轮转算法中要求每个进程每个进程依次按时间片轮流执行,时间片用完则计时器触发一中断,重新调度,在一给定的时间内,就绪进程均能获得一时间片的执行时间。多级队列算法根据作业的性质或类型的不同,将就绪进程队列再分为若干个独立于队列, 每个队列采用一种算法。因此在 增加了两个就绪进程队列,为各队列分配一定的占用 CPU 的时间比例来处理各队列之间的关系。 1)就绪队列按时间片大小划分,时间片愈小,优先权愈高; (2
Nachos的线程管理模块升级.doc 来自淘豆网www.taodocs.com转载请标明出处.