基本特征
并发
- 并发:在一段时间内同时运行多个程序。操作系统引入进程和线程,使得程序能够并发执行
- 并行:在同一时刻同时运行多个指令。并行需要硬件支持,比如多核 CPU
共享
系统中的资源可以被多个并发进程共享
- 互斥共享:互斥共享的资源称为临界区。在同一时刻只允许一个进程访问,需要用同步机制来实现临界区的访问
- 同时共享:同一时刻运行多个进程访问,不需要同步机制
虚拟
把物理实体转化为逻辑实体
- 时分复用技术:进程或线程的时间片轮询技术。每个虚拟处理器获得时间片后,可供进程执行
- 空分复用技术:虚拟内存
异步
进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进
基本功能
进程管理
进程控制、进程同步、死锁处理、进程通信等
内存管理
内存分配、内存映射、虚拟内存、内存保护和共享等
文件管理
文件存储、目录管理、文件访问和保护等
设备管理
缓冲管理、设备分配、设备处理等
用户态 & 内核态
操作系统启动之后,会加载操作系统的内核,然后将操作系统的控职权交由内核管理。内核与应用程序、外部设备等打交道
用户态和内核态
- 当进程执行应用程序的代码时,处于用户态
- 当进程通过系统调用陷入内核态执行内核代码时,处于内核态
用户态和内核态是操作系统的两种运行级别,用户态的运行级别最低,内核态的运行级别最高;对 Linux 操作系统来说,当程序运行在 3 级特权时处于用户态,当程序运行在 0 级特权时处于内核态
对于 32 位操作系统来说,用户态的地址空间是
用户态转内核态(中断)
- 系统调用
- 异常
- 外中断
系统调用、异常、外中断可以统称为中断,中断根据来源不同还可以分为硬中断和软中断
- 硬中断:由硬件发出的中断请求
- 软中断:由软件发出的中断请求
由用户态转内核态的系统开销会很大:
- 引导机制
- 建立内核堆栈
- 验证参数
- 内核态映射到用户态的地址空间
系统调用 & 异常
操作系统与应用程序打交道主要通过系统调用和异常实现
- 系统调用:应用程序调用系统调用接口,主动向操作系统发出的服务请求,应用程序正常运行
- 异常:应用程序产生异常,指令执行失败,内核通过异常服务处理,捕获到应用程序的异常并抛出异常
外中断
操作系统与外部设备打交道主要通过中断机制实现。例,键盘输入时会把数据写到一个特定的缓冲区,这个缓冲区有大小限制,如果数据超过其限制大小就会造成数据丢失,所以外部设备需要通过中断机制,及时向内核发出指令,然后内核通过调用设备驱动程序,及时把缓冲区的内容读写到内核中
中断和陷入:
外中断(中断)
CPU 外部引起的中断。中断是 CPU 对 IO 设备发来的中断信号的一种响应。当发生中断时,CPU 停止正在执行的程序,保留 CPU 的环境,转而去执行相应的中断处理程序。执行完中断处理程序后,再回到 CPU 断点继续执行原来的程序
内中断(陷入)
CPU 内部引起的中断,如非法指令、地址越界等。当发生陷入时,CPU 停止正在执行的程序,保留 CPU 的环境,转而去执行陷入处理程序。执行完陷入处理程序后,再回到 CPU 断点继续执行原来的程序
中断处理方式
屏蔽中断
当 CPU 处理一个中断时,会屏蔽其他的中断,直到 CPU 处理完本次中断后再去检查是否还有中断发生
优点:简单
缺点:不适用实时性比较高的中断
嵌套中断
设置中断优先级。当同时有多个优先级的中断请求时,CPU 优先处理高优先级的中断;高优先级的中断可以抢占正在运行的低优先级的中断
三者比较
- 源头:中断是外设引起的,系统调用是应用程序主动请求系统服务,异常是应用程序意想不到的错误
- 响应方式:中断是异步的,系统调用是同步或异步的,异常是同步的
大内核 & 微内核
- 大内核:将操作系统的功能作为紧密的整体放到内核中
- 优点:各模块共享信息,性能高
- 内核复杂度高
- 微内核:将一部分功能移除内核,降低内核的复杂度
- 内核复杂度低
- 频繁进行系统调用,造成性能开销。应用进程与移到用户态的操作系统功能需要通过内核来进行通信
链接
高级语言编译成汇编语言,汇编语言再次编译成二进制程序,如果有函数调用需要经过连接进行合并生成最终的目标文件
静态链接和动态链接
静态链接
在生成可执行文件时,把所有需要的函数的二进制码都包含到可执行文件中
动态链接
在真正使用时,才会将使用的函数的二进制码调入到内存中