Operating System
进程管理
进程Process
进程是资源分配的基本单位
进程控制块(Process Control Block)PCB描述进程的基本信息和运行状态 进程是抢占式抢夺CPU
线程Thread
线程是资源调度的基本单位
一个进程中可以有多个线程 它们共享进程资源 共享进程的内存地址空间
进程与线程区别
- 进程是资源分配的基本单位 但是线程不拥有资源 线程可以访问进程的资源
- 线程是独立调度的基本单位 在同一进程中的线程切换不会引起进程切换 从一个进程中的线程切换到另一个进程的线程时会引起进程切换
- 创建或撤销进程时系统需要分配和回收资源 开销比创建撤销线程要大 进程的切换需要涉及当前执行进程CPU环境的保存以及新调度进程的设置 而线程切换时只需要保存和设置少量寄存器内容 开销小
- 线程间可以通过直接读写同一进程中的数据进行通信 但进程通信需要借助IPC
进程状态的切换
就绪状态:等待被调度
阻塞状态:等待资源分配
就绪状态和运行状态可以互相转化 就绪状态的进程通过进程调度算法获得CPU时间转为运行状态
运行状态的进程在分配给它的CPU时间片用完之后就会转为就绪状态 等待下一次调度
阻塞状态是缺少需要的资源从而由运行状态转换而来 资源不包括CPU时间 缺少CPU时间会从运行状态变为就绪状态
进程调度算法
批处理系统
先来先服务first-come first-serverd(FCFS)
按照请求的顺序进行调度
不利于短作业 因为短作业必须一直等待前面的长作业执行完毕才能执行 短作业等待时间过长
短作业优先shortest job first(SJF)
按估计运行时间最短的顺序进行调度
不利于长作业 长作业处于抑制等待短作业执行完毕 如果一直有短作业到来 长作业永远等不到调度
最短剩余时间优先shortest remaining time next(SRTN)
短作业优先的抢占式调度算法 按剩余的运行时间的长短顺序进行调度 当一个新作业到达时 将其整个运行时间与当前进程的剩余时间进行比较 如果新的进程需要时间更少 就挂起当前进程运行新的进程 否则新的进程等待
交互式系统
时间片轮转
将所有就绪进程按照先来先服务的顺序排成一个队列 每次调度时把CPU时间分配给队首进程 时间片用完后计时器发出时钟中断 调度程序停止该进程的执行 并将运行进程送到就绪队列的尾部 同时把CPU时间分配给下一个队首进程
时间片轮转算法的效率和时间片的大小有关系
时间片过小 会导致进程切换频繁 在进程切换上耗费太多时间 时间片过长 实时性无法得到保证
优先级调度
为每一个进程设置优先级 按优先级进行调度顺序
防止低优先级进程永远得不到调度 可设置随时间增加提升进程的优先级
多级反馈队列
每一个时间片轮转的队列设置不同的时间片 越向下一级时间片越长 每个队列的优先权也不同 最上面的队列优先权最高
可看做时间片轮转调度和优先级调度算法的结合
进程同步
临界区
对临界资源进行访问的那段代码为临界区
互斥
多个进程在同一时刻只有一个近程能进入临界区
信号量(Semaphore)
信号量由一个值和一个指针组成 指针指向等待该信号量的进程 信号量的值表示相应资源的使用情况
用来保证临界区代码不被并发调用 在进入临界区前 线程必须获取一个信号量 离开临界区线程必须释放信号量
整型信号量
信号量S>=0 S表示可用资源的数量 执行一次P操作=请求分配一个资源 S的值减一
信号量S<0 表示没有可用资源 S的绝对值表示当前等待该资源的进程数 请求者必须等待其他进程释放该类资源才能继续运行
执行一个V操作=释放一个资源 S的值加一
信号量的值只能通过pv操作来改变
内存管理
管理方式
连续分配
单一连续分配
固定分区分配
动态分区分配
非连续分配
基本分页
基本分段
段页式
内存扩充
采用 覆盖/交换 技术