2021年12月8日开始复习 考试时间12.15 考试占60分 所有章节:
第一章:进程与线程
一、进程
1、进程的概念和特征
进程的描述
进程控制块PCB的概念
进程由PCB和程序与数据组成
PCB的内容有
一个进程的整个存储器映像包括用户及上下文和系统及上下文;
用户及上下文包括进程的程序块、数据块、运行时堆栈的信息;
系统及上下文包括进程标识信息、进程现场信息、进程控制信息和系统内核栈;
进行上下文切换时,换下进程的寄存器上下文信息保存在进程现场信息中;
进程的上下文是进程的代码和数据已经进程运行环境;
进程的五个基本特征
2、进程的状态、转换和控制
进程的状态
| 进程状态 | 概念 |
|---|---|
| 就绪状态 | 进程获得除CPU外的所有资源 |
| 运行状态 | CPU上运行 |
| 阻塞状态 | 等待某一时间而暂停运行,即使CPU空闲,没有等到资源也不能运行 |
状态变化规则
只有从运行态到就绪态是反序;
子进程继承父进程拥有的资源,子进程被撤销时将资源归还;
fork函数子进程返回0,父进程返回子进程的PID;
不能预测父子进程的执行顺序;
阻塞是进程自身主动的行为;
上下文切换是在内核态完成的:
僵尸进程:终止未回收
孤儿进程:父进程未回收子进程就终止
wait函数,阻塞父进程,等待子进程结束,子进程结束则返回子进程的PID,否则返回-1;
exceve函数调用一次永不返回,发生错误则抛出异常;
fork和exceve的分离使得shell可以利用文件描述符实现重定向和管道(父子进程之间通信);
3、异常控制流
CPU控制流
低层次机制
高层次机制
异常事件
异常类型
如果是当前执行指令导致的异常就是同步异常;中断异常是由处理器外部的事件产生的;
其中中断异常有时钟中断和IO中断;
故障异常:缺页(可恢复)、保护故障(不可恢复)、浮点异常、无效内存引用;重新执行当前指令或者终止;
终止:不合法指令、奇偶校验错误、机器检查;
4、进程间通信
共享内存系统:申请内存映射到自己进程,进行数据读写;把共享内存映射到不同进程的地址空间中
消息传递系统:消息缓冲队列、信箱通信 消息缓冲队列机制(直接通信)
信箱通信(间接通信)
管道严格遵循先进先出,不支持文件定位,一次性读取,读过的就释放了,单向流动
二、线程
线程和进程:
线程定义:进程内一个相对独立的可调度的执行单元;
没有自己的地址空间 进程作为除了CPU之外的资源分配的单元, 线程成了CPU的分配单元;
进程=线程+code+data+kernenl context 线程有自己的堆栈和寄存器;不同进程的线程切换是在内核态完成的,同一进程的线程切换不需要内核支持; 属于同一个进程的所有线程共享所属进程的地址空间; 有自己的局部变量的堆栈,但是对其他线程来说不被保护,共享进程的data、code和堆;
多线程模型
线程的两种实现方式:
用户级线程:位于内核之上、管理无需内核支持,应用程序负责线程的创建、撤销和切换,内核意识不到线程的存在;
内核级线程:线程管理的工作由内核完成,应用程序只有一个到内核线程的接口;
有的是二者组合的方式来实现线程,其模型有一下三种:
多对一:
一对一:
多对多:
双层模型:多对多模型中,允许某个用户级线程绑定到一个内核级线程;
进程之间的切换是必须要内核支持的,因为要切换地址空间;
王道考研题记录
答案:A C项,可能死锁,此时没有进程处于运行态;
答案:C
同一进程的线程切换时不需要内核支持
进程是资源分配的单位,线程是调度和分派的单位
答案:D 分配cpu是进程调度的工作
答案:B 操作系统为每个用户级线程建立一个线程控制块是一对一模型 用户级线程的切换比内核级线程的切换效率高