进程调度的过程

进程是操作系统中资源分配的基本单位,由PCB(进程控制块)进行描述和组织。PCB包含进程身份、内存指针和文件描述符表等信息。当进程数量超过CPU核心数时,操作系统通过调度算法公平分配执行机会。调度考虑因素包括优先级、状态、记账信息和上下文。此外,虚拟地址空间解决了进程内存访问的安全问题。
摘要由CSDN通过智能技术生成

进程(process)/任务(task):

一个程序运行起来,完成一系列任务的模样。

一个可执行文件是“静态”的,当我们双击运行的时候,操作系统就会把这个可执行文件的关键信息加载到内存中,并且开始运行里面的代码,就形成了一个进程。同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

在一个操作系统上,同时跑着这么多的进程,就需要进行管理:管理分为两步,先描述,使用一个类或者结构体,把这个东西有啥特征,都表示出来;再组织,使用一个数据结构,把很多个这样的对象或者结构体给整理到一起。

管理的方式就是使用PCB进程控制块:

PCB(进程控制块)就是一个结构体,这个结构体里包含了一些表示进程的核心信息。

操作系统内核中,就把若干PCB串成了一个双向链表。

PCB中包含的信息:

1.进程的身份识别pid

2.内存指针——操作系统要把一些必要的数据加载到内存中,有些是要运行的指令(代码),有些是运行时依赖的数据(全局变量),内存指针就描述了该进程的内存中哪些部分是指令,哪些部分是数据。

3.文件描述符表——表示了当前进程都打开了哪些文件,在代码中打开一个文件fopen,就会在进程的文件描述符表(顺序表)里给这个文件分配一个表项,每个元素就代表一个打开的文件,对应的数组下标就是文件描述符。

总结:以上三点描述了进程持有哪些系统资源,也认为进程是操作系统中“资源分配”的基本单位。

进程的调度:

为什么会存在进程的调度问题?

当前的计算机,CPU是有限的,但是进程数量是比较多的,经常会出现“进程多,核心数少”的情况,操作系统是要做到尽可能的公平,让每一个进程都有运行的机会,所以就需要进行调度。

调度的方法:

 

用来实现进程的几个的关键的属性:

1.进程的优先级

2.进程的状态

3.进程的记账信息

4.进程的上下文

进程的虚拟地址空间:

为什么会存在进程的虚拟地址空间?

 对于每一个进程使用内存时,可能会存在指针解引用出错,导致指针指向非法的内存地址

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux进程调度过程是指操作系统在多个进程之间分配CPU时间片的过程。调度过程主要包括进程的选择和CPU时间片的分配。 在Linux中,进程调度采用抢占式调度方式,即操作系统可以在任何时候中断正在运行的进程,并将CPU分配给其他进程。进程调度的主要目的是提高系统的性能和响应速度,同时保证公平性和稳定性。 Linux进程调度过程包括以下几个步骤: 1. 选择就绪队列中的进程:就绪队列是指已经准备好运行的进程队列。操作系统会从就绪队列中选择一个优先级最高的进程进行调度。 2. 分配CPU时间片:操作系统会为选中的进程分配一个时间片,通常为几毫秒到几十毫秒不等。如果进程在时间片结束前没有完成任务,则操作系统会将CPU分配给其他进程。 3. 运行进程:操作系统将CPU分配给选中的进程,进程开始执行任务。 4. 中断进程:如果进程在运行过程中发生了中断,如IO操作或者信号处理等,操作系统会中断进程的执行,并将CPU分配给其他进程。 5. 将进程放回就绪队列:当进程的时间片用完或者被中断时,操作系统会将进程放回就绪队列,等待下一次调度。 总之,Linux进程调度过程是一个动态的过程,操作系统会根据进程的优先级和CPU的使用情况,不断地进行调度,以保证系统的性能和稳定性。 ### 回答2: Linux进程调度过程主要分为三个部分:优先级调度、时间片轮转和实时调度。 1. 优先级调度 优先级调度是针对非实时进程(普通进程)的调度方式。Linux中将优先级分为0~139个等级,其中0~99为实时优先级,100~139为普通优先级。优先级越高,调度器会越先让这个进程执行。如果优先级相同,则采用时间片轮转的方式进行调度。 2. 时间片轮转 时间片轮转是针对普通进程的一种调度方式,主要思想是为每个任务分配一个时间片段,当时间片用完后,将任务放回就绪队列,并分配下一个任务。调度器会周期性地给每个进程分配一段时间。对于多个优先级相同的进程,采用轮转方式分配时间片。 3. 实时调度 实时调度是针对实时进程的一种调度方式。实时进程通常对时间敏感,需要保证实时性,而时间片轮转无法满足这种要求。实时调度主要分为以下两种: (1)基于优先级的实时调度:与普通进程调度类似,采用优先级调度的方式。不同之处是所有的实时进程都是具有相同优先级的。 (2)基于期限的实时调度:每个实时进程有一个期限(deadline),即完成任务的最后时间,而这个期限是固定的,无法改变。调度器会优先处理剩余时间最短的任务。如果到期限时任务没有完成,则会被取消。 总的来说,Linux进程调度过程是一个复杂的流程,既要考虑非实时进程的调度,也要考虑实时进程的调度,需要根据不同的任务类型和优先级进行合理的分配和调度,以保证系统的稳定性和实时性。 ### 回答3: 在 Linux 中,进程调度是内核中非常重要的组成部分。Linux 采用时间片轮转和优先级两种基本的进程调度算法,其中时间片轮转算法是最主要的调度方式。下面重要步骤: 1. 进程调度队列 Linux 内核中将进程存放在 Ready Queue、Wait Queue 和 Sleep Queue 中。其中,进程在等待资源(如等待 I/O 操作)时,会被放入 Wait Queue 中,并且会被阻塞挂起。而 Sleep Queue 则是处理睡眠进程的队列,这些进程通常是因为等待某种事件而被挂起的。 Ready Queue 是最关键的队列,它存放了所有可以运行的进程。这个队列中的进程通常以循环链表的形式被连接起来。 2. 时间片轮转调度 时间片轮转调度算法是 Linux 中的主要调度算法。它首先通过设置一个时间片,为每个进程分配一定的 CPU 时间,然后在这段时间内轮流执行这些进程。当一个进程已经用完了它分配的时间片后,它会被重新放入 Ready Queue 的队尾,等待下一个时间片继续执行。 需要注意的是,在轮流执行进程时,如果一个进程已经完成了它的任务或者等待某个事件的返回,那么它就会从 Ready Queue 中移除,释放 CPU ,等待下一个任务的分配。 3. 优先级调度 Linux 内核中实现了两种不同的优先级调度方法:静态优先级和动态优先级。静态优先级是在进程创建时即被确定的,动态优先级则可以根据进程实际运行情况进行调整。 在 Linux 中,为了避免高优先级进程“饥饿”现象,可以针对低优先级进程设置抢占式调度策略,以保障所有进程都能够被公平地分配 CPU 时间。 总而言之,Linux 的进程调度算法遵循时间片轮转和优先级调度两种方式,以此保证进程可以在合理的时间内被分配到 CPU 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值