目录
一、操作系统
1.概念:计算机系统中的一个系统软件,是一些程序模块的集合
2.作用:(1)管理计算机的软硬件资源、组织计算机的工作流程,(2)控制计算机的执行并向用户提供各种服务功能
(3)对硬件机器的扩展
3.特点:有效(CPU利用率充足,I/O设备忙碌)、合理(流程安排)、方便使用(用户界面,编程接口)
4.管理角度 - 五大基本功能:
- 进程/线程管理 进程控制、进程同步、进程通信、死锁处理、处理机调度等。
- 内存管理 内存分配、地址映射、内存保护与共享、虚拟内存等。
- 文件管理 文件存储空间的管理、目录管理、文件读写管理和保护等。
- 设备管理 完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率。
- 用户接口
5.Linux 内核空间的主要模块
- 进程调度
- 内存管理
- 虚拟文件系统
- 网络接口
- 进程间通信
二、基本特征
1. 并发
并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令(多个硬件上、不同程序的指令)。
并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。
操作系统通过引入进程和线程,使得程序能够并发运行。
2. 共享
共享是指系统中的资源可以被多个并发进程共同使用。
有两种共享方式:互斥共享和同时共享。
互斥共享的资源称为临界资源,例如打印机等,在同一时间只允许一个进程访问,需要用同步机制来实现对临界资源的访问。
同时共享,如磁盘文件、可运行代码等
3. 虚拟
虚拟技术把一个物理实体转换为多个逻辑实体。
主要有两种虚拟技术:时分复用技术和空分复用技术。
多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占有处理器,每次只执行一小个时间片并快速切换。
虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。
4. 异步
异步指多个进程不是一次性执行完毕,而是走走停停,以不可预知的速度向前推进。
典型操作系统的架构
Windows
三、处理器
1.处理器由 运算器、控制器、一系列的寄存器 与 高速缓存 构成
- 两类寄存器:用户可见寄存器、控制和状态寄存器(由操作系统代码使用)
2.操作系统需要实现 并发与共享 要求:实现保护与控制机制
- 处理器具有特权级别:能在不同的特权级运行不同的指令集合
- 硬件机制可将OS与用户程序隔离
3.操作系统需要两种CPU状态:
- 内核态:运行操作系统程序,使用特权指令
- 用户态:运行用户程序
用户态 -> 内核态
唯一途径:中断 / 异常 / 陷入机制 (陷入指令,亦称访管指令:提供给用户程序的接口,用于调用操作系统的功能,服务)
内核态 -> 用户态
设置程序状态字 PSW
四、中断与异常
中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保存现场后自动去执行相应的处理程序,处理完该事件后再返回中断处继续执行原来的程序。
1. 中断(外部原因)
由 CPU 执行指令以外的事件引起,如 I/O 完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。
2. 异常(内部原因)
由 CPU 执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等。
3. 陷入(主动调用)
在用户程序中使用系统功能调用。使用陷入指令,完成用户态到内核态的切换。
中断引入:为了支持 CPU 和设备之间的并行操作
异常引入:处理 CPU 执行指令时本身可能出现的问题(溢出、除零、地址越界等)
-
中断:外部事件,正在运行的程序所不期望的
-
异常:由正在执行的指令引发
工作原理
硬件 —— 捕获中断 / 异常源发出的请求 —— 响应
软件 —— 识别对应的中断 / 异常并完成相应的处理 —— 处理
- 每条指令执行完后会检查中断寄存器是否有中断信号。
- 中断向量:存放中断处理程序入口地址 和 运行所需的处理机状态字
过程:
- 保存相关寄存器信息
- 分析中断/异常的具体原因
- 执行对应的处理功能
- 恢复现场,返回被事件打断的程序
若处理失败,会执行重试,次数有上限,达到时系统将判定为硬件故障。
五、系统调用
操作系统功能调用:通过陷入机制,用户在编程时可以调用的操作系统功能
如果一个进程在用户态需要使用内核态的功能,就进行系统调用从而陷入内核,由操作系统代为完成。
Linux 的系统调用主要有以下这些:
Task | Commands |
---|---|
进程控制 | fork();创建进程 exit(); wait(); |
进程通信 | pipe(); shmget(); mmap(); |
文件操作 | open(); read(); write(); |
设备操作 | ioctl(); read(); write(); |
信息维护 | getpid(); alarm(); sleep(); |
安全 | chmod(); umask(); chown(); |
系统调用、库函数、API、内核函数
- 应用程序一般通过调用 库函数/API 来实现系统调用,较少情况下直接调用 系统调用
- 系统调用就是内核函数的处理程序
- 一部分内核函数经过了封装已经放在了 库函数与API接口 中,供用户调用
执行过程:
中断/异常机制:硬件保护现场;通过查中断向量表把
控制权转给系统调用总入口程序
系统调用总入口程序:保存现场;将参数保存在内核堆
栈里;通过查系统调用表把控制权转给相应的系统调用处理例程或内核函数
执行系统调用例程
恢复现场,返回用户程序