1️⃣ 进程的概念
🌟进程的概念:
- 进程就是程序的一次执行活动,或者说进程是执行中的程序;他是一种数据结构
- 进程是一个程序及其数据再处理机上顺序执行时所发生的的活动;
- 进程时系统进行资源分配和调度的一个独立单位,也是操作系统中能够分配和管理资源调度最小单位;
而且再现在的操作系统中,用户是以进程方式占用系统资源
🌟 为什么要引入进程?
因为进程可以使我们可以直观的了解看到程序的运行过程,它描述了程序动态执行过程;
🌟操作系统负责什么?
创建进程、为进程分配资源、调度进程占用处理机等
- 多任务处理:进程使操作系统可以同时运行多个程序,每个程序都作为一个独立的进程执行。
- 资源隔离:每个进程都拥有独立的内存空间,进程和进程之间不会相互影响
- 并发执行:多个进程可以并发执行,提高了硬件资源利用,但是也带来了额外的空间和时间开销
- 支持多用户:用户是以进程方式执行,那么多个用户可以视为多个进程
- 提高系统可管理性:操作系统可以通过进程的状态和优先级来分配资源
总的来说程序是存储再磁盘上的静态指令集合,而进程是再内存中运行程序的实列,具有独立的内存空间和资源。多个进程可以同时执行同一个程序,且每个进程都是独立的,它们之间不会相互影响
🌟进程和程序的区别:
- 进程是动态的,程序是静态的:程序是一个文件,你执行这个文件后叫进程负责调用程序文件的方法等实现动态操作
- 进程是暂时的,程序是永久的:进程在你关机或者关闭进程的时候就会结束,而你关闭的进程程序是依然还在的
- 进程和程序组成不同:经常的组成是包括程序、数据和
PCB
(process control block
进程控制块)。PCB
是进程存在的唯一标识
⭐️ PCB
是操作系统内部的数据结构,用于管理和维护操作系统中的进程信息。每一个进程都有对应唯一的一个 PCB
,PCB
内包含了:进程状态、程序计数器、寄存器状态、进程优先级、PID
、父进程 ID
、内存管理、进程的等待队列信息、打开文件表等
⭕️ 以下是 pcb
包含信息
⭐️进程标识符信息: 分为外部标识符和内部标识符,外部标识符就表示:创建者提供,便于记忆的,比如进程名,通常基于课执行文件名,不唯一,内部标识符就是系统为每个进程赋予的唯一整数
⭐️处理器状态信息:处理机在运行时,许多信息都放在寄存器中。当处理机被中断时,所有这些信息都必须保存在 PCB
中,以便在该进程重新执行时,能从断点继续执行
-
通用寄存器:用户访问,用于暂存信息
-
指令计数器:存放了要访问的下条指令的地址,而PC(程序计数器)是存放了下一条要执行命令的地址
-
程序状态字:含有状态信息,入条件码,执行方式(内核进程还是用户进程),终端屏蔽标志、
-
用户栈指针:指每个系统用户进程都有一个或若干个于之相关的系统栈,用于存放过程和系统调用参数及调用地址,栈指针指向该栈的栈顶;
- 用户栈:用户栈用来存储函数调用和局部变量的一块内存区域。在程序执行的过程中,没当有一个函数被调用,系统会为该函数分配一段内存空间,用于保存函数的参数,局部变量和返回地址等信息。
⭐️进程控制和管理信息
- 进程状态
- 进程优先级
- 与进程调度算法有关的信息
- 事件,阻塞原因
⭐️进程的资源分配清单
- 进程和数据的地址
- 进程同步和通信机制
- 除
CPU
意外的全部资源以及已经配到该进程的资源清单 - 本进程
PCB
所在队列中的下一个进程的PCB
首地址
进程的
PCB
(进程控制块)通常不存储在进程的用户空间内,而是由操作系统内核维护的数据结构。PCB
包含了描述进程状态和各种控制信息的字段,如进程的标识符、程序计数器、寄存器状态、进程优先级、进程状态等等。这些信息是操作系统用来管理和控制进程的必要数据。
PCB
通常存储在操作系统内核的内存中,而不是特定进程的用户空间。进程不能直接访问或修改其它进程的PCB
,这是为了确保操作系统的稳定性和安全性。当操作系统需要切换进程的上下文(例如,由一个进程切换到另一个进程时),它会使用PCB来保存和还原进程的状态信息,从而实现进程之间的切换。因此,
PCB
是操作系统用来管理和调度进程的重要数据结构,它在内核空间中存储,不在进程的用户空间中。
🌟 进程的特征:
- 动态性:进程对应程序的执行,进程是动态产生,动态消亡的(用户可以随时关闭进程,也有可能进程出现了错误,系统将会终止该进程),而且进程再生命周期内,创建、活动、阻塞、终止等过程之间的转换
- 独立性:它是独立的运行单元;而且也是独立的分配资源
- 并发性:多个进程同时存在于内存中,可以并发运行
- 异步性:进程的执行是异步的,它们按照各自的速度执行,如果不考虑资源共享的情况下,各进程的执行是独立的,执行速度是异步的。
- 结构性:
PCB
2️⃣ 进程的状态及其转换
🌟 三种基本状态
- 就绪态(ready):一个进程已经具备运行条件,但由于某些事情从而不能运行的状态,当他调度给它占用CPU时,立即可以运行。一个进程获得除处理机之外的一切所需资源时,它就会位于“就绪队列中”
- 执行态(Running state):进程占有了包括CPU在内的全部资源,正在CPU上运行;再单机的环境下,每一时刻最多只有一个进程处于运行状态
- 等待态:也叫阻塞态,指因等待某种事件发生而暂停运行的状态;会位于等待队列中
🌟 三种基本状态之间的转换
- 运行➡就绪:
-
- 运行进程用完了时间片,不得不让出来(被动)
- 运行进程被更高优先级的进程中断,所以当前进程被迫处于就绪状态
- 运行➡阻塞:进程用"系统调用"的方式申请某种操作系统资源,或者请求等待某个事件发生
- 阻塞➡就绪:当进程所等待的事件发生时,就会进入就绪队列,重新等待处理机的调度
🌟 进程状态转换的事件类型-三种常见的原因
- NULL----新建:创建执行一个程序的新进程
- 新建-----就绪:OS准备好了接纳一个进程,进程进入内存,为该进程分配处理机之外的一切资源
- 就绪----运行:OS调度程序从就绪队列选择一个新的进程运行(占据CPU)
🌟 进程的挂起状态
为什么需要引入挂起?
- 终端用户的请求:终端用户发现可疑问题,将程序暂时静止下来
- 父进程请求:父进程希望挂起自己的子进程
- 负荷调节的需要:当实时系统中的工作负荷较重时,可以见一下不那么重要的任务挂起
- 操作系统需要。
3️⃣ 进程队列(实现)
4️⃣ 进程组成
- 一个执行程序,包括初始代码和数据
- 一个独立的用户地址空间
- 系统资源,由OS分配给进程的系统资源
- 进程运行及处理机调度进程切换时所要设计到的数据
进程 = 程序段+数据 +PCB
- 程序段:描述进程所要完成的功能
- 数据:进程在执行时必不可少工作区和操作对象
- PCB:为了方便操作系统对进程的管理和控制,操作系统必须为每个进程简历一个进程控制(PCB)块用以描述进程的控制和管理信息,当然在进程从系统退出后,其所对应的PCB也会消失
🌟 进程控制块的组织方式
- 线性方式:所有的PCB组织在一张线性表中,存表的首地址,每次扫描整表
- 链接方式:执行指针,就绪队列,阻塞队列,空闲队列等
- 索引方式:根据状态不同,建立索引表
🌟 进程控制概念
⭐️进程控制:对系统中的进程控制,可以创建、撤销、实现进程
⭐️进程控制通过各种原语来实现
⭐️进程的创建
-
- 申请空白
PCB
,获取PID
,从PCB组织中取一个空白的PCB
- 给进程分配资源,为新进程分配一个必要的内存空间
- 初始化
PCB
,设置进程状态、属性、初始化寄存器的上下文 - 设置正确的链接:置于队列中
- 申请空白
⭐️导致进程创建的场景
-
- 新的批作业(批处理系统中,调度到某作业)
- 交互登录(分时系统)
OS
为提供一项服务而创建(比如文件打印)- 由已有的进程而生(进程规定并发执行的)
- 提交一个程序执行
⭐️父进程、子进程、进程树:
- 父进程是创建其他进程的进程,父进程会启动子进程,并在必要时对其进行管理
- 子进程是由父进程创建的新进程,子进程通常继承了一部分父进程的属性和资源,并且可以独立运行,而且子进程可以由直接的子进程,从而形成进程树
- 进程树是由多个进程和子进程构成的层次结构,根为操作系统启动的初始进程,其他进程通过创建子进程来扩展树结构,进程树可以使得操作系统可以有效的管理和监控所有进程
🌟 进程的控制场景
⭐️ 进程的终止
- 进程终止,首先等待操作系统进行善后,然后再退出主存
⭐️ 进程撤销的方式:
- 正常退出(自愿)
- 出错退出(自愿)
- 严重错误(非自愿)
- 被其他进程杀死(非自愿)
⭐️ 当一个进程完成任务后,应将其撤销,一边及时释放它所占据的资源
子进程会有PCB,它的PCB和主进程的不一样。
子进程的PCB独立于主进程的PCB,它是在主进程中创建的,并且有自己的地址空间和资源。子进程的PCB存储着子进程的执行状态、寄存器信息、信号屏蔽和偏移量等信息,用于维护子进程的执行环境和状态。
与主进程的PCB相比,子进程的PCB可能有一些不同的特点,例如它可能包含有关父进程的一些信息,它可能有一个与主进程不同的程序计数器等。但是,子进程的PCB和主进程的PCB是相互独立的,它们不会互相影响
⭐️ 常见的异常结束事件异常结束:由于错误迫使结束
- 越界结束,指程序所访问的存储区已经超出进程区域
- 保护错误,进程试图访问一个不被允许访问的资源或文件,或者以不正当方式访问
- 非法指令:程序试图执行一条不存在的指定,可能时程序错误的转移到数据区,把数据当成了指令
- 特权指令错误,用户进程试图去执行一条只允许OS执行的指令
- 运行超时,进程运行时间超过最大值
- 等待超时,进程等待某事件的时间超过最大值
- 算术运算错误,试图执行一个被禁止的运算
- I/O故障
⭐️ 进程的阻塞: 阻塞方式是用阻塞源语来阻塞,- 阻塞原语实现了进程由执行状态到阻塞状态的转变
⭐️ 进程的唤醒线程的方式是系统进程唤醒,事件发生进程唤醒,- 被阻塞的进程所期待的事情发生时,由相关进程调用唤醒原语,将等待该事件的进程唤醒
⭐️ Block
原语
- - 当一个线程或进程需要等待某个条件满足时,它可以调用block原语来阻塞自己的执行,暂时让出CPU。
- - 当条件满足时,其他线程或进程可以使用wakeup原语来唤醒被阻塞的线程或进程,使其继续执行。
⭐️wakeUP
原语:
- - wakeup原语通常与block原语配合使用,用于唤醒被阻塞的线程或进程。
- - 它可以通过发送信号或通知来告知被阻塞的线程或进程,使其从阻塞状态恢复到可运行状态。