操作系统概述
基本概念
操作系统提供:
- 处理机(CPU)管理
- 存储器管理
- 文件管理
- 设备管理
操作系统的目标:
- 向上层提供方便易用的服务/接口
操作系统的交互方式:
-
GUI图形化命令交互界面
-
联机命令接口:交互式命令接口
-
脱机命令接口:例如.bat批处理文件
-
程序接口:在程序中进行系统调用来使用程序接口。普通用户只能通过程序代码间接调用
四个特征
分别是并发,共享,虚拟,异步
并发
指两个或多个事件在同一时间间隔内发生。这些事件在宏观上同时发生,在微观上是交替进行的
并行是指两个或多个事件在同一时刻同时发生
操作系统的并发性是指计算机系统中同时运行多个程序,在宏观上程序在同时运行,在微观上是交替进行的
- 对于单核CPU,多个程序只能并发运行
- 对于多核CPU,多个程序可以并行运行
共享
-
互斥型:某些资源一个时间段只允许一个进程访问该资源
-
同时型:允许一个时间段内由多个进程同时(微观上仍然是交替访问)对他们进行访问
共享与并发是互为存在的基础,也是最基本的特征
虚拟
将一个物理上的实体变为若干个逻辑上的对应物。
虚拟技术分有
- 空分复用技术:如虚拟内存
- 时分复用技术:如虚拟处理器
而虚拟技术显然是基于并发性而实现的。
异步
在多个程序并发执行时,由于资源的限制,进程执行非线性进行
运行机制
操作系统的实现基于很多内核程序的组成,即内核,是操作系统最核心最重要的部分
- 而Docker就是只有Linux内核的镜像操作系统
指令又分为特权指令和非特权指令,只有内核可以使用特权指令
- CPU在执行一条指令前就可以判断其类型
CPU分有内核态与用户态:
- 运行内核程序时,处于内核态,可以执行特权指令
- 运行应用程序时,处于用户态,只能执行非特权指令
- CPU通过程序状态字寄存器PSW分辨状态,1为内核态,0为用户态
如果应用程序中含有特权指令,如果CPU处于用户态读到该特权指令时会触发中断信号,停止运行应用程序,转而运行处理中断信号的内核程序,此时从用户态转为内核态。
中断与异常
中断:操作系统内核夺回CPU使用权的唯一途径,是并发的实现基础
- 内中断:与当前执行指令有关,来源于CPU内部,又称异常
- 分有陷入、故障、终止
- 陷入指令并不是特权指令,可以实现系统调用
- 外中断:与当前执行的指令无关,中断信号来源于CPU外部,可以基此实现并发
- 通常由外部时钟部件,I/O中断请求触发
故障:非法操作码、缺页故障、除数为0、运算溢出
陷入:条件陷阱指令,用于用户态下调用操作系统内核程序
终止:控制器出错、存储器校验错
实现原理
操作系统维护/初始化一张中断向量表,其包含中断信号类型与对应的中断服务程序指针。
发生中断:
- 硬件(程序计数器PC)自动保存断点
- 硬件找到该中断信号的中断向量,其指明中断服务程序入口地址
- 执行中断服务程序,保存PSW、中断屏蔽字、各通用寄存器的值,提供中断服务,由操作系统完成。
- 显然,中断服务程序是个内核程序
系统调用
实现互斥型共享的基础。
由操作系统内核对共享资源统一管理,向上层程序提供系统调用。
凡是对共享资源的操作(存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。
运行机制
程序中传递系统调用参数:
- 执行陷入指令,又称trap、访管指令(用户态)
- 执行相应的内核请求程序处理系统调用(核心态)
- 返回应用程序
体系结构
分有大内核与微内核、分层结构、模块化、外核5种
大内核:将OS的主要功能模块都作为系统内核,在核心态运行
- 高性能
- 内核代码庞大,结构混乱,难以维护
微内核:机制与策略分离只把最基本的功能(机制)保留在内核
- 内核功能少,结构清晰,维护方便
- 需要频繁地在核心态和用户态之间切换,性能低
- 仅保留进程/线程管理,低级存储器管理,中断和陷入处理
分层结构:最底层为硬件,最高层为用户接口
- 便于调试验证,每层只能使用更低一层的功能
操作系统引导
- CPU从一个特定主存地址开始,取指令,执行ROM引导程序
- 将磁盘的第一块—主引导记录读入内存,执行磁盘引导程序,扫描分区表
- 从活动分区(主分区)读入分区引导记录,执行其中的程序
- 从根目录下找到完整的OS初始化程序并执行