文档库 最新最全的文档下载
当前位置:文档库 › 实验3 指令调度和延迟分支

实验3 指令调度和延迟分支

实验3 指令调度和延迟分支
实验3 指令调度和延迟分支

实验3 指令调度和延迟分支

3.1 实验目的

(1)加深对指令调度技术的理解。

(2)加深对延迟分支技术的理解。

(3)熟练掌握用指令调度技术解决指令流水线中的数据冲突的方法。

(4)进一步理解指令调度技术对CPU性能的改进。

(5)进一步理解延迟分支技术对CPU性能的改进。

3.2 实验平台

指令级和流水线操作级模拟器MIPSsim。

3.3 实验内容和步骤

(1)启动MIPSsim。

(2)进一步理解流水段的构成和各个流水寄存器的功能。

(3)选择“配置”下的“流水方式”,让模拟器工作于流水方式下。

(4)采用指令调度技术解决流水线中的数据冲突。步骤如下:

1)载入程序schedule.s。

2)关闭定向功能。

3)执行载入的程序。观察时钟周期图,找出程序执行中各种冲突发生的次数,发生冲

突的指令组合以及程序执行的总时钟周期数。

时钟周期图如下:

由以上知:RAW数据冲突发生了16次,其中load停顿6次,自陷停顿1次。

发生冲突的指令组合:

ADDIU $r1,$r0,A

LW $r2,0($r1)与上条写后读冲突;

ADD $r4,$r0,$r2

SW $r4,0($r1)与上条指令写后读冲突;

LW $r6,4($r1)

ADD $r8,$r6,$r1与上条指令写后读冲突;

MUL $r12,$r10,$r1

ADD $r16,$r12,$r1与上条指令写后读冲突;

ADD $r18,$r16,$r1 与上条指令组件冲突

SW $r18,16($r1) 与上条指令写后读冲突;;

LW $r20,8($r1)

MUL $r22,$r20,$r14与上条指令写后读冲突;

程序执行的总时钟周期数为33。

4)采用指令调度技术对程序进行指令调度,消除冲突。将调度后的指令存到

after-schedule.s中。

答:after-schedule.s指令代码如下:

.text

main:

ADDIU $r1,$r0,A

MUL $r22,$r20,$r14

LW $r2,0($r1)

MUL $r24,$r26,$r14

ADD $r4,$r0,$r2

LW $r6,4($r1)

SW $r4,0($r1)

ADD $r8,$r6,$r1

MUL $r12,$r10,$r1

ADD $r18,$r16,$r1

ADD $r16,$r12,$r1

SW $r18,16($r1)

LW $r20,8($r1)

TEQ $r0,$r0

.data

A:

.word 4,6,8

5)载入after-schedule.s。

6)执行程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数。

则程序执行的总时钟周期数为21。

7)根据记录结果,比较调度前和调度后的性能。论述指令调度对提高CPU性能的作

用。

时钟周期图:

调度前的执行周期为33,调度后的执行周期数为21。指令调度让指令顺序重新组织顺序可以消除部分的数据冲突,指令调度影响CPU性能,通过使用指令调度提高了CPU的使用率,大大减少了指令冲突的次数,提高了CPU性能。

(5)采用延迟分支减少分支指令对性能的影响。步骤如下:

1)启动MIPSsim。

2)载入branch.s。

3)关闭延迟分支功能。通过“配置”下取消“延迟槽”选项。

4)执行该程序,观察并记录发生分支延迟的时刻。

答:分支延迟的时刻为第13个周期。

5)记录该程序执行的总时钟周期数。

程序执行的总时钟周期数为38。

6)假设延迟槽为一个,对程序进行指令调度,然后保存到delay-branch.s中。

delay-branch.s的指令代码:

.text

main:

ADDI $r2,$r0,1024

ADD $r3,$r0,$r0

ADDI $r4,$r0,8

loop:

LW $r1,0($r2)

ADDI $r1,$r1,1

ADDI $r3,$r3,4

SUB $r5,$r4,$r3

SW $r1,0($r2)

BGTZ $r5,loop

ADD $r7,$r0,$r6

TEQ $r0,$r0

7)载入delay-branch.s。

8)打开延迟分支功能。

9)执行该程序,观察时钟周期图。

时钟周期图:

10)记录执行该程序的总的时钟周期数。

程序的总的时钟周期数为31。

11)对比上述两种情况下的时钟周期图。

12)根据记录,比较没有采用延迟分支和采用了延迟分支的性能之间的不同。论述延迟

分支对CPU性能的作用。

答:比较两种情况的时钟周期总数,可知:在使用延迟槽后,指令在运行到跳转指令时,不会出现延迟等待,则能够提高CPU的性能。

3.4 实验结论和实验心得

实验结论:

从前调度,在任何情况下,被调度的指令必须与分支无关。从目标处调度,当分支成功时,必须保证在分支失败时执行被调度的指令不会导致错误,有可能需要复制指令。

