LINUX 操作系统 第4章 进程调度

合集下载

进程调度

进程调度

进程、线程与处理器的调度(1)进程的概念(Dijkstra)进程是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和调度的基本单位。

(2)进程与程序的联系与区别①程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。

而进程是程序在处理机上的一次执行过程,它是一个动态的概念。

②程序可以作为一种软件资料长期存在,而进程是有一定生命期的。

程序是永久的,进程是暂时的。

注:程序可看作一个菜谱,而进程则是按照菜谱进行烹调的过程。

③进程和程序组成不同:进程是由程序、数据和进程控制块三部分组成的。

④进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。

(3)进程的特征动态性:进程是程序的执行,同时进程有生命周期。

并发性:多个进程可同存于内存中,能在一段时间内同时执行。

独立性:资源分配和调度的基本单位。

制约性:并发进程间存在制约关系,造成程序执行速度不可预测性,必须对进程的并发执行次序、相对执行速度加以协调。

结构特征:进程由程序块、数据块、进程控制块三部分组成。

进程的三种基本状态:(1)运行态(running)当进程得到处理机,其执行程序正在处理机上运行时的状态称为运行状态。

在单CPU系统中,任何时刻最多只有一个进程处于运行状态。

在多CPU系统中,处于运行状态的进程数最多为处理机的数目。

(2)就绪状态(ready)当一个进程已经准备就绪,一旦得到CPU,就可立即运行,这时进程所处的状态称为就绪状态。

系统中有一个就绪进程队列,处于就绪状态进程按某种调度策略存在于该队列中。

(3)等待态(阻塞态)(Wait / Blocked )若一个进程正等待着某一事件发生(如等待输入输出操作的完成)而暂时停止执行的状态称为等待状态。

处于等待状态的进程不具备运行的条件,即使给它CPU,也无法执行。

系统中有几个等待进程队列(按等待的事件组成相应的等待队列)。

华东理工大学《操作系统》第四章处理机调度

华东理工大学《操作系统》第四章处理机调度

10
(4)基于优先级调度算法:静态法和动态法
作业调度程序根据JCB优先数决定进入内存的次序,系统开销小
(a)静态优先级(外部优先数)
用户提交作业时,根据急迫程度规定适当的优先数 系统或操作员根据作业类型及要求资源情况指定。
(b)由系统动态计算优先级(内部优先数) 例如:可按如下公式计算作业的优先数:
要求: (1)提供必要的调度信息 就绪时间、开始时限、完成时限、处理时间、资源要求、优先级 (2)快速的外部中断响应能力 (3)调度方式 硬实时任务广泛采用抢占调度方式 有些软实时任务也可用非抢占方式 (4)快速任务分派,进程切换

1.实时系统的特点
25
2.实时调度算法
1)时间片轮转法
仅能获得秒级的响应时间,只适用于一般实时信息处理,不能 用于要求严格的实时控制系统中。
5
1)调度算法性能的衡量
调度算法的确定基于一定因素,一般系统的设计 目标有:
(1)每天运行尽能多的作业; (2)使CPU保持忙; (3)使I/O保持忙; 常用指标: 周转时间:指将一个作业提交给计算机系统后到该 作业的结果返回给用户所需时间。 吞吐率:在单位时间内,一个计算机系统所完成的 总工作量。 响应时间:从用户向计算机发出一个命令到系统把 相应结果返回所需时间。 6 设备利用率:输入输出设备的使用情况。 (4)对所有作业公平合理。
优先数
0 时间片S1
PCB队列
1 时间片S2 ……
PCB队列
j 时间片Sj
PCB队列
……
PCB队列
i-1 时间片Si-1
i
时间片Si
PCB队列
多级反馈队列
24
注:时间片S1<S2<S3< …… <Si

操作系统原理-进程调度

操作系统原理-进程调度
教学重点
6.3.1 进程调度的功能
6.3.1 进程调度的功能
进程调度的功能 根据一定的调度策略或指标遍历所有的就绪进程, 从中选择一个最合适的进程。 选择该进程的过程实际是用户按特定指标对所有进 程进行排队的过程。
6.3.2 进程调度的时机
6.3.2 进程调度的时机
1.时钟中断 时钟中断是最频繁且周期性地引发进程调度的事件之一。
作业
大小 进入时刻 开始时刻 结束时刻
周转 时间
带权周 转时间
平均周 转时间
平均带权周 转时间
A 20
0
0
20
20 1.00
B 40
10
50
90
80 2.00
C 30
15
20
50
35 1.17 43.75
2.04
D 10
60
90
100
40 4.00
6.4.3 响应比高者优先调度算法
6.4.3 响应比高者优先调度算法
6.3.3 进程调度的方式
进程调度的方式
非抢占方式又称非剥夺式调度
它是指进程调度程序一旦把CPU分配给某进程后,该进程 可以一直运行下去,在它的时间片用完之前,或任务完成 之前,或因为I/O请求被阻塞之前,决不允许其他进程抢走 它的CPU。
抢占方式又称剥夺式调度
抢占方式允许进程调度程序根据某种策略终止当前正在运 行的进程,将其移入就绪队列,再根据某种调度算法选择 另一个进程投入运行。
6.4.1 先来先服务调度算法
先来先服务(First Come First Service,FCFS)
例子:假设系统中有4个作业先后投入,它们的作业 大小和进入时间如表(作业大小和时间单位分钟)

