Page cover image

第一章基本概念

1.1 概念功能

  • 操作系统(Operating System,OS):是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他的软件方便的接口和环境;它是计算机系统中最基本的系统软件。

  • 系统资源的管理者

    • 提供功能

      • 处理机管理

      • 存储器管理

      • 文件管理

      • 设备管理

    • 目标

      • 安全,高效

      • 向上层提供方便易用的服务:用户无需关心底层硬件的原理。

      • 实现对硬件机器的拓展,通常把覆盖了软件的机器称为扩展机器(虚拟机)。

    • GUI:图形化用户接口(Graphical User Interface)

    • 联机命令接口=交互式命令接口(人一句,机器一句)

      • windows :win+R,输入cmd

    • 脱机命令接口=批处理命令接口

      • windows :C盘中的*.bat文件

    • 程序接口

      • 可以在程序中进行系统调用来使用程序接口。普通用户不能直接使用程序接口,只能通过程序代码间接使用。

1.2特征,发展和分类

1.特征

  • 并发

    • 定义:指两个或多个事件在同一时间间隔内发送。这些事件宏观上是同时发生的,但微观上是交替发生的。

    • 并行:指两个或多个事件在同一时刻同时发生。

    • **操作系统的并发性:**指计算机系统中”同时“运行着多个程序,这些程序宏观上看是同时运行着的,二微观上看是交替运行的。

    • 操作系统就是伴随着”多道程序技术“而出现,因此,操作系统和程序并发是一起诞生的。

    • 注意

      • 单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行

      • 多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行。

  • 共享

    • 互斥共享

      • 系统中的某些资源,虽然可以提供给多个进程试题,但一个事件段内只允许一个进程访问该资源。

    • 同时共享方式

      • 系统中的某些资源,允许一个时间段内由多个进程”同时“对他们进行访问。

  • 虚拟

    • 是指把一个物理上的实体变成若干个逻辑上的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的。

    • 一个程序需要放入内存并给它分配CPU才能执行。

    • 空分复用技术(虚拟存储器技术)和时分复用技术(虚拟处理器)。

    • 并发是虚拟的基础。

  • 异步

    • 在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

2. 发展

  1. 手工操作阶段(1940年代-1950年代)

    • 早期计算机没有操作系统,所有的操作都是通过手工进行的。

  2. 单任务操作系统(1950年代-1960年代)

    • 早期操作系统如IBM的OS/360,可以管理批处理任务。

  3. 多道程序与分时系统(1960年代)

    • 多道程序设计使得计算机可以同时运行多个程序。

    • 分时系统允许多个用户通过终端同时使用一台计算机。

  4. 个人计算机操作系统(1970年代-1980年代)

    • 如CP/M、MS-DOS等,它们是单用户、单任务的操作系统。

  5. 图形用户界面(GUI)操作系统(1980年代)

    • 苹果的Mac OS和微软的Windows操作系统将图形用户界面推向普及。

  6. 现代操作系统(1990年代至今)

    • 如Windows、Linux、macOS等,提供了多任务、多用户、网络功能和安全机制。

3. 分类

  1. 根据用户数量分类

    • 单用户操作系统:一次只能由一个用户使用,如MS-DOS、早期版本的Mac OS。

    • 多用户操作系统:允许多个用户同时使用,如Unix、Linux。

  2. 根据任务处理方式分类

    • 单任务操作系统:一次只能运行一个任务,如早期的操作系统。

    • 多任务操作系统:可以同时运行多个任务,如Windows、Linux。

  3. 根据指令处理方式分类

    • 批处理操作系统:批量处理任务,用户不直接与计算机交互。

    • 交互式操作系统:用户可以与计算机进行交互,如现代的GUI操作系统。

  4. 根据硬件架构分类

    • 大型机操作系统:如IBM的MVS。

    • 小型机操作系统:如Unix。

    • 个人计算机操作系统:如Windows、macOS。

    • 嵌入式操作系统:如Android、iOS。

  5. 根据源代码的开放性分类

    • 开源操作系统:源代码公开,如Linux。

    • 闭源操作系统:源代码不公开,如Windows。

  6. 根据操作系统的用途分类

    • 通用操作系统:适用于多种用途,如Windows、Linux。

    • 实时操作系统:用于需要及时响应的系统中,如航空控制系统。

    • 网络操作系统:专为网络环境设计,如Novell NetWare。

