王道考研操作系统笔记
进程的基本知识
程序:一个指令序列
内存中有多个程序正在运行,各自的程序段和数据段存放位置不同,OS应如何找到存放位置?
系统给每个运行的程序配置一个进程控制块PCB用于存放程序的各种信息如代码段位置等
程序段,数据段,PCB三部分组成进程实体(进程)
准确说,进程是进程实体的运行过程
PCB中存放的信息有:进程标识符,用户标识符,进程优先级等这些与进程管理相关的信息
进程的组织方式:
链接方式
索引方式:
进程的特征:动态性(最基本特征),并发性,独立性(进程是资源分配,接收调度的基本单位),异步性(会导致并发程序结果的不确定性),结构性(进程由PCB、程序段、数据段组成)
进程的状态与转换
对于单核CPU,一时刻最多只能有一个进程处于运行态,N核~
阻塞态中,某一事件可以是等待打印机响应(因为打印机速度比CPU慢)
进程状态转换
进程控制:实现状态转换
通过原语实现:
阻塞和唤醒要成对出现
各原语都实现了那些状态之间的转换
进程通信:
进程之间需要信息交换,但进程不能直接访问其他进程的地址空间---否则一个进程可以随意修改另一个进程的数据---安全隐患
- 共享存储:
设置一个共享空间
两个进程对共享空间的访问是互斥的
基于数据结构的共享:速度慢,限制多,是一种低级的通信方式。
基于存储区的共享:数据形式,存放位置都由进程控制(而非OS)是一种高级的通信方式
- 管道通信:
管道(本质是一个共享文件)是半双工的,想要双向传输就需要两个管道
各进程互斥访问管道
- 消息传递队列
直接通信方式:
进程间的数据交换以格式化的消息(如图) 为单位,进程通过发送消息/接收消息两个原语实现
消息块中有一个指向消息缓冲队列的指针
然后进程2通过接收原语将队列中的三个消息逐个处理
间接通信方式:
所有进程将格式化的消息发送到中间实体---信箱中,需要消息的进程从信箱中取走自己的消息(消息头中有消息的基本信息)
(PS:网原中,各种信息片报文段,都是所谓的“格式化的消息”)
线程,多线程
多线程就是将进程进一步细分
有的进程需要同时做多件事,如QQ一边视频一边发文件
并行与多线程:并行是多个进程间同时进行,多线程是一个进程内多个线程同时进行
线程是处理机(CPU)的基本执行单元/调度的基本单位,线程提升了系统并发度
引入线程后,进程只作为除CPU之外的资源分配的基本单位(如:打印机一时间只能给一个进程,而进程中的线程都可以用。即进程是基本单位)
同一进程内线程切换的开销小原因: 这些线程共用PCB、代码段、数据段,不需要切换进程环境
对于多核CPU,一个进程的线程也可以分配给多个核
线程的实现方式
内核级线程才是“真线程”
用户级线程
线程管理工作在用户态完成。开销小效率高,但在内核看来:这其实只是一个线程---
内核级线程
线程管理工作在核心态完成。成本高。
结合二者优劣:m对n模型
处理机的调度:按某种规则决定任务的处理顺序
将内存中暂时不运行的进程暂时移出内存
对于进程调度(低级调度)
第二条:内核程序临界区:访问内核数据结构的代码段。即:第二条意为:当程序正在访问内核的重要数据时不能被调度。但如果是“临界区”而非“内核程序临界区”则可以调度,如有程序在打印机的临界区,不调度的话,打印机是慢速设备,CPU要大量时间等待打印机,效率低。
进程调度方式:抢占式/非抢占式:允许进程被动放弃CPU/只允许进程主动放弃CPU
前者简单;后者复杂功能强,适合分时/实时OS
狭义的进程调度和广义的进程调度
这些数据保存在PCB