进程的调度名词解释

进程的调度名词解释

进程的调度名词解释进程的调度,这听起来有点像安排一群小蚂蚁干活儿的计划呢。

你看啊,在计算机这个大“蚂蚁窝”里,有好多好多的进程,就像一群忙忙碌碌的小蚂蚁。

进程呢,就是正在运行中的程序的实例。

打个比方,就好比你打开了好几个软件,每个软件在电脑里运行着的状态就是一个进程。

那这么多进程同时存在,电脑怎么知道该让哪个进程先干活儿,哪个进程后干活儿呢?这就轮到进程的调度上场啦。

进程的调度就像是一个超级厉害的大管家。

这个大管家得公平合理地安排每个进程使用计算机资源的时间。

计算机资源是啥呢?就像是小蚂蚁们干活儿需要的工具和场地,比如说CPU(中央处理器)、内存这些。

要是没有这个调度的大管家,那这些进程就会乱成一团,就像一群小蚂蚁没有指挥,到处乱跑,都抢着用工具和场地,结果啥活儿都干不好。

那这个调度大管家是怎么安排的呢?它有一套自己的办法。

有的时候,它按照先来后到的顺序,先到的进程先使用资源,这就像是在公交车站排队上车一样,谁先来的谁先上。

这种方式很公平,大家也都能接受。

还有的时候呢,它会根据进程的重要性来安排。

比如说,有些进程是和电脑系统的关键操作有关的,就像守护蚁巢的重要蚂蚁一样,那这个进程就得优先使用资源,不然整个电脑系统这个“蚁巢”就可能出问题啦。

再说说这个调度大管家安排资源的时间吧。

它不能让一个进程一直占用着资源,就像你不能让一个人在游乐场上一直玩一个项目,其他人都干等着呀。

所以它会给每个进程分配一个时间片。

这个时间片就像是每个人在游乐场上玩一个项目的规定时间。

时间一到,就得把资源让出来,给其他进程一个机会。

进程的调度还得考虑好多其他的情况呢。

比如说,有些进程可能在等待某些东西,就像小蚂蚁在等食物运过来才能继续干活儿。

这时候,调度大管家就会先把资源分配给那些已经准备好干活儿的进程。

又比如说,有的进程特别耗费资源,就像特别能吃的大蚂蚁,那调度大管家就得小心安排,不能让它把所有资源都占了,不然其他进程就没法干活儿了。

操作系统第4章答案(上)

操作系统第4章答案(上)

赵盈盈2011210593 第四章作业上1. 解释名词:程序的顺序执行;程序的并发执行。

答:程序的顺序执行:一个具有独立功能的程序独占cpu直到得到最终结果的进程。

程序的并发执行:两个或两个以上程序在计算机系统中同时处于一开始执行且尚未结束的状态。

2. 什么是进程?进程与程序的主要区别是什么?答:进程:进程是具有独立功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源分配和调度的独立单元。

进程和程序的区别:●程序是静态的,进程是动态的●进程有程序和数据两部分组成●进程具有生命周期,有诞生和消亡,是短暂的;而程序是相对长久的●进程能更真实的描述并发,而程序不行。

●一个进程可以对应多个程序。

一个程序可以对应多个进程●进程可以创建其他进程,程序不能3. 图1所示,设一誊抄程序,将f中记录序列正确誊抄到g中,这一程序由get、copy、put三个程序段组成,它们分别负责获得记录、复制记录、输出记录。

请指出这三个程序段对f中的m个记录进行处理时各种操作的先后次序,并画出誊抄此记录序列的先后次序图(假设f中有1,2,…,m个记录,s,t为设置在主存中的软件缓冲区,每次只能装一个记录)。

图1 改进后的誊抄过程答:4. 进程有哪几种基本状态?试画出进程状态变迁图,并标明发生变迁的可能原因。

