您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
linux操作系统:进程切换 进程调度 PCB 进程队列 中断过程
 
 
 
   次浏览      
 2024-8-7
编辑推荐:
本文主要介绍了linux操作系统:进程切换 进程调度 PCB 进程队列 中断过程相关内容。 希望对你的学习有帮助。
本文来自于微信公众号Linux开发架构之路,由火龙果软件Linda编辑、推荐。

并发的进程切换

要了解并发进程的切换,首先要清楚知道什么是并发的进程!!

并发的进程最主要的特点就是走走停停的状态,从运行的开始到结束不是一步运行到底的,是走走,然后cup被调度走就停停,等到需要进程继续执行的时候,又可以被分配到cpu资源,然后走走;如此反复,知道进程运行结束!

(单cpu的讨论)如上图的两个进程process1和process2,虚线部分表示进程停止,实线部分表示进程运行,当process1停的时候,process2就运行,此时这个过程就是进程切换。

我们需要关注的两个问题:

1.是什么导致了进程切换?

中断。

2.进程切换要做什么?

进程切换的时机有主动和被动离开cpu;

主动:比如:IO语句,系统调用;

被动:比如:高优先级进程,时间片到期;

进程切换就是和中断很基本一样的方式,而进程之所以能够被切换,也是有中断处理程序在执行,让进程能够切换,所以说中断处理程序也是一个很特殊的中断,它能够让进程发生切换。

总的来说:进程切换就是要执行中断处理程序咯,还有做的事情和中断做的事情。

中断技术

理解上面的图:

当发生某个事件时,意味着进程不能继续执行了,那么cpu就不会为进程服务了;然后引起中断的事件,也就是使得进程不能继续运行的事件,它就会被执行;当中断事件执行完毕后,会返回原程序继续执行,也就是回到进程继续执行;

运行的进程在用户态,而进行中断的事件是在内核态;而中断的过程就是一种陷阱机制,也就是说,从用户态陷入内核态执行内核态的进程,当执行完毕中断事件后,又会回到用户态继续执行原进程。

中断源

进程发生中断的原因是来自什么?

中断分为两种:

一种是外中断(我们通常叫为interruption);外中断特点是异步中断,就是随机中断,它的中断源是不可预知的,即对于进程来说是不知道什么时候会发生中断;

一种是内中断(也就是异常exception);内中断时同步中断,指程序执行过程中发生的中断,不是外部引起的,是程序自身引起的这两种都是中断;

中断的过程

中断的过程:

是从用户态陷入内核态的一个过程:在从用户态陷入内核态之前:会先保存进程上下文的内存信息;

然后再进入内核态,进入内核态要知道中断源是什么,然后处理中断源;

然后处理中断程序结束后,就会选择进程来恢复上下文信息,就继续执行恢复后的进程;

什么是进程上下文的信息呢?

就是该进程的对cpu使用的时间,进程的计算结果等其他和进程的关键的信息,由于这个信息很多,所以用一个抽象的说法,上下文信息,主要是为了中断事件结束后,还能回到原来中断时候的地方继续执行进程。举个例子:比如你家里写作业,有5到题要写,写着一半,你妈妈突然喊你曲吃饭,此时,你就需要去吃饭,而在你的大脑中,会记住你作业做到哪里的位置,这样等吃完饭回来后,你还可以从上次没写完的那个地方开始写作业。你记住写作业写到哪里的位置就是上下文信息啦。

特权指令和非特权指令

特权指令:就是运行在内核态的一些指令:

常见的特权指令有:如下图的;其中我们要讲的进程切换也是运行在内核态的特权指令

cpu怎么知道要执行的指令是特权指令还是非特权指令?

靠的是硬件来完成:硬件中有个个双模式dual mode的bit位:0 表示内核模式,1表示用户模式;

用户态和内核态的模式切换:

中断是从用户态切换到内核态的唯一途径!!!

一旦发生中断,就会有模式切换的过程,就是用户态到内核态的切换!!!

下图:从中断的时刻开始,到中断处理程序的过程的开始中:就是模式切换的过程

进程的切换

一个进程要被切换,肯定是处于运行状态才有资格被切换,进程被切换了意味着进程要离开cpu,离开cup的原因就有两种:一种是主动离开,一种是被动离开;比如主动离开的是执行IO设备啊等其他原因,被动离开的是进程时间片到了等其他原因;那么进程离开cpu就去哪了呢?进程离开cpu就会到等待状态,或者就绪状态。

进程切换和中断有什么关系呢?

进程控制块–PCB

每个进程都有一个PCB,这个PCB我们成为进程控制块,其实就是一个数据结构的代码。这个数据结构的代码保存了进程的控制信息;

对于一个完整的进程来说:是包含PCB和进程的实体(进程实体就是进程运行时候所需要的数据,代码,变量等信息)。

进程在物理内存的存放

进程在物理内存存放并不是连续的存放的,是离散的存放的。

比如一个进程1:包含PCB和stack heap data text等信息,都是离散的在内存存放的;

而离散存放的目的为了减少连续存放带来内存碎片等问题;

同时离散存放也带来的问题是:必须要有一个表来记录这些进程离散的信息,来找到一个进程的实体;(者都是内存管理的问题,以后再讲)

进程队列

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

是通过进程队列的数据结构管理的,进程队列会有就绪态的队列,和等待态的队列,一般来说,等待态的队列分为很多种,这是为方便管理每种不同的设备而设置的。

对于进程队列来说:管理的进程都是进程的PCB,而不是整个进程的上下文(PCB+进程实体),

这是因为进程的PCB已经包含了进程的其他信息,可以通过PCB找到进程实体的信息,而且进程的PCB相对进程实体来说,也比较小,而进程实体可能会很大,频繁的入队出队,会消耗大量的cpu资源管理,这样并不好。

进程调度

进程调度,简单的说就是进程在各个进程队列中跑来跑去,被操作系统调去就绪队列呀,或者等待队列,或者运行态,或者运行结束!

比如一个新创建的进程,一开始就会被调度到就绪队列中,然后cpu就会在某个时间调度该进程进入运行态,如果是一直运行结束就结束进程了,如果是发生中断那么又会被调度到等待队列或者就绪队列中。

   
次浏览       
相关文章

一文了解汽车嵌入式AUTOSAR架构
嵌入式Linux系统移植的四大步骤
嵌入式中设计模式的艺术
嵌入式软件架构设计 模块化 & 分层设计
相关文档

企点嵌入式PHP的探索实践
ARM与STM简介
ARM架构详解
华为鸿蒙深度研究
相关课程

嵌入式C高质量编程
嵌入式操作系统组件及BSP裁剪与测试
基于VxWorks的嵌入式开发、调试与测试
嵌入式单元测试最佳实践

最新活动计划
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
LLM大模型应用与项目构建 12-26[特惠]
UML和EA进行系统分析设计 12-20[线上]
数据建模方法与工具 12-3[北京]
SysML建模专家 1-16[北京]
 
 
最新文章
基于FPGA的异构计算在多媒体中的应用
深入Linux内核架构——简介与概述
Linux内核系统架构介绍
浅析嵌入式C优化技巧
进程间通信(IPC)介绍
最新课程
嵌入式Linux驱动开发
代码整洁之道-态度、技艺与习惯
嵌入式软件测试
嵌入式C高质量编程
嵌入式软件可靠性设计
成功案例
某军工所 嵌入式软件架构
中航工业某研究所 嵌入式软件开发指南
某轨道交通 嵌入式软件高级设计实践
深圳 嵌入式软件架构设计—高级实践
某企业 基于IPD的嵌入式软件开发
更多...