延迟可以提高CPU的性能。

实验心得体会:

通过本次实验,我对指令调度和延迟分支有了进一步的了解和掌握,并掌握了用指令调度技术解决指令流水线中的数据冲突问题的方法。理解了指令调度技术和延迟分支技术对CPU性能的改进。这对我以后的计算机系统结构的学习打下了坚实的基础,让我不断提高,增长了我的知识。

实验一进程调度实验报告书

淮海工学院计算机工程学院实验报告书 课程名:《操作系统原理A》 题目:进程调度 班级:软件132 学号:2013122907 姓名:孙莹莹

操作系统原理实验——进程调度实验报告 一、目的与要求 1)进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C 语言编写一个进程调度模拟程序,使用优先级或时间片轮转法实现进程调度。本实验可加深对进程调度算法的理解。 2)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果) 3)于2015年4月18日以前提交本次实验报告(含电子和纸质报告,由学习委员以班为单位统一打包提交)。 二、实验内容或题目 1)设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。 2)模拟调度程序可任选两种调度算法之一实现(有能力的同学可同时实现两个调度算法)。 3)程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。 4)本次实验内容(项目)的详细说明以及要求请参见实验指导书。 三、实验步骤与源程序 (1)流程图

(2)实验步骤 1)PCB的结构:优先级算法中,设PCB的结构如下图所示,其中各数据项的含义如下: Id:进程标识符号,取值1—5。 Priority:优先级,随机产生,范围1—5。 Used:目前已占用的CPU时间数,初值为0;当该进程被调用执行时,每执行一个时间片,Used加1。 Need:进程尚需的CPU时间数,初值表示该进程需要运行的总时间,取值范围为5—10。并随机产生,每运行一个时间片need减1;need为0则进程结束。 Status:进程状态R(运行),W(就绪),F(完成);初始时都处于就绪状态。 Next:指向就绪队列中下一个进程的PCB的指针。 2)初始状态及就绪队列组织: 5个进程初始都处于就绪状态,进程标识1—5,used初值都为0。各进程的优先级随机产生,范围1—5。处于就绪状态的进程,用队列加以组织,队列按优先级由高到低依次排列,队首指针设为head,队尾指针为tail。 3)调度原则以及运行时间的处理: 正在执行的进程每执行一个时间片,其优先级减1(允许优先级为负)。进程调度将在以下情况发生:当正在运行的程序其优先级小于就绪队列队首进程的优先级时。程序中进程的运行时间以逻辑时间片为单位。

计算机体系结构实验讲义

本科教学实验讲义(实验)课程名称计算机体系结构 学院(部、中心):信息学院 执笔人(签字): 唐斌 审核人(签字): 编写时间:2016.7.9 贵州财经大学教务处印制 年月日

实验一流水线技术 一、实验目的 1.加深对计算机流水线基本概念的理解; 2.理解MIPS结构如何用5段流水线来实现,理解各段的功能和基本操作; 3.加深对数据冲突、结构冲突的理解,理解这两类冲突对CPU性能的影响; 4.进一步理解解决数据冲突的方法,掌握如何应用定向技术来减少数据冲突引起的停 顿。 5.加深对指令调度和延迟分支技术的理解; 6.熟练掌握用指令调度技术来解决流水线中的数据冲突的方法; 7.进一步理解指令调度技术和延迟分支技术对CPU性能的改进。 二、实验平台 模拟器MIPSsim、计算机 三、实验内容和步骤 1、流水线工作原理 a. 启动MIPSsim。 b. 勾选配置菜单中的“流水方式”,使模拟器工作于流水方式下。 c.观察程序在流水线中的执行情况,步骤如下: (1)用MIPSsim的“文件”菜单中的“载入程序”来加载pipeline.s(在模拟器所在文 件夹下的“样例程序”文件夹中); (2)关闭定向功能。这是通过在“配置”菜单中去选“定向”(即使得该项前面没有“√” 号)来实现的; (3)用单步执行一周期的方式(“执行”菜单中,或用F7)执行该程序,观察每一周 期中,各段流水寄存器内容的变化、指令的执行情况(代码窗口)以及时钟周期 图; (4)当执行到第10个时钟周期时,各段分别正在处理的指令是: IF: ID: EX: MEM: WB: 画出这时的时钟周期图。

操作系统实验三进程调度

操作系统实验 实验三进程调度 学号 1215108019 姓名李克帆 班级 12电子2班 华侨大学电子工程系

实验目的 1、理解有关进程控制块、进程队列的概念。 2、掌握进程优先权调度算法和时间片轮转调度算法的处理逻辑。 实验内容与基本要求 1、设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转 调度算法。 2、建立进程就绪队列。 3、编制两种进程调度算法:优先权调度算法和时间片轮转调度算法。 实验报告内容 1、优先权调度算法和时间片轮转调度算法原理。 优先权算法:(1)当该算法用于作业调度时,系统从后备作业队列中选择若干个优先级最高的,且系统能满足资源要求的作业装入内存运行。 (2)当该算法用于进程调度时,将把处理机分配给就绪进程队列中优先级最高的进程。 时间片轮转法: 系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片.时间片的大小从几ms到几百ms.当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片.这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间. 2、程序流程图。 3、程序及注释。 #include #include //使用timer()函数 #include //时间延迟 #define DELAY 200 //每次运算后的停留时间