答:进程基本状态:运行、就绪、等待就绪到运行:调度程序选择一个新的进程运行 运行到就绪:运行进程用完了时间片或运行进程被中断,因为一个高优先级的进程处于就绪状态运行到等待:OS 尚未完成服务或对一资源的访问尚不能进行或初始化I/O 且必须等待结果 或等待某一进程提供输入(IPC )等待到就绪:当所有的事件发生时5. 什么是进程控制块?它有什么作用?答:PCB :为了便于系统控制和描述进程的活动过程,在操作系统核心中为进程定义的一个专门的数据结构。

作用:系统用PCB 来控制和管理进程的调用,PCB 也是系统感知进程存在的唯一标志GCGPCP G… CP6. n 个并发进程共用一个公共变量Q ,写出用信号灯的p 、v 操作实现n 个进程互斥时的程序描述,并说明信号灯值的取值范围。

linux调度器源码分析-运行(四)

linux调度器源码分析-运行(四)

linux调度器源码分析-运⾏(四)本⽂为原创,转载请注明:引⾔ 之前的⽂章已经将调度器的数据结构、初始化、加⼊进程都进⾏了分析,这篇⽂章将主要说明调度器是如何在程序稳定运⾏的情况下进⾏进程调度的。

系统定时器 因为我们主要讲解的是调度器,⽽会涉及到⼀些系统定时器的知识,这⾥我们简单讲解⼀下内核中定时器是如何组织,⼜是如何通过通过定时器实现了调度器的间隔调度。

⾸先我们先看⼀下内核定时器的框架 在内核中,会使⽤strut clock_event_device结构描述硬件上的定时器,每个硬件定时器都有其⾃⼰的精度,会根据精度每隔⼀段时间产⽣⼀个时钟中断。

⽽系统会让每个CPU使⽤⼀个tick_device描述系统当前使⽤的硬件定时器(因为每个CPU都有其⾃⼰的运⾏队列),通过tick_device所使⽤的硬件时钟中断进⾏时钟滴答(jiffies)的累加(只会有⼀个CPU负责这件事),并且在中断中也会调⽤调度器,⽽我们在驱动中常⽤的低精度定时器就是通过判断jiffies实现的。

⽽当使⽤⾼精度定时器(hrtimer)时,情况则不⼀样,hrtimer会⽣成⼀个普通的⾼精度定时器,在这个定时器中回调函数是调度器,其设置的间隔时间同时钟滴答⼀样。

所以在系统中,每⼀次时钟滴答都会使调度器判断⼀次是否需要进⾏调度。

时钟中断 当时钟发⽣中断时,⾸先会调⽤的是tick_handle_periodic()函数,在此函数中⼜主要执⾏tick_periodic()函数进⾏操作。

