操作系统|整理
1. 操作系统的特点·
并发性:两个或多个程序在同一时间间隔内运行
共享性:系统中的资源可供内存中多个并发执行的进程共同使用
虚拟性:通过虚拟化技术,将物理资源转化为逻辑上的资源
异步性:进程以不可预知的速度向前推进
最基本的特征:并发、共享
2. 操作系统的功能·
处理机管理:分配和管理CPU资源
存储器管理:对内存进行分配,保护和扩充
文件管理:负责文件的存储、组织和访问
设备管理:负责管理各种外部设备
用户接口:提供用户与操作系统交互的方式
3. 进程和线程·
进程:程序的一次执行实例,是系统资源分配的基本单位
- 组成:代码段、数据段、堆栈段、进程控制块PCB
线程:进程中可独立执行的子任务,是CPU调度的基本单位
- 分类:用户线程、内核线程
区别:
- 进程拥有独立的系统资源,而同一进程的线程共享进程的资源
- 进程创建、销毁和切换的开销大于线程
- 进程之间相互独立,线程之间不是完全独立的
fork:创建一个新的子进程,完全复制父进程的空间,在父进程中返回子进程的pid,在子进程中返回0
4. 进程间的通信方式·
共享内存:允许多个进程访问同一块物理内存
消息传递:通过发送和接收消息来进行通信
管道:数据在管道中以字节流的形式单向传输
套接字:通过IP地址和端口号的组合来唯一标识一个通信端点
5. 进程的状态·
就绪状态:进程已经分配到除了处理机之外所有的执行所需要的资源,一旦获得处理器就可以立刻执行;
执行状态:进程获得处理机并且在处理器上执行;
阻塞状态:当执行中的程序由于等待某个事件发生而无法执行时,放弃处理机从而进入阻塞状态,例如等待 I/O 完成。
三种状态之间的相互转换:
执行状态的程序遇到 I/O 请求等将会转入阻塞状态。
I/O 请求完成时会进入就绪状态。
获得处理机之后将重新进入执行状态。
执行状态的程序当时间片用完时,将会重新回到就绪状态。
6. 进程调度算法·
先来先服务调度算法:按照进程到达的先后顺序进行调度,先到达的进程先执行
- 非抢占式调度算法,可能导致长进程阻塞短进程
短作业优先调度算法:选择估计运行时间最短的进程优先执行
- 需要预先知道每个进程的运行时间,可能导致长进程饥饿
高响应比优先调度算法: 响应比 = (等待时间 + 运行时间) / 运行时间
- 非抢占式调度算法,需要预先知道每个进程的运行时间
优先级调度算法:为每个进程分配一个优先级,优先级高的进程先执行
- 可能导致低优先级进程饥饿
时间片轮转调度算法:为每个进程分配一个时间片,当时间片用完后,进程被放到就绪队列末尾,等待下一次调度。
- 高频切换开销大,不区分任务的紧急程度
多级反馈队列调度算法:将就绪队列分成多个优先级不同的队列,每个队列采用不同的调度算法。新创建的进程首先进入最高优先级的队列,如果它在该队列的时间片内没有完成,就会被移到下一个更低优先级的队列中。
7. 进程的同步与互斥·
同步:多个相关进程在执行次序上的协调
互斥:每次只允许一个进程对临界资源进行访问
互斥的软件实现:
- 单标志法:每个进程在访问完临界区后,把使用临界区的权限转交给另一个进程
- 双标志先检查法:每个进程进入临界区前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应标志元素设为true
- 双标志后检查法:先上锁后检查
- Peterson算法:如果双方都争着想进入临界区,则让进程尝试谦让临界资源
互斥的硬件实现:中断屏蔽方法、TestAndSet指令、Swap指令
信号量机制:
- wait(P操作)表示要获得一个信号量;signal(V操作)表示要释放一个信号量
- 同步:初始化信号量为0,在前操作之后执行V操作,在后操作之前执行P操作
- 互斥:初始化信号量为资源数,临界区前执行P操作,临界区后执行V操作
8. 中断、异常和系统调用·
中断:一种打断处理器当前执行的任务,转而处理其他更为紧急的任务的机制
异常:是指在程序执行过程中发生的异常情况,如程序错误(比如除零错误、非法操作码等)或某些系统调用。
系统调用:运行在用户模式的程序请求操作系统内核提供服务的一种方式
区别:
- 触发方式:中断是由外部事件触发的,异常是由程序内部错误触发的,而系统调用是由用户程序主动发起的。
- 处理程序:中断和异常通常由操作系统的内核预先定义的处理程序处理,而系统调用则调用内核提供的服务函数。
- 同步性:系统调用和异常是通常是同步发生的,而中断是异步的。
9. 死锁·
定义:两个或两个以上的进程在执行过程中,由于竞争资源造成的一种阻塞现象,若无外力作用,它们都无法推进下去。
必要条件:
- 互斥:某种资源在某一时刻只能由一个进程使用
- 占有并等待:进程已经持有至少一个资源,并且等待获取其他进程持有的资源
- 非抢占:资源不能被抢占,只能在持有它的进程完成任务后自动释放
- 循环等待:进程集合中的每个进程都在等待下一个进程持有的资源
预防:确保至少有一个死锁的必要条件不成立
- 破坏互斥:将互斥资源改造成共享资源
- 破坏占有并等待:采用静态分配策略,保证进程申请资源的时候没有占有其他资源
- 破坏非抢占:允许从等待进程中抢占资源
- 破坏循环等待条件:采用顺序资源分配策略,对资源编号并排序,要求进程按照递增顺序申请资源
避免:
- 资源分配图法:构建进程和资源的有向图,检测图中是否存在环路
- 银行家算法:确保系统能够找到一个安全序列,使每个进程最终都能获得所需资源
10. 内存管理·
虚拟内存:将数据从物理内存交换到硬盘上,提供比实际物理内存更大的地址空间
分页:将物理内存划分为固定大小的单元,称为页框,将虚拟内存划分为同样大小的单元,称为页,通过页表将虚拟地址中的页号映射到物理地址中的页框号。
分段:将虚拟内存划分为若干个逻辑段,通过段表将逻辑段映射到物理内存。
区别:
- 页是信息的物理单位,对用户是透明的,段是信息的逻辑单位,对用户是可见的
- 分页使用固定大小的内存单元,分段使用可变长度的内存单元
- 分页可能导致内部碎片,分段可能导致外部碎片
11. 页面置换算法·
先进先出置换算法:置换最早进入内存的页面
- 实现简单,但可能导致较高的缺页率
最优置换算法:置换未来最长时间不会被使用的页面
- 缺页率最低,但需要预知未来的页面访问序列
最近最少使用置换算法:置换最长时间未被访问的页面
- 性能较好,但实现相对复杂
时钟置换算法:为每个页面设置一个访问位,并将内存中的页面链接成一个循环队列。当某页被访问时,将访问位置为1。当需要淘汰一个页面时,算法检查该页的访问位,如果为0,则选择该页置换;如果为1,则将其置为0。
改进型时钟置换算法:置换时优先选择既未被访问也未被修改的页面
参考链接·
https://zhuanlan.zhihu.com/p/95074724