1.3 运行机制

1. 特权指令和非特权指令

特权指令

  • 特权指令是只能由操作系统在核心态执行的一类指令。

  • 这类指令可以执行硬件相关的操作,如设置中断、访问硬件状态寄存器、启动I/O操作等。

  • 它们对系统的稳定和安全至关重要,因此不能在用户态执行,以防止用户程序破坏系统的稳定。

非特权指令

  • 非特权指令是用户程序在用户态可以执行的指令。

  • 这类指令通常涉及数据处理,如算术运算、逻辑运算、数据传输等,不直接与硬件打交道。

  • 它们不会直接影响到系统的稳定性和安全性。

2.处理器状态:核心态与用户态

核心态(也称为系统态或特权态)

  • 当处理器处于核心态时,它可以执行所有的机器指令,包括特权指令和非特权指令。

  • 操作系统在核心态运行,可以完全控制硬件资源。

  • 在发生中断或系统调用时,处理器会从用户态切换到核心态。

用户态

  • 用户态是一种限制模式,处理器在这种状态下不能执行特权指令。

  • 大多数应用程序在用户态运行,这样可以防止它们执行可能破坏系统操作或安全性的操作。

  • 当应用程序需要执行特权操作时,它必须通过系统调用请求操作系统以核心态代为执行。

拓展:

  • CPU中有一个寄存器叫:程序状态字寄存器(PSW),其中有个二进制,1表示”内核态“,0表示”用户态“。

  • 别名:内核态=核心态=管态,用户态=目态。

3. 内核程序和应用程序

内核程序

  • 内核程序是操作系统的一部分,它们运行在核心态。

  • 它们负责管理系统资源,如内存管理、进程调度、文件系统操作等。

  • 内核程序通常具有最高的执行优先级,并且直接与硬件交互。

应用程序

  • 应用程序是用户在计算机上执行的各种程序,如文字处理软件、游戏、网页浏览器等。

  • 它们在用户态下运行,并通过系统调用与操作系统交互,以执行需要特权权限的操作。

  • 应用程序不能直接访问硬件资源,必须通过操作系统提供的服务来间接访问。

1.4 中断和异常

1.中断的作用:

  1. 响应外部设备请求:当外部设备如硬盘、网络适配器等完成操作需要CPU介入时,会通过中断信号通知CPU。

  2. 协调多任务处理:操作系统利用中断机制实现任务切换,合理分配处理器时间给不同的任务。

  3. 错误处理:当硬件故障或软件运行出错时,系统可以通过中断来处理这些异常情况。

  4. 系统调用:在用户态程序需要操作系统服务时,可以通过中断触发系统调用。

  • 中断是让操作系统内核夺回CPU使用权的唯一途径。

2.异常的作用:

  1. 错误处理:异常用于处理程序中的错误,如除以零、地址越界等。

  2. 资源分配:某些异常用于处理资源请求,如缺页异常。

  3. 程序控制:异常可以用于改变程序的控制流程,如软件中断指令。

3.中断的类型:

  1. 硬件中断:由硬件设备产生,如I/O请求、时钟中断等。(外中断)

  2. 软件中断:由执行中断指令(INT)产生,如系统调用。(内中断)

  3. 异常:在处理器执行指令时产生的错误,如溢出、页错误等。

  4. 陷阱(也是一种异常):由程序故意引发的,如调试中断。

  5. 故障(也是一种异常):可能被故障处理程序修正的错误。

  6. 终止(也是一种异常):不可恢复的错误,通常会导致程序终止。

  • 陷入指令不是特权指令。

4.中断机制的基本原理:

  1. 中断请求:当事件发生时,中断源会向CPU发送中断请求(IRQ)。

  2. 中断识别:CPU在每条指令执行完毕后检查是否有中断请求。

  3. 中断响应:如果检测到中断请求,CPU会完成当前指令的执行,然后暂停当前程序的执行,保存当前处理器的状态(如程序计数器、寄存器等),这个过程称为中断响应。

  4. 中断处理:CPU根据中断向量表中的信息,跳转到对应的中断服务例程(ISR)执行,以处理中断。

  5. 恢复执行:中断服务完成后,CPU恢复之前保存的处理状态,继续执行被中断的程序。

