- 9
- 0
- 约3.93千字
- 约 11页
- 2017-10-02 发布于湖北
- 举报
西安电子科技大学
《操作系统课程设计》
实
验
指
导
手
册
名称 作者 时间 2013-09-202013-10-22
1.任务描述
源代码devices/timer.c中有一个timer_sleep()函数。定义如下:
该函数的功能是让调用它的线程睡眠一段时间(ticks),然后唤醒。
事实上,Pintos已经实现该函数,只是使用的是“忙等待”的方法(见while循环)。
本实验的要求:重新实现timer_sleep( )函数,避免“忙等待”的发生(策略有多种,请大家设计一种并实现即可)
2.背景知识
2.1源码阅读
为顺利完成本实验,你至少需要阅读以下源代码文件(并非每一行都要读懂),并了解其中关键数据结构和函数的含义,它们是:
../src/threads/目录下:
-- thread.h, thread.c:有关线程初始化、阻塞、解除阻塞,线程调度等内容;
-- interrupt.h, interrupt.c:与中断有关的处理函数。
../src/devices/目录下:
-- timer.h, timer.c:本实验要修改的time_sleep( )函数就在其中,同时请注意理解定时器中断的处理过程。
2.1.1线程数据结构
在thread.h中定义了一个结构体struct thread,这个结构体用于存放的基本信息
请注意enum thread_status这个枚举类型的变量,用于线程所处的状态。
interrupt)
在操作系统原理课程的学习中,我们知道,多线程的并发执行是通过把CPU按时间片轮流分配给各个线程来实现的,Pintos也不例外。在Pintos中,定时器中断频率定义为TIMER_FREQ,也就是说,每秒有TIMER_FREQ个定时器中断。在time.h中定义为:
由此可知一个定时器中断的时长大约为10ms,这里称为一个ticks。
Pintos中一个时间片的长度 = 4*ticks ≈ 40ms。当一个线程运行了一个时间片后,它必须放弃处理器给其它的线程。那么系统是如何知道当前线程的运行时间,以及何时进行线程切换呢?现在我们便来进行一个分析。
事实上,当每个定时器中断(ticks)到来时,便会引发一次中断,系统对于这种中断的处理过程为:
通过中断管理器(汇编代码)调用intr_handker( )函数;
由intr_handler( )调用timer_interrupt( )函数。
timer_interrupt( )原型为(timer.c中):
全局变量ticks的含义:记录从系统启动到当前时刻总的定时器中断次数。
可以看出该函数的功能为:将全局变量ticks++; 然后调用thread_tick( )函数。
thread_tick( )函数(thread.c中)
代码如下:
我们暂且仅关心阴影部分代码,可以看出,该函数会使得thread_ticks变量加1,如果增加后的thread_ticks变量值不大于4(一个时间片),则返回。否则,则调用intr_yield_on_return( )函数。
thread_ticks和TIME_SLICE变量定义如下:
intr_yield_on_return( )函数
该函数的功能为将yield_on_return变量置为true,并返回intr_handler( )函数,定义如下:
intr_handler( )中相关代码如下:
可以看出,当yield_on_return为true时,将调用thread_yield( )函数。
thread_yield( )函数,代码如下(thread.c中):
该函数的功能为:迫使当前线程(非idle线程)放弃CPU,使其进入ready_list末尾排队,并通过schedule( )函数调度下一个线程执行。
线程切换
schedule( )函数
定义如下:
可以看到该函数通过next_thread_to_run( )来选择下一个运行线程。由于现在还没有优先级概念,此时ready_list为FIFO结构,因此选择的线程即为ready_list中头部的线程。
next_thread_to_run( )函数定义如下:
其中list_pop_front( )函数的功能为从ready_list中选择最前的结点(线程),并移除。
list_entry( )函数的功能是进行指针格式转换,使得LIST_ELEM转换为thread指针。
至此,系统已经为我们选好了下一个将要执行的线程。如果该线程符合要求,则执行switch_threads( )函数。
switch_threads( )函数(threads/switch.h)
switch_threads( )函数的功能为将一个线程放到CPU上执行(上
您可能关注的文档
最近下载
- 枣庄市台儿庄区2025届公费医学毕业生定岗笔试参考题库附答案解析.docx VIP
- 高中英语2025届高考热点人工智能与科技伦理主题作文核心词汇解读.doc VIP
- 2026中考数学压轴题每日一题(120题)答案.pdf VIP
- 2025年03月山东临沂市公费医学生考试选聘笔试历年专业考点(难、易错点)附带答案详解 .doc
- 基于PLC技术的数据中心冷源自控系统设计与应用.pdf VIP
- 时间在哪里认识时间 课件 人教版数学二年级下册.pptx VIP
- 2024年浙江事业单位427统考《综合应用能力》模考大赛(第二季).docx VIP
- 永川年产 200 万把陶瓷水果刀生产线设计.docx VIP
- 2024年07月山东省公费医学生(定向淄博)统一选岗2人笔试历年专业考点(难、易错点荟萃)附带答案详解 .doc
- 常见氧疗方式及其选择ppt课件-----精品课件下载.ppt VIP
原创力文档

文档评论(0)