1️⃣ 进程的概念

🌟进程的概念:

  1. 进程就是程序的一次执行活动,或者说进程是执行中的程序;他是一种数据结构
  2. 进程是一个程序及其数据再处理机上顺序执行时所发生的的活动;
  3. 进程时系统进行资源分配和调度的一个独立单位,也是操作系统中能够分配和管理资源调度最小单位

而且再现在的操作系统中,用户是以进程方式占用系统资源

🌟 为什么要引入进程?

因为进程可以使我们可以直观的了解看到程序的运行过程,它描述了程序动态执行过程;

🌟操作系统负责什么?

创建进程、为进程分配资源、调度进程占用处理机等
  1. 多任务处理:进程使操作系统可以同时运行多个程序,每个程序都作为一个独立的进程执行。
  2. 资源隔离:每个进程都拥有独立的内存空间,进程和进程之间不会相互影响
  3. 并发执行:多个进程可以并发执行,提高了硬件资源利用,但是也带来了额外的空间和时间开销
  4. 支持多用户:用户是以进程方式执行,那么多个用户可以视为多个进程
  5. 提高系统可管理性:操作系统可以通过进程的状态和优先级来分配资源

总的来说程序是存储再磁盘上的静态指令集合,而进程是再内存中运行程序的实列,具有独立的内存空间和资源。多个进程可以同时执行同一个程序,且每个进程都是独立的,它们之间不会相互影响

🌟进程和程序的区别:

  1. 进程是动态的,程序是静态的:程序是一个文件,你执行这个文件后叫进程负责调用程序文件的方法等实现动态操作
  2. 进程是暂时的,程序是永久的:进程在你关机或者关闭进程的时候就会结束,而你关闭的进程程序是依然还在的
  3. 进程和程序组成不同:经常的组成是包括程序、数据和 PCBprocess control block进程控制块)。PCB是进程存在的唯一标识

⭐️ PCB是操作系统内部的数据结构,用于管理和维护操作系统中的进程信息。每一个进程都有对应唯一的一个 PCBPCB内包含了:进程状态、程序计数器、寄存器状态、进程优先级、PID、父进程 ID、内存管理、进程的等待队列信息、打开文件表等

⭕️ 以下是 pcb包含信息

⭐️进程标识符信息: 分为外部标识符内部标识符,外部标识符就表示:创建者提供,便于记忆的,比如进程名,通常基于课执行文件名,不唯一,内部标识符就是系统为每个进程赋予的唯一整数

⭐️处理器状态信息:处理机在运行时,许多信息都放在寄存器中。当处理机被中断时,所有这些信息都必须保存在 PCB 中,以便在该进程重新执行时,能从断点继续执行

  1. 通用寄存器:用户访问,用于暂存信息

  2. 指令计数器:存放了要访问的下条指令的地址,而PC(程序计数器)是存放了下一条要执行命令的地址

  3. 程序状态字:含有状态信息,入条件码,执行方式(内核进程还是用户进程),终端屏蔽标志、

  4. 用户栈指针:指每个系统用户进程都有一个或若干个于之相关的系统栈,用于存放过程和系统调用参数及调用地址,栈指针指向该栈的栈顶;

    1. 用户栈:用户栈用来存储函数调用和局部变量的一块内存区域。在程序执行的过程中,没当有一个函数被调用,系统会为该函数分配一段内存空间,用于保存函数的参数,局部变量和返回地址等信息。

⭐️进程控制和管理信息

  1. 进程状态
  2. 进程优先级
  3. 与进程调度算法有关的信息
  4. 事件,阻塞原因

⭐️进程的资源分配清单

  1. 进程和数据的地址
  2. 进程同步和通信机制
  3. CPU意外的全部资源以及已经配到该进程的资源清单
  4. 本进程 PCB所在队列中的下一个进程的 PCB首地址

进程的 PCB(进程控制块)通常不存储在进程的用户空间内,而是由操作系统内核维护的数据结构。PCB 包含了描述进程状态和各种控制信息的字段,如进程的标识符、程序计数器、寄存器状态、进程优先级、进程状态等等。这些信息是操作系统用来管理和控制进程的必要数据。

