第一章基本概念
1.1 概念功能
操作系统(Operating System,OS):是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他的软件方便的接口和环境;它是计算机系统中最基本的系统软件。
系统资源的管理者:
提供功能
处理机管理
存储器管理
文件管理
设备管理
目标
安全,高效
向上层提供方便易用的服务:用户无需关心底层硬件的原理。
实现对硬件机器的拓展,通常把覆盖了软件的机器称为扩展机器(虚拟机)。
GUI:图形化用户接口(Graphical User Interface)
联机命令接口=交互式命令接口(人一句,机器一句)
windows :win+R,输入cmd
脱机命令接口=批处理命令接口
windows :C盘中的*.bat文件
程序接口
可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用。
1.2特征,发展和分类
1.特征
并发
定义:指两个或多个事件在同一时间间隔内发送。这些事件宏观上是同时发生的,但微观上是交替发生的。
并行:指两个或多个事件在同一时刻同时发生。
**操作系统的并发性:**指计算机系统中”同时“运行着多个程序,这些程序宏观上看是同时运行着的,二微观上看是交替运行的。
操作系统就是伴随着”多道程序技术“而出现,因此,操作系统和程序并发是一起诞生的。
注意
单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行
多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行。
共享
互斥共享
系统中的某些资源,虽然可以提供给多个进程试题,但一个事件段内只允许一个进程访问该资源。
同时共享方式
系统中的某些资源,允许一个时间段内由多个进程”同时“对他们进行访问。
虚拟
是指把一个物理上的实体变成若干个逻辑上的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的。
一个程序需要放入内存并给它分配CPU才能执行。
空分复用技术(虚拟存储器技术)和时分复用技术(虚拟处理器)。
并发是虚拟的基础。
异步
在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
2. 发展
手工操作阶段(1940年代-1950年代)
早期计算机没有操作系统,所有的操作都是通过手工进行的。
单任务操作系统(1950年代-1960年代)
早期操作系统如IBM的OS/360,可以管理批处理任务。
多道程序与分时系统(1960年代)
多道程序设计使得计算机可以同时运行多个程序。
分时系统允许多个用户通过终端同时使用一台计算机。
个人计算机操作系统(1970年代-1980年代)
如CP/M、MS-DOS等,它们是单用户、单任务的操作系统。
图形用户界面(GUI)操作系统(1980年代)
苹果的Mac OS和微软的Windows操作系统将图形用户界面推向普及。
现代操作系统(1990年代至今)
如Windows、Linux、macOS等,提供了多任务、多用户、网络功能和安全机制。
3. 分类
根据用户数量分类
单用户操作系统:一次只能由一个用户使用,如MS-DOS、早期版本的Mac OS。
多用户操作系统:允许多个用户同时使用,如Unix、Linux。
根据任务处理方式分类
单任务操作系统:一次只能运行一个任务,如早期的操作系统。
多任务操作系统:可以同时运行多个任务,如Windows、Linux。
根据指令处理方式分类
批处理操作系统:批量处理任务,用户不直接与计算机交互。
交互式操作系统:用户可以与计算机进行交互,如现代的GUI操作系统。
根据硬件架构分类
大型机操作系统:如IBM的MVS。
小型机操作系统:如Unix。
个人计算机操作系统:如Windows、macOS。
嵌入式操作系统:如Android、iOS。
根据源代码的开放性分类
开源操作系统:源代码公开,如Linux。
闭源操作系统:源代码不公开,如Windows。
根据操作系统的用途分类
通用操作系统:适用于多种用途,如Windows、Linux。
实时操作系统:用于需要及时响应的系统中,如航空控制系统。
网络操作系统:专为网络环境设计,如Novell NetWare。
1.3 运行机制
1. 特权指令和非特权指令
特权指令:
特权指令是只能由操作系统在核心态执行的一类指令。
这类指令可以执行硬件相关的操作,如设置中断、访问硬件状态寄存器、启动I/O操作等。
它们对系统的稳定和安全至关重要,因此不能在用户态执行,以防止用户程序破坏系统的稳定。
非特权指令:
非特权指令是用户程序在用户态可以执行的指令。
这类指令通常涉及数据处理,如算术运算、逻辑运算、数据传输等,不直接与硬件打交道。
它们不会直接影响到系统的稳定性和安全性。
2.处理器状态:核心态与用户态
核心态(也称为系统态或特权态):
当处理器处于核心态时,它可以执行所有的机器指令,包括特权指令和非特权指令。
操作系统在核心态运行,可以完全控制硬件资源。
在发生中断或系统调用时,处理器会从用户态切换到核心态。
用户态:
用户态是一种限制模式,处理器在这种状态下不能执行特权指令。
大多数应用程序在用户态运行,这样可以防止它们执行可能破坏系统操作或安全性的操作。
当应用程序需要执行特权操作时,它必须通过系统调用请求操作系统以核心态代为执行。
拓展:
CPU中有一个寄存器叫:程序状态字寄存器(PSW),其中有个二进制,1表示”内核态“,0表示”用户态“。
别名:内核态=核心态=管态,用户态=目态。
3. 内核程序和应用程序
内核程序:
内核程序是操作系统的一部分,它们运行在核心态。
它们负责管理系统资源,如内存管理、进程调度、文件系统操作等。
内核程序通常具有最高的执行优先级,并且直接与硬件交互。
应用程序:
应用程序是用户在计算机上执行的各种程序,如文字处理软件、游戏、网页浏览器等。
它们在用户态下运行,并通过系统调用与操作系统交互,以执行需要特权权限的操作。
应用程序不能直接访问硬件资源,必须通过操作系统提供的服务来间接访问。
1.4 中断和异常
1.中断的作用:
响应外部设备请求:当外部设备如硬盘、网络适配器等完成操作需要CPU介入时,会通过中断信号通知CPU。
协调多任务处理:操作系统利用中断机制实现任务切换,合理分配处理器时间给不同的任务。
错误处理:当硬件故障或软件运行出错时,系统可以通过中断来处理这些异常情况。
系统调用:在用户态程序需要操作系统服务时,可以通过中断触发系统调用。
中断是让操作系统内核夺回CPU使用权的唯一途径。
2.异常的作用:
错误处理:异常用于处理程序中的错误,如除以零、地址越界等。
资源分配:某些异常用于处理资源请求,如缺页异常。
程序控制:异常可以用于改变程序的控制流程,如软件中断指令。
3.中断的类型:
硬件中断:由硬件设备产生,如I/O请求、时钟中断等。(外中断)
软件中断:由执行中断指令(INT)产生,如系统调用。(内中断)
异常:在处理器执行指令时产生的错误,如溢出、页错误等。
陷阱(也是一种异常):由程序故意引发的,如调试中断。
故障(也是一种异常):可能被故障处理程序修正的错误。
终止(也是一种异常):不可恢复的错误,通常会导致程序终止。
陷入指令不是特权指令。
4.中断机制的基本原理:
中断请求:当事件发生时,中断源会向CPU发送中断请求(IRQ)。
中断识别:CPU在每条指令执行完毕后检查是否有中断请求。
中断响应:如果检测到中断请求,CPU会完成当前指令的执行,然后暂停当前程序的执行,保存当前处理器的状态(如程序计数器、寄存器等),这个过程称为中断响应。
中断处理:CPU根据中断向量表中的信息,跳转到对应的中断服务例程(ISR)执行,以处理中断。
恢复执行:中断服务完成后,CPU恢复之前保存的处理状态,继续执行被中断的程序。
1.5 系统调用
1.什么是系统调用:
系统调用(System Call)是应用程序请求操作系统提供服务的唯一方式。在Unix、Linux、Windows等操作系统中,系统调用是应用程序与操作系统内核之间的接口。通过系统调用,应用程序可以执行文件I/O、进程管理、网络通信等操作,这些操作通常需要更高级别的权限,普通应用程序无法直接执行。
2.系统调用和库函数的区别:
来源:
系统调用:由操作系统提供,是操作系统内核的一部分。
库函数:由标准库或第三方库提供,是用户空间的应用程序代码。
执行:
系统调用:直接在内核态执行,可以执行特权操作。
库函数:在用户态执行,通常是对系统调用的封装,不能执行特权操作。(也会有涉及系统调用的库函数)
性能:
系统调用:通常比库函数慢,因为它涉及到从用户态到内核态的切换。
库函数:通常更快,因为它们在用户空间执行,避免了上下文切换。
功能:
系统调用:提供了对硬件和系统资源的直接访问。
库函数:提供了更高级别的抽象,简化了编程。
3.为什么系统调用是必须的:
权限管理:系统调用允许应用程序在受控的方式下执行特权操作,如访问硬件资源、创建和销毁进程等。
资源共享:系统调用确保多个应用程序可以安全地共享系统资源,如内存、文件等。
抽象和封装:系统调用为应用程序提供了操作系统服务的抽象,使得应用程序不必关心底层硬件细节。
稳定性和安全性:通过系统调用,操作系统可以控制对系统资源的访问,防止恶意或错误的应用程序破坏系统。
4.什么功能要用系统调用实现:
文件操作:如打开、读取、写入、关闭文件。
进程管理:如创建、终止进程,以及进程间通信。
内存管理:如分配和释放内存。
设备控制:如操作硬件设备。
网络通信:如建立网络连接、发送和接收数据。
权限控制:如更改文件权限或用户身份。
5.系统调用的过程:
应用程序请求:应用程序执行一条特殊的指令(如x86架构的
int 0x80
或sysenter
指令)或使用特定的函数调用(如在POSIX系统中使用syscall
指令),请求系统调用。用户态到内核态:处理器从用户态切换到内核态,以便执行特权操作。
参数传递:应用程序将系统调用的编号和参数传递给内核。
系统调用处理:内核根据系统调用编号找到对应的处理程序,并执行它。
执行操作:系统调用处理程序在内核空间执行请求的操作。
返回结果:操作完成后,系统调用将结果返回给应用程序,并可能返回一个状态码表示操作的成功或失败。
恢复用户态:处理器从内核态切换回用户态,应用程序继续执行。
1.6 操作系统体系结构
1.大内核(Monolithic Kernel)
定义:大内核体系结构将操作系统的所有核心服务(如进程管理、文件系统、设备驱动程序、内存管理等)都集成在单一的内核空间中。
特点:
效率:由于所有服务都在内核空间运行,它们之间的通信非常快速。
复杂性:随着功能的增加,内核的大小和复杂度也会增加,导致维护和更新困难。
稳定性:一个组件的故障可能会影响整个系统的稳定性。
2.微内核(Microkernel)
定义:微内核体系结构只将最基本的操作系统服务(如进程和通信管理)保留在内核中,其他服务(如文件系统、设备驱动程序)则作为用户空间的进程运行。
特点:
安全性:由于内核较小,潜在的攻击面减少,系统更安全。
灵活性:更容易添加或修改系统服务,因为它们运行在用户空间。
性能:由于许多服务在用户空间运行,可能存在性能开销,因为需要频繁地在用户态和内核态之间切换。
3.分层结构(Layered Structure)
定义:分层结构体系结构将操作系统服务分为多个层次,每一层只与它下面的层次交互。
特点:
模块化:每个层次都可以独立开发和测试。
易于理解:层次分明,便于理解系统的结构和功能。
性能影响:过多的层次可能导致性能下降,因为每一层都可能引入额外的开销。
4.模块化(Modular Kernel)
定义:模块化体系结构允许在系统运行时动态地加载和卸载内核模块。
特点:
可扩展性:可以轻松添加或删除功能,而无需重新编译内核。
可定制性:可以根据需要定制内核,减少资源占用。
稳定性:模块化可以减少内核的大小,从而可能提高稳定性。
5.外核(Exokernel)
定义:外核体系结构将硬件资源的管理与操作系统的其他服务分开,为应用程序提供直接控制硬件的能力。
特点:
性能:应用程序可以直接访问硬件资源,可以优化性能。
灵活性:允许应用程序根据需要定制资源管理策略。
复杂性:增加了应用程序开发的复杂性,因为它们需要直接处理硬件资源。
每种体系结构都有其优势和劣势,它们的设计选择通常取决于操作系统的目标应用场景,如桌面、服务器、嵌入式系统等。例如,Linux采用了大内核体系结构,而Minix和QNX则采用了微内核体系结构。
6. 内核
时钟管理:实现计时功能
中断处理:负责实现中断机制
原语:
是一种特殊的程序
处于操作系统最底层,是最接近硬件的部分。
这种程序的运行具有原子性--其运行只能一气呵成,不可中断。
运行事件较短,调用频繁。
对系统资源进行管理的功能
进程管理
存储器管理
设备管理
这些管理工作更多的是对数据结构的操作,不会直接涉及硬件。
1.7 操作系统引导boot
操作系统的引导(Bootstrapping)是指计算机启动时,操作系统内核加载到内存并开始执行的过程。这个过程涉及到计算机硬件和软件的多个组件,以下是其基本步骤和相关数据:
1. 引导过程基本步骤:
加电自检(POST):
当计算机加电时,首先进行的是加电自检(Power-On Self-Test),由主板上的BIOS(基本输入输出系统)执行。
POST检查计算机硬件是否正常,如内存、硬盘、显卡等。
BIOS初始化:
BIOS会初始化硬件设备,并按照CMOS设置中的顺序搜索可引导设备。
引导设备:
BIOS找到可引导设备后,会从该设备的引导扇区读取引导记录(MBR或EBR)。
引导记录(MBR/EBR):
主引导记录(Master Boot Record,MBR)位于硬盘的第一个扇区,包含引导程序和分区表。
扩展引导记录(Extended Boot Record,EBR)用于扩展分区的引导。
引导加载器:
MBR中的引导程序通常是引导加载器(如GRUB、LILO等)的一部分,它会加载操作系统的内核到内存中。
操作系统内核:
内核加载后,开始接管计算机的引导过程,完成硬件的初始化,并启动操作系统。
2. 磁盘相关数据:
主引导记录(MBR):
位于硬盘的第一个扇区,包含引导代码和磁盘分区表。
分区表:
记录了磁盘上分区的位置和大小信息。
引导扇区:
每个分区的第一个扇区也称为引导扇区,对于可引导分区,它包含引导加载器代码。
文件系统:
磁盘上的文件系统提供了数据存储和组织的方法,操作系统通过文件系统来读写数据
3. 引导过程详细描述:
开机:
用户打开计算机电源。
POST:
计算机执行POST检查硬件。
BIOS执行:
BIOS执行,初始化硬件,并按照CMOS设置中的引导顺序查找引导设备。
读取MBR:
BIOS从引导设备的第一个扇区(MBR)读取引导记录。
执行引导加载器:
MBR中的引导加载器代码被执行,它负责加载操作系统的内核。
加载内核:
引导加载器将操作系统的内核加载到内存。
内核初始化:
内核开始执行,初始化硬件和设备驱动程序。
启动操作系统:
内核完成初始化后,操作系统完全接管计算机,启动完成。
1.8 虚拟机
定义:使用虚拟化技术,将一台物理机器虚拟化为多肽虚拟机器(Virtual Machine, VM),每个虚拟机器都可以独立运行一个操作系统。
同义术语:虚拟机管理程序,虚拟机监控程序。
第一类虚拟机
对于物理资源的控制权:直接运行在硬件之上,能直接控制和分配物理资源。
资源分配方式:在安装Guest OS时,VMM要在原本的硬盘上行分配存储空间,类似于“外核”的分配方式,分配未经抽象的物理硬件。
性能:性能更好
可支持的虚拟机数量:更多,不需要和Host OS竞争资源,相同的硬件资源可以支持更多的虚拟机
虚拟机的可迁移性:更差
运行模式:第一类VMM运行在最高特权级(Ring 0),可以执行最高特权的指令。
第二类虚拟机
对于物理资源的控制权:运行在Host OS之上,依赖于Host OS为其分配物理资源
资源分配方式:GuestOS拥有自己的虚拟硬盘,该硬盘实际上时Host OS文件系统中的一个大文件。GuestOS分配到的内存时虚拟内存。
性能:性能更差,需要HostOS作为“中介”
可支持的虚拟机数量:更少,Host OS本身需要使用物理资源,Host OS上运行的其他进程也需要物理资源。
虚拟机的可迁移性:更好,只需要导出虚拟机镜像文件即可迁移到另一台HostOS上,商业化应用更广泛。
运行模式:第二类VMM部分运行在用户态,部分运行在内核态。GuestOS发出的系统调用会被VMM截获,并转化为VMM对HostOS的系统调用。
Last updated