进程管理
进程与线程
进程
资源分配基本单位:进程控制块PCB
线程 隶属进程
独立调度基本单位:共享进程资源
区别:
资源 调度
进程开销大(内存空间、IO设备等);
线程开销小(寄存器内容)
通信:线程直接读写同进程;进程借助IPC
状态切换
就绪:等待调用
运行
阻塞:等待资源
只有就绪与运行可以相互转换:
就绪通过调度算法获得CPU时间转为运行;
运行用完分配时间转为就绪。
阻塞是缺少资源(非CPU时间)由运行转
调度算法
批处理系统: 先来先服务FCFS、短作业优先SJF、最短剩余时间优先SRTN
交互式系统: 时间片轮转、优先级调度和多级反馈队列
实时系统: 硬实时和软实时
进程同步
临界区:临界资源进行访问的那段代码
同步与互斥
信号量 :PV操作
使用信号量实现生产者-消费者问题
管程: 独立出控制代码,不易出错,客户端调用更容易
经典同步问题
哲学家进餐
读者-写者: 允许多个进程同时读;不允许读写和写写同时
进程通信
管道: pipe函数创建
只支持半双工通信(单向交替传输)
只能在父子进程或者兄弟进程中使用
FIFO: 命名管道
去除了管道只能在父子进程中使用的限制
消息队列
独立于读写进程,避免FIFO 中同步管道打开和关闭时可能产生的困难
避免了FIFO的同步阻塞问题,不需自己提供同步方法
读进程可以根据消息类型选择性接收消息,而不像 FIFO 那样只能默认地接收。
信号量: 计数器
用于为多个进程提供共享数据对象的访问
共享存储: 最快的一种IPC
需要使用信号量同步对共享存储的访问
套接字:可用于不同机器
概述
基本特征
并发: 程序 ,通过引入进程和线程
并行: 指令,需硬件支持
共享: 资源被多个并发进程共同使用
互斥共享;同时共享
虚拟: 一个物理实体转换为多个逻辑实体
时分复用:多进程在处理器上并发
空分复用:虚拟内存将物理内存抽象为地址空间,每个进程都有各自的地址空间
异步: 进程非一次性执行完毕
基本功能
进程管理: 控制、同步、通信、死锁处理、处理机调度等
内存管理: 内存分配、保护、共享;虚拟内存;地址映射
文件管理: 存储空间、目录、读写管理和保护等
设备管理:完成 I/O请求
缓冲管理、设备分配、设备处理、虚拟设备
系统调用:
进程在用户态需要使用内核态的功能
进程控制、通信;操作文件、设备;信息维护、安全等
宏内核和微内核
宏内核:将操作系统功能作为一个紧密结合的整体放到内核
微内核: 一部分操作系统功能移出内核,根据分层的原则划分成若干独立服务
中断分类
外中断:由cpu执行指令以外的事件引起
如IO完成中断、时钟中断、控制台中断
异常: 由 CPU 执行指令的内部事件引起
如非法操作码、地址越界、算术溢出
陷入: 用户程序中使用系统调用
死锁
必要条件
互斥; 不可抢占; 占有和等待;环路等待
处理方法
鸵鸟策略
死锁检测与死锁恢复
死锁预防
死锁避免
鸵鸟策略
检测和恢复
每种类型一个资源:有向图是否存在环
每种类型多个资源: 每个进程开始不被标记,执行中可能被标记,算法结束后没被标记的进程为死锁进程
寻找一个没有标记的进程 Pi,它所请求的资源小于等于 A(剩余资源)。如果找到了这样一个进程,那么将 C 矩阵的第 i 行向量加到 A 中,标记该进程,并转回 1。如果没有这样一个进程,算法终止
恢复:抢占、回滚、杀死进程
预防
破坏其必要条件
破坏互斥条件
允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。
破坏占有和等待条件
规定所有进程在开始执行前请求所需要的全部资源。
破坏不可抢占条件
破坏环路等待
给资源统一编号,进程只能按编号顺序来请求资源。
避免:安全状态监测
单个资源的银行家算法
多个资源的银行家算法:
对所有请求资源小于剩余资源的进程依次标记和释放
内存管理
虚拟内存
虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
分页系统地址映射
内存管理单元MMU管理地址空间和物理内存的转换;
虚拟地址:存储页面号+存储偏移量
页面置换算法
主要目标是使页面置换频率最低(缺页率最低)
最佳 OPT:换出的页面将是最长时间内不再被访问
最近最久未使用 LRU
最近未使用 NRU:NRU 优先换出已经被修改的脏页面(R=0,M=1)
先进先出
第二次机会算法
时钟
分段
把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长
段页式
地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。
分页与分段的比较
对程序员的透明性:分页透明,但是分段需要程序员显式划分每个段。地址空间的维度:分页是一维地址空间,分段是二维的。大小是否可以改变:页的大小不可变,段的大小可以动态改变。出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。
设备管理
磁盘结构
盘面;磁道;扇区(最小物理存储单位:512b或4k)
磁头(磁场、电信号转换);制动手臂;主轴
磁盘调度算法
读写一个磁盘块的时间的影响因素有:
旋转时间(扇区上)
寻道时间(磁道上)
实际的数据传输时间
主要目标是使磁盘的平均寻道时间最短
先来先服务
最短寻道时间优先(不公平,易饥饿)
电梯算法(保持一个方向直到没有请求再改变)
链接
编译系统
源程序:hello.c
预处理阶段:预处理器cpp处理#开头的预处理命令
编译阶段: 编译器ccl翻译成汇编语言
汇编阶段: 汇编器as翻译汇编文件为可重定位目标文件
链接阶段: 链接器ld合并单独编译好的可重定位目标文件和printf.o,得到最终可执行目标文件
静态链接
输入:一组可重定位目标文件
输出:一个完全链接的可执行目标文件
两个任务:
符号解析:符号引用关联符号定义
重定位: 符号定义关联内存位置,修改引用指向位置
目标文件
可执行目标文件: 可直接在内存中执行
可重定位目标文件
共享目标文件:特殊的可重定位目标文件,可以在运行时被动态加载进内存并链接
动态链接
相对于静态链接的两个问题:
更新时重新链接;标准函数库浪费资源
共享库:.so; .dll
特点:
给定的文件系统中一个库只有一个文件,只共享不复制;
内存中的一个共享库的.text节的一个副本可以被不同正在运行的进程共享。