操作系统实验报告_第1页
操作系统实验报告_第2页
操作系统实验报告_第3页
操作系统实验报告_第4页
操作系统实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

韩作东就

实验报告

课程名称操作系统试验课程编号0906553

试验项目名称时间片轮转调度

学号班级

姓名专业

同学所在学院指导老师

试验室名称地点

哈尔滨工程高校

计算机科学与技术学院

第七讲时间片轮转调度

一、试验概述

1.试验名称

时间片轮转调度

2.试验目的

1)调试EOS的线程调度程序,熟识基于优先级的抢先式调度。

2)为EOS添加时间片轮转调度,了解其它常用的调度算法。

3.试验类型

验证型试验,设计型试验

4.试验内容

(1)预备试验

(2)阅读掌握台命令“rr”相关的源代码

(3)调试线程调度程序

(4)为EOS添加时间片轮转调度

(5)修改线程时间片的大小

二、试验环境

WINDOWSXP系统,EOS操作系统

三、试验过程

1.设计思路和流程图

3.需要解决的问题及解答

4.主要数据结构、实现代码及其说明

5.源程序并附上注释

VOID

PspRoundRobin(

VOID

)

/*++

功能描述:

时间片轮转调度函数,被定时计数器中断服务程序KilsrTimcr调用。

参数:

无。

返回值:

无。

-*/

在调试的是第0个新建的线程。

监视输出

名称但调试

pThreadPwaoeter->Y0x0制作钦盘镜像,

正在启动VirtualPC...

开始训试...

6)激活虚拟机窗口,可以看到第()个新建的线程亦没有在掌握台中输出任何内容,

缘由是fprintf函数还没有执行。

7)激活OSLab窗口后按F5便第0个新建的线程连续执行,又会在断点处中断。

再次激活虚拟机窗口,可以看到第0个新建的线程已经在掌握台中输出了第一轮循环

的内容。可以多按几次E5杳看每轮循环输出的内容。

CONSOLE-1(PressCtrl+F1~F8toswitchconsoleuindou...)

IThread0(8):6

ICONSOLE-1(PressCtrl+F1~F8tosuitchconsoleuindou...]

Thread0(8):1

■公J、AVM/=0、JLfAJL.V^pjf

ICONSOLE-1(PressCtrl+F1~F8toswitchconsoleuindow...)

Thread0(8):2

8)在ps/sched.c文件的PspSe1ectNextThread函数中,调用BitScanReverse函

数扫描就绪位图的代码行(第384行)添加一个断点。

9)按F5连续执行,当有定时计数器中断发生时(每10ms一次),就会在新添加的

断点处中断。

10)在“调试”菜臬的“窗口”中选择“监视”,激活“监视”窗口(此时按F1可以

获得关于“监视”街口的关心)。

11)在“监视”窗口中添加表达式“/tPspReadyBitmap",以二进制格式查看就绪位

图的值。此时就绪位图的值应当为100000001,表示优先级为8和0的两个就落队

列中存在慈绪线程。(留意,假如就绪位图的值不是100000001,就连续按F5,置到

就绪位图受为此值)。

12)在“调试”菜单中选择“快速监视”,在“快速监视”对话框的“表

达式”中输入表达式“*PspCurrcntThread”后,点击“重新计算”按钮,可以杳

看当前正在执行的线程(即被甫断的线程)的线程掌握块中各个域的值,其中优先级

(Priority域)的湎为8:状态(State域)的值为2(运行态);时间片

(RemainderTicks域)的值为6:线程函数(StartAddr域)为Thread户unction。综

合这些信息即可确定当前正在执行的线程就是新建的第()个线程。关闭“快速监视”

对话框。

FVocess-OxBHclfO.

TtreadUstEntry.{

Next-OxaMfbTR,

Prev-O£8O3fb5f4

h

money-uxu,

SUUf2,

P«mamdefTicks■0x6,

WMStMus-0x0,

W^Tmer

IntefYdTcks-0x0,

-0@次依,

TtnerRo/E■0x803fc40c,

Parameter-Ox8O3fc3fO.

T<neclirt£rttry,{

Next-0x0,

Rrtv-QH

19

汕eUtt£f<ry-{

Next"(M),

^•v-0«0

h

W0x80架42$,

Prev-0>«nfc42e

h

K>rnHft«k-0xd0003000,

KcmeKZontext-<

口x-OxaOOOWx,

Ccx*0(0/

6d4-0xl,

a>x-OxO»

Esp-S&XXMfcO.

ao-oxiooow^

“■0x0,

Ed-0x0,

&p-0x80016c74,

bUq.0x10202,

Se7C5-0x8,

5e^5-0xl0,

Se^-OxlO

h

AUAhedPx-OifiXKMSlS,

StMtAddr-0x8001瞅3<Thre«FKrrt>on>,

Pb&netef-0xa00(»950.

1WErra-OxOr

E水ode,CbcO

13)在“监视”窗口中添加表达式“ListGetCount(&PspReadyListHeads[8])",查看优

先级为8的就绪队歹J中就绪线程的数量,值为19,蓝明除了正在执行的第0个新建

的线程外,其余19个新建的线程都在优先级为8的就绪队列中。ListGetCount函数

在文作rtl/list.c中比义。

14)按F10单步调试,BitScanReverse函数会从就绪位图中扫描最高优

先级,并保存在变fiHighestPriority中。香看变量HighcstPriority的值为8。

15)连续按F10单步调试,直到在PspSelectNextThread函数返前停止(第465行),

留意观看线程调度执行的每•个步骤。

(3)调试当前线程被抢先的状况

1)选择“调试”菜单中的“删除全部断点”,删除之前添加的全部断点。

2)在ps/suhed.c文件的PspSeleulNexlTliread函数的第395行添加个断点。