1.5 系统调用

1.什么是系统调用:

系统调用(System Call)是应用程序请求操作系统提供服务的唯一方式。在Unix、Linux、Windows等操作系统中,系统调用是应用程序与操作系统内核之间的接口。通过系统调用,应用程序可以执行文件I/O、进程管理、网络通信等操作,这些操作通常需要更高级别的权限,普通应用程序无法直接执行。

2.系统调用和库函数的区别:

  1. 来源

    • 系统调用:由操作系统提供,是操作系统内核的一部分。

    • 库函数:由标准库或第三方库提供,是用户空间的应用程序代码。

  2. 执行

    • 系统调用:直接在内核态执行,可以执行特权操作。

    • 库函数:在用户态执行,通常是对系统调用的封装,不能执行特权操作。(也会有涉及系统调用的库函数)

  3. 性能

    • 系统调用:通常比库函数慢,因为它涉及到从用户态到内核态的切换。

    • 库函数:通常更快,因为它们在用户空间执行,避免了上下文切换。

  4. 功能

    • 系统调用:提供了对硬件和系统资源的直接访问。

    • 库函数:提供了更高级别的抽象,简化了编程。

3.为什么系统调用是必须的:

  1. 权限管理:系统调用允许应用程序在受控的方式下执行特权操作,如访问硬件资源、创建和销毁进程等。

  2. 资源共享:系统调用确保多个应用程序可以安全地共享系统资源,如内存、文件等。

  3. 抽象和封装:系统调用为应用程序提供了操作系统服务的抽象,使得应用程序不必关心底层硬件细节。

  4. 稳定性和安全性:通过系统调用,操作系统可以控制对系统资源的访问,防止恶意或错误的应用程序破坏系统。

4.什么功能要用系统调用实现:

  1. 文件操作:如打开、读取、写入、关闭文件。

  2. 进程管理:如创建、终止进程,以及进程间通信。

  3. 内存管理:如分配和释放内存。

  4. 设备控制:如操作硬件设备。

  5. 网络通信:如建立网络连接、发送和接收数据。

  6. 权限控制:如更改文件权限或用户身份。

5.系统调用的过程:

  1. 应用程序请求:应用程序执行一条特殊的指令(如x86架构的int 0x80sysenter指令)或使用特定的函数调用(如在POSIX系统中使用syscall指令),请求系统调用。

  2. 用户态到内核态:处理器从用户态切换到内核态,以便执行特权操作。

  3. 参数传递:应用程序将系统调用的编号和参数传递给内核。

  4. 系统调用处理:内核根据系统调用编号找到对应的处理程序,并执行它。

  5. 执行操作:系统调用处理程序在内核空间执行请求的操作。

  6. 返回结果:操作完成后,系统调用将结果返回给应用程序,并可能返回一个状态码表示操作的成功或失败。

  7. 恢复用户态:处理器从内核态切换回用户态,应用程序继续执行。

1.6 操作系统体系结构

1.大内核(Monolithic Kernel)

  • 定义:大内核体系结构将操作系统的所有核心服务(如进程管理、文件系统、设备驱动程序、内存管理等)都集成在单一的内核空间中。

  • 特点:

    • 效率:由于所有服务都在内核空间运行,它们之间的通信非常快速。

    • 复杂性:随着功能的增加,内核的大小和复杂度也会增加,导致维护和更新困难。

    • 稳定性:一个组件的故障可能会影响整个系统的稳定性。

2.微内核(Microkernel)

  • 定义:微内核体系结构只将最基本的操作系统服务(如进程和通信管理)保留在内核中,其他服务(如文件系统、设备驱动程序)则作为用户空间的进程运行。

  • 特点:

    • 安全性:由于内核较小,潜在的攻击面减少,系统更安全。

    • 灵活性:更容易添加或修改系统服务,因为它们运行在用户空间。

    • 性能:由于许多服务在用户空间运行,可能存在性能开销,因为需要频繁地在用户态和内核态之间切换。

3.分层结构(Layered Structure)

  • 定义:分层结构体系结构将操作系统服务分为多个层次,每一层只与它下面的层次交互。

  • 特点:

    • 模块化:每个层次都可以独立开发和测试。

    • 易于理解:层次分明,便于理解系统的结构和功能。

    • 性能影响:过多的层次可能导致性能下降,因为每一层都可能引入额外的开销。

