什么是操作系统
- 用户角度上,操作系统是一个系统软件
- 管理应用程序
- 为应用程序提供服务
- 杀死应用程序
- 资源管理
- 管理外设,分配资源
操作系统架层次结构
-
硬件之上,应用程序之下
应用软件:办公软件、视频播放软件
操作系统位于应用程序之下,为应用软件提供服务支撑
-
Linux、Windows、Android的界面
属于外壳(Shell) ,而不是内核(Kernel) 。Kernel是研究重点,在Shell以下。
-
Kernel 操作系统内部组件,包括:
- CPU调度器
- 物理内存管理
- 虚拟内存管理
- 文件系统管理
- 中断处理与设备驱动
-
OS Kernel的特征:
-
并发:计算机同时存在多个运行的程序,需要OS管理和调度
-
共享:同时访问、互斥共享
-
虚拟:利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务
-
异步:程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知,但只要运行环境相同,OS需要保证程序运行的结果也要相同。
-
为什么学习操作系统
- 综合课程:结合多种不同的课程,包括程序设计语言、数据结构、算法等。
- 已经有了很多操作系统,例如Windows、Linux、Unix。
操作系统:计算机科学研究的基石之一。
- 计算机系统的基本组成部分
- 由硬件的发展和应用需求所驱动
- 学术和工业的持续推进
操作系统的需求
- 操作系统必须是高效的,低耗CPU、内存、磁盘的
- 操作系统出错意味着机器出错,操作系统必须比用户程序拥有更高的稳定性
- 操作系统是系统安全的基础
- 操作系统需要权衡:空间与时间、性能和可预测性、公平和性能
- 硬件方面的需要:良好的硬件管理、合理的资源分配,例如磁盘速度跟CPU、内存相差很多,操作系统需要协调处理。
历史概要
- 早期计算机使用纸带传输程序和数据,操作系统只起到加载作用;
- CPU等硬件快速发展,计算机速度得到提升,性能未得到充分利用;
- 内存的容量越来越大,CPU执行多个程序;
- 出现了分时系统、分布式操作系统、松紧耦合系统。
操作系统的启动
相关组成部分:CPU、I/O(timer/Disk,etc)、内存。
- Disk:硬盘,存放OS。
- BIOS:基本O/I处理系统,用来检测外设。
- BIOS启动时的固定特殊地址:CS:IP=0xf000:fff0。(CS:段寄存器,IP:指令寄存器)
- POST(加电自检):寻找显卡和执行BIOS。
- Bootloader:加载OS,位于内存的第一个扇区,使CPU可以执行操作系统。
操作系统与设备和程序交互(Interface:系统调用、异常、中断)
1. 定义
- 系统调用(来源于应用程序):应用程序主动向操作系统发出服务请求。
- 异常(来源于不良的应用程序):非法指令或者其他坏的处理状态,如内存出错。
- 中断(来源于外设):来自不同的硬件设备的计时器和网络的中断。
2. 为什么应用程序不能直接访问外设或操作系统
- 在计算机运行中,内核时被信任的第三方
- 只有内核可以执行特权应用
- 为了方便应用程序
3. 三者的区别与特点
源头:
- 中断:外设
- 异常:应用程序意想不到的行为
- 系统调用:应用系统请求操作系统提供服务
处理时间:
- 中断:异步(不知道产生的时间点)
- 异常:同步(已知发生的时间点)
- 系统调用:异步或同步
响应:
- 中断:持续,对用户应用程序是透明的
- 异常:杀死或重新执行意想不到的应用程序指令
- 系统调用:等待和持续
4. 中断和异常的处理机制
(1)中断处理
硬件:设置中断标记(CPU初始化)
- 将内部、外部事件设置中断标记
- 中断事件的ID
软件:
- 保存当前处理状态,便于后续恢复现场
- 中断服务程序处理
- 清除中断标记
- 恢复之前保存的处理状态
(2)异常处理
异常:异常编号
- 保存现场
- 异常处理:杀死产生了异常的程序/重新执行异常指令
- 恢复现场
5. 系统调用的处理机制
- 程序访问主要是通过高层次的API接口而不是直接进行系统调用
- Win 32 API 用于 Windows
- POSIX API 用于 POSIX-based systems,包括Unix、Linux、Mac OS X的所有版本
- Java API 用于 Java虚拟机(JVM)
- 通常情况下,有每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引;
- 系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其他返回值;
- 用户不需要知道系统调用是如何实现的,只需要获取API和返回结果。
6. 跨越操作系统边界的开销
- 在执行时间上的开销超过系统调用
- 开销:
- 简历中断/异常/系统调用序号与对应服务例程映射关系的初始化开销
- 建立内核堆栈
- 验证参数
- 内核态映射到用户态的地址空间——更新页面映射权限
- 内核态独立地址空间(TLB)