PCB通常存储在操作系统内核的内存中,而不是特定进程的用户空间。进程不能直接访问或修改其它进程的 PCB,这是为了确保操作系统的稳定性和安全性。

当操作系统需要切换进程的上下文(例如,由一个进程切换到另一个进程时),它会使用PCB来保存和还原进程的状态信息,从而实现进程之间的切换。因此,PCB是操作系统用来管理和调度进程的重要数据结构,它在内核空间中存储,不在进程的用户空间中。

🌟 进程的特征:

  1. 动态性:进程对应程序的执行,进程是动态产生,动态消亡的(用户可以随时关闭进程,也有可能进程出现了错误,系统将会终止该进程),而且进程再生命周期内,创建、活动、阻塞、终止等过程之间的转换
  2. 独立性:它是独立的运行单元;而且也是独立的分配资源
  3. 并发性:多个进程同时存在于内存中,可以并发运行
  4. 异步性:进程的执行是异步的,它们按照各自的速度执行,如果不考虑资源共享的情况下,各进程的执行是独立的,执行速度是异步的。
  5. 结构性PCB

2️⃣ 进程的状态及其转换

image-20240511225102199

🌟 三种基本状态

  1. 就绪态(ready):一个进程已经具备运行条件,但由于某些事情从而不能运行的状态,当他调度给它占用CPU时,立即可以运行。一个进程获得除处理机之外的一切所需资源时,它就会位于“就绪队列中”
  2. 执行态(Running state):进程占有了包括CPU在内的全部资源,正在CPU上运行;再单机的环境下,每一时刻最多只有一个进程处于运行状态
  3. 等待态:也叫阻塞态,指因等待某种事件发生而暂停运行的状态;会位于等待队列中

🌟 三种基本状态之间的转换

  1. 运行就绪
    1. 运行进程用完了时间片,不得不让出来(被动)
    2. 运行进程被更高优先级的进程中断,所以当前进程被迫处于就绪状态
  2. 运行阻塞:进程用"系统调用"的方式申请某种操作系统资源,或者请求等待某个事件发生
  3. 阻塞就绪:当进程所等待的事件发生时,就会进入就绪队列,重新等待处理机的调度

image-20240511225200241

🌟 进程状态转换的事件类型-三种常见的原因

  1. NULL----新建:创建执行一个程序的新进程
  2. 新建-----就绪:OS准备好了接纳一个进程,进程进入内存,为该进程分配处理机之外的一切资源
  3. 就绪----运行:OS调度程序从就绪队列选择一个新的进程运行(占据CPU)

image-20240511225232258

🌟 进程的挂起状态

为什么需要引入挂起

  1. 终端用户的请求:终端用户发现可疑问题,将程序暂时静止下来
  2. 父进程请求:父进程希望挂起自己的子进程
  3. 负荷调节的需要:当实时系统中的工作负荷较重时,可以见一下不那么重要的任务挂起
  4. 操作系统需要。

image-20240511225256425

3️⃣ 进程队列(实现)

image-20240511225322452

4️⃣ 进程组成

  1. 一个执行程序,包括初始代码数据
  2. 一个独立的用户地址空间
  3. 系统资源,由OS分配给进程的系统资源
  4. 进程运行及处理机调度进程切换时所要设计到的数据

进程 = 程序段+数据 +PCB

  1. 程序段:描述进程所要完成的功能
  2. 数据:进程在执行时必不可少工作区和操作对象
  3. PCB:为了方便操作系统对进程的管理和控制,操作系统必须为每个进程简历一个进程控制(PCB)块用以描述进程的控制和管理信息,当然在进程从系统退出后,其所对应的PCB也会消失

🌟 进程控制块的组织方式

  1. 线性方式:所有的PCB组织在一张线性表中,存表的首地址,每次扫描整表
  2. 链接方式:执行指针,就绪队列,阻塞队列,空闲队列等
  3. 索引方式:根据状态不同,建立索引表

