1.并发与并行
2.进程与程序
人—》CPU
菜谱—》程序
材料—》数据
做菜—》进程
3.状态
4.PCB:进程控制块,是进程存在的唯一标识
- 进程描述信息
- 进程标识符
- 用户标识符
- 进程控制和管理信息:当前状态,优先级
- 资源分配清单
- CPU相关信息
5.每个PCB是如何组织
通过链表,将具有相同状态的进程链在一起,组成各种队列
通过索引,将索引表的表项指向相应的PCB,不同的状态对应不同的索引表
6.CPU上下文切换
事先设置好CPU寄存器和程序计数器
- CPU寄存器
一个CPU内部容量小,速度极快的缓存 - 程序计数器
用来存储CPU正在执行的指令位置,或即将执行的下一条指令位置
CPU寄存器和程序计数器是在CPU运行前,所必须依赖的环境
7.进程的上下文切换是切换什么?
进程:由内核管理和调度
进程的切换只发生在内核态
进程的上下文切换不仅包含了虚拟内存栈,全局变量等用户空间资源,还包含了内核堆栈,寄存器等内核空间的资源。
发生进程切换的场景:
- 时间片耗尽
- 内存不足
- sleep
- 遇到优先级更高的进程
- 硬件中断
8.线程的优缺点
优点:
- 一个进程可以多线程
- 多个线程可以并发执行
- 多个线程可以共享地址空间和文件等资源
缺点:当进程中的一个线程崩溃,会导致其所属进程的所有线程崩溃
进程是资源分配单位,线程是CPU调度单位。线程比进程时间效率高
9.线程的上下文切换
①2个线程属于同一个进程,虚拟内存是共享的,切换时虚拟内存资源不动,切换线程的私有数据 寄存器等不能共享的数据
②2个线程不属于同一个进程,切换与进程一样
根据任务不同:进程上下文切换,线程上下文切换,中断上下文切换
10.线程的实现
- 用户线程:由用户空间实现的线程,由用户态的线程来管理
- 内核线程:由内核实现的线程,由内核态的线程来管理
- 轻量级线程:在内核中来支持用户线程
11.5个调度原则
- CPU利用率
- 系统吞吐量
- 同转时间
- 等待时间
- 响应时间
12.调度算法
①FCFS,对长作业有利,适用CPU繁忙型作业,不适用于IO繁忙型
②最短作业优先
③高响应比
④时间片轮转
⑤最高优先级
⑥多级反馈队列
互斥 同步
1.临界区:共享资源的代码片段,不能给多线程同时执行
2.同步:操作A应该在B之前就执行,执行C在操作A和B都完成之后执行
互斥:操作A和操作B不能在同一时刻执行
3.线程—》加锁—-》临界资源—》解锁
锁:
- 忙等待锁
- 无等待锁
管道
管道传输数据是单向的[|]
:匿名管道
FIFO:命名管道
使用命名管道前,先需要通过mkfifo
命令来创建,并且指定管道名字
1 | $ echo "Hello" > myPipe //将数据写入管道 |
管道这种通信方式效率低,不适合进程间频繁地交换数据
管道:内核里面的一串缓存
对于匿名管道,它的通信范围是存在父子关系的进程
对于命名管道,它可以在不相关的进程间也能相互通信
消息队列是保存在内核中的消息链表