操作系统实验报告二.doc

操作系统实验报告二.doc

ID:59195781

大小:84.00 KB

页数:9页

时间:2020-09-10

操作系统实验报告二.doc_第1页
操作系统实验报告二.doc_第2页
操作系统实验报告二.doc_第3页
操作系统实验报告二.doc_第4页
操作系统实验报告二.doc_第5页
资源描述:

《操作系统实验报告二.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、重庆大学学生实验报告实验课程名称操作系统原理开课实验室DS1501学院软件学院年级2013专业班软件工程2班学生姓名胡其友学号开课时间2015至2016学年第一学期总成绩教师签名洪明坚软件学院制《操作系统原理》实验报告开课实验室:年月日学院软件学院年级、专业、班2013级软件工程2班姓名胡其友成绩课程名称操作系统原理实验项目名称指导教师洪明坚教师评语教师签名:洪明坚年月日1.实验目的:•随机生成3组非负整数列表,然后创建3个线程,分别用3种不同的排序算法对列表进行排序•如何生成随机数?•Step1:voidsrand(uint32_tseed)•s

2、eed是随机数的种子,建议用实验(一)中实现的系统调用“time_ttime(time_t*loc)”•srand(time(NULL))•Step2:多次调用“uint32_trandom()”获得随机数–进入图形模式,沿垂直方向把屏幕分成3个区域,每个排序线程用一个区域,动态显示排序过程,运行效果如这里所示。•如何进入图形模式?–Step1:调用listGraphicsModes()输出系统支持的图形模式»该函数必须在文本模式下运行,才能看到结果–Step2:选择一个模式,调用initGraphics(intmode)进入图形模式•如何获取屏幕

3、的分辨率?–水平:g_mib.XResolution–垂直:g_mib.YResolution•如何打点?–voidsetPixel(intx,inty,COLORREFcr);»(x,y)是点坐标»cr是颜色,用宏定义RGB(r,g,b)生成,其中r,g,b的取值范围都是0-255•如何从cr中取出r,g,b?用getXValue(cr),其中X=R,G,B•如何退出图形模式?–intexitGraphics();2.实验内容:•实现静态优先级调度算法•修改task.c中的函数schedule,实现静态优先级调度•在“structtcb”中增加线

4、程的静态优先级属性nice•一定要加在kstack字段之后!!!!!•在函数sys_task_create中初始化nice=0•nice是整数,取值范围[-NZERO,NZERO-1],值越小优先级越高•#defineNZERO20•函数schedule被调用时,CPU的中断已经被关闭•线程0(task0,它的ID=0)是一个特殊的线程,仅当没有其他可运行的线程时,才能调度task0运行!•实现静态优先级调度算法(续)•增加系统调用•intgetpriority(inttid)•成功返回(nice+NZERO),失败返回-1•intsetprior

5、ity(inttid,intprio)•把线程tid的nice设为(prio-NZERO)•prio必须在[0,2*NZERO-1]•成功返回0,失败返回-1•注意•如果tid=0,表示获取/设置当前线程的nice值,而不是task0!•在调用函数“structtcb*get_task(inttid)”获取structtcb指针时,一定要用save_flags_cli/restore_flags保护起来•uint32_tflags;structtcb*tsk;•save_flags_cli(flags);•tsk=get_task(tid);•re

6、store_flags(flags);•3.实验步骤:•实现动态优先级调度算法•在“structtcb”中,再增加两个属性•estcpu:表示线程最近使用了多少CPU时间•在函数sys_task_create中初始化estcpu=0•每次定时器中断时:g_task_running->estcpu++,task0除外!•每秒钟为所有线程(运行、就绪和等待)更新一次•priority:表示线程的动态优先级•priority=PRI_USER_MAX-(estcpu/4)-(nice*2)•取值范围从0(PRI_USER_MIN)到127(PRI_USE

7、R_MAX)•值越大优先级越高•每次调度前,先计算所有线程的priority,再调度•实现动态优先级调度算法(续)–增加一个全局属性•g_load_avg:表示系统的平均负荷–初值为零,每秒钟更新一次–g_load_avg=(59/60)×g_load_avg+(1/60)×nready»nready表示处于就绪状态的线程个数,task0除外!•属性计算–g_load_avg和线程的estcpu:在定时器的中断处理函数(ISR)中计算•文件timer.c中的函数isr_timer•如何每隔一秒计算一次?–(g_timer_ticks%HZ)»=0,

8、表示1秒钟已经过去»否则,还不到1秒钟•函数isr_timer被调用时,CPU的中断已经被关闭–线程的priority:在

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

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

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