操作系统的进程调度 实验报告

《计算机操作系统2》实验报告 实验一题目:操作系统的进程调度 姓名:学号:12125807 实验日期:2014.12 实验要求: 1.设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。 进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2.调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分 析比较。 3.系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程 实验目的: 1.进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要 求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。 实验内容: 1.编制和调试示例给出的进程调度程序,并使其投入运行。 2.自行设计或改写一个进程调度程序,在相应机器上调试和运行该程序,其功能应该不亚 于示例。 3.直观地评测各种调度算法的性能。 示例: 1.题目 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。 进程控制块结构如下:

PCB 进程标识数 链指针 优先数/轮转时间片数 占用CPU时间片数 进程所需时间片数 进程状态 进程控制块链结构如下: 其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。 2.算法与框图 (1) 优先数法。 进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。 进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。(3) 程序框图如下图所示。

实验一 流水线及流水线中的冲突

实验一流水线及流水线中的冲突 程元彬 PB12011076 实验目的 1.加深对计算机流水线基本概念的理解; 2.理解MIPS结构如何用5段流水线来实现,理解各段的功能和基本操作; 3.加深对数据冲突、结构冲突的理解,理解这两类冲突对CPU性能的影响; 4.进一步理解解决数据冲突的方法,掌握如何应用定向技术来减少数据冲突引起的停顿。 5.加深对指令调度和延迟分支技术的理解; 6.熟练掌握用指令调度技术来解决流水线中的数据冲突的方法; 7.进一步理解指令调度技术和延迟分支技术对CPU性能的改进。 实验平台 指令级和流水线操作级模拟器MIPSsim, 实验内容和步骤 首先要掌握MIPSsim模拟器的使用方法。 一、流水线及流水线中的冲突观察 1. 启动MIPSsim。 2.根据预备知识中关于流水线各段操作的描述,进一步理解流水线窗口中各段的功能,掌握各流水寄存器的含义。(用鼠标双击各段,就可以看到各流水寄存器的内容) 3. 熟悉MIPSsim模拟器的操作和使用方法。 可以先载入一个样例程序(在本模拟器所在的文件夹下的“样例程序”文件夹中),然后分别以单步执行一个周期、执行多个周期、连续执行、设置断点等的方式运行程序,观察程序的执行情况,观察CPU中寄存器和存储器的内容的变化,特别是流水寄存器内容的变化。 4. 勾选配置菜单中的“流水方式”,使模拟器工作于流水方式下。 5.观察程序在流水线中的执行情况,步骤如下: (1)用MIPSsim的“文件”菜单中的“载入程序”来加载pipeline.s(在模拟器所在文 件夹下的“样例程序”文件夹中); (2)关闭定向功能。这是通过在“配置”菜单中去选“定向”(即使得该项前面没有“√” 号)来实现的; (3)用单步执行一周期的方式(“执行”菜单中,或用F7)执行该程序,观察每一周 期中,各段流水寄存器内容的变化、指令的执行情况(代码窗口)以及时钟周期 图;

实验二 单处理器系统的进程调度

实验二单处理器系统的进程调度 (附实验报告) 1.实验目的 加深对进程概念的理解,明确进程和程序的区别; 深入了解系统如何组织进程、创建进程; 进一步认识如何实现处理器调度。 2.实验预备知识 进程的概念; 进程的组织方式; 进程的创建; 进程的调度。 3.实验内容

编写程序完成单处理机系统中的进程调度,要求采用时间片轮转调度算法。实验具体包括:首先确定进程控制块的内容,进程控制块的组成方式;然后完成进程创建原语和进程调度原语;最后编写主函数对所作工作进程测试。 4.提示与讲解 这个实验主要要考虑三个问题:如何组织进程、如何创建进程和如何实现处理器调度。 考虑如何组织进程,首先就要设定进程控制块的内容。进程控制块PCB 记录各个进程执行时的情况。不同的操作系统,进程控制块记录的信息内容不一样。操作系统功能越强,软件也越庞大,进程控制块记录的内容也就越多。这里的实验只使用了必不可少的信息。一般操作系统中,无论进程控制块中信息量多少,信息都可以大致分为以下四类: ①标识信息 每个进程都要有一个惟一的标识符,用来标识进程的存在和区别于其他进程。这个标识符是必不可少的,可以用符号或编号实现,它必须是操作系统分配的。在后面给出的参考程序中,采用编号方式,也就是为每个进程依次分配一个不相同的正整数。 ②说明信息

