操作系统实验报告,时钟原语

操作系统实验报告,时钟原语

ID:35331077

大小:63.93 KB

页数:6页

时间:2019-03-23

操作系统实验报告,时钟原语_第1页
操作系统实验报告,时钟原语_第2页
操作系统实验报告,时钟原语_第3页
操作系统实验报告,时钟原语_第4页
操作系统实验报告,时钟原语_第5页
资源描述:

《操作系统实验报告,时钟原语》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一、实验名称时钟原语的改进二、实验目的1.理解并学握Pintos的安装和使用;2.初步掌握Pintos内核线程构造及同步机理;3.具有对Pintos内核代码进行修改和调试的能力。三、实验内容及要求重新实现devices/timer.c中的timcr_sleep()函数。该函数现有的实现虽然是正确的,但所采用的是“忙等”技术,通过不停地循环调用thread_yield()并查询是否已经达到等待时间。新的实现耍求采用线程同步机制来替换这样的忙等技术。voidtimersleep(int64tticks)

2、的需求说明如下:将调用此函数的线程挂起至少ticks所指定的若干个时钟周期。当这段时间过去后,将该线程激活并放入就绪队列。此函数可用于实现实时功能,如按照规定的时间间隔发送报文等。Pintos系统时钟屮断频率的缺省值为100,我们不建议修改此值,因为不适当的设置会造成很多意想不到的错误。要求达到的指标:通过Pintos所提供的所有相关测试。四、算法设计思想(字体标为红色的为改动的代码)(一)忙等待VS.唤醒机制的实现:/*介绍实现中新声明的或者改变了的主要结构体、全局或局部变量,简短说明其设置的H的

3、?*/1.在thread,h文件中,我们在structthread结构体中添加一个新的成员变量ticks_blocked用來记录thread被阻塞了多久:struetthread{/*Ownedbythread,c.*/tid_ttid;/*线程标识符*/enumthread_statusstatus;/*线程状态*/charname[16];/*Name(fordebuggingpurposes).*/uint8_t*stack;/*Savedstackpointer.*/intpriority;

4、/*优先级*/structlist_elemelem;#ifdefUSERPROGuint32t*pagedir;ttendifunsignedmagic;};structlistelemallelem;/*Listelementforallthreadslist.*/intticks_blockod;/*存储记录该进程已经被block多久了*//*Sharedbetweenthread.candsynch.c.*//*Listelement・*//*Ownedbyuserprog/process,

5、c.*//*Pagedirectory.*//*Ownedbythread,c.*//*Detectsstackoverflow.*/1.打开thread,c,并修改threadcreate函数,添加变量ticksblocked,使得ticks_blocked初始化为0。注意添加的位置,需要在线程t创建出來之后,threadunblock之前intr_set_level(old_level);/*Initializeaddedvars*/t->ticksblocked=0;2.改动timer,c中的

6、timersleep函数Voidtimer_sleep(int64_tticks)/*让此线程等待ticks单位时长,然后再执行。参数是需要等待的时间长度*/{/*int64_tstart=timer_ticks();//记录开始时的系统时间ASSERT(intr_get_level()==INTR_ON);//断言检测,中断应为开while(timer_elapsed(start)=ticks时就返回。否则将持续占用cputhroad_yield();*/If(ti

7、cks<=0){Return;//检査用户程序中的等待时间是否有错;)enumintrleveloldlevel=intrdisable();//保存原先的中断状态(thrcad_block函数调用需要中断关闭)!structthread*curThread=threadcurrent();curThread->ticks_blocked=ticks;//线程应该阻塞(睡眠)的时间间隔thread_block();//阻塞进程intr_set_level(old_level);//恢复原先的中断状态

8、}3.thread_block函数的执行:thread_block(void)ASSERT(!intr_context());〃检查调的函数符不符合条件,不能从原文中调ASSERT(intr_get_level()==INTR_OFF);//检查屮断状态必须为关屮断thread_current()->status=THREAD_BLOCKED;〃线程阻塞态schedule();〃调度程序schedule()}1.修改timer,c屮的timer_interrupt函数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。