我们先看⼀下tick_handle_periodic()函数: 1void tick_handle_periodic(struct clock_event_device *dev)2 {3/* 获取当前CPU */4int cpu = smp_processor_id();5/* 获取下次时钟中断执⾏时间 */6 ktime_t next = dev->next_event;78 tick_periodic(cpu);910/* 如果是周期触发模式,直接返回 */11if (dev->mode != CLOCK_EVT_MODE_ONESHOT)12return;1314/* 为了防⽌当该函数被调⽤时,clock_event_device中的计时实际上已经经过了不⽌⼀个tick周期,这时候,tick_periodic可能被多次调⽤,使得jiffies和时间可以被正确地更新。

操作系统:作业调度和进程调度的理解

操作系统:作业调度和进程调度的理解

操作系统:作业调度和进程调度的理解操作系统:作业调度和进程调度的理解含义:作业调度:是指作业从外存调⼊到内存的过程进程调度:是指进程从内存到分配cpu执⾏的过程理解:当我们打开两个程序,不妨设为程序A和程序B,⾸先这两个程序都是在外存(硬盘)上存储的,想要打开并运⾏这两个程序就必须加载到内存上,但这两个程序加载到内存上的顺序是什么呢?是先加载A呢还是先加载B呢?这个时候就涉及到作业调度了,作业调度第⼀种就是先来先服务(FCFS),即先打开的哪个程序,就先在内存上加载哪个程序;第⼆种就是短作业优先调度,即如果程序A⽐较⼤,可能是某个⼤型游戏,但是程序B⽐较⼩,可能只是打开个图⽚,假设必须要等这个⼤型游戏打开了才能打开这个图⽚,这显然图⽚等待的时间太长了,这时就涉及到了短作业优先调度,即系统会先打开图⽚,再打开游戏;第三种就是作业优先权调度,系统为作业分配优先权,优先等级⾼的就先调⼊内存,低的则等待;第四种就是⾼响应⽐调度,假设还有⼀个程序C,⽽且程序C还要在A之前打开,但是C的优先级低于A和B,如果按照优先级调度,那么C就会等很长⼀段时间,这显然对C是不公平的,所以这时就涉及到了⾼响应⽐优先,响应⽐=1+作业等待时间/执⾏时间,即:等待的时间越长,响应⽐就越⾼,就会提前执⾏。

当通过作业调度进⼊到内存后,这些作业就变成了⼀个个进程,但是要想分得CPU进⾏执⾏,还需进程调度算法,即还需要再分配⼀个顺序,来确定到底谁先分得CPU,进程调度算法有:优先权调度、短作业优先等,即通过每个进程的优先权或者作业的长短来确定分得CPU 的执⾏顺序,顺序分好以后,就该真正的执⾏了,这时采⽤时间⽚原则,即:所有的进程都分⼀个相同的时间⽚,执⾏完时间⽚后,如果没有运⾏完,到队尾等待,不断重复,直到所有程序都执⾏完;当然,这种执⾏⽅式有缺点,就是轮换的次数太多了,费时间,所以有了反馈排队调度,这种算法是先分了好⼏个等级队列,最⾼等级的队列时间⽚最短,最低等级的时间⽚最长,假设有1、2、3、4四个队列,有程序A、B、C需要被执⾏,那么A、B、C先分别执⾏⼀个时间⽚,假如C在这⼀个时间⽚内执⾏完了,那就可以直接⾛了,⽽A和B就换到第2个队列中继续执⾏⼀个第2个队列的时间⽚,就此类推,直到全部执⾏完。

进程的调度实验报告(3篇)

进程的调度实验报告(3篇)

第1篇一、实验目的通过本次实验,加深对操作系统进程调度原理的理解,掌握先来先服务(FCFS)、时间片轮转(RR)和动态优先级(DP)三种常见调度算法的实现,并能够分析这些算法的优缺点,提高程序设计能力。

二、实验环境- 编程语言:C语言- 操作系统:Linux- 编译器:GCC三、实验内容本实验主要实现以下内容:1. 定义进程控制块(PCB)结构体,包含进程名、到达时间、服务时间、优先级、状态等信息。

2. 实现三种调度算法:FCFS、RR和DP。

3. 创建一个进程队列,用于存储所有进程。

4. 实现调度函数,根据所选算法选择下一个执行的进程。

5. 模拟进程执行过程,打印进程执行状态和就绪队列。

四、实验步骤1. 定义PCB结构体:```ctypedef struct PCB {char processName[10];int arrivalTime;int serviceTime;int priority;int usedTime;int state; // 0: 等待,1: 运行,2: 完成} PCB;```2. 创建进程队列:```cPCB processes[MAX_PROCESSES]; // 假设最多有MAX_PROCESSES个进程int processCount = 0; // 实际进程数量```3. 实现三种调度算法:(1)FCFS调度算法:```cvoid fcfsScheduling() {int i, j;for (i = 0; i < processCount; i++) {processes[i].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[i].processName); processes[i].usedTime++;if (processes[i].usedTime == processes[i].serviceTime) { processes[i].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[i].processName); }for (j = i + 1; j < processCount; j++) {processes[j].arrivalTime--;}}}```(2)RR调度算法:```cvoid rrScheduling() {int i, j, quantum = 1; // 时间片for (i = 0; i < processCount; i++) {processes[i].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[i].processName); processes[i].usedTime++;processes[i].serviceTime--;if (processes[i].serviceTime <= 0) {processes[i].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[i].processName); } else {processes[i].arrivalTime++;}for (j = i + 1; j < processCount; j++) {processes[j].arrivalTime--;}}}```(3)DP调度算法:```cvoid dpScheduling() {int i, j, minPriority = MAX_PRIORITY;int minIndex = -1;for (i = 0; i < processCount; i++) {if (processes[i].arrivalTime <= 0 && processes[i].priority < minPriority) {minPriority = processes[i].priority;minIndex = i;}}if (minIndex != -1) {processes[minIndex].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[minIndex].processName);processes[minIndex].usedTime++;processes[minIndex].priority--;processes[minIndex].serviceTime--;if (processes[minIndex].serviceTime <= 0) {processes[minIndex].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[minIndex].processName); }}}```4. 模拟进程执行过程:```cvoid simulateProcess() {printf("请选择调度算法(1:FCFS,2:RR,3:DP):");int choice;scanf("%d", &choice);switch (choice) {case 1:fcfsScheduling();break;case 2:rrScheduling();break;case 3:dpScheduling();break;default:printf("无效的调度算法选择。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档