您的位置:首页 > 其它

操作系统复习

2018-03-25 15:53 267 查看

一些操作系统的基础知识

前驱图 用来描述进程执行的先后顺序

为了更好的描述程序的顺序和并发情况

何为用户级线程和内核支持线程

用户级线程和内核级支持线程是线程的实现方式

内核支持线程 能够同时调度同一个进程中的多个线程并发执行 具有很小的数据栈和堆栈 线程切换比较快 开销小

缺点是对于用户的线程,因为其是在用户态运行 切换时需从用户太转到核心态 系统开销大

用户级线程仅存在于用户空间中,此类线程的创建、撤销、线程之间的同步与通信功能,都无须利用系统调用来实现。用户进程利用线程库来控制用户线程。由于线程在进程内切换的规则远比进程调度和切换的规则简单,不需要用户态/核心态切换,所以切换速度快。

调度仍是以进程为单位。 当一个进程中有100个进程 另一个进程中有一个线程 这样是不公平的

组合方式对于模型

多对一 将用户线程映射到一个内核控制线程 缺点 一个线程阻塞 全部阻塞

一对一 一 一 创建一个用户级线程相应就要创建一个内核级线程 开销大

多对多 前两种的组合

处理机的调度

高级调度—作业调度 根据算法决定外存上处于后备队列的那几个作业调入内存,为他们创建进程,分配必要的资源并放到就绪队列

低级调度—进程调度 决定就绪队列中哪个进程获得处理机

中级调度—内存调度 为提高系统吞吐量和资源利用率,将暂时不能运行的进程调至外存等待 称其为挂起

作业的三个阶段和三种状态

收容阶段 将用户提交的作业输入到硬盘上 再为其建立JCB 并将其加入后备队列 (后备状态)

运行阶段 被作业调度选中 为其分配必要的资源 建立进程 并放入就绪队列(运行状态)

完成阶段 作业执行完成或者发生异常而提前结束 (完成状态)

作业调度的任务 作业调度算法

任务 决定接纳多少个作业 接纳哪些作业

先来先服务算法

短作业优先算法 会导致饥饿

基于优先级的有

优先级调度算法 优先级是固定的

高响应比优先调度算法 优先级是改变的 随着等待时间增加 其优先级不断增加

进程调度

任务 保存处理机现场信息,按某种算法选取进程,把处理器分配给他

进程调度的方式

非抢占式 一旦把处理机分配给某个进程后,就一直让它运行下去,绝不会时钟始终中断或任何其他原因去抢占当前正在运行进程的处理机

抢占式 允许调度程序根据某种原则去暂停某个正在执行的程序,把分配给该进程的处理机分配给另一个进程

抢占遵循的原则主要有

优先权原则

短进程优先原则

时间片原则

进程调度的算法

时间片轮转调度算法 根据先来先服务的策略,将所有的就绪进程排成一个就绪队列,并设置每隔一定时间间隔产生一次中断。 这样会默认所有进程的紧迫性是相同的

优先级调度算法

将处理机分配给就绪队列中优先级最高的进程

分为非抢占式优先级调度算法 抢占式优先级调度算法

优先级分类 静态优先级 动态优先级

静态 整个进程运行期间优先级不变

动态优先级 随着等待时间的增加 优先级增加 类似于高响应比优先算法

多队列调度算法

将原来的就绪队列分为多个
4000
根据不同类型或性质的进程分配在不同的就绪队列

多级反馈队列

就绪队列拆分长多个队列 每个队列的优先级由高到低 时间片由短到长 这种算法性能相对于其他几种来说更好

实时调度

实时系统中可能存在着两种不同性质的实时任务 HRT任务和SRT任务 (软实时与硬实时)

实现实时调度的基本条件

1、应向调度程序提供有关任务的信息

就绪时间 开始截止。,时间 完成截止时间 处理时间 资源要求 优先级 等

2、系统处理能力强

3、采用抢占式调度机制

4、具有快速切换机制

实时调度算法的分类

抢占式 非抢占式

最早截止时间优先算法

根据任务的截止时间确定任务的优先级

最低松弛度优先算法

根据任务的紧急度 任务的紧急程度越高 优先级就越高

死锁

死锁的起因

竞争不可抢占行资源引起死锁

竞争可消耗资源引起死锁

进程推进顺序不当引起死锁:进程进入不安全状态后继续向前推进 进而导致死锁

死锁的定义:

如果一组进程中的每一个进程都在等待仅由该组进程中其他进程才能引发的事件,那么该组进程是死锁的

死锁产生的必要条件

