当前位置: 首页 > news >正文

【王道·操作系统】第二章 进程管理【未完】

一、进程的基本概念

1.1 进程的概念

  • 程序:静态的,存放在磁盘里的可执行文件,是一系列的指令集合
  • 进程Process:动态的,是程序的一次执行过程

1.2 进程的组成

  • 数据结构PCB(process control block),即进程控制块
    1. PID(进程ID,process ID:os为进程分配的唯一的、不重复的号,是进程存在的唯一标志)
    2. UID(进程所属用户:基本进程描述信息,可以让os区分各个进程)
    3. 分配的资源(内存、I/O设备、使用那些文件等:用于实现os对资源的管理)
    4. 运行情况(CPU运行时间、磁盘使用情况、网络流量使用情况:用于实现os对系统进程的控制、调度)
  • 一个进程实体(进程映像)由PCB、程序段、数据段组成,进程实体反应了进程在某一时刻的状态
  • 进程是动态的,进程实体(进程映像)是静态的
  • 进程是进程实体的运行过程,是系统进行资源分配和调度(os让进程在CPU上运行)的独立单位
    在这里插入图片描述

1.3 进程的特征

  • 动态性(最基本特性):进程是程序的一次执行过程,是动态地产生、变化和消亡的
  • 并发性:内存中有多个进程实体,各进程可并发执行
  • 独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位
  • 异步性:各进程按各自独立的、不可预知的速度向前推进操作系统要提供“进程同步机制”来解决异步问题
  • 结构性:每个进程都会配置一个PCB;结构上看,进程由程序段、数据段、PCB组成

1.4 进程的状态

  • 三种基本状态:
    1. 运行态Runing:占有CPU,并在CPU上运行
    2. 就绪态Ready:已具备运行条件,但没有空闲CPU暂时不能运行
    3. 阻塞态/等待态Waiting/Blcoked:因等待某一事件而暂时不能运行
  • 其他两种状态:
    1. 创建态/新建态New:进程正在被创建,os为进程分配资源、初始化PCB
    2. 终止态/结束态Terminated:进程正从系统中撤销,回收进程拥有的资源、撤销PCB
  • 进程PCB中有变量state表示当前状态
    在这里插入图片描述

1.5 进程的组织方式

  • 链式方式:
    1. 按照进程状态将PCB分为多个队列:执行指针、就绪队列指针、阻塞队列指针(等待打印机的阻塞队列、等待磁盘的阻塞队列…)
    2. 操作系统持有指向各队列的指针
  • 索引方式:
    1. 根据进程状态不同,建立几张索引表:执行指针、就绪表指针、阻塞表指针
    2. 操作系统持有指向各索引表的指针

二、进程的行为

进程控制会导致进程状态的转换,无论哪个进程控制原语,要做的无非三类事情:

  • 更新PCB中的信息
    1. 所有的进程控制原语一定都会修改进程状态标志
    2. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
    3. 某进程开始运行前必然要恢复期运行环境
  • 将PCB插入合适的队列
  • 分配/回收咨源

2.1 进程控制的基本概念

  • 进程控制的主要功能:对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程转换等功能
  • 如何实现进程控制?原语
    1. 原语的执行具有原子性,即执行过程一气呵成、期间不允许被中断
    2. 通过“关中断指令”和“开中断指令”这两个特权指令实现其原子性

2.2 进程控制相关的原语

2.2.1 进程的创建

在这里插入图片描述

2.2.2 进程的终止

在这里插入图片描述

2.2.3 进程的阻塞与唤醒

在这里插入图片描述

2.2.4 进程的切换

在这里插入图片描述

2.3 进程通信IPC

  • 进程间通信Inter-Process Communication,IPC:两个进程之间产生数据交互
  • 进程通信需要操作系统支持:进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立

2.3.1 共享存储

  • 基于数据结构的共享
  • 基于存储区的共享

2.3.2 消息传递

  • 直接通信方式
  • 间接通信方式

2.3.3 管道通信

相关文章:

  • 【王道·操作系统】第二章 进程管理【未完】
  • 工业相机掉线、丢包、丢帧原因排查
  • springcloud-alibaba (04)GatewayFilter 自定义全局过滤器-认证和授权
  • Windows下搭建paddlenlp 语义检索系统
  • 人生苦短,我用Python
  • 基于langChain 的privateGPT 文档问答 研究
  • 【C++/嵌入式笔试面试八股】一、24.智能指针 | 其他
  • prometheus 部署安装
  • C# 队列(Queue)
  • C语言中的 #ifdef __cplusplus 和 #endif 的作用
  • RK3588-EDGE Ethernet驱动(一)
  • 手持式网络性能测试仪应用于哪些领域及可以完成什么工作?
  • 分享Python采集99个焦点图,总有一款适合您
  • 基于docker容器化的jenkins2.406升级迁移(jdk8升级jdk11)
  • USB xHCI控制器使用总结
  • 如何在 Linux、Windows 和 Mac 上查找 WiFi 密码?
  • 2023年适合在亚马逊开店吗?
  • 介绍 TensorFlow 的基本概念和使用场景。
  • 2023年建议自考还是成考 两者哪个含金量高
  • redis高级篇 缓存双写一致性之更新策略
  • Spring:Spring框架结构 ②
  • 【SVN内网穿透】远程访问Linux SVN服务
  • 快速入门Matlab——深入学习字符串
  • 【c语言习题】使用链表解决约瑟夫问题
  • 如何在 Python 中循环字典
  • 7.条件渲染
  • 基于STM32的DHT11温湿度测量
  • Office project 2010安装教程
  • 基于Selenium+Python的web自动化测试框架
  • Apache Kafka - 高性能原因探究