操作系统引论
一、操作系统的基本特征
1.1、并发
- 并发是指宏观上在一段时间内多个程序同时运行
- 并行是指同一时刻能运行多个指令。
- 并行需要硬件的支持,如多条流水线或者多个处理器。
- 并发通过操作系统引入进程和线程来实现的。
1.2、共享
共享是指操作系统中的资源可以被多个并发的进程共同使用。
共享的方式有两种:互斥共享和同时共享
- 互斥共享的资源称为临界资源,例如打印机等,在同一时刻只允许一个进程进行访问,需要使用同步机制来实现对临界资源的访问。
- 同时共享的资源允许一段时间内由多个进程 “同时” 对它们进行访问。这里所谓的“同时”,在单片机环境下是宏观意义上的,在微观环境上,这些进程对资源的访问是交替进行的。典型的可供多个进程“同时”访问的资源是磁盘设备。
并发和共享是多用户(多任务)OS的两个最基本特征。
1.3、虚拟
虚拟技术是把一个物理实体转换为多个逻辑实体。
主要有两种虚拟技术:时分复用技术和空分复用技术。
- 时分复用技术:例如多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占有处理器,每次只执行一小时间片并进行快速切换。
- 空分复用技术:利用存储器的空闲空间分区域存放和运行其他多道程序,以此来提高内存的利用率。单纯的使用空分复用技术只能提高内存的利用率,并不能实现存储容量的功能,还必须引入虚拟存储技术才能实现此功能。
1.4、异步
异步是指程序不是一次性执行完毕(因为存在临界资源的限制,例如进程需要请求临界资源的时候,临界资源正在被其他进程访问,此时进行就需要处于等待状态,使程序的执行不是一气呵成的而是走走停停)的,而是走走停停,以不可知的速度向前推进。
二、操作系统的基本功能
2.1、进程管理
处理机的分配和运行都是以进程为基本单位的。因而对处理机的管理可以归纳为对进程的管理。
进程的控制
进程控制的主要功能是为作业创建一个或者多个进程、撤销或终止已经结束的进程,以及控制进程在运行过程中的状态转换。
进程同步
进程同步的主要任务是为了让多个进程有条不紊的运行,对进程进行协调。常用的协调方式有两种:进程互斥方式进程同步方式。
- 进程互斥方式:多个进程对临界资源进行访问的时候应该使用互斥方式。最简单的实现互斥的机制是对临界资源进行加锁。当锁打开时进程可以对临界资源进行访问,当锁关上时禁止进程访问该临界资源。
- 进程同步方式:相互合作去完成共同任务的多个进程,有同步机构对他们的执行次序加以协调。最常用的机制是信号量机制。
进程通信
进程通信的任务是实现相互合作进程之间的信息交换,当相互合作的进程处于同一计算机系统时,通常在他们之间采用直接通信的方式。
进程调度
进程调度的任务是从进程的就绪队列中按照一定的算法选出一个进程,将处理机分配给他,并为他设置运行现场,使其投入执行。
2.2、内存管理
内存分配
主要任务是为每个程序分配内存空间,提高存储器的利用率,减少碎片的产生,允许动态的申请内存空间。内存分配的方式主要有两种:静态分配方式和动态分配方式
- 静态分配方式:每个作业的内存一次性分配,运行期间不允许再申请内存空间,也不允许作业在内存中“移动”。
- 动态内存分配:运行作业在运行过程中继续申请附加内存,也允许作业在内存中“移动”。
内存保护
- 确保每个程序在自己的内存空间内运行,彼此互不干扰。
- 不允许用户程序访问操作系统的程序和数据。
一种比较简单的内存保护机制是设置两个界限寄存器,分别用于存放正在执行程序的上界和下界,如果发生越界,便中断该程序的执行。
地址映射
每道程序经过编译和链接后所形成的可装入程序地址都是从0开始的,所以要将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址。这个功能在硬件支持下完成。
内存扩充
内存扩充并不是从物理上扩大内存容量,而是利用虚拟存储技术,从逻辑上扩大内存容量。
- 请求调入功能:允许装入部分用户程序和数据的情况下,运行该程序,在运行过程中需要的程序和数据尚未装入内存时,可以请求调入,从磁盘上把所需的程序和数据调入内存。
- 置换功能:内存空间不足以装入调入的程序和数据时,系统将部分不用的程序和数据调入磁盘,腾出内存,把需要调入的部分装入内存。
2.3、设备管理
完成用户的I/O请求,方便用户使用各种设备,并提高设备的利用率。主要包含缓冲管理、设备分配、设备处理、虚拟设备等。
缓冲管理
因为CPU和I/O设备之间存在速度的不匹配问题,如果在I/O设备和CPU之间引入缓冲,则可以有效的缓和两者之间的矛盾,进而提高系统的吞吐量。
设备分配
设备分配的基本任务是根据用户进程的I/O请求,系统的现有资源情况以及按照某种分配策略,为之分配所需的设备。
设备处理
设备处理又称为设备驱动程序,基本任务是实现CPU和设备之间的通信。
2.4、文件管理
文件管理的主要任务是对用户文件和系统文件进行管理方便用户使用,并保证文件的安全性。
主要包括文件存储空间的管理、目录的管理、文件的读/写管理和保护等
三、系统调用
如果一个进程在用户态需要使用内核态的功能,就进行系统调用从而陷入内核,由操作系统代为完成。
Linux的系统调用主要有:
四、大内核和微内核
4.1、大内核
大内核是将操作系统功能作为一个紧密结合的整体放入到内核,由于各模块共享信息,因此有很高的性能。
4.2、微内核
由于操作系统不断复杂,因此将一部分操作系统功能移出内核,从而降低内核的复杂性,移出的部分根据分层划分为若干服务,相互独立。
在微内核结构下,操作系统被划分成小的、定义良好的模块,只有微内核这一个模块运行在内核态,其余模块运行在用户态。
因为需要频繁地在用户态和核心态之间进行切换,所以会有一定的性能损失。
五、中断分类
5.1、外中断
由 CPU 执行指令以外的事件引起,如 I/O 结束中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。
5.2、异常
由 CPU 执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等。
5.3、陷入
在用户程序中使用系统调用。
参考资料:
- 计算机操作系统 第四版, 汤小丹
- CyC2018