互斥 某一进程申请了该资源的同时 其他进程不能使用该资源

请求和保持 一个进程申请了一个资源的同时 又在申请其他资源 申请的资源已经被占用 会导致进程阻塞

不可抢夺 一个进程已经占有的资源不能被抢占 只有进程完成后才会被释放

循环等待 发生死锁的进程必然存在一个循环链

处理死锁的方法

预防死锁 破坏死锁的四个必要条件

破坏请求和保持 1、一次性申请全部所需的资源 2、释放已申请的资源和 才可以继续申请

破坏不可抢占条件 已保持了不可剥夺资源的进程 申请新的资源不能得到满足时 必须释放已经保持的所有资源

破坏循环等待条件 对进程的运行顺序进行排序

避免死锁 在资源分配的过程中 防止系统进入不安全状态 银行家算法 对进程请求的资源进行分配之前 先计算分配后是否存在一个安全序列 使得进程运行完毕 如果有 则进行分配

检测死锁 通常用资源分配图进行检测 当且仅当某种状态下的资源分配图是不可以完全简化的 那么这种状态为死锁状态

解除死锁 终止进程的方法 : 1、终止所有进程 2、逐个终止进程

存储器的管理

主存和寄存器

主存 就是我们常说的内存

对寄存器的访问速度最快

高速缓存 在主存和寄存器之间 用于备份主存中的常用的数据 以减少对主存的访问次数 为了缓和主存与处理机之间的速度不匹配的问题

磁盘 缓存 为了缓和主存与磁盘之间速度不匹配的问题

程序的装入与链接

源程序—-编译——》若干个目标模块—+所需的库函数—链接—》装入模块—–》装入内存

C++程序与java程序运行过程

gcc 运行 预处理–》编译—》汇编–》链接 gcc -c hello.c -o hello

绝对装入方式 直接装入到物理内存

可重定位装入方式 逻辑地址与物理地址不同 物理地址是逻辑地址有物理首地址相加得到的结果

动态重定位装入 程序执行时进行地址转换

程序装入内存时必须为其分配一定大小的内存空间

连续内存分配

单一连续内存分配

整个用户区仅装入一道用户程序 适用于早起的单用户单处理机操作系统

固定分区分配

将内存划分为若干个固定大小的分区 大小可以相等 也可以不等 内存碎片问题

动态分区分配

根据进程的实际需要,动态的为之分配内存空间

基于顺序的动态分区分配算法

首次适应算法 倾向于优先分配地址空间的空闲分区 从而保留了大空闲区 缺点是低值空间不停的被划分 产生了很多难以利用的、很小的空闲分区

循环适应算法 从上次找到的空闲分区的下一个分区开始找 直至找到第一个满足要求的空闲分区 会导致缺乏大的空间

最佳适应算法 把满足要求的 又是最小的空闲分区分配给进程

最坏适应算法 与最佳适应相反 选择最大的

基于索引搜索的动态分区算法

快速适应算法 对分区进行分类

伙伴系统

动态可重定位分区分配

相对地址转为绝对地址的事假推迟到程序真正执行的时候

必须有硬件地址变换机构的支持 即必须有重定位寄存器 用来存放程序在内存中的起始地址 实际地址是逻辑地址与寄存器中的起始地址相加

比动态分区分配增加了紧凑功能

对换技术 将程序中暂时不能运行进程 或者暂时不用的程序和数据换出到外存上 一遍腾出内存空间

离散的存储方式(非连续)

分页存储管理方式 将用户的程序地址空分为若干个固定大小的区域,称为页或者页面 典型的页面大小为1kb

相应的将内存空间也划分为若干个物理块或页框 页和块大小相同 可以把程序的任意一页放在任意一个物理块中 实现了离散分配

管理

页号 页内偏移量(每一页的大小)

页表 记录每一页所对应的物理块

地址变换结构 将逻辑地址中页号 转为物理地址中的块号

步骤 先将页号与页表长度比较 如果超过了页表长度 则会发生越界 若没有发生越界 则计算出该项在页表中的位置 (页表的起始位置+页号*页表项长度)进而得到器物理地址

(访问两次内存 第一次访问内存中的页表 找到物理地址 第二次访问内存中的物理块)

块表或联想寄存器 (特殊的缓冲寄存器) 先将页号与高速缓存中的所有页号相比 若有匹配 便直接得出物理块号 若没有 则访问内存中的页表 在也飙中找到后 将该页号对也的物理块号 送到地址寄存器;同时将该页表项读入内存

两级页表和多级页表 解决页表过长的问题