用于记录进程的基本情况,例如进程的状态、等待原因、进程程序存放位置、进程数据存放位置等等。实验中,因为进程没有数据和程序,仅使用进程控制块模拟进程,所以这部分内容仅包括进程状态。 ③现场信息 现场信息记录各个寄存器的内容。当进程由于某种原因让出处理器时,需要将现场信息记录在进程控制块中,当进行进程调度时,从选中进程的进程控制块中读取现场信息进行现场恢复。现场信息就是处理器的相关寄存器内容,包括通用寄存器、程序计数器和程序状态字寄存器等。在实验中,可选取几个寄存器作为代表。用大写的全局变量AX、BX、CX、DX模拟通用寄存器、大写的全局变量PC模拟程序计数器、大写的全局变量PSW模拟程序状态字寄存器。 ④管理信息 管理信息记录进程管理和调度的信息。例如进程优先数、进程队列指针等。实验中,仅包括队列指针。 因此可将进程控制块结构定义如下: struct pcb {int name; int status; int ax, bx, cx,dx;

进程调度算法模拟实验

华北科技学院计算机系综合性实验 实验报告 课程名称操作系统C 实验学期2012至2013学年第2学期学生所在系部计算机系 年级专业班级 学生姓名学号 任课教师杜杏菁 实验成绩 计算机系制

《操作系统C》课程综合性实验报告 开课实验室:基础六机房2013年6月3日 实验题目进程调度算法模拟 一、实验目的 通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。 二、设备与环境 1.硬件设备:PC机一台 2.软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java等编程语言环境。 三、实验内容 (1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。 (2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段: ?进程标识数ID。 ?进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。 ?进程已占用CPU时间CPUTIME。 ?进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。 ?进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进 入阻塞状态。 ?进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将 转换成就绪状态。 ?进程状态STATE。 ?队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则: ?进程在就绪队列中呆一个时间片,优先数增加1。 ?进程每运行一个时间片,优先数减3。 (4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。

实验五指令调度和延迟分支

实验5 指令调度和延迟分支 一.实验目的 (1)加深对指令调度技术的理解。 (2)加深对延迟分支技术的理解。 (3)熟练掌握用指令调度技术解决流水线中的数据冲突的方法。(4)进一步理解指令调度技术对CPU性能的改进。 (5)进一步理解延迟分支技术对CPU性能的改进。 二.实验内容和步骤: (1)、启动MIPSsim。

(2)、根据前面的相关知识中关于流水线各段操作的描述,进一步理解流水线窗口中各段的功能,掌握各流水寄存器的含义。 指令流水线有取指(IF)、译码(ID)、执行(EX)、访存(MEM)、写回寄存器堆(WB)5个过程段,共有7条指令连续输入此流水线 IF段(取指):取指令,控制器必须具备能自动地从存储器中取出指令的功能 ID段(译码):指令译码、读寄存器 EX段(执行):执行、访存有效地址字段 MEM段(访存):存储器访问 WB(写回寄存器堆):结果写回寄存器 在该窗口中,每一个矩形方块代表一个流水段,它们用不同的颜色填充。在该窗口的左侧是IF到WB段,其右边为浮点部件。浮点部件分有浮点加法部件(fadd)、浮点乘法部件(fmul)和浮点除法部件(fdiv)三种。在菜单“配置” “常规配置”中修改浮点部件个数,可看到该窗口中对应类型的浮点部件个数会发生相应的变化。 (3)、选择“配置”->“流水方式”选项,使模拟器工作于流水方式下。 (4)、用指令调度技术解决流水线中的数据冲突。

1)启动MIPSsim。 2)加载schedule.s。 3)关闭定向功能。

4)执行所载入的程序。通过查看统计数据和时钟周期图,找出并记录程序执行过程中各种冲突发生的次数、发生冲突的指令组合以及程序执行的总时钟周期数。 调度前: RAW发生的冲突周期数:2、3、5、6、8、9、11、12、15、16、18、 19、21、22、25、26

操作系统实验三时间片轮转法完成进程调度

实验三:时间片轮转法完成进程调度 一、实验目的: (1)加深对进程的理解 (2)理解进程控制块的结构 (3)理解进程运行的并发性 (4)掌握时间片轮转法进程调度算法 实验内容: (1)建立进程控制块 (2)设计三个链队列,分别表示运行队列、就绪队列和完成队列 (3)用户输入进程标识符以及进程所需的时间,申请空间存放进程PCB言息。 (4)每一个时间片结束输出各进程的进程号,CPU时间(即已经占用的CPU时间),所需时间(即还需要的CPU时间),以及状态(即用W表示等待,R表示运行,F表示完成) 实验程序: #include #include #include typedef struct node { char name[10];/* 进程标识符*/ int prio;/* 进程优先数*/ int round;/* 进程时间轮转时间片*/