🌟 进程控制概念

⭐️进程控制:对系统中的进程控制,可以创建、撤销、实现进程

⭐️进程控制通过各种原语来实现

⭐️进程的创建

    • 申请空白 PCB,获取 PID,从PCB组织中取一个空白的 PCB
    • 给进程分配资源,为新进程分配一个必要的内存空间
    • 初始化 PCB,设置进程状态、属性、初始化寄存器的上下文
    • 设置正确的链接:置于队列中
  • image-20240511225553096

⭐️导致进程创建的场景

    • 新的批作业(批处理系统中,调度到某作业)
    • 交互登录(分时系统)
    • OS为提供一项服务而创建(比如文件打印)
    • 由已有的进程而生(进程规定并发执行的)
    • 提交一个程序执行

⭐️父进程、子进程、进程树:

  • 父进程是创建其他进程的进程,父进程会启动子进程,并在必要时对其进行管理
  • 子进程是由父进程创建的新进程,子进程通常继承了一部分父进程的属性和资源,并且可以独立运行,而且子进程可以由直接的子进程,从而形成进程树
  • 进程树是由多个进程和子进程构成的层次结构,根为操作系统启动的初始进程,其他进程通过创建子进程来扩展树结构,进程树可以使得操作系统可以有效的管理和监控所有进程

🌟 进程的控制场景

⭐️ 进程的终止

  • 进程终止,首先等待操作系统进行善后,然后再退出主存

⭐️ 进程撤销的方式:

  • 正常退出(自愿)
  • 出错退出(自愿)
  • 严重错误(非自愿)
  • 被其他进程杀死(非自愿)

⭐️ 当一个进程完成任务后,应将其撤销,一边及时释放它所占据的资源

image-20240511225926557

子进程会有PCB,它的PCB和主进程的不一样。

子进程的PCB独立于主进程的PCB,它是在主进程中创建的,并且有自己的地址空间和资源。子进程的PCB存储着子进程的执行状态、寄存器信息、信号屏蔽和偏移量等信息,用于维护子进程的执行环境和状态。

与主进程的PCB相比,子进程的PCB可能有一些不同的特点,例如它可能包含有关父进程的一些信息,它可能有一个与主进程不同的程序计数器等。但是,子进程的PCB和主进程的PCB是相互独立的,它们不会互相影响

⭐️ 常见的异常结束事件异常结束:由于错误迫使结束

  • 越界结束,指程序所访问的存储区已经超出进程区域
  • 保护错误,进程试图访问一个不被允许访问的资源或文件,或者以不正当方式访问
  • 非法指令:程序试图执行一条不存在的指定,可能时程序错误的转移到数据区,把数据当成了指令
  • 特权指令错误,用户进程试图去执行一条只允许OS执行的指令
  • 运行超时,进程运行时间超过最大值
  • 等待超时,进程等待某事件的时间超过最大值
  • 算术运算错误,试图执行一个被禁止的运算
  • I/O故障

⭐️ 进程的阻塞: 阻塞方式是用阻塞源语来阻塞,- 阻塞原语实现了进程由执行状态到阻塞状态的转变

image-20240511230050935

⭐️ 进程的唤醒线程的方式是系统进程唤醒,事件发生进程唤醒,- 被阻塞的进程所期待的事情发生时,由相关进程调用唤醒原语,将等待该事件的进程唤醒

image-20240511230123433

⭐️ Block原语

  • - 当一个线程或进程需要等待某个条件满足时,它可以调用block原语来阻塞自己的执行,暂时让出CPU。
  • - 当条件满足时,其他线程或进程可以使用wakeup原语来唤醒被阻塞的线程或进程,使其继续执行。

⭐️wakeUP原语:

  • - wakeup原语通常与block原语配合使用,用于唤醒被阻塞的线程或进程。
  • - 它可以通过发送信号或通知来告知被阻塞的线程或进程,使其从阻塞状态恢复到可运行状态。

5️⃣ 进程切换

image-20240511230526601