- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
                        查看更多
                        
                    
                操作系统实验报告,时钟原语
                    一、实验名称时钟原语的改进二、实验目的理解并掌握Pintos的安装和使用;初步掌握Pintos内核线程构造及同步机理;具有对Pintos内核代码进行修改和调试的能力。三、实验内容及要求重新实现devices/timer.c中的timer_sleep()函数。该函数现有的实现虽然是正确的,但所采用的是“忙等”技术,通过不停地循环调用thread_yield()并查询是否已经达到等待时间。新的实现要求采用线程同步机制来替换这样的忙等技术。void timer_sleep (int64_t ticks)的需求说明如下:将调用此函数的线程挂起至少ticks所指定的若干个时钟周期。当这段时间过去后,将该线程激活并放入就绪队列。此函数可用于实现实时功能,如按照规定的时间间隔发送报文等。Pintos系统时钟中断频率的缺省值为100,我们不建议修改此值,因为不适当的设置会造成很多意想不到的错误。要求达到的指标:通过Pintos所提供的所有相关测试。 四、算法设计思想(字体标为红色的为改动的代码) (一)忙等待VS.唤醒机制的实现:/* 介绍实现中新声明的或者改变了的主要结构体、全局或局部变量,简短说明其设置的目的?*/1.在thread.h文件中,我们在 struct thread 结构体中添加一个新的成员变量 ticks_blocked用来记录thread被阻塞了多久:struct thread { /* Owned by thread.c. */tid_t tid;            /* 线程标识符 */enum thread_status status;/* 线程状态 */char name[16];???????? /* Name (for debugging purposes). */uint8_t *stack;?????????? /* Saved stack pointer. */int priority;???????????? /* 优先级 */struct list_elem allelem;? /* List element for all threads list. */int ticks_blocked; /* 存储记录该进程已经被block多久了*//* Shared between thread.c and synch.c. */struct list_elem elem;?????? /* List element. */#ifdef USERPROG                   /* Owned by userprog/process.c. */uint32_t *pagedir;???????? /* Page directory. */#endif                              /* Owned by thread.c. */unsigned magic;????????? /* Detects stack overflow. */ }; 2.打开thread.c,并修改thread_create函数,添加变量ticks_blocked,使得ticks_blocked初始化为0。注意添加的位置,需要在线程t创建出来之后,thread_unblock之前  intr_set_level (old_level); /*Initialize added vars*/ t-ticks_blocked = 0;3.改动timer.c中的timer_sleep函数Voidtimer_sleep (int64_t ticks) /*让此线程等待ticks单位时长,然后再执行。参数是需要等待的时间长度*/{ /* int64_t start = timer_ticks ();//记录开始时的系统时间 ASSERT (intr_get_level () == INTR_ON);//断言检测,中断应为开 while (timer_elapsed (start)  ticks)  //如果流逝时间=ticks时就返回。否则将持续占用cpu thread_yield ();*/If(ticks=0){Return;// 检查用户程序中的等待时间是否有错;} enum intr_level old_level=intr_disable();   //保存原先的中断状态(thread_block函数调用需要中断关闭)! struct thread * curThread = thread_current(); curThread-ticks_blocked = ticks;//线程应该阻塞(睡眠)的时间间隔 thread_block();   //阻塞进程 intr_set_level (
                您可能关注的文档
最近下载
- 第十二课 冲动来袭时 课件 鄂教版八年级 心理健康教育.ppt VIP
- 2025年中国移动面试题目及答案.doc VIP
- 六年级数学下册典型例题系列之第二单元百分数(二)的应用题拓展篇(解析版).doc VIP
- 西工大计算机操作系统实验-创建GeekOS内核线程资.doc VIP
- 拉伸强度原始记录模板.xls VIP
- 近代科学进入中国的回顾与前瞻(杨振宁)高中语文必修2.ppt VIP
- 社区卫生院卫生服务中心制度管理办法方案汇编.docx VIP
- DB15T 3962.4-2025绿色矿山建设规范 第4部分:煤炭行业.pdf VIP
- TCS-900 SISPatch使用手册相关资料文档.pdf VIP
- 《交通安全教育》课件.ppt VIP
 原创力文档
原创力文档 
                        

文档评论(0)