int cputime; /*进程占用CPU时间*/ int needtime; /* 进程到完成还要的时间*/ int count;/* 计数器*/ char state; /* 进程的状态*/ struct node *next; /* 链指针*/ }PCB; PCB *finish,*ready,*tail,*run; // 队列指针 int N,t; // 进程数,时间片的大小 void firstin() { run二ready;//就绪队列头指针赋值给运行头指针 run->state='R'; //进程状态变为运行态 ready=ready->next; //就绪队列头指针后移到下一进程 } void prt1(char a)// 输出标题函数 { if(toupper(a)=='P')// 优先级法 \n");} printf("进程名占用CPU时间到完成还要的时间轮转时间片状态 void prt2(char a,PCB *q)〃进程PCB输出 if(toupper(a)=='P')// 优先级法的输出 printf("%4s %8d %12d %14d %8c\n",q->name,q->cputime,q->needtime,q->roun d,q->state); }

(完整word版)操作系统实验报告 实验一 进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5));

实验报告答案

实验2:MIPS指令系统和MIPS体系结构 一.实验目的 (1)了解和熟悉指令级模拟器 (2)熟悉掌握MIPSsim模拟器的操作和使用方法 (3)熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解 (4)熟悉MIPS体系结构 二. 实验内容和步骤 首先要阅读MIPSsim模拟器的使用方法,然后了解MIPSsim的指令系统和汇编语言。(1)、启动MIPSsim(用鼠标双击MIPSsim.exe)。 (2)、选择“配置”->“流水方式”选项,使模拟器工作在非流水方式。 (3)、参照使用说明,熟悉MIPSsim模拟器的操作和使用方法。 可以先载入一个样例程序(在本模拟器所在的文件夹下的“样例程序”文件夹中),然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序的执行情况,观察CPU中寄存器和存储器的内容的变化。 (4)、选择“文件”->“载入程序”选项,加载样例程序 alltest.asm,然后查看“代码”窗口,查看程序所在的位置(起始地址为0x00000000)。 (5)、查看“寄存器”窗口PC寄存器的值:[PC]=0x00000000。 (6)、执行load和store指令,步骤如下: 1)单步执行一条指令(F7)。 2)下一条指令地址为0x00000004,是一条有 (有,无)符号载入字节 (字节,半字,字)指令。 3)单步执行一条指令(F7)。 4)查看R1的值,[R1]= 0xFFFFFFFFFFFFFF80 。 5)下一条指令地址为0x00000008,是一条有 (有,无)符号载入字 (字节,半字,字)指令。 6)单步执行1条指令。 7)查看R1的值,[R1]=0x0000000000000080 。 8)下一条指令地址为0x0000000C ,是一条无 (有,无)符号载入字节 (字节,半字,字)指令。 9)单步执行1条指令。 10)查看R1的值,[R1]= 0x0000000000000080 。 11)单步执行1条指令。 12)下一条指令地址为0x00000014 ,是一条保存字 (字节,半字,字)指令。 13)单步执行一条指令。

实验21 进程调度

实验2、1 进程调度 一、 实验目的 多道程序设计中,经常就是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。 二、 实验要求 1. 设计进程调度算法,进程数不定 2. 包含几种调度算法,并加以实现 3. 输出进程的调度过程——进程的状态、链表等。 三、 参考例 1.题目——优先权法、轮转法 简化假设 1) 进程为计算型的(无I/O) 2) 进程状态:ready 、running 、finish 3) 进程需要的CPU 时间以时间片为单位确定 2.算法描述 1) 优先权法——动态优先权 当前运行进程用完时间片后,其优先权减去一个常数。 2) 轮转法 四、 实验流程图 开始 键盘输入进程数n,与调度方法的选择 优先权法? 轮转法 产生n 个进程,对每个进程产生一个PCB,并用随机数产生进程的优先权及进程所需的CPU 时间 按优先权大小,把n 个进程拉成一个就绪队列 撤销进程就绪队列为空? 结束 N Y Y

注意: 1.产生的各种随机数的取值范围加以限制,如所需的CPU 时间限制在1~20之间。 2.进程数n 不要太大通常取4~8个 3.使用动态数据结构 4.独立编程 5.至少三种调度算法 6.若有可能请在图形方式下,将PCB 的调度用图形成动画显示。 五.实验过程: (1)输入:进程流文件(1、txt),其中存储的就是一系列要执行的进程, 每个作业包括四个数据项: 进程名 进程状态(1就绪 2等待 3运行) 所需时间 优先数(0级最高) 进程0 1 50 2 进程1 2 10 4 进程2 1 15 0 进程3 3 28 5 进程4 2 19 1 进程5 3 8 7 输出: 进程执行流等待时间,平均等待时间 本程序包括:FIFO 算法,优先数调度算法,时间片轮转调度算法 产生n 个进程, 的时间片数,已占用CPU 的时间片数置为0 按进程产生的先后次序拉成就绪队列链 =0? 撤销该进程 就绪队列为空不? =轮转时间片数? N Y Y Y 结束 N

