操作系统的概念(定义)功能和目标
操作系统的概念
- 能做什么事情:操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配。
- 存在于用户与硬件之间:提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
操作系统的功能和目标
作为系统的管理者
功能:
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
目标:
- 安全
- 高效
作为用户和计算机硬件之间的接口
功能:
- 命令接口:允许用户直接使用,分为联机命令接口(交互式)和脱机命令接口(批处理)。
- 程序接口:允许用户通过程序间接使用,有一组系统调用(相当于程序接口)组成。
- GUI
目标:
- 方便用户使用。
操作系统的四个特征
并发
- 指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但在微观上是交替发生的(单核处理器同一时间段交替处理多个程序)。
- 并行parallellism(区别于并发concurrency):指两个或多个事件在同一时刻同时发生(多核处理器同一时刻执行多个程序)。
- 操作系统的并发性:计算机系统中同时存在着多个运行着的程序。
共享
- 指系统中的资源可供内存中多个并发执行的进程共同使用。
- 互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。
- 同时共享方式:系统中的某些资源,允许一个时间段内有多个进程同时对它们进行访问。
- 并发性与共享性互为存在条件。
虚拟
- 只把一个物理上的实体变为若干个逻辑上的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的。
- 空分复用技术(如虚拟内存技术)
- 时分复用技术(如虚拟处理器)
- 没有并发性,就谈不上虚拟性。
异步
- 在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,已不可预知的速度向前推进,这就是进程的异步性asynchronous。
- 只有系统拥有并发性,才有可能导致异步性。
操作系统的运行机制和体系结构
运行机制
两种指令
- 特权指令(如内存清零指令):不允许用户程序使用,指令有很高的权限。
- 非特权指令(如普通的运算指令):普通用户程序可以直接使用的指令。
两种处理器状态
- 用户态(目态):CPU在用户态只能执行非特权指令,在核心态可以执行全部两种指令。
- 核心态(管态):用程序状态字寄存器中的某标志位来标识当前处理器处于什么状态(0为用户态,1为核心态)。
两种程序
- 内核程序:操作系统的内核程序是系统的管理者,可以执行两种指令。
- 应用程序:为了保证系统能安全运行,普通应用程序只能执行非特权指令。
操作系统内核
- 内核是计算机上配置的底层软件,是操作系统最基本、最核心的部分。
- 实现操作系统内核功能的那些程序就是内核程序。
操作系统的体系结构
大内核
- 将操作系统的主要功能模块都作为系统内核,运行在核心态。
- 高性能,但内核代码庞大,结构混乱,难以维护。
微内核
- 只把最基本的功能保留在内核。
- 内核功能少,结构清晰且方便维护,但需要频繁切换目态与管态,性能低。
中断和异常
概念和作用
- 早期计算机只能串行执行各程序,系统资源利用率低,为解决这个问题,操作系统引入中断机制,实现了多道程序并发执行。
- 本质:发生中断意味着需要操作系统介入,开展管理工作。
- 中断发生时,CPU进入核心态(操作系统获得计算机的控制权)。中断发生后,当前运行的程序暂停运行,操作系统内核对中断进行处理。
- 有了中断,才能实现多道程序并发执行。
- CPU的用户态到核心态的转换是通过中断实现的,并且这是唯一途径。核心态到用户态的切换是通过执行一个特权指令,将程序状态字(PSW)的标志位设置为用户态。
中断的分类
内中断
- 信号的来源:CPU内部,与当前执行的指令有关。
- 内部异常,也称异常、例外、陷入。
- 陷阱、陷入(trap):有意而为之的异常,如系统调用。
- 故障(fault):有错误条件引起的,可能被故障处理程序修复,如缺页。
- 终止(abort):不可恢复的致命错误造成的结果,终止处理程序不再将控制返回给引发中断的应用程序,如整数除零。
外中断
- 信号的来源:CPU外部,与当前执行的指令无关。
- 狭义的中断,包括外设请求和人工干预。
中断的处理过程
- 每条指令执行结束后,CPU检查是否有外部中断信号。
- 若有外部中断信号,则需要保护被中断进程的CPU环境(使用程序状态字,程序计数器PC以及各种通用寄存器来保存当前进程环境信息)。
- 根据中断信号类型转入相应的中断处理程序。
- 恢复原进程的CPU环境并退出中端,返回原进程继续往下执行。
系统调用
概念和作用
- 应用程序通过系统调用请求操作系统服务。系统中的各种共享资源都由操作系统统一进行管理,因此在用户程序中涉及到有关资源的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,有操作系统代为完成。
- 这种操作保证了系统的稳定性和安全性,防止用户进行非法操作。
- 系统调用的相关功能需要执行一些特权指令才能完成,因此系统调用的相关处理是在核心下进行的。
系统调用和库函数的区别
- 系统调用是操作系统向上层提供的接口。
- 有的库函数是对系统调用的进一步封装。
- 当今编写的应用程序大多通过高级语言提供的库函数间接地进行系统调用。