- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实践设计报告 学号 姓名 作业题目 Nachos的线程管理模块升级 本作业要求 本实习项目希望通过修改Nachos系统平台的底层源代码来实现以下目标: 扩充线程数据结构。增加“用户ID、线程ID”两个数据成员,同时在Nachos 扩展现有的线程状态。Nachos平台中的线程状态只有“初启态”、“就绪态”、“阻塞态”、“运行态”四种情况。请增加“挂起(suspending)”这个状态,所谓“挂起”是指当前的线程映象保存在磁盘文件而不是内存中。“挂起”状态是未来实现“虚拟内存管理”的重要基础。 修改线程调度算法。将Nachos平台的线程管理机制调整为“抢占式”。具体可选择“时间片轮转”、“优先级调度”、“多级队列”等不同的调度算法。(必选) 增加全局性的线程管理机制。扩充Nachos平台的现有操作命令,例如可以增加一个名为“ThreadView”的命令,执行该命令,可以在屏幕上显示目前所有存在的线程信息,包括“用户ID“、“线程ID”、“当前状态”等 实现一个同步与互斥的例子。在完成以上修改后,可编写一个实例程序,来实现某个“同步-互斥”经典问题的正确解法。例如可选择“哲学家就餐”问题,实例程序会创建5个哲学家线程,这些线程拥有同样的用户ID,可以遵循“信号量”机制来正确的运行。也可以选择“生产者-消费者”问题、“睡眠理发师问题”等其他经典IPC问题。(可选) 实践过程详细说明 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.修改线程调度算法:分为时间片轮转和多级队列算法。时间片轮转算法中要求每个进程每个进程依次按时间片轮流执行,时间片用完则计时器触发一中断,重新调度,在一给定的时间内,就绪进程均能获得一时间片的执行时间。 多级队列算法根据作业的性质或类型的不同,将就绪进程队列再分为若干个独立于队列,每个队列采用一种算法。因此在scheduler.h增加了两个就绪进程队列,为各队列分配一定的占用CPU的时间比例来处理各队列之间的关系。 1)就绪队列按时间片大小划分,时间片愈小,优先权愈高; (2)进程不固定在一个队列中,新创建进程(最高优先权队列,时间片到尚未完成的进程(下一级优先队列的末尾; 代码修改及评测说明 代码修改主要有: 1.扩充线程数据结构: 在Thread.h中声明pritave 的成员变量 uid 和 tid,在system.h中声明extern int* id_port 2.扩展现有的线程状态: 在system.h中声明extern List* hook_list,在thread.cc中声明Thread::suspend()和Thread::active(int thread_id),在list.cc中声明List::Remove_At(int num)和List::visit(int num) 3.修改线程调度算法: 在thread.h中声明private int level,在scheduler.cc中修改了Scheduler::ReadyToRun(Thread *thread)和修改了Scheduler::FindNexToRun(),在scheduler.h中声明了private List *readyList1和 List *readyList2 4.运行结果: 每行输出结果结构为 用户id 线程号 已经使用的时间片数。一开始时我们
您可能关注的文档
最近下载
- 理解当代中国 汉英翻译教程Unit 6 教学课件.pptx VIP
- 理解当代中国 汉英翻译教程Unit 12 教学课件.pptx VIP
- 中国航空航天发展史 (课件).ppt VIP
- 龙胆苦苷的药理作用机制研究.pptx
- DB37T 4839—2025电化学储能电站验收规范.pdf VIP
- 理解当代中国 汉英翻译教程Unit_4_教学课件.pptx VIP
- 2025年青海普通高中学业水平选择性考试英语试卷(原卷+答案).docx
- 汽车故障诊断与维修05汽车综合故障诊断与维修.pptx VIP
- 理解当代中国 汉英翻译教程Unit 11 教学课件.pptx VIP
- 教育数据分析与挖掘.pptx VIP
文档评论(0)