实验一处理器调度实验报告

处理器调度一、实验内容 选择一个调度算法,实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。 当就绪状态进程 个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下处理器调度,帮助学生加深了解处理器调度的工作。 三、实验题目 设计一个按优先数调度算法实现处理器调度的程序 提示: (1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进 程控制块的格 式为: 其中,进程名----作为进程的标识,假设五个进程的进程名分别是R, P2, P3, P4,R。 指针—按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块

首地址,最后一个进程中的指针为“ 0”。 要求运行时间-- 假设进程需要运行的单位时间数。 优先数-赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态-可假设有两种状态,“就绪”状态和“结束“状态,五个进程的初 始状态都为 “就绪“状态,用“ R”表示,当一个进程运行结束后,它的状态变为“结束”, 用“ E”表示。 (2)在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数” 和“要求运行时间”。 (3)为了调度方便,把五个进程按给定的优先数从大到小连成队列,用一单元指出队首 进程,用指针指出队列的连接情况。例: 队首标志 (4)处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优 先数就减“ 1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的 启动运行,而是执行: 优先数- 1 要求运行时间-1 来模拟进程的一次运行提醒注意的是:在实际的系统中,当一个进程被选中运

系统结构实验设计

实践设计报告 设计名称:计算机系统结构实践设计 设计项目:流水线与流水线冲突 姓名:冯皓明 专业:计算机科学与技术 班级:18-4 学号:1804010405

计算机科学与技术学院 实验教学中心 20 20 年 5 月15 日 目录 一.实践设计的目的和意义 二.实践设计的内容和要求 三.设计用的设备仪器 四.实践设计的相关技术 五.项目设计与实现 六.结束语 一实验目的 加深对计算机流水线基本概念的理解。 理解MIPS结构如何用段流水线来实现,理解各段的功能和基本操作。 加深对数据冲突、结构冲突和控制冲突的理解,理解这三类冲突对CPU性能的影响。 通过采用相关技术来消解各种冲突,进一步理解解决流水线冲突的方法。二.要求 学习模拟器的结构、原理和基本操作方法。 运行样例程序,观察流水线的工作过程和冲突产生的情况。 运用所学知识,通过对模拟器的一些功能设置来解决产生的结构冲突,数据冲突,控制冲突。 自行编写一段程序,分别验证各种冲突的解决方法。(程序行数不需过多,10行左右,只要包括这几种冲突情况即可)。

三实验用设备器材 计算机一台。指令级和流水线操作级模拟器MIPS。 四.实践设计的相关技术 五.项目设计与实现 (1)启动MIPSsim (2)根据预备知识中关于流水线各段操作的描述,进一步理解流水线窗口中各段的功能,掌握各流水寄存器的含义。 流水线窗口如下图: 取指令(IF)、指令译码/读寄存器(ID)、执行/访存有效地址计算(EX)、存储器访问(MEM)、结果写回寄存器(WB),(用鼠标双击各段,就可以看到各流水寄存器的内容)

1.观察程序在流水线中的执行情况,步骤如下: (1)选择MIPS的“文件”—>“载入程序”选项来加载pipeline.s。(2)观察比较各个执行周期 当执行到第13个时钟周期时,各段分别正在处理的指令是: IF: LW $r4,60($r6) ID:ADDI $r3,$r0,25 EX:ADDI $r1,$r1,-1 MEM:ADDI $r6,$r0,8 WB:ADD $r2,$r1,$r0 时钟周期图:

实验三--进程的创建和简单控制(学生

实验三进程的创建和简单控制 实验目的: 1.掌握进程的概念和进程的状态,对进程有感性的认识; 2.掌握进程创建方法; 3.认识进程的并发执行,了解进程族之间各种标识及其存在的关系; 4.熟悉进程的创建、阻塞、唤醒、撤销等控制方法。 实验内容: 1.了解有关Linux进程的属性和进程的层次结构; 2.学习有关Linux的前台和后台进程; 3.学习有关Linux命令的顺序执行和并发执行; 4.学习有关挂起和终止进程; 5.了解并发程序的不可确定性,进行简单并发程序设计。 实验步骤: (一)Shell下的进程控制 1.进入Linux系统。 2.用ps查看进程。 a)linux的ps命令是用来监视系统进程和资源使用情况的命令,可显示 瞬间进程的动态。 b)ps 的参数非常多,常用的参数有: i.-A 列出所有的进程; ii.-w 显示加宽可以显示较多的信息; iii.-au 显示较详细的信息; iv.-aux 显示所有包含其他使用者的进程。 3.用kill终止某些进程。 a)kill命令通过向进程发送指定的信号来结束进程。 b)先使用ps查到进程号,再使用kill杀出进程。

