《操作系统概念》笔记
《操作系统概念》
导论
操作系统定义
操作系统是一直运行在计算机上的程序(内核)。
(除了内核外,还有其他两类程序:系统程序( system program)和应用程序。前者是与系统运行有关的程序,但不属于内核,后者与系统运行无关)
系统程序包含了系统进程和系统后台程序,其生命周期与内核一样。
功能
在用户视角来看具有使用方便、一定的性能和资源利用的功能
在系统视角来看具有资源分配和控制程序的能力。
中断
硬件:
硬件传送信号给CPU触发中断。
软件:
软件通过系统调用(监督程序调用)触发中断。
通常来说CPU被中断是,它需要转到固定位置(中断服务程序的开始地址)继续执行。
方法:
1.调用一个通用程序以检查中断信息
2.通过中断处理程序的指针表.
其中,指针表位于低地址内存(前100左右的位置)。
中断向量:及每个设备的中断处理程序的地址且通过唯一设备号来索引
3.中断体系结构
保存了中断指令的地址,且在现代体系结构将返回地址保存在系统对栈上。
执行过程
如果中断程序需要修改处理器状态,如修改寄存器的值,则应明确保存当前状态,并在返回之前恢复该状态。在处理完中断之后,保存的返回地址会加载到程序计数器,被中断的计算可以重新开始,就好像中断没有发生过一样。
存储设备
易失性存储器
寄存器、高速缓存、内存
非易失性存储器
固态磁盘、硬盘、光盘、磁带
固态磁盘
某种类型的固态磁盘在运行时将数据保存在一个大的DRAM数组上,且有一个隐藏磁盘和备份电源的电池,在外部电源中断时,固态磁盘控制器将数据从RAM复制到磁盘。
闪存
闪存比DRAM慢,但是无需电源即可保存内容。
NVRAM
一种非易失性存储器,具有备用电池的DRAM。
高速缓存
是易失性存储器,用于解决两个存储组件的访问时间或传输速率。
I/O设备
由常见PC端来说,I/O设备通过SCSI(小型计算机系统接口)控制器,与计算机建立连接,而通过设备驱动程序,来建立设备控制器与操作系统的访问接口。
设备控制器
每个设备控制器维护一定量的本地缓冲存储和一组特定用途的寄存器。
设备控制器负责在所控制的外围设备与本地缓冲存储之间进行数据传递。
在为这种IO设备设置好缓冲、指针和计数器之后,设备控制器可在本地缓冲和内存之间传送整块的数据,而无需CPU的干预。这种访问方式叫DMA(直接内存访问)
计算机系统的体系结构
处理器
单处理器系统
定义
只有一颗主CPU,执行通用指令集。
其他专用处理器
该处理器为特定的I/O设备服务,如:磁盘、键盘、图形控制器等。这些专用处理器执行的指令有限,不负责处理用户进程,只接收操作系统发出的指令并被监控。
多核处理器
定义
有两个及以上且紧密通讯的CPU,它们共享计算机总线、时钟、主存、外设等
非对称处理
CPU的核心被分为主核和从核,主核:被分配任务的主要部分(负责计算量最大的部分),从核:平均分配剩余任务。
对称处理(SMP)
CPU的每个核心都具有同等地位。
多处理可使系统的内存访问模型,从均匀内存访问(UMA)到非均匀内存访问(NUMA)。
也就是CPU访问内存的所需是否相同时间,前者相同,后者不同。
集群系统
定义
有多台可独立运行的计算机(节点)通过网络(或其他通信设备)连接所组成一个整体。集群中的所有计算机可对一个应用程序并发执行。
特点
节点可为单/多核处理器系统,以及它们之间的关系为松耦合。
服务:
高可用性、高性能计算、
并行计算
一个程序划分多个部分,每个部分可并行运行在计算机或集群计算机的各个核上。部分--整体
共享访问、系统应对针对文件访问加以控制与加锁,以便确保没有冲突操作。
例如:分布锁管理器(DLM)。解决操作系统支持多个主机同时访问数据问题。
存储域网:
SAN可让许多系统访问统一存储池。它可以存储应用程序和数据,集群软件可将应用程序交给SAN中的任何主机运行,当主机出错,可由其他主机接管。
操作系统的结构
多道程序设计
定义
是一种思想或者模式。
相比于单道模式,会有CPU空间时间,多道程序设计通过安排作业(编码和数据),使CPU总有一个执行任务,提高CPU利用率。
作业池
其作业首先保存在磁盘的作业池上(因为主存的大小问题)。
该作业池包含了磁盘上的、等待分配内存的所有进程。
实现的硬件保证:
处理器和I/O设备具有并行工作的能力。
分时系统
也称多任务系统,是多道程序设计的自然延伸。
服务
允许多个用户共享一台计算机(具有交互功能)
用户只有I/O设备;分时系统为每个用户轮流分配等长CPU时间;
响应时间
用户从发出指令到得到结果的时间,响应时间随用户越多而越长。
操作系统中多个应用程序使用了该设计模式。
tip:第一个分时系统CTSS由MIT于1962年开发。
功能
进程、作业调度/CPU调度(第五章)、虚拟内存(第九章):使逻辑内存与物理内存区分开、同步与同学(第六章)、死锁(第七章)。
操作系统的执行
现代操作系统是中断驱动的。
事件总是由中断或陷阱引起的。
中断服务程序用于处理中断。
陷阱trap(异常exception)
软件生成的中断、
或者出错(除数为0,无效存储访问)、
或者用户程序的特定请求。
双重模式与多重模式
单独运行模式:
用户模式、内核模式(也称监视模式、系统模式、特权模式)
通过模式位来表示当前模式:内核模式(0)和用户模式(1).
系统引导时
系统引导(即引导程序启动),硬件从内核模式开始,然后操作系统接着加载,并在用户模式下执行用户程序。当有陷阱或中断时,硬件会从用户模式切换到内核模式。
特权指令
其具有损害的机器指令,只有在内核模式下才允许执行的指令,被称为特权指令。
虚拟机管理器
即某些CPU具有一种单独的模式,用于创建和管理虚拟机。
指令执行的生命周期
起初,模式位为0,指令在内核模式执行,当模式位为1(控制权转交给一个用户应用时),最终通过终端、陷阱或系统调用,控制又返回操作系统。
系统调用的中断:
硬件通常将系统调用作为软件中断,控制通过中断向量转到操作系统的中断服务程序,且模式位也设为0.
程序的发生错误时,其内存中的信息通常被写入文件,用以用户或程序员检查或帮助修改。
定时器
用于防止用户程序陷入死循环,或不调用系统服务并且不将控制返回操作系统。
定时器设置为指定周期后中断计算机。指定周期可以是固定的或者固定速率(可变定时器)的。
操作系统结构
操作系统的服务
有用户界面、程序执行、文件系统操作、通信、错误检测、资源分配、记账、保护与安全。
用户界面
命令解释程序(命令行界面)
对于不同的操作系统,位于地方不同,如:在内核中,或者作为特殊程序(如:windows的terminal--CMD)
在一些系统中,命令解释程序被称为外壳(shell).
作用
获取用户命令解释并执行。
执行方式
1.以代码执行命令
命令解释程序本身就包含了执行用户输入的命令的代码。当用户输入命令后,程序解释程序值选要跳转到对应的代码段,设置用户指定的参数,后通过系统调用进行执行。
2.调用文件执行命令
如:Unix系统,命令解释程序不必理解命令,而是通过命令确定一个文件,并将文件加载到内存中并执行即可。
GUI图形用户界面
具有定位设备控制I/O、通过菜单选择、通过键盘输入文本和选择等。
一般来说系统管理员和高级用户喜欢适用命令行界面(高效率),而喜欢GUI的用户更多的使用图形界面。
系统调用
定义
即操作系统所提供服务的接口。
通常由C/C++编写,对于有些底层的任务可能会用到汇编语言编写。
API
应用程序开发人员通过API(应用编程接口)来设计程序。
好处
程序的可移植性、程序能在支持同一API的系统上编译并执行。
API执行过程
一般来说编译器直接提供的函数库,提供了系统调用接口,以链接到操作系统的系统调用。
系统调用接口截取API函数的调用,并调用操作系统中的所需系统调用。
理解
通常,每个系统调用都有一个相关数字,而系统调用接口会根据这些数字来建立一个索引列表。
然后系统调用接口就可通过相关数字,在索引列表中调用操作系统内核中的所需系统调用,并返回系统调用状态与任何返回值。
下图为用户应用程序调用系统调用open()的处理过程:
向操作系统传递参数:
当然了,只有系统调用是不够的,可能还需要提供一些参数,比如读取字符的长度和存放输入的地址。
1.通过寄存器来传递参数
当参数数量比寄存器数量多时,这时候参数通常存储在内存的块或表中,而块或表的地址通过寄存器传递。
2.参数通过块或堆栈的方法
参数有时候也通过程序放在或压入到堆栈,并通过操作系统弹出。这种方法不受限于参数的数量和长度。
系统调用的类型
系统调用大致可分为六大类:进程控制(process control)、文件管理(file manipula-tion)、设备管理(device manipulation)、信息维护(information maintenance)、通信(commu-nication)和保护(protection)。
通常的系统调用:
-
进程控制
- 结束、中止
- 加载、执行
- 创建进程、终止进程
- 获取进程属性、设置进程属性
- 等待时间
- 等待事件、信号事件
- 分配和释放内存
-
文件管理
-
创建文件、删除文件
-
打开、关闭
-
读、写、重新定位
-
获取文件属性、设置文件属性
-
-
设备管理
- 请求设备、释放设备
- 读、写、重新定位
- 获取设备属性、设置设备属性
- 逻辑附加或分离设备
-
信息维护
- 获取时间或日期、设置时间或日期
- 获取系统数据、设置系统数据
- 获取进程、文件或设备属性
- 设置进程、文件或设备属性
-
通信
- 创建、删除通信连接
- 发送、接收消息
- 传送状态信息
- 附加或分离远程设备
进程控制
程序运行引起的错误陷阱,会生成错误信息于磁盘中,可用调试器(是系统程序)来确定问题原因。
交互式和GUI系统都可经过用户处理错误后,继续执行下一个命令。而批处理系统会结束当前作业,进行下一个作业(任务)。
错误级别越高,错误参数越高。