分段存储管理方式 用户内地址空间划分为若干个大小不等的段 是为了满足用户(程序员)在编程和使用上多方面的要求

分页与分段的区别 分页是系统的行为 对用户不可见 分段主要是满足用户的需要

分页大小是固定的 分段 长度不固定

分段突出的优点是信息共享 即若干个进程共享一个或多个分段 对段的保护也十分简单易行

段页式存储管理方式 分段和分页的相结合

先分成若干个段 再将每个段划分成若干个页

虚拟存储器

即逻辑上扩充内存容量

常规存储器 需一次性把作业全部装入内存后才能运行

驻留性 作业装入内存后 整个作业一直驻留在内存中 直到程序运行结束

缺点 这样会导致许多在程序运行中不可用或者暂时不用的数据占用大量的内存空间,而一些需要运行的作业无法装入运行

局部性原理

时间局限性 如果程序中某条指令被执行,则不久后该指令可能再次被执行;如果某数据被访问过,其典型的情况是程序中存在大量的循环

空间局限性 一旦程序访问了某个存储单元,在不久后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址可能集中在一定的范围之内。其典型的情况是程序的顺序执行

所谓的虚拟存储器是指具有调入功能和置换功能,能从逻辑上对内存容量加以扩展的一种存储器系统。其逻辑容量是由内存和外存容量之和所决定,运行速度接近于内存,成本又接近于外存

请求分页存储管理方式

请求页表机制 页号 物理块 状态位 访问位 修改位 外存地址

缺页中断机构 一种特殊的中断 在指令执行期间产生缓和处理中断信号 一条指令在执行期间 可能产生多次中断

地址变换机构

工作流程 开始-》页号是否大于页表长度 如果大于 则产生越界中断 否则 检查页表项是否在块表中 如果在快表中 则直接映射 得到物理地址 否则从内存中找所需要的页 如果在内存中找到的话 将该页的信息存储到快表中 并得到其物理地址 若不在内存中 则 发生却缺页中断-》去外存中调入缺页 判断内存 是否已满 如果 内存已经满了 则从内存中置换出一页 置换时 判断该页面是否修改 如果修改 将该页写会外存 然后启动IO 将一页换入内存 修改页表

请求分页的内存分配

固定分配局部置换 为每个进程分配固定的物理块 内存已满时 从内存中置换出一页来 并把所要访问的页面从外存中调入

可变分区 全局置换 先为进程分配固定的物理块数 程序运行时根据情况在适当的增加和减少 所谓的全局置换 是从保留的空闲物理块中选择一块分配给进程 并经访问的页面调入

可变分区局部置换 如果发生缺页中断 选一页 置换出 如果频繁的放缺页中断 则为其分配更多的物理块

页面置换算法

最佳置换算法 往后看 (无法实现 因为程序运行过程中一般无法预知哪个页面将会被调用) 作为页面置换算法的评判尺度

先进先出置换算法 可能会导致页面频繁的被调入调出 即 抖动

LRU 最近最久未使用算法 往前看 最近一段时间 哪个最长时间没有被使用 则置换出去

CLOCK算法 LRU算法的一种近似算法 只需要一个访问位 将内存中所有的页面 连接成一个循环队列 如果某一页被访问过 则将其访问位置为1 当要置换页面时 选择访问位为0 的页面置换出去

改进clock算法 优先置换出 根据访问位和修改为确定把那一页置换出去比较好

抖动 当系统中运行的进程过多时 或者采用的页面置换算法不当时 会导致频繁的发生缺页现象 这种频繁的调入调出页面 称为抖动

工作集 缺页率随着为其分配的物理块数的增加 会减少 但是 当达到一定的程度时 再为其增加物理块数时 缺页率不会下降

工作集 是基于程序的局部性原理 在程序的运行期间 对页面的访问是不均匀的 可能某一段时间访问的页面 局限于某一些页面 因此 我们把这些活跃的页面 指定为工作集

软链接 快捷方式 占空间

硬链接 文件别名 相当于指针 同一文件系统

逻辑结构 无结构的流式(按顺序组织 代码块) 有结构的记录式文件 顺序文件 索引文件

物理结构 连续分配 存取速度快

链接分配 增删该方便 不易查

索引分配 查询效率高 易于动态增长 有一定的开销

文件存储空间的管理

空闲表

空闲链表 空闲盘区构成一个链

位示图 记录使用情况

成组链接

用户层软件

设备独立性软件

设备驱动

中断处理方式

硬件

磁盘调度

先来先服务算法

最短寻道时间

scan

c-scan
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: