进程调度的基本过程

1、进程

1.1、什么是进程

每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程是操作系统进行资源分配的基本单位。

1.2、进程的结构

控制块(PCB): Process Control Block, 进程唯一标识;

数据段:存放原始数据、中间数据;

程序段:存放在文本区域,可被多个进程共享;

1.3、进程的特征

动态性:由创建而生,由撤销而亡;

并发性:多个进程同时运行;

独立性:独立资源分配;

异步性:相互独立、互不干扰;

2、进程管理

2.1、操作系统是如何管理进程的呢?

1.先描述一个进程

     首先我要给大家介绍一下 "PCB"(进程控制块)~注意并不是那个参见的PCB板(这个是硬件中的),在操作系统里面主要是通过c/c++来实现相关属性,此处描述其实就是用的c语言中的“结构体” (也就和Java中的类差不多). 操作系统中描述进程的这个结构体,称为 'PCB'

2.再组织若干进程

就是使用双向链表来把每个进程的PCB给串起来~

注意这里指的是在Linux这个系统为例.

所谓的“创建进程”,就是先创建出PCB,然后把PCB加到双向链表中。
所谓的“销毁进程”,就是找到链表上的PCB,并且从链表上删除。
所谓的“查看任务管理器”,就是遍历链表~~

2.2、进程控制块抽象(PCB  Process Control Block)

计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。在Java语⾔中,我们可以通过类/对象来描述这⼀特征。

pid (进程id):

  就是进程的身份标识(就像每个人的身份证号一样),一个主机, 同一时刻, 这些进程的 pid 是唯一的, 可以通过 pid 来区分一个进程,可以在任务管理器上查看 pid。

3、进程的调度

3.1、进程调度的任务

1. 保存处理机的现场信息。

2. 按某种算法选取进程。

3. 把处理器分配给进程。

3.2、进程调动的机制

为了实现进程调度,在进程调度机制中,应具有如下三个基本部分,

排队器:为了提高进程调度的效率,应事先将系统中所有就绪进程按照一定的策略排成一个或多个队列,以便调度程序可以最快找到它。

分配器:分配器一依据进程调度信息所选定的进程,将其从就绪队列取出,然后进行从分配器到选出的新进程的上下文切换,在将处理器分配给新进程。

上下文切换器:对上下文切换时,会保留当前进程的上下文,即把当前进程的寄存器内容保存到进程控制块内的相应单元,再装入新进程的上下文,以便程序运行。

3.3、进程调度的基本过程

  1. 进程创建:当新的进程被创建时,它会被添加到待调度的进程队列中。
  2. 就绪队列:所有准备好执行的进程都被放置在就绪队列中。
  3. 调度算法:根据特定的调度算法,选择一个进程来执行。
  4. 选择进程:系统根据算法从就绪队列中选取一个进程。
  5. 上下文切换:将当前运行的进程的状态保存下来,并加载所选进程的上下文。
  6. 执行进程:被选中的进程开始执行。
  7. 进程结束:当进程完成或因为其他原因终止时,从系统中移除。

3.4、进程调度的目标

高效利用 CPU 资源,确保进程能够公平地获得执行机会。

提供良好的响应性能,满足用户的需求。

适应不同的进程特性和系统需求。

3.5、内存分配—— 内存管理

操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰

3.6、进程间的通信

       进程是操作系统进⾏资源分配的最⼩单位,这意味着各个进程互相之间是⽆法感受到对⽅
存在的,这就是操作系统抽象出进程这⼀概念的初衷,这样便带来了进程之间互相具备”隔离性
(Isolation)“
。但现代的应⽤,要完成⼀个复杂的业务需求,往往⽆法通过⼀个进程独⽴完成,总是需要进程和进程进⾏配合地达到应⽤的⽬的,如此,进程之间就需要有进⾏“信息交换“的需求。进程间通信的需求就应运⽽⽣。

⽬前,主流操作系统提供的进程通信机制有如下:
1. 管道
2. 共享内存
3. ⽂件
4. ⽹络
5. 信号量
6. 信号

     其中,⽹络是⼀种相对特殊的IPC机制,它除了⽀持同主机两个进程间通信,还⽀持同⼀⽹络内部⾮同⼀主机上的进程间进⾏通信。


4、常见的进程调度算法

4.1、先来先服务调度算法(FCFS)

先来先服务调度算法 在进程调度中采用FCFS算法时,每次调度都从就绪队列中选取一个最先进入该队列的进程,为他分配处理机。直到该进程运行完成或是发生某事件致使它阻塞后,进程调度程序再次开始调度。

算法优点:易于理解且实现简单,只需要一个队列(FIFO),且相当公平。

算法缺点:比较有利于长进程,而不利于短进程。会产生饥饿现象。

4.2、短作业(进程)优先调度算法(SJF)

SJF算法已作业时间长度来计算优先级,时间越短,优先级越高。

调度程序会在就绪队列中选择运行时间最短的进程优先为他们分配处理机,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。

算法优点:缩短作业(进程)的平均周转时间,提高系统吞吐量。

算法缺点:有利于短作业(进程),对长作业(进程)非常不利。

4.3、优先级调度算法

在优先级调度算法中,基于进程的紧迫程度,由外部赋予进程的优先级,进程调度时根据该优先级进行调度。 调度程序会在就绪队列中选择若干优先级最高的进程优先分配处理机,直到他们运行完成或是发生某事件而阻塞再次调度。

优先级调度算法中又分两种方式:

抢占式优先级调度算法:是指在进程运行时,一旦出现比他优先级高的进程,进程调度程序将立即停止运行当前进程,而将处理机分配给优先级高的进程。

非抢占式优先级调度算法:当处理机分配给当前优先级最高的进程后,将一直运行该进程直到该进程运行结束,或是发生某事件而阻塞,再次重新调度。

4.4、高响应比优先调度算法

在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权,并使作业的优先级随着等待时间的增加而以速率a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。

4.5、基于时间片的轮转调度算法

在分时系统中,最简单也最常用的时基于时间片的轮转调度算法。该算法采取了非常公平的处理机分配方式,即让就绪队列上的每个进程每次仅运行一个时间片,如果就绪队列上有n个进程,则每个进程每次大约可获得1/n的处理及运行时间。

在该调度算法中,进程何时进行切换:

1. 若一个时间片未用完,正在运行的进程便已完成,就立即激活调度程序,将她从就绪队列中删除,在调度就绪队列中队首的进程运行,并且启动一个新的时间片。

2. 在一个时间片用完时 计时器中断处理程序被激活。如果出现尚未运行完毕,调度程序将把他送往就绪队列的队尾。

怎样确定时间片的大小:

- 系统对响应时间的要求

- 就绪队列中进程的数目

- 系统的处理能力

算法优点:时间片轮转调度算法的特点是简单易行、平均响应时间短。

算法缺点:不利于处理紧急作业。在时间片轮转算法中,时间片的大小对系统性能的影响很大,因此时间片的大小应选择恰当。

  • 36
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry灬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值