- 1.操作系统的目标和功能?(什么是操作系统?)
- 1.操作系统是计算机资源的管理者
- 处理机管理
- 进程控制
- 进程同步
- 进程通信
- 死锁处理
- 处理机调度
- 存储器管理
- 提高内存利用率,内存的分配与回收
- 地址映射
- 内存保护与共享
- 内存扩充
- 文件管理
- 计算机中的信息都是以文件的形式存在的
- 设备管理
- 完成用户的I/O请求,方便用户使用设备、
- 并提高设备的利用率
- 处理机管理
- 2.操作系统为用户提供使用计算机硬件系统的接口
- 命令接口
- 用户通过控制台或终端输入操作命令,向系统提供各种服务要求
- 图形接口
- 最常见的图形用户界面GUI (最终还是通过调用程序接口实现的)
- 程序接口
- 由系统调用 组成,用户在程序中使用这些系统调用来请求操作系统为其提供服务
- 命令接口
- 3.操作系统用作扩充机器
- 没有任何软件支持的计算机称为裸机,实际呈现在用户面前的计算机系统是经过若干层软件改造的计算机。
- 操作系统将裸机改造成功能更强、使用更方便的机器。
- 我们将覆盖了软件的机器称为扩充机器或虚拟机。
- 1.操作系统是计算机资源的管理者
- 操作系统的运行机制
- 简单了解程序的运行原理
- 高级语言编写代码一>机器指令
- 程序运行的过程就是CPU执行指令的过程
- 两类程序
- 内核程序
- 应用程序
- 两类指令
- 特权指令
- 非特权指令
- 两种处理器状态
- 内核态/核心态/管态
- 用户态/目态
- 内核
- 内核是操作系统最重要最核心的部分
- 由很多内核程序组成操作系统内核
- 如何变态?
- 内核态- ->用户态
- 一条修改PSW的特权指令
- 用户态- ->内核态
- 由中断引起,硬件自动完成
- 内核态- ->用户态
- 简单了解程序的运行原理
- 中断和异常
- 中断的作用
- 让操作系统内核强行夺回CPU的控制权
- 使CPU从用户态变为内核态
- 中断的分类
- 内中断(也称异常、例外)
- 陷阱、陷入(trap)
- 故障(fault)
- 终止(abort)
- 外中断(也称"中断")
- 时钟中断
- I/0中断请求
- 内中断(也称异常、例外)
- 中断机制的基本实现原理
- 检查中断信号
- 内中断: CPU在执行指令时会检查是否有异常发生
- 外中断:每个指令周期末尾,CPU都会检查是否有外中断信号需要处理
- 找到相应的中断处理程序
- 通过" 中断向量表"实现
- 检查中断信号
- 中断的作用
- 系统调用
- 什么是系统调用?
- 操作系统对应用程序/程序员提供的接口
- 系统调用与库函数的区别
- 有的库函数是对系统调用的进一步封装
- 有的库函数没有使用系统调用
- 小例子:为什么系统调用是必须的?
- 凡是与共享资源有关的操作、会直接影响到其他进程的操作,就一定需要操作系统介入,就需要通过系统调用来实现
- 什么功能要用系统调用实现?
- 设备管理
- 文件管理
- 进程控制
- 进程通信
- 内存管理
- 系统调用的过程
- 传参
- 陷入指令/Trap/
- 由操作系统内核程序处理系统调用请求
- 返回应用程序
- 什么是系统调用?
- 操作系统的体系结构
- 内核
- 内核是计算机上配置的底层软件,是计算机功能的延伸,包括以下4个方面的内容:
- 1)时钟管理
- 时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。
- 其次,通过时钟中断的管理,可以实现进程的切换。
- 在分时操作系统中,
- 采用时间片轮转调 度的实现;
- 在实时系统中,
- 按截至时间控制运行的实现;
- 在批处理系统中,
- 通过时钟管理来衡量 一个作业的运行程度等。
- 2)中断机制
- 引入中断技术的初衷是提高多道程序运行环境中CPU的利用率
- 主要针对外部设备
- 3)原语
- 操作系统底层是一些可被调用的公用小程序,它们各自完成一个规定的操作,其特点 是:
- ------ 它们处于操作系统的最底层,是最接近硬件的部分。
- ------ 这些程序的运行具有原子性,其操作只能一气呵成
- ------ 这些程序的运行时间都较短,而且调用频繁。
- 定义原语的直接方法是关闭中断,让它的所有动作不可分割地进行完再打开中断。
- 操作系统底层是一些可被调用的公用小程序,它们各自完成一个规定的操作,其特点 是:
- 4)系统控制的数据结构及处理
- 系统中用来登记状态信息的数据结构很多,比如:作业控制块、 进程控制块、设备控制块、各类链表等。为了实现有效的管理,系统需要一些基本的操作,常见 的操作有以下三种:
- ------ 进程管理:进程状态管理、进程调度和分配、创建和撤销进程控制块等。
- ------ 存储器管理:存储器的空间分配和回收、内存信息保护程序、代码对换程序等。 ------ 设备管理:缓冲区管理、设备分配和回收等
- 系统中用来登记状态信息的数据结构很多,比如:作业控制块、 进程控制块、设备控制块、各类链表等。为了实现有效的管理,系统需要一些基本的操作,常见 的操作有以下三种:
- 1)时钟管理
- 内核是计算机上配置的底层软件,是计算机功能的延伸,包括以下4个方面的内容:
- 大内核
- 将操作系统的主要功能模块都作为系统内核,运行在核心态
- 优点:高性能
- 缺点:内核代码庞大,结构混乱,难以维护
- 微内核
- 只把最基本的功能保留在内核
- 优点:内核功能少,结构清晰,方便维护
- 缺点:需要频繁地在核心态和用户态之间切换,性能低
- 内核
- 进程
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位- 进程实体的组成
PCB是给操作系统用的。
程序段、数据段是给进程自己用的。- PCB(进程控制块)
进程存在的唯一标志- 进程描述信息
- 进程标识符PID
- 用户标识符UID
- 进程控制和管理信息
- CPU、磁盘、网络流量使用情况统计...
- 进程当前状态:就绪态/阻塞态/运行态...
- 资源分配清单
- 正在使用哪些文件
- 正在使用哪些I/O设备
- 正在使用哪些内存区域
- 处理机相关信息
- 如PSW、PC等等各种寄存器的值(用于实现进程切换)
- 进程描述信息
- 程序段
- 程序的代码(指令序列)
- 数据段
- 运行过程中产生的各种数据(如:程序中定义的变量)
- PCB(进程控制块)
- 进程的特征
程序是静态的,进程是动态的- 动态性
- 动态性是进程最基本的特征
- 进程是程序的一次执行过程,是动态地产生、变化和消亡的
- 并发性
- 内存中有多个进程实体,各进程可并发执行
- 独立性
- 进程是能独立运行、独立获得资源、独立接受调度的基本单位
- 异步性
- 各进程按各自独立的、不可预知的速度向前推进,操作系统要提供"进程同步机制"来解决异步问题
- 结构性
- 每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成
- 动态性
- 进程的状态
- 创建态
- 进程正在被创建,操作系统为进程分配资源、初始化PCB
- 运行态
- 占有CPU,并在CPU上运行
- 就绪态
- 已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
- 阻塞态
- 因等待某一事件而暂时不能运行
- 终止态
- 进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB
- 创建态
- 进程的组织方式
- 链接方式
- 按照进程状态将PCB分为多个队列操作系统持有指向各个队列的指针
- 索引方式
- 根据进程状态的不同,建立几张索引表操作系统持有指向各个索引表的指针
- 链接方式
- 进程实体的组成
- 进程的调度算法
- 调度算法的评价指标
- CPU利用率
- 利用率=忙碌的时间 / 总时间
- 系统吞吐量
- 系统吞吐量=总共完成了多少道作业 / 总共花了多少时间
- 周转时间
- 周转时间=作业完成时间-作业提交时间
- 平均周转时间=各作业周转时间之和 / 作业数
- 带权周转时间=作业周转时间 / 作业实际运行的时间
- 平均带权周转时间=各作业带权周转时间之和 / 作业数
- 等待时间
- 进程 / 作业等待被服务的时间之和
- 平均等待时间
- 即各个进程 / 作业等待时间的平均值
- 响应时间
- 从用户提交请求到首次产生响应所用的时间
- CPU利用率
- 先来先服务(FCFS, First Come First Serve )
按照作业/进程到达的先后顺序进行服务- 算法思想
- 主要从“公平”的角度考虑(类似于我们生活中排队买东西的例子)
- 算法规则
- 按照作业/进程到达的先后顺序进行服务
- 用于作业/进程调度
- 用于作业调度时,考虑的是哪个作业先到达后备队列
- 用于进程调度时,考虑的是哪个进程先到达就绪队列
- 是否可抢占?
- 非抢占式的算法
- 优缺点
- 优点:公平、算法实现简单
- 缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。
- 是否会导致饥饿
- 不会
- 算法思想
- 短作业优先(SJF, Shortest Job First)
最短的作业/进程优先得到服务- 算法思想
- 追求最少的平均等待时间,最少的平均周转时间、最少的平均平均带权周转时间
- 算法规则
- 最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短)
- 用于作业/进程调度
- 即可用于作业调度,也可用于进程调度。用于进程调度时 称为“短进程优先(SPF, Shortest Process First)算法”
- 是否可抢占?
- SJF和SPF是非抢占式的算法。
- 但是也有抢占式的版本-- -最短剩余时间优先算法
- 优缺点
- 缺点:
- 不公平。对短作业有利,对长作业不利。
- 可能产生饥饿现象。
- 作业/进程的运行时间是由用户提供的, 并不一定真实,不一定能做到真正的短作业优先
- 优点:
- “ 最短的”平均等待时间、平均周转时间
- 缺点:
- 是否会导致饥饿
- 会。如果源源不断地有短作业/进程到来,可能使长作业/进程长时间得不到服务,产生“饥饿”现象。如果一直得不到服务,则称为“饿死”
- 算法思想
- 高响应比优先(HRRN, Highest Response Ratio Next)
先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务- 算法思想
- 要综合考虑作业/进程的等待时间和要求服务的时间
- 算法规则
- 在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务
- 用于作业/进程调度
- 即可用于作业调度,也可用于进程调度
- 是否可抢占?
- 非抢占式的算法。因此只有当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算响应比
- 优缺点
- 综合考虑了等待时间和运行时间(要求服务时间)
- 等待时间相同时,
- 要求服务时间短的优先(SJF 的优点)
- 要求服务时间相同时,
- 等待时间长的优先(FCFS 的优点)
- 对于长作业来说,
- 随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题
- 是否会导致饥饿
- 不会
- 算法思想
- 时间片轮转(RR, Round-Robin)
按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。- 算法思想
- 公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应
- 算法规则
- 按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队。
- 用于作业/进程调度.
- 用于进程调度(只有作业放入内存建立了相应的进程后,才能被分配处理机时间片)
- 是否可抢占?
- 若进程未能在时间片内运行完,将被强行剥夺处理机使用权,因此时间片轮转调度算法属于抢占式的算法。由时钟装置发出时钟中断来通知CPU时间片已到
- 优缺点
- 优点:公平;响应快,适用于分时操作系统;
- 缺点:由于高频率的进程切换,因此有一定开销:不区分任务的紧急程度。
- 是否会导致饥饿
- 不会
- 算法思想
- 调度算法的评价指标
- 线程
- 引入线程机制后,有什么变化?
- 资源分配、调度
- 引入线程后,进程是资源分配的基本单位,线程是调度的基本单位
- 并发性
- 传统进程机制中,只能进程间并发
- 引入线程后,各线程间也能并发,提升了并发度
- 系统开销
- 传统的进程间并发,需要切换进程的运行环境,系统开销很大
- 线程间并发,如果是同一进程内的线程切换,则不需要切换进程环境,系统开销小
- 引入线程后,并发所带来的系统开销减小
- 资源分配、调度
- 线程的实现方式
- 用户级线程
- 内核级线程
- 多线程模型
- 一对一模型
- 一个用户级线程映射到一个内核级线程
- 优:
- 各个线程可分配到多核处理机并行执行,并发度高
- 缺:
- 线程管理都需要操作系统支持,开销大
- 多对一模型
- 多个用户级线程映射到一个内核级线程
- 优:
- 线程管理开销小,效率高
- 缺:
- 一个线程阻塞会导致整个进程都被阻塞(并发度低)
- 多对多模型
- n个用户级线程映射到m个内核级线程(n≥m)
- 集二者之所长
- 一对一模型
- 处理机调度
- 基本概念
- 确定莫种规则来决定处理任务的顺序
- 三个层次
- 高级调度(作业调度)
- 中级调度(内存调度)
- 低级调度(进程调度)
- 三层调度的联系、对比
- 补充知识
- 进程的"挂起态”七状态模型
- 基本概念
- 引入线程机制后,有什么变化?
串行总线与并行总线
串行总线
优点:只需要一条传输线,成本低廉,广泛应用于长距离传输;应用于计算机内部时,可以节省布线空间。
缺点:在数据发送和接收的时候要进行拆卸和装配,要考虑串行-并行转换的问题。
并行总线
优点:总线的逻辑时序比较简单,电路实现起来比较容易。
缺点:信号线数量多,占用更多的布线空间;远距离传输成本高昂;由于工作频率较高时,并行的信号线之间会产生严重干扰,对每条线等长的要求也越高,所以无法持续提升工作频率。
死锁、饥饿、死循环的区别
死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。
饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先(SPF) 算法 中,若有源源不断的短进程到来,则长进程将一- 直得不到处理机,从而发生长进程“饥饿”。
死循环:某进程执行过程中- -直跳不出某个循环的现象。有时是因为程序逻辑bug导致的,有时是程序员故意设计的。
分页、分段的区别
页是信息的物理单位。分页的主要目的是为了实现离散分配,提高内存利用率。分页仅仅是系统管理上的需要,完全是系统行为,对用户是不可见的。
段是信息的逻辑单位。分页的主要目的是更好地满足用户需求。一个段通常包含着一组属于一个逻辑模块的信息。分段对用户是可见的,用户编程时需要显式地给出段名。
页的大小固定且由系统决定。段的长度却不固定,决定于用户编写的程序。
分页的用户进程地址空间是一维的,程序员只需给出一个记忆符即可表示一个地址。
分段的用户进程地址空间是二维的,程序员在标识一个地址时,既要给出段名,也要给出段内地址。分段比分页更容易实现信息的共享和保护。不能被修改的代码称为纯代码或可重入代码(不属于临界资源),这样的代码是可以共享的。可修改的代码是不能共享的
访问一个逻辑地址需要几次访存?
分页(单级页表) :第一次访存--查内存中的页表,第二次访存- -- -访问目标内存单元。总共两次访存.
分段:第一次访存--查内存中的段表,第二次访存--访问目标内存单元。总共两次访存
与分页系统类似,分段系统中也可以引入快表机构,将近期访问过的段表项放到快表中,这样可以少一次访问,加快地址变换速度。
段页式管理方式
传统存储管理方式的特征和缺点
一次性:作业必须一次性全部装入内存后才能开始运行。
这会造成两个问题:
①作业很大时,不能全部装入内存,导致大作业无法运行;
②当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降。
驻留性: 一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束。事实上,在一个时间段内,只需要访问作业的一小部分数据即可正常运行,这就导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源。