4.用pstree命令显示系统中进程层次结构。 a)pstree指令用ASCII字符显示树状结构,清楚地表达进程间的相互关 系。 b)语法格式pstree [-acGhlnpuUV][-H <程序识别码>][<程序识别 码>/<用户名称>] (二)Linux简单进程编程 1.理解系统调用fork()的使用。 a)fork()会产生一个与父程序相同的子程序,唯一不同之处在于其进程 号,如图5所示。 图 5 系统调用fork() b)编辑下面的程序,要求实现父进程产生两个子进程,父进程显示字 符“a”、两个子进程,分别显示字符“b”、“c”,如图6所示。 #include main( ) { int p1,p2; while ((p1=fork())==-1); /*父进程创建第一个进程,直到成功*/ if(p1==0) /*0返回给子进程1*/ { putchar('b');/*P1的处理过程*/ } else ① { /*正数返回给父进程(子进程号)*/ while ((p2=fork())==-1); /*父进程创建第二个进程,直到成功*/ if(p2==0) /*0返回给子进程2*/ { putchar('c');/*P2的处理过程*/ } else { putchar('a');/*P2创建完成后,父进程的处理过程*/ } } } 图6系统调用fork()的使用示例一 思考: i.编译连接通过后,多次运行程序,观察进程并发执行结果,并分析

操作系统原理-进程调度实验报告

一、实验目的 通过对进程调度算法的设计,深入理解进程调度的原理。 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 进程调度分配处理机,是控制协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程。 进程通过定义一个进程控制块的数据结构(PCB)来表示;每个进程需要赋予进程ID、进程到达时间、进程需要运行的总时间的属性;在RR中,以1为时间片单位;运行时,输入若干个进程序列,按照时间片输出其执行序列。 二、实验环境 VC++6.0 三、实验内容 实现短进程优先调度算法(SPF)和时间片轮转调度算法(RR) [提示]: (1) 先来先服务(FCFS)调度算法 原理:每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执行。该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。 将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理,是一种最普遍和最简单的方法。它优先考虑在系统中等待时间最长的作业,而不管要求运行时间的长短。 按照就绪进程进入就绪队列的先后次序进行调度,简单易实现,利于长进程,CPU繁忙型作业,不利于短进程,排队时间相对过长。 (2) 时间片轮转调度算法RR

原理:时间片轮转法主要用于进程调度。采用此算法的系统,其程序就绪队列往往按进程到达的时间来排序。进程调度按一定时间片(q)轮番运行各个进程. 进程按到达时间在就绪队列中排队,调度程序每次把CPU分配给就绪队列首进程使用一个时间片,运行完一个时间片释放CPU,排到就绪队列末尾参加下一轮调度,CPU分配给就绪队列的首进程。 固定时间片轮转法: 1 所有就绪进程按 FCFS 规则排队。 2 处理机总是分配给就绪队列的队首进程。 3 如果运行的进程用完时间片,则系统就把该进程送回就绪队列的队尾,重新排队。 4 因等待某事件而阻塞的进程送到阻塞队列。 5 系统把被唤醒的进程送到就绪队列的队尾。 可变时间片轮转法: 1 进程状态的转换方法同固定时间片轮转法。 2 响应时间固定,时间片的长短依据进程数量的多少由T = N × ( q + t )给出的关系调整。 3 根据进程优先级的高低进一步调整时间片,优先级越高的进程,分配的时间片越长。 多就绪队列轮转法: (3) 算法类型 (4)模拟程序可由两部分组成,先来先服务(FCFS)调度算法,时间片轮转。流程图如下:

实验三进程调度蔡凤武

实验三进程调度蔡凤武 进程调度实验目的 1、理解有关进程控制块、进程队列的概念。 2、掌握进程优先权调度算法和时间片轮转调度算法的处理逻辑。 实验内容与基本要求 1、设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转调度算法。 2、建立进程就绪队列。 3、编制两种进程调度算法:优先权调度算法和时间片轮转调度算法。 实验报告内容一.优先权调度算法和时间片轮转调度算法原理。对于优先权调度算法,其关键是在于是采用静态优先权还是动态优先权,以及如何确定进程的优先权。静态优先权是在创建进程是确定的,并且规定它在进程的整个运行期间保持不变。动态优先权要配合抢占调度方式使用,它是指在创建进程时所赋予的优先权,可以随着进程的推进而发生改变,以便获得更好的调度性能。在就绪队列中等待调度的进程,可以随着等待时间的增加,其优先权也以某个速率增加。因此,对于优先权初值很低的进程,在等待足够时间后,其优先权也可能升为最高,从而获得调度,占用处理器并执行。对已时间片轮转调度算法,系统将所

