面试基础篇|操作系统复习(二)——进程的概述

487 阅读6分钟
1. 进程的概念
  • 程序:是静态的,是存放在磁盘里的可执行文件,是一系列的指令的集合。

  • 进程

    • 是动态的,是程序的一次执行过程。进程实体(进程映像)是静态的。
    • 是进程实体的运行过程,是操作系统进行资源分配和调度的一个独立单位。
2. 进程的组成
  • PCB

    • 记录的所有信息被保存在一个数据结构PCB(Process Control Block),即进程控制块。

      • 进程描述信息。如PID、UID
      • 进程控制和管理信息。如CPU、磁盘、网络流量
      • 资源分配清单。如文件、内存、I/O设备
      • 处理机相关信息。如PC寄存器
    • 当进程被创建的时候,操作系统会为该进程分配一个唯一的、不重复的ID——PID(Process ID),区分各个进程。

    • 操作系统记录进程分配的资源,方便系统对资源的管理。
    • 操作系统记录进程的运行情况,方便系统对进程的控制和调度。
    • 操作系统对各个并发运行的进程进行管理所需的信息,都会存在PCB中。PCB随进程创建而创建,随进程的结束而回收。
  • 程序段:程序的代码(指令列),供进程自身使用。

  • 数据段:运行过程中产生的数据,供进程自身使用。

3. 进程的特征
  • 动态性:进程是程序的一次执行过程。
  • 并发性:内存中存在多个进程同时执行。
  • 独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位。
  • 异步性:各进程按各自独立的、不可预知的速度向前推进。
  • 结构性:每个进程都会配置一个PCB。
4. 进程的状态
  • 创建态:操作系统为进程分配资源、初始化PCB。
  • 就绪态:进程创建完成就处于”就绪态“,但是没有CPU资源运行。
  • 运行态:从”就绪态“进程选择其中一个进入CPU运行,进程进入”运行态“。如果时间片到或者CPU被资源被抢占,进程会从”运行态“进入”就绪态“。
  • 阻塞态:在进程运行中,可能需要等待某个系统资源的分配,导致无法继续执行,操作系统会剥夺进程的CPU使用权,让它进入”阻塞态“。当请求的资源可以分配给进入”阻塞态“的进程的时候,进程会有”阻塞态“变成”就绪态“,等待系统分配CPU资源。
  • 终止态:一个进程执行exit的系统调用,请求操作系统终止进程。进程就会进入”终止态“,等待操作系统完成资源回收,进程就会彻底消失。
5. 进程的组织
  • 链接方式。使用队列把PCB组织起来。
  • 索引方式。使用索引表把PCB组织起来。
6. 进程控制
  • 对操作系统的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。

  • 简而言之,就是实现进程状态的转换。

  • 用”原语“实现进程控制

    • 原语是一种特殊的程序,执行具有原子性。程序的运行必须一气呵成,不可中断。
    • 使用”关中断指令“和”开中断指令“这两个特权指令实现原子性。
7. 进程控制相关的原语
  • 创建原语

    • 操作系统创建一个进程时使用的原语,大致流程如下

      • 申请空白PCB
      • 为新进程分配所需资源
      • 初始化PCB
      • 将PCB插入就绪队列
    • 引起进程创建的事件

      • 用户登录
      • 作业调度
      • 提供服务
      • 应用请求
  • 撤销原语

    • 使一个进程转向终止态,大致流程如下

      • 从PCB集合找到终止进程的PCB
      • 剥夺进程的CPU资源,将CPU资源分配给其他进程
      • 终止其所有子进程
      • 将该进程拥有的所有资源归还给父进程或操作系统
      • 删除PCB
    • 引起进程终止的事件

      • 正常结束
      • 异常结束
      • 外界干预
  • 阻塞原语

    • 使一个进程转向"阻塞态",大致流程如下

      • 找到阻塞的PCB
      • 保护进程运行现场
      • 将PCB插入相应事件的等待队列
    • 引起进程阻塞的事件

      • 等待系统分配某种资源
      • 等待相互合作的其他进程完成工作
  • 唤醒原语

    • 使一个进程从”阻塞态“转向”就绪态“,大致流程如下

      • 等待队列中找到PCB
      • 从等待队列中移除PCB,设置为就绪态
      • 将PCB插入就绪态中,等待被调度
    • 引起进程唤醒的事件

      • 等待事件的发生
  • 切换原语

    • 使一个进程在”就绪态“和”运行态“之间相互切换,大致流程如下

      • 将运行环境信息存入PCB
      • PCB移入相应队列
      • 选择另一个进程执行,并更新其PCB
      • 根据PCB恢复新进程所需的运行环境
    • 引起进程切换的事件

      • 当前进程时间片到
      • 有更高级别的进程到达
      • 当前进程主动阻塞
      • 当前进程终止
8. 进程通信
  • 进程通信是进程之间的信息交换。

  • 进程通信的方式

    • 共享存储

      • 两个进程互斥地访问共享空间
      • 基于数据结构的共享:速度慢、限制多、低级通信
      • 基于存储区的共享:速度快、限制少、高级通信
    • 管道通信

      • ”管道“是指用于连接读写进程的一个共享文件,又名pipe。实际是在内存中开辟固定大小的缓冲区。
      • 管道只能采用半双工通信,一个时间段内只能实现单向的传输。若要实现双向同时通信,则需设置两个管道。
      • 各进程要互斥地访问管道。
      • 数据以字符流写入管道,当管道写满,写进程的write()系统调用将被阻塞;当管道变空,读进程的read()系统调用将被阻塞。
      • 如果没写满,不允许读;没读空,不允许写。
      • 数据一旦被读出,就从管道中被抛弃,意味着读进程最多只能有一个,避免读错数据的情况。
    • 消息传递

      • 进程通过操作系统提供的”发送消息/接收消息“两个原语进行以格式化的消息为单位的数据交换。
      • 直接通信方式:消息直接挂接到接收进程的消息缓冲队列上。
      • 间接通信方式:消息要发送到中间实体(信箱)中。
9. 总结
  • 重点:进程的概念,注意与线程的区别。进程是操作系统是进行资源分配的最小单位。
  • 重点:进程的五大状态,通过”原语“实现
  • 重点:进程间的通信
  • 上述重点都是面试常问点
  • 请各位大佬发现错误,能指导菜鸟小弟
  • 菜鸟也想努力进大厂,加油