3)按F5连续执行,激活虚拟机窗口,可以看到第0个新建的线程正在执行。

OSLabPC-MicrosoftVirtualPC2007

ActionEditCDFloppyHelp

CONSOLE-1(PressCtr1+F1~F8toswitchconsoleuindou...)

Thread0(8):112380

4)在虚拟机窗口中按下一次空格键,EOS会在之前添加的断点处中断。

5)在“监视”窗口中查看就绪位图的值为24的就绪队列中在就

绪线程。在“监视”窗口中添加表达

ListGetCount(APspReadyListHeads[24])",其值为1,说明优先级为24的就绪队

列中只有一个就绪线程。扫描就绪位图后获得的最高优先级的值HighestPriority也

就应当是24。

名称值

pThreadParaneter->Y无法计菖表达式的值。

/tPspReadyBiUap1000000000000000100000001

ListGetCoxmt(APspReadyListHeads[24])0x1

HighestPriority0x18

6)按F10单步调试一次,执行的语句会将当前正在执行的第0个新建的线程,放入

优先级为8的就绪队列的队首。“监视”窗口中显示的优先级为8的就绪队列中的线

程数量就会增加1,变为20。

7)连续按F10单步调试,直到在第444行中断执行,留意观看线程调度执行的每一

个步骤。此时,正在执行的第0个新建的线程已经进入了“就绪”状态,让出了CPU。

线程调度程序接下来的工作就是选择优先级最高的非空就绪队列的队首线程作为当前

运行线程,也就是让优先级为24的线程在CPU上执行。

8)按F10单步调试一次,当前线程PspCurrentThread指向了优先级为24的线程。

可以在“快速监视”窗口中查看表达式“"PspCurrentThread”的值,留意线程掌握挑

中Start/\ddr域的值为lopConsoleDispatchThread函数(在文件io/console.2中

定义),说明这个优先级为24的线程是掌握台派遣线程。

Ebp=0xa0006ee8

Esi=0x0,

Edi=0x0,

名称Eip=0x8001«5e5

pThreadParameter->YEFltg=0x2,

SegCs=0x8,

/tPspReadyBitm&pSegSs=0x10,

ListGetCount(APwpReadyListHeadz[24])S«gDs=0x10,

HightstPrioritySegEs=0x10,

SegFs=0x10,

♦PspCurrtntThr«<dSegGs=0x10

L

AttachedPas=0x80024518,

StartAddr=0x80015e9a

«opConyoleDixp3chTAr♦

间查找结果1|可查找结累2|厘监视Parameter=0x0,

LastError=0x0,

ExitCode=0x0

就绪}

9)连续按F10单步调试,直到在PspSelectNextThread函数返回前(第465行)

中断执行,留意观看线程调度执行的写一个步骤。比时,优先级为24的线程已经进

入了“运行”状态,在中断返回后,寐可以开头执行了。在“监视”窗口中,就绪位

图的值变为100000001,优先级为24的就绪队列中线程的数量变为0,就绪位图和

就绪队列都是在刚刚被调甫过的PspUnrecidyThread函薮(在文件ps/sched.c中电

义)内更新的。

名称值1

pThreadParameter->T无法计宜表达式的值。

/tPspReadyBitmap100000001

LirGotCount(AFfpRoadyListM«ads[24])0x0

MighextPriority|0xl8J

♦P^pCurrAnlThr*ad{Prccaqq=Oyfin3FrlFTIThraadl.、wt=

Z

10)删除全部断点后结束调试。

(4)为E0S添加时间片轮转调度

1)代码修改完毕后,按F7生成EOS内核项目。

2)按F5启动调试。

EOS掌握台中输入命令“rr”后按回车。应能看到20个线程轮番执行的效果,

^^^p?SoL^l(PrcssCtrTTFT-rotoswitchconsolew|

ihread(8):14866

*hrcad(8):14596

'hread(8):14778

|hread(8):14969

*hread(8):14665

fhread(8):14350

ihread(8):H2Z0

'hread(0):14083

thread(8):14298

:hread(8):14462

fhread1G(8):14291

[hread11(8):15556

'hread1ZCO):15686

fhredd13(8):16613

ihread14(8):15132

'hread15(8):14895

hread16(8):14693

*hread17(8):1428三

fhread18(8):13976

(hread19(8):13982

(5)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论