有的就绪进程按进路就绪队列的先后次序排列。每次调度时把CPU 分配给队首进程,让其执行一个时间片,当时间片用完,由计时器发出时钟中断,调度程序则暂停改程序的执行,使其退出处理器,并将它送人就绪队的末尾,等待下一轮调度执行。然后,把cpu分配给就绪队列中新的队首进程,同时让它执行一个时间片。二.程序流程图。结束就绪队列为空吗三.程序及注释。 #include #include #include #include #include #include #define P_NUM5#define P_TIME50 enum st { ready, execute, block, finish};//状态定义进程//struct pcb{ char name[4];//进程名字// int priority;//进程优先权// int cputime;//CPU运行时间// int needtime;//进程运行需要的时间// int count;//进程执行次数// int round;//时间片轮转轮次// st process;//进程状态// pcb *next;};//定义进程//pcb *get_process(){ pcb *q; pcb *t; pcb *p; int i=0; cout<<"input name and time"<>q->name; cin>>q->needtime; q->cputime=0; q->priority=P_TIME-q- >needtime; q->process=ready; q->next=NULL; if(i==0) { p=q; t=q; } else { t->next=q; t=q;} i++; } return p;//输入模拟测试的进程名和执行所需的时间,初始设置可模拟5个进程的调度//}void display (pcb *p){ cout<<"name"<<"

操作系统:进程调度实验报告

设计性实验报告 一、实验目的 1.在Linux下用C语言编程模拟优先级进程调度算法和时间片轮转进程调度算法。 2.为了清楚地观察每个进程的调度过程,每次调度程序应将各个进程的情况显示出来。 二、总体设计(设计原理、设计方案及流程等) 1、优先级进程调度算法 采用动态优先级进程调度算法,其基本思想是每次调度总是把处理机分配给优先级最高的进程,同时在运行过程中进程的优先级随着执行或等待的时间而降低或增加。 在该实验中每个进程用一个进程控制块( PCB)表示。进程控制块包含如下信息:进程号,进程名、优先数、需要运行时间、已用CPU时间、进程状态。进程号,名字,优先数,运行的时间,事先人为地指定。每个进程的状态可以是就绪,执行,阻塞或完成4种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。就绪队列中的进程在等待一个时间片后,优先级增1。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时将进程的优先级减1,然后把它插入就绪队列等待CPU。 2、时间片轮转调度算法 采用简单时间片轮转调度算法,其基本思想是:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。如果运行进程用完它的时间片后还未完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。直至所有的进程运行完毕。 三、实验步骤(包括主要步骤、代码分析等) 1.打开linux虚拟机,用vim编辑器打开代码进行修改和调整。用gcc编译器进行编译编译运行首先运行优先级算法,如图所示:

吉林大学计算机系统结构题库第三章

第三章流水线技术 知识点汇总 先行控制、流水线、单功能流水线、多功能流水线、静态流水线、动态流水线、部件级流水线、处理机级流水线、处理机间流水线、线性流水线、非线性流水线、顺序流水线、乱序流水线、时空图、流水线性能评价(吞吐率、加速比、效率)、解决流水线瓶颈问题方法、相关(数据相关、名相关、控制相关)、换名技术、流水线冲突(结构冲突、数据冲突、控制冲突)、流水线互锁机制、定向技术、指令调度、预测分支失败、预测分支成功、延迟分支(从前调度、从失败处调度、从成功处调度)、流水寄存器、3种向量处理方式(横向、纵向、纵横)、链接技术。 简答题 1.流水技术有哪些特点?(答出4个即可)(知识点:流水线) 答:1.将处理过程分解为若干子过程,由专门的功能部件来实现,2各段的时间尽可能相等,3各部件间都有一个缓冲寄存器,4适用于大量重复的时序过程,5需要通过时间和排空时间。 2.什么是静态流水线?什么是动态流水线?(知识点:静态流水线、动态流水线) 答:同一时间段内,多功能流水线中的各段只能按同一种功能的连接方式工作;同一时间段内,多功能流水线中的各段可以按照不同的方式连接同时执行多种功能。 3.什么是单功能流水线?什么是多功能流水线?(知识点:单功能流水线、多功能流水线) 答:只能完成一种固定功能的流水线。流水线的各段可以进行不同的连接,以实现不同的功能。 4.什么是线性流水线?什么是非线性流水线?(知识点:线性流水线、非线性流水线) 答:流水线的各段串行连接,没有反馈回路。流水线中除了有串行的连接外,还有反馈回路。 5.列举3种相关。(知识点:相关) 答:数据相关,名相关,控制相关。 6.流水线中有哪三种冲突?各是什么原因造成的?(知识点:流水线冲突) 答:结构冲突,硬件资源满足不了指令重叠执行的要求;数据冲突,指令在流水线中重叠执行时需要用到前面指令的执行结果;控制冲突,流水线遇到分支指令和其他会改变PC值的指令。 7.选择至少2种解决流水线结构冲突的方法简述。(知识点:结构冲突) 答:流水线停顿一个时钟周期,推迟后面的指令操作。设置相互独立的指令存储器和数据存储器。 8.选择至少2种解决流水线数据冲突的方法简述。(知识点:数据冲突) 答:定向技术,将计算结果从其产生的地方直接送到其他指令需要的地方。通过编译时让编译器重新组织指令顺序来消除冲突。

相关文档
相关文档 最新文档