4.模块化(Modular Kernel)

  • 定义:模块化体系结构允许在系统运行时动态地加载和卸载内核模块。

  • 特点:

    • 可扩展性:可以轻松添加或删除功能,而无需重新编译内核。

    • 可定制性:可以根据需要定制内核,减少资源占用。

    • 稳定性:模块化可以减少内核的大小,从而可能提高稳定性。

5.外核(Exokernel)

  • 定义:外核体系结构将硬件资源的管理与操作系统的其他服务分开,为应用程序提供直接控制硬件的能力。

  • 特点:

    • 性能:应用程序可以直接访问硬件资源,可以优化性能。

    • 灵活性:允许应用程序根据需要定制资源管理策略。

    • 复杂性:增加了应用程序开发的复杂性,因为它们需要直接处理硬件资源。

每种体系结构都有其优势和劣势,它们的设计选择通常取决于操作系统的目标应用场景,如桌面、服务器、嵌入式系统等。例如,Linux采用了大内核体系结构,而Minix和QNX则采用了微内核体系结构。

6. 内核

  • 时钟管理:实现计时功能

  • 中断处理:负责实现中断机制

  • 原语:

    • 是一种特殊的程序

    • 处于操作系统最底层,是最接近硬件的部分。

    • 这种程序的运行具有原子性--其运行只能一气呵成,不可中断。

    • 运行事件较短,调用频繁。

  • 对系统资源进行管理的功能

    • 进程管理

    • 存储器管理

    • 设备管理

    • 这些管理工作更多的是对数据结构的操作,不会直接涉及硬件。

1.7 操作系统引导boot

  • 操作系统的引导(Bootstrapping)是指计算机启动时,操作系统内核加载到内存并开始执行的过程。这个过程涉及到计算机硬件和软件的多个组件,以下是其基本步骤和相关数据:

1. 引导过程基本步骤:

  1. 加电自检(POST)

    • 当计算机加电时,首先进行的是加电自检(Power-On Self-Test),由主板上的BIOS(基本输入输出系统)执行。

    • POST检查计算机硬件是否正常,如内存、硬盘、显卡等。

  2. BIOS初始化

    • BIOS会初始化硬件设备,并按照CMOS设置中的顺序搜索可引导设备。

  3. 引导设备

    • BIOS找到可引导设备后,会从该设备的引导扇区读取引导记录(MBR或EBR)。

  4. 引导记录(MBR/EBR)

    • 主引导记录(Master Boot Record,MBR)位于硬盘的第一个扇区,包含引导程序和分区表。

    • 扩展引导记录(Extended Boot Record,EBR)用于扩展分区的引导。

  5. 引导加载器

    • MBR中的引导程序通常是引导加载器(如GRUB、LILO等)的一部分,它会加载操作系统的内核到内存中。

  6. 操作系统内核

    • 内核加载后,开始接管计算机的引导过程,完成硬件的初始化,并启动操作系统。

2. 磁盘相关数据:

  1. 主引导记录(MBR)

    • 位于硬盘的第一个扇区,包含引导代码和磁盘分区表。

  2. 分区表

    • 记录了磁盘上分区的位置和大小信息。

  3. 引导扇区

    • 每个分区的第一个扇区也称为引导扇区,对于可引导分区,它包含引导加载器代码。

  4. 文件系统

    • 磁盘上的文件系统提供了数据存储和组织的方法,操作系统通过文件系统来读写数据

3. 引导过程详细描述:

  1. 开机

    • 用户打开计算机电源。

  2. POST

    • 计算机执行POST检查硬件。

  3. BIOS执行

    • BIOS执行,初始化硬件,并按照CMOS设置中的引导顺序查找引导设备。

  4. 读取MBR

    • BIOS从引导设备的第一个扇区(MBR)读取引导记录。

  5. 执行引导加载器

    • MBR中的引导加载器代码被执行,它负责加载操作系统的内核。

  6. 加载内核

    • 引导加载器将操作系统的内核加载到内存。

  7. 内核初始化

    • 内核开始执行,初始化硬件和设备驱动程序。

  8. 启动操作系统

    • 内核完成初始化后,操作系统完全接管计算机,启动完成。

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