第一章 操作系统概述
1.1操作系统的基本概念
1.1.1 操作系统的概念
系统调用:允许应用程序使用内核功能的接口,只能通过用户程序间接使用
1.1.3 OS的目标和功能
2.OS作为用户 和 硬件之间的接口
接口分为两种:
(1)命令接口:通过命令来组合控制作业的进行
- 联机命令接口
- 又称交互式命令接口
- 适用于分时或实时操作系统
- cmd中的各种命令就是联机命令接口
- 类比于”解释“型编程语言的概念
- 用户说一句,OS做一句
- 脱机命令接口
- 又称批处理命令接口
- 适用于批处理系统
- 你写好了一个.bat文件再在cmd中执行它就是脱机命令接口
- 类比于编程语言类型中的”编译“
- 用户说一堆之后,OS再做一堆
(2)程序接口:码农用它们来请求OS服务
由一组系统调用命令组成(简称系统调用,又称广义指令)
用户->程序->程序接口->OS->硬件
命令接口,谁都可以使用(打开cmd),而程序接口,只有码农写好了程序,一般的计算机用户,通过这个程序才能调用程序接口。
最典型的就是windows的GUI,只有微软的大佬们写好了windows GUI,我们才能通过鼠标和键盘,在看不到的情况下,调用程序接口。
1.1.4 错题及解析
16.OS与用户通信的接口通常不包括缓存管理指令
缓存管理指令由OS之间操作,对用户透明,也就是OS不提供管理缓存的接口,用户无法管理缓存。
而shell、命令解释器属于第一类接口,即命令接口;而广义指令则是第二类接口
17.顺序性是单道程序而不是多道程序的基本特征
多道程序共享也争用有限的资源,所以存在共享性和制约性,而为了竞争的公平起见,多道程序共同执行时也需要有程序不时地中断,所以存在间断性
19.系统开机后,操作系统最终被加载到RAM中的系统区。
有段时间不看计组了,忘了、、、、
二、库函数与系统调用的区别和联系
库函数是编程语言内部的事情,而系统调用是编程语言外部的事情——通过编程语言来进行系统调用。
但是如果在编程语言中,进行系统调用,往往需要导入库函数;同时,许多库函数也会使用系统调用来实现功能。
库函数运行在用户空间,系统调用运行在内核空间。
使用系统调用的库函数要慢,因为要进行上下文的切换、用户态和核心态的转换。
1.2 OS的发展和分类
1.2.2 批处理阶段(OS开始出现)
解决的主要问题:人机矛盾及CPU和I/O设备之间速度不匹配的矛盾
1.单道批处理系统
用户输入一批程序之后,交给计算机执行,但是在计算机中,程序是一道道执行的
特点:
- 自动性:用户将程序交给计算机之后就再也不需要也不能干预了
- 顺序性:”先来先服务“
- 单道性
2.多道批处理系统
解决的主要问题:单道批处理系统中,每道程序的运行期间包括了I/O时间,此时CPU被浪费
特点:
- 多道:计算机中同时存放多道独立的程序
- 宏观上并行:多道程序都处于运行状态
- 微观上并行:对于各个资源,尤其是CPU,还是需要交替执行的
需要解决的问题:
- 分配问题
- 处理器
- 内存
- I/O
- 安全性
- 大量的程序和数据
- 如何保证不会相互影响
1.2.3 分时操作系统
解决的主要问题:批处理操作系统人机交互能力差,程序一旦执行,用户既无法了解也无法控制程序
批处理OS是用户和计算机之间是一对一,基于将计算机资源切成一片片的;
而分时OS是用户和计算机之间是多对一,基于将时间切成一片片的。
由于计算机速度快,时间片轮转得也快,所以给用户的感觉就像自己独占一台计算机。
分时操作系统的主要特征:
- 同时性
- 又称多路性
- 多个终端用户共同使用一台计算机
- 用户们同时或基本同时使用一台计算机
- 交互性:相较于批处理系统,人机交互性更好
- 独立性:用户好像在独占这台计算机
- 及时性:用户的请求能在很短的时间内获得响应
1.2.4 实时操作系统
解决的主要矛盾:分时操作系统应急性差,遇到某些突发情况无法紧急响应
- 硬实时系统
- 某个动作必须在规定时刻完成
- 比如飞行器的飞行控制系统
- 软实时系统
- 偶尔违反情况也可以接受
- 比如飞机订票系统
主要特点:可靠性和及时性
1.2.5 网络操作系统和分布式操作系统
分时和实时操作系统,只有一台计算机,而网络和分布式操作系统则是有许多主机。
网络OS主要特点:
- 资源共享
- 各个计算机之间通信
分布式OS:
- 任意两台计算机通过通信方式交换信息
- 地位平等
- 所有资源为用户共享
- 若干计算机都可以构成子系统并支持重构
- 任何工作都可以分布在几台计算机上,由它们并行、协同完成
分布式OS与网络OS本质上的不同在于:在分布式操作系统中,若干计算机协同完成同一任务
1.2.7 习题及解析
7.实时操作系统必须在被控制对象规定的时间处理来自外部的时间
二、综合应用题
3.甘特图如下:
1.3操作系统的运行环境
1.3.1 操作系统的运行机制
OS中,CPU需要执行两种不同的程序:内核程序和应用程序。
前者是后者的管理者,所以需要执行一些后者所不能执行的”特权指令“:
- I/O指令
- 置中断指令
- 存取用于内存保护的寄存器
- 送程序状态字到程序状态字寄存器
具体实现:划分了管态(核心态)和目态(用户态)来实现
操作系统的内核:
- OS的最底层
- 与硬件关联较紧密的模块
- 时钟管理
- 中断处理
- 设备驱动
- 与硬件关联较紧密的模块
- 再上一层
- 运行频率较高的程序
- 进程管理
- 存储器管理
- 设备管理
- 运行频率较高的程序
内核的基本内容:
1.时钟管理
计算机中最重要的设备:时钟
时钟的功能:
- 计时
- 提供标准的系统时间
- 时钟中断
- 实现进程切换
- 分时OS:时间片轮转调度
- 实时OS:按截止时间控制运行
- 批处理:用时钟管理衡量一个进程执行的程度
- 实现进程切换
2.中断机制
现代OS是靠中断驱动的OS
中断是OS各项操作的基础
- 键盘或鼠标的输入
- 进程的管理和调用
- 系统功能的调用
- 设备驱动
- 文件访问
中断机制中,只有一小部分属于内核,负责保护和恢复中断现场的信息
3.原语
不可再分的操作
特点:
- 处于OS的最底层,最接近硬件
- 只能一气呵成
- 时间短,调用频繁
定义原语最直接的方式是关闭中断
举个栗子
- 设备驱动
- CPU切换
- 进程通信
4.系统控制的数据结构及处理
用来登记状态信息的数据结构:
- 作业控制块
- 进程控制块PCB
- 设备控制块
- 各类链表
- 消息队列
- 缓冲区
- 空闲区登记表
- 内存分配表
- 等等
常见操作:
- 进程管理:进程状态管理、进程调度和分派、创建和撤销PCB
- 存储器管理:存储器的空间分配和回收、内存信息保护程序、代码对换程序
- 设备管理:缓冲区管理、设备分配和回收
核心态指令包括系统调用类指令,对时钟、中断和原语的操作指令
1.3.2 中断和异常的概念
系统不允许用户程序实现核心态的功能,而它们又必须实现这些功能。
而从用户态进入核心态的”门“就是中断,是通过硬件实现的。
中断是现代操作系统中非常重要的概念:因为OS的发展方向就是不断提高资源利用率的过程,最直接的手段就是在程序并未使用某种资源时,将它对这种资源的控制权释放,这是通过中断实现的。
中断:
- Interruption
- 来自CPU指令指令以外的事情发生
- 举个栗子
- 设备发出的I/O结束中断
- 时钟中断:时间片已到,让处理机处理计时、启动定时运行的任务
异常:
- Exception
- 又称内中断、例外或陷入(Trap)
- 源自CPU执行的指令内部的事件
- 举个栗子
- 非法操作码
- 地址越界
- 算术溢出
- 虚存系统的内存缺页
- 专门的陷入指令
事实上,中断分为广义中断和狭义中断:
中断:
- 外中断(中断)
- 外设请求
- 人为干预
- 内中断(异常)
- 自愿中断——指令中断
- 强迫中断
- 硬件中断
- 软件中断
1.3.3 系统调用
凡是与资源有关的操作,都必须通过系统调用,由OS代为完成
系统调用的分类:
- 设备管理
- 文件管理
- 进程管理
- 进程控制
- 内存管理
OS的运行环境可以这样理解:
用户运行上层程序,需要OS支持时,通过硬件实现的中断进入内核态,也可能通过异常进入核心态。
当管理程序运行结束时,用户程序需要继续执行,则通过保存的程序现场退出中断处理或异常处理返回断点处
在操作系统中,我们关心的的是用户态和内核态的软件实现和切换,而非硬件。
由用户态转向核心态的例子
- 系统调用
- 发生一次中断
- 用户程序产生错误
- 用户企图执行特权指令
- 从核心态向用户态由一条指令实现,这也是特权指令,一般是中断返回指令
由用户态进入核心态,不只是状态需要切换,所使用的堆栈也可能需要由用户堆栈转为系统堆栈。
由用户态进入核心态时,需要用到访管程序,是在用户态使用的,所以不可能是特权指令。
1.3.4 习题&解析
3.系统调用需要触发Trap指令,如基于x86的linux,该指令为int 0x80或sysenter
???系统调用不是一种很正常的,程序对OS的调用嘛,不是很异常的情况啊,为什么要调用trap?
5.用户程序在用户态下要使用特权指令引起的中断属于访管中断而非外部中断。
用户态到核心态的确需要访管指令,所以是访管中断。而这中断来自于执行的指令内部,所以不属于外部中断。
7.进程调度不需要硬件支持,由操作系统实现。地址映射中的重定位需要硬件支持。
15.广义指令而非寄存器清零只能在核心态下执行。
注意区分”调用“和”执行“。广义指令即为系统调用,调用系统调用的可能是在用户态,但是系统调用指令执行时一定是在核心态。
20.中断处理和子程序调用都需要压栈保护现场,中断处理一定会而子程序调用不需要保存的内容是程序状态字寄存器。子程序只需要保存程序断点,即该指令的下一条指令的地址;中断处理不仅需要保存断点(PC内容),还需要保存程序状态字的内容PSW(中断处理中,最重要的就是PC&PSW)
24.外部中断发生时,PC值由中断隐指令自动保存,而OS负责保存通用寄存器
MOV R0,addr
可能出现缺页异常的情况
26.系统调用的过程:正在执行的进程先传递系统调用的参数,然后执行trap指令负责将用户态转化为核心态,并将返回地址压栈以备后用
27.多道程序并发执行是指,有程序正在CPU上执行,而另一些程序正在I/O设备上进行传输
通道是一种控制一台或多台外部设备的硬件,他一旦被启动就独立于CPU执行。
因此做到了CPU和I/O并行执行。
1.4 微内核与大内核
大内核就是将OS的主要功能模块都作为一个紧密联系的整体运行在核心态,拥有无与伦比的性能优势。
但是,随着需求的不断增长,需要OS提供的服务也越来越多,使操作系统也面临“软件危机”的困境。
为了解决操作系统核心代码维护难得问题,有人提出了微内核。
将基本功能保留在内核,其他的迁移到用户态。它们独立执行,借助微内核,进程间通信的机制进行通信。
缺点是降低了性能,但是因为功能少了,所以更加稳定。