Linux之Kernel(1)系统基础理论(1)
Author: Once Day Date: 2025年2月6日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
全系列文章可参考专栏: Linux内核知识_Once-Day的博客-CSDN博客
参考文章:
- openEuler OS知识连载 - 知乎
- 引言 - rCore-Camp-Guide-2024A 文档
- 计算机操作系统知识点总结(有这一篇就够了!!!)-CSDN博客
- 5万字、97 张图总结操作系统核心知识点 - 程序员cxuan - 博客园
- 【王道】操作系统 知识点总结(合集)【超详细!】 - Zyyyyyyyyy - 博客园
- 全方位剖析Linux操作系统,太全了-linux操作系统的特点
- OS发展史中各操作系统的形成、发展和特点_同时具备什么操作系统功能构成所谓前后系统,前后任务优先后台任务-CSDN博客
- 《现代操作系统》
文章目录
- Linux之Kernel(1)系统基础理论(1)
- 1.概述
- 1.1 怎么理解操作系统
- 1.2 操作系统与应用程序的关系
- 1.3 并发编程与操作系统
- 1.4 并发与共享
- 2. 计算机硬件
- 3. 操作系统发展历程
- 3.1 手工操作阶段(此阶段无操作系统)
- 3.2 批处理阶段(操作系统开始出现)
- 3.3 分时操作系统
- 3.4 实时操作系统
- 3.5 网络操作系统和分布式计算机系统
- 3.6 个人计算机操作系统
- 3.7 嵌入式操作系统
- 4. 操作系统运行环境
- 4.1 处理器运行模型
- 4.2 操作系统内核功能
- 4.3 中断和异常
- 4.4 系统调用
- 5. 操作系统结构
- 6. 虚拟机
1.概述
1.1 怎么理解操作系统
(1)操作系统首先是软件程序
操作系统是计算机系统中最基础、最核心的软件程序。它是计算机硬件与用户之间的桥梁,为用户提供一个方便、高效、安全的工作环境。操作系统管理和控制着计算机系统中的各种硬件资源,如CPU、内存、存储设备、输入输出设备等,合理地组织、调度和分配这些资源,使它们能够协调工作,发挥最大效能。
(2)计算机系统的核心和基石
操作系统也是其他应用软件运行的基础。它为应用程序提供了统一的编程接口和运行环境,屏蔽了硬件细节,使得应用程序开发者无需关注底层硬件,专注于应用功能的实现。常见的进程管理、内存管理、文件系统、网络通信等,都是由操作系统提供支持的。
(3)管理计算机硬件,为应用程序提供基础
从抽象的角度看,操作系统是一个非常高级的抽象层次。它比进程、文件、内存、网络等具体的资源管理都要更加抽象和高级。操作系统将这些资源管理封装起来,提供统一的调用接口,极大地方便了用户和程序员。但操作系统又低于虚拟机这一更高级别的抽象。虚拟机在操作系统之上,可以模拟出多个独立的、互不干扰的运行环境。
计算机科学的核心就是研究如何在不同层次上进行抽象,如何通过抽象来管理日益复杂的计算机系统。从具体的硬件到操作系统,再到虚拟机,是一个不断抽象、封装的过程。每一层抽象都隐藏了下层的复杂性,提供了更简洁友好的上层接口。理解和掌握这些不同级别的抽象,是学习计算机科学的关键所在。
上图引用自:全方位剖析Linux操作系统,太全了-linux操作系统的特点
1.2 操作系统与应用程序的关系
操作系统与应用程序之间存在着紧密的协作关系:
-
操作系统提供运行环境和必要的服务。
-
应用程序在操作系统提供的环境中运行并使用操作系统提供的服务。
上图引用自全方位剖析Linux操作系统,太全了-linux操作系统的特点。
具体而言,操作系统为应用程序提供了以下支持:
- 执行环境:操作系统为应用程序提供了一个统一的执行环境,包括内存空间、CPU时间等计算资源。应用程序在这个环境中被装载、执行,无需关心底层硬件的差异。
- 系统调用:操作系统提供了一组系统调用(System Call),使应用程序能够请求操作系统的服务,如文件读写、进程管理、内存分配等。系统调用是应用程序与操作系统之间的重要接口。
- 资源管理:操作系统负责管理计算机系统中的各种硬件和软件资源,如CPU、内存、I/O设备等,并为应用程序分配和回收这些资源。
- 安全保护:操作系统提供了多种安全保护机制,如用户身份验证、访问权限控制、内存保护等,防止恶意或错误的应用程序破坏系统或其他程序。
应用程序则在操作系统的支持下运行,通过系统调用请求操作系统的服务,利用操作系统分配的资源完成计算任务。不同的应用程序可以并发执行,共享操作系统提供的资源。
单个程序通常不能发挥处理器的全部性能,因为程序在执行过程中难免遇到一些需要等待的情况,如等待I/O操作完成、等待某个事件发生等。这时程序会调用阻塞函数或睡眠函数,主动放弃CPU,进入等待状态。操作系统会趁这个空档,将CPU时间片分配给其他就绪的程序,以提高CPU的利用率。所以在多道程序环境下,多个程序轮流占用CPU,能够充分发挥处理器的性能。而单个程序因为等待造成的CPU空闲浪费问题,则由操作系统的调度机制来解决,对程序员是透明的。
1.3 并发编程与操作系统
如果是无操作系统,要实现并行编程,必须要手动利用汇编进行CPU寄存器切换。
在没有操作系统的情况下,如果要实现并行编程,程序员需要直接面对硬件,手工处理各种底层细节。比如,要在单个处理器上实现多个程序的并发执行,程序员必须使用汇编语言,精心设计程序,手动保存和恢复各个程序的CPU寄存器状态,以实现程序之间的切换。这非常复杂和低效,对程序员的技能要求很高,而且难以保证正确性和可靠性。
而有了操作系统的支持,并发编程就容易多了。操作系统提供了进程或线程的概念,将并发执行的每个程序封装为一个进程或线程。操作系统负责进程/线程的创建、切换、同步、通信和销毁,程序员只需要使用操作系统提供的相关API,就可以方便地编写并发程序。操作系统会自动保存和恢复CPU寄存器状态,实现进程/线程之间的切换。
上图引用自:计算机操作系统知识点总结(有这一篇就够了!!!)-CSDN博客
(1)在单个处理器上的并发,多个程序分享处理器资源,将CPU时间切成许多时间片,宏观上并发,但在微观上单发。
在单处理器系统上,操作系统采用时间片轮转的方式,将CPU时间划分为多个时间片,并将时间片轮流分配给各个就绪的进程/线程,宏观上实现了多个程序的并发执行。但在微观上,单个处理器任一时刻只能执行一个程序,这称为单处理器并发。
(2)在多个处理器上的并发,多个程序在不同处理器上同时运行,微观上并发。
在多处理器系统上,操作系统可以将不同的进程/线程分配到不同的处理器上同时执行,真正实现了并行执行。每个处理器独立工作,互不干扰。在微观和宏观上都是并行的,这称为多处理器并行。现代的多核CPU就是典型的多处理器系统。
1.4 并发与共享
(1)并发指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。
操作系统的并发性是通过分时实现的。
- 单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行。
- 多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行。
并发性:两个或多个事件在同一时间间隔内发生。
并行性:两个或多个事件在同一时刻发生,需要硬件支持,如多流水线或多处理机硬件环境。
并发编程可以充分利用处理器资源,各程序可以同时运行。但是也会带来时序问题,即运行结果取决于运行时具体的执行顺序。
在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
(2)共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
- 互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。例如,同一时间段内摄像头只能分配给其中一个进程。
- 同时共享方式:系统中的某些资源,允许一个时间段内由多个进程“同时”对它们进行访问。例如,同时打开两个窗口读取PDF文件。宏观上看,两边都在同时读取并显示PDF内容,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。
所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问的(即分时共享)。
并发和共享是操作系统两个最基本的特征,两者之间互为存在的条件:
- 资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享问题;
- 若系统不能对资源共享实施有效的管理,则必将影响到程序的并发执行,甚至根本无法并发执行。
2. 计算机硬件
计算机硬件的基础组成部分包括运算器、控制器、存储器、输入设备和输出设备。它们各司其职,协同工作,共同完成计算机的各种功能。
图片引用自:5万字、97 张图总结操作系统核心知识点 - 程序员cxuan - 博客园
下面进行详细介绍:
- 运算器(Arithmetic Logic Unit, ALU):运算器是计算机的"大脑",负责执行各种算术和逻辑运算,如加减乘除、与或非等。它从存储器中获取数据,按照控制器的指令进行运算,并将结果写回存储器或输出设备。现代CPU中的运算器通常由多个功能单元组成,可以并行执行多个运算,提高运算速度。
- 控制器(Control Unit, CU):控制器是计算机的"指挥中心",负责解释和执行程序指令,控制和协调各个硬件部件的工作。它从存储器中逐条取出指令,分析指令的类型和参数,向相关硬件发出控制信号,引导程序的执行流程。控制器的工作基于指令周期,包括取指、译码、执行等步骤。
- 存储器(Memory):存储器用于存放程序指令和数据,是计算机的"记忆系统"。它分为内存(Random Access Memory, RAM)和外存(External Storage)两大类。内存是CPU可以直接访问的高速存储器,用于存放当前运行的程序和数据,特点是速度快、容量小、掉电易失。外存是用于长期保存程序和数据的大容量存储器,如硬盘、U盘等,特点是速度慢、容量大、掉电不丢失。
- 输入设备(Input Device):输入设备是用户向计算机输入数据和指令的装置,如键盘、鼠标、麦克风、摄像头、扫描仪等。它们将人可读的信息转换为计算机可处理的数字信号,实现人机交互。
- 输出设备(Output Device):输出设备是计算机向用户呈现处理结果的装置,如显示器、打印机、音响等。它们将计算机产生的数字信号转换为人可感知的形式,如文字、图形、声音、视频等,实现信息的可视化表达。
运算器和控制器共同组成了 CPU,这五部分也是冯诺伊曼的体系结构,它认为计算机必须具有如下功能:
把需要的程序和数据送至计算机中。必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。能够按照要求将处理结果输出给用户。
下面是一个实际PC电脑的硬件组成概念图:
3. 操作系统发展历程
3.1 手工操作阶段(此阶段无操作系统)
在计算机发展的早期阶段,没有操作系统的概念,计算机的使用完全依赖于手工操作。这一阶段,用户在计算机上进行任何任务,如程序的装载、运行、结果输出等,都需要人工手动完成。具体过程如下:
- 用户将程序和数据以纸带、磁带等形式提供给计算机操作员。
- 操作员将程序和数据通过控制台或纸带读取机输入到计算机内存中。
- 操作员在控制台上手动输入启动程序的命令,程序开始执行。
- 程序执行过程中,若需要数据输入,操作员需要在控制台上手动输入数据。
- 程序执行完毕,操作员从控制台上读取输出结果,并将结果打印输出或保存到磁带等外部存储介质上。
- 操作员将计算结果返回给用户。
这种完全手工操作的方式存在以下缺点:
- 用户独占全机:一个用户的任务从开始到结束,独占整个计算机系统,其他用户无法使用,资源利用率极低。
- CPU利用率低:CPU大量时间都在等待手工操作,如等待装入程序、等待输入数据等,CPU的计算能力没有得到充分利用。
这实际反映了人机矛盾,即CPU和I/O设备速度不匹配的矛盾。CPU的运算速度很快,而手工操作的速度很慢,二者之间存在巨大差异。CPU大量时间都在等待人工操作完成,导致CPU空闲浪费。
为了解决这些问题,后来出现了脱机批处理阶段,引入了监督程序,实现了作业的自动调度和输入输出的重叠处理,在一定程度上缓解了人机矛盾,提高了资源利用率。但脱机批处理仍然存在用户与作业之间、I/O与CPU之间的速度矛盾。这催生了分时系统和实时系统的出现,从而进入了操作系统时代。
3.2 批处理阶段(操作系统开始出现)
单道批处理系统和多道批处理系统是操作系统发展过程中的两个重要阶段,标志着操作系统的雏形开始出现。
单道批处理系统引入了脱机输入/输出技术,实现了作业的自动调度和输入/输出的重叠处理。它的主要特征是:
- 自动性:在正常情况下,一批作业能够自动地逐个运行,无需人工干预。
- 顺序性:作业按照其在输入设备上的顺序依次进入内存执行,完成顺序与进入内存的顺序相同。
- 单道性:内存中每次只有一道作业,当前作业完成或异常终止后,才调入后继作业运行。
单道批处理缓解了人机速度矛盾,减少了作业的建立时间和手工操作时间,提高了计算机资源的利用率。但由于内存中始终只有一道程序,CPU和其他资源还是要经常等待I/O完成,资源利用率仍然偏低。
多道批处理系统引入了多道程序设计技术,实现了作业的并发执行,进一步提高了资源利用率。多道程序设计允许多个程序同时进入内存并在CPU中交替运行,这些程序共享系统中的各种硬件和软件资源。其主要特点包括:
- 多道性:内存中同时存放多个相互独立的程序。
- 宏观并行:同时进入内存的多个程序都处于运行过程中,但它们开始和结束的时间可能不同。
- 微观串行:内存中的多个程序轮流占用CPU,交替执行。
- 间断性:由于程序之间需要共享和竞争资源,每个程序的执行都是间断的,而不是连续的。
- 共享性:多个程序之间共享系统的各种资源,如CPU、内存、I/O设备等。
- 制约性:多个程序之间存在相互制约关系,如同步、互斥、优先级等。
多道批处理系统需要解决处理器分配、内存分配、I/O设备分配、作业管理等问题。与单道批处理相比,它的优点是资源利用率高,系统吞吐量大;缺点是用户响应时间长,缺乏人机交互能力。
3.3 分时操作系统
分时操作系统是操作系统发展历史上的一个重要里程碑,它引入了分时技术,实现了多用户交互式操作,极大地改善了人机交互体验。
分时技术的核心是时间片轮转,即将CPU的时间划分为多个时间片,每个时间片分配给一个用户或作业,多个用户或作业在时间上交替使用CPU。当一个时间片用完时,操作系统会自动切换到下一个用户或作业,从而实现多用户或多任务的并发执行。每个用户通过自己的终端与计算机交互,感觉似乎独占了整个系统。
分时系统的主要特点包括:
- 同时性(多路性):允许多个终端用户同时使用一台计算机,用户之间互不干扰。
- 交互性:用户可以通过终端与系统进行实时的人机对话,控制程序运行,获取即时响应。
- 独立性:多个用户可以彼此独立地进行操作,互不影响,每个用户感觉自己独占整个系统。
- 及时性:用户请求能够在很短时间内得到响应,通常在几秒钟之内,满足人机交互的需求。
与批处理系统相比,分时系统的优点在于:
- 大大改善了人机交互性,用户请求可以被即时处理和响应,提高了用户体验。
- 实现了多用户共享,提高了系统资源的利用率和系统的服务能力。
但分时系统也存在一些局限性,主要是无法优先处理紧急任务,所有用户受到平等对待,紧急任务可能需要等待较长时间才能得到响应。
3.4 实时操作系统
实时操作系统是为了满足实时任务处理需求而发展起来的一种专门的操作系统。实时任务对响应时间有严格要求,必须在规定的时间内完成处理,如果超过截止时间,就可能造成严重后果。
实时系统通过引入任务优先级机制,确保高优先级的紧急任务能够优先得到处理,而不需要经过时间片排队,从而保证了实时性。
实时系统可以分为软实时系统和硬实时系统两大类:
- 软实时系统:在大多数情况下能够满足实时要求,但偶尔违反时间规定是可以接受的,不会引起永久性的破坏。典型的软实时系统包括飞机订票系统、银行管理系统等,这些系统对响应时间有较高要求,但偶尔的延迟并不会造成严重后果。
- 硬实时系统:必须绝对严格地满足实时要求,某个动作必须在规定的时刻或时间范围内发生,丝毫不能违反,否则就可能导致灾难性的后果。典型的硬实时系统包括飞行器自动控制、工业过程控制、医疗设备控制等,这些系统容不得任何时间上的误差,必须精确、可靠地执行每一个操作。
实时系统的主要特点包括:
- 及时性:能够在规定的时间内响应外部事件,并及时完成任务处理。
- 可靠性:必须保证系统的高度可靠,避免出现故障或错误,确保任务的正确执行。
相比其他类型的操作系统,实时系统的优点在于能够优先处理紧急任务,保证关键任务的实时响应,适用于对时间要求极为严格的场合。但实时系统对硬件和软件的要求也更高,需要专门的实时调度算法、中断处理机制、异常处理机制等,以确保实时性和可靠性。
在实际应用中,实时操作系统广泛应用于工业控制、机器人、航天航空、国防军事等领域。一些知名的实时操作系统包括VxWorks、QNX、RTLinux、FreeRTOS等。这些系统都提供了专门的实时内核和开发工具,支持实时任务的快速开发和可靠执行。
3.5 网络操作系统和分布式计算机系统
网络操作系统和分布式操作系统是计算机技术发展到一定阶段的产物,它们反映了计算机系统从集中式向分布式演进的趋势。
网络操作系统是指把计算机网络中的各台计算机有机地组合起来,提供一种统一、高效、经济的方法来管理和使用网络资源。它的主要特点包括:
- 资源共享:网络中的硬件、软件、数据等各种资源可以被所有用户共享,提高了资源利用率。
- 通信能力:各台计算机之间可以方便地进行数据交换和信息传递,实现了分布式处理。
网络操作系统为用户提供了一个统一的操作界面,屏蔽了底层网络的复杂性,使得用户可以方便地访问和使用网络资源。
分布式计算机系统是由多台计算机组成的,这些计算机通过网络互连,协同工作,完成共同的任务。分布式系统的主要特点包括:
- 分布性:系统中的硬件、软件、数据等资源是分布在不同的计算机上的。
- 并行性:多台计算机可以并行工作,协同完成同一个任务,提高了系统的处理能力。
- 对等性:系统中的每台计算机地位平等,不存在主从关系。
- 资源共享:每台计算机上的资源可以被所有用户共享。
- 可重构性:系统的任意一部分都可以构成一个子系统,并且可以方便地进行重组。
分布式操作系统是指用于管理分布式计算机系统的操作系统,它提供了一种机制,使得用户可以方便地开发和运行分布式应用,充分发挥分布式系统的优势。
网络操作系统和分布式操作系统的本质区别在于,网络操作系统主要关注资源共享和通信,而分布式操作系统更强调任务的分布式执行和并行处理。在分布式系统中,一个任务被分解成多个子任务,分别在不同的计算机上并行执行,最后将结果汇总,完成整个任务。这种并行协同的工作方式是分布式操作系统的核心特征。
随着互联网、云计算、大数据等技术的兴起,分布式系统变得越来越重要。许多大型互联网应用,如搜索引擎、社交网络、电商平台等,都是建立在分布式架构之上的。一些著名的分布式操作系统包括Google的Borg、Microsoft的Dryad、Apache的Hadoop等,它们为海量数据的存储、处理、分析提供了强大的支撑。
未来,分布式操作系统将在人工智能、物联网、区块链等领域扮演越来越关键的角色。如何实现高效、安全、可靠的分布式计算,如何平衡负载、容错容灾、动态伸缩,都是分布式操作系统需要解决的重要课题。可以预见,随着计算机技术的不断发展,分布式操作系统也将不断演进,为构建更加智能、弹性的分布式应用提供更加完善的支撑。
3.6 个人计算机操作系统
个人计算机操作系统是普通用户最为熟悉和广泛使用的一类操作系统。随着个人计算机的普及,个人计算机操作系统也得到了快速发展和广泛应用。它为用户提供了一个友好、直观、易用的图形用户界面(GUI),使得非专业用户也能方便地使用计算机,完成各种日常任务,如文字处理、电子表格、多媒体播放、网络浏览、游戏娱乐等。
目前主流的个人计算机操作系统包括:
- Microsoft Windows:由微软公司开发,是目前个人计算机上使用最广泛的操作系统。Windows提供了丰富的应用软件,支持多种硬件设备,具有良好的易用性和兼容性。主要版本有Windows 7、Windows 8、Windows 10等。
- macOS:由苹果公司开发,专门用于苹果Macintosh系列个人计算机。macOS以其流畅的用户界面、优雅的设计风格、强大的多媒体功能而闻名,在创意设计、音视频处理等领域有广泛应用。
- Linux:一种基于UNIX的开源操作系统,有多个发行版本,如Ubuntu、Fedora、CentOS等。Linux以其稳定性、安全性、灵活性著称,广泛应用于服务器、嵌入式设备、个人桌面等领域。
- Chrome OS:由Google开发的基于Linux内核的轻量级操作系统,主要用于Chromebook笔记本电脑。Chrome OS以云服务为中心,提供了简洁高效的浏览器界面,用户的数据和应用都存储在云端。
相比其他类型的操作系统,个人计算机操作系统的特点包括:
- 图形用户界面:提供了直观、美观的图形界面,用户可以通过鼠标、触摸板等设备进行操作。
- 多任务处理:支持多个应用程序同时运行,用户可以方便地在不同任务之间切换。
- 多媒体支持:内置了强大的多媒体框架,支持音频、视频、图像等多种格式的播放和编辑。
- 网络连接:提供了便捷的网络连接和管理功能,用户可以轻松接入互联网和局域网。
- 硬件支持:支持各种外围设备,如打印机、扫描仪、数码相机等,可以方便地进行安装和配置。
随着个人计算机硬件性能的不断提升和应用软件的日益丰富,个人计算机操作系统也在不断创新和发展。一些新的技术和理念,如云计算、人工智能、语音交互、虚拟/增强现实等,正在被集成到个人计算机操作系统中,为用户提供更加智能、便捷、沉浸式的使用体验。
3.7 嵌入式操作系统
嵌入式操作系统是一种专门用于嵌入式系统的操作系统。嵌入式系统是指以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式操作系统就是运行在这些嵌入式设备上、管理硬件资源、支撑应用软件的基础软件。
嵌入式操作系统的主要特点包括:
- 资源受限:嵌入式设备通常资源有限,如CPU速度较慢,内存容量较小,存储空间不足等,嵌入式操作系统必须能够在有限的资源中高效运行。
- 实时性:许多嵌入式系统需要对外部事件及时响应,完成实时控制和处理任务,嵌入式操作系统必须具备良好的实时性能。
- 可裁剪性:由于嵌入式设备的应用领域非常广泛,需求千差万别,嵌入式操作系统必须能够根据具体应用需求进行裁剪和定制,以达到优化资源利用的目的。
- 可移植性:嵌入式系统采用的硬件平台多种多样,嵌入式操作系统需要具有良好的可移植性,以便在不同的硬件平台上快速移植和部署。
- 可靠性:嵌入式系统通常要求长时间连续工作,并且许多应用领域对可靠性有极高要求,嵌入式操作系统必须具备高可靠、高稳定的特性。
嵌入式操作系统是物联网、智能硬件、无人驾驶等新兴领域的重要使能技术。随着嵌入式设备的智能化、网络化、多样化趋势不断加强,嵌入式操作系统也在不断创新发展,呈现出实时性与通用性兼顾、安全性与开放性并重、轻量化与高性能融合等新特点。
4. 操作系统运行环境
4.1 处理器运行模型
在现代计算机系统中,CPU通常运行在两种不同的模式下:用户态和内核态。这种区分是为了保护操作系统内核和系统资源的安全,防止用户程序对系统造成破坏。
(1)指令的分类:
- 特权指令:只允许操作系统内核使用,如I/O指令、置中断指令等。
- 非特权指令:允许用户程序使用,仅限于访问用户自己的地址空间。
(2)CPU的运行模式:
- 用户态:CPU只能执行非特权指令,运行用户程序。
- 内核态:CPU可以执行特权指令,运行操作系统内核程序。
(3)模式切换:
- 内核态到用户态:通过执行特权指令修改程序状态字寄存器(PSW)中的模式位。
- 用户态到内核态:通过系统调用、硬件中断、异常等事件触发,产生软中断,进入内核态。
(4)用户程序与内核程序:
- 用户程序受限于用户态,只能使用非特权指令和有限的系统资源。
- 内核程序运行在内核态,可以执行特权指令,访问所有系统资源。
- 用户程序通过系统调用向内核程序请求服务,内核程序验证和处理请求,完成后返回用户态。
(5)操作系统内核的分层设计:
- 底层模块:与硬件关联紧密,如中断处理、进程调度等,运行于最高特权级。
- 高层模块:提供更抽象的服务,如文件管理、网络通信等。
- 分层架构提高了系统的安全性和可维护性。
通过引入用户态和内核态,现代操作系统实现了用户程序和内核程序的隔离,提供了受控的系统调用接口,在保证系统安全和稳定的同时,为用户程序提供了丰富的功能支持。理解用户态与内核态的区别和切换机制,是掌握操作系统工作原理的基础。
4.2 操作系统内核功能
操作系统内核(kernel)是计算机系统的核心部分,它直接管理硬件资源,为上层应用程序提供服务。内核由多个关键组件构成,各司其职,协同工作,以确保系统的高效、安全、可靠运行。
(1)内核的定义与作用:
- 内核是操作系统的最基本、最底层的软件模块。
- 它负责管理和分配系统资源,如处理器、内存、设备等。
- 内核通过系统调用接口,实现用户程序与系统资源的交互。
(2)时钟管理:
- 提供标准的系统时间,支持进程调度。
- 时钟中断是重要的系统事件来源,如定时器、看门狗等。
- 时间戳、计时器等机制也依赖于时钟管理。
(3)中断机制:
- 包括硬件中断(外设触发)和软件中断(程序发起,如系统调用)。
- 内核负责中断识别、中断处理程序调度、现场保护与恢复等。
- 中断驱动的异步编程模型可提高系统的并发性和实时性。
(4)原语操作:
- 原语是由若干指令组成的不可分割的操作,用于完成特定的底层功能。
- 常见原语有进程同步和通信、内存分配和回收、原子操作等。
- 原语通常需要关中断执行,以保证其原子性。
(5)系统数据结构:
- 内核维护进程、内存、设备等管理数据结构,以及中断向量表、系统调用表等。
- 这些数据结构通常驻留在内核空间,受到严格的访问控制和一致性保护。
- 高效的数据结构和算法(如多级反馈队列、红黑树等)是内核性能的关键。
(6)其他内核组件:
- 进程间通信(IPC):管道、消息队列、共享内存、信号量等机制。
- 安全和权限管理:用户和用户组管理、访问控制、特权级别等。
- 文件系统:目录结构、文件操作、数据缓存、日志等。
- 网络协议栈:TCP/IP协议、Socket编程接口、网络驱动等。
4.3 中断和异常
中断和异常可以让操作系统内核强行夺回CPU的控制权,以及使CPU从用户态变为内核态。
-
异常:又称内中断,指来自CPU执行指令内部的事件,如程序的非法操作码、地址越界、运算溢出、虚存系统的缺页及专门的陷入指令等引起的事件。
- 故障(Fault)通常是由指令执行引起的异常,如非法操作码、缺页故障、除数为0、运算溢出等。
- 自陷(Trap)是一种事先安排的“异常”事件,用于在用户态下调用操作系统内核程序,如条件陷阱指令。
- 终止(Abort)是指出现了使得CPU无法继续执行的硬件故障,如控制器出错、存储器校验错等。
-
中断:又称外中断,指来自CPU执行指令外部的事件,通常用于信息输入/输出,如I/O中断,时钟中断。
- 可屏蔽中断:指通过INTR线发出的中断请求,通过改变屏蔽字可以实现多重中断,从而使得中断处理更加灵活。
- 不可屏蔽中断:指通过NMI线发出的中断请求,通常是紧急的硬件故障,如电源掉电等。此外,异常也是不能被屏蔽的。
故障异常和自陷异常属于软件中断(程序性异常),终止异常和外部中断属于硬件中断。
异常不能被屏蔽,一旦出现,就应立即处理。
中断和异常的处理过程:
-
当CPU在执行用户程序的第i条指令时检测到一个异常事件,或在执行第i条指令后发现一个中断请求信号,
-
则CPU打断当前的用户程序,然后转到相应的中断或异常处理程序去执行。
-
若中断或异常处理程序能够解决相应的问题,则在中断或异常处理程序的最后,CPU通过执行中断或异常返回指令,回到被打断的用户程序的第i条指令或第i+1条指令继续执行。
返回第i+1条指令:由自陷(Trap)引起的内中断;如系统调用。由外部设备引起的外中断,如键盘敲击。
返回第i条指令:由故障(Fault)引起的内中断;如缺页等。
-
若中断或异常处理程序发现是不可恢复的致命错误,则终止用户程序。
通常情况下,对中断和异常的具体处理过程由操作系统(和驱动程序)完成。
4.4 系统调用
系统调用(System Call)是操作系统提供给用户程序的一组标准接口,使得用户程序能够请求操作系统内核提供服务,比如文件读写、进程管理、内存分配等。它是用户态程序与内核态程序通信的桥梁,也是操作系统实现其功能和管理计算机硬件的重要手段。
系统调用的工作原理:
- 用户程序通过API函数(如open、read、write等)发起系统调用。
- API函数将参数打包,并触发软中断(如80h中断),从用户态切换到内核态。
- 内核根据系统调用号查找系统调用表,定位到相应的内核函数。
- 内核函数执行所请求的操作,完成后将结果返回给用户程序,并切换回用户态。
系统调用的类型:
- 进程控制:如fork、exec、exit等,用于创建、执行、终止进程。
- 文件管理:如open、close、read、write等,用于打开、关闭、读写文件。
- 设备管理:如ioctl、read、write等,用于与设备通信和控制。
- 信息维护:如getpid、alarm、sleep等,用于获取或修改系统信息。
- 通信:如pipe、shmget、mmap等,用于进程间通信和同步。
系统调用的优点:
- 提供统一、标准、安全的接口,方便用户程序使用系统资源。
- 封装底层细节,提高程序的可移植性和兼容性。
- 通过权限检查和参数验证,保障系统的安全和稳定。
- 集中管理和调度资源,提高系统的效率和公平性。
系统调用的缺点:
- 频繁的系统调用会引起大量的上下文切换,影响系统性能。
- 参数传递和结果返回需要在用户空间和内核空间之间进行数据拷贝,带来额外开销。
- 内核代码的bug或安全漏洞可能被恶意用户程序利用,威胁系统安全。
5. 操作系统结构
操作系统结构是指操作系统内部各个组成部分之间相互关系和组织方式的抽象描述。合理的操作系统结构设计可以提高系统的性能、可靠性、安全性、可维护性等。常见的操作系统结构包括分层结构、模块化结构、宏内核结构、微内核结构、外核结构等。
(1)分层结构,将操作系统按照功能和抽象级别划分为若干层,上层依赖下层提供的服务,下层为上层屏蔽硬件细节。典型的分层包括硬件层、内核层、系统调用层、API层和用户层。分层结构有利于系统的设计、实现和测试,但层次之间的频繁切换可能影响性能。
(2)模块化结构,将操作系统划分为多个独立的模块,每个模块完成特定的功能,模块之间通过定义良好的接口进行通信。模块化结构有利于系统的扩展、裁剪和移植,提高了系统的灵活性和可维护性。但模块之间的依赖关系可能导致系统的复杂度增加。
(3)宏内核结构,又称单内核结构,将操作系统的绝大部分功能(如进程管理、内存管理、文件系统、设备驱动等)都实现在内核态,提供了高度集成、高效的系统服务。宏内核结构是传统操作系统(如Unix、Linux、Windows等)的主流选择,但内核代码庞大、耦合紧密,可能影响系统的稳定性和安全性。
常见的Windows、Linux、Android、IOS、macOS等系统都是宏内核,但它们也广泛吸取微内核的优点进行改进。
(4)微内核结构,将操作系统的核心功能(如进程调度、中断处理、IPC等)实现在内核态,而将其他功能(如文件系统、设备驱动等)实现在用户态,内核与服务之间通过消息传递进行通信。微内核结构有利于系统的可靠性、安全性和可扩展性,但频繁的消息传递可能影响系统的性能。
(5)外核结构,又称库操作系统结构,将传统操作系统中的大部分功能(如进程管理、内存管理等)都实现在用户态,内核只提供最基本的硬件抽象和保护机制。应用程序可以根据需要灵活选择和组合各种操作系统服务。外核结构赋予了应用程序更大的自由度和控制权,但也可能引入安全隐患和兼容性问题。
除了上述经典结构外,现代操作系统还出现了一些新的结构形式,如虚拟机监控器(VMM)结构、容器化结构、微服务结构等,以适应云计算、边缘计算、物联网等新兴应用场景的需求。
6. 虚拟机
虚拟机(Virtual Machine, VM)是一种通过软件模拟的完整计算机系统,它可以在一台物理计算机上运行多个不同的操作系统和应用程序,实现计算资源的灵活共享和动态管理。虚拟机技术已广泛应用于服务器虚拟化、云计算、桌面虚拟化等领域。
根据虚拟机监控器(Virtual Machine Monitor, VMM)的实现方式和虚拟化层次,可将虚拟机分为两大类:第一类虚拟机(Type-1 VM)和第二类虚拟机(Type-2 VM)。
图片源自于【王道】操作系统 知识点总结(合集)【超详细!】 - Zyyyyyyyyy - 博客园
第一类虚拟机,VMM直接运行在物理硬件之上,无需依赖宿主操作系统,因此也被称为裸金属虚拟机(Bare-Metal VM)。VMM负责对物理资源进行抽象和分配,并为每个虚拟机提供虚拟化的硬件环境(如CPU、内存、I/O设备等),使其可以像独占硬件一样运行。第一类虚拟机的代表产品有VMware ESXi、Microsoft Hyper-V、Xen等。优点是虚拟化开销小,性能接近物理机,管理简单,无需考虑宿主操作系统的兼容性和稳定性。缺点是硬件支持有限,需要CPU等提供虚拟化指令集,软件生态相对封闭,难以与宿主系统的应用程序协同工作。
第二类虚拟机,VMM运行在宿主操作系统之上,借助宿主操作系统提供的API和服务来实现虚拟化功能,因此也被称为托管虚拟机(Hosted VM)。VMM通过拦截和模拟虚拟机发出的特权指令和敏感操作,将其转换为对宿主操作系统资源的访问请求,再由宿主操作系统代为执行。第二类虚拟机的代表产品有VMware Workstation、Oracle VirtualBox、QEMU等。优点是更硬件兼容性好,可在各种商用硬件和操作系统上运行,软件生态丰富,可与宿主系统的应用程序方便地交互和集成。缺点是虚拟化开销大,性能受宿主操作系统的影响,管理复杂,需要同时维护宿主操作系统和虚拟机操作系统。
第一类VMM | 第二类VMM | |
---|---|---|
对物理资源的控制权 | 直接运行在硬件之上,能直接控制和分配物理资源 | 运行在Host OS之上,依赖于Host OS为其分配物理资源 |
资源分配方式 | 在安装Guest OS时,VMM要在原本的硬盘上自行分配存储空间,类似于"外核“的分配方式,分配未经抽象的物理硬件 | GuestOs拥有自己的虚拟磁盘,该盘实际上是HostOs文件系统中的一个大文件。GuestOs分配到的内存是虚拟内存 |
性能 | 性能更好 | 性能更差,需要Host Os作为"中介” |
可支持的虚拟机数量 | 更多,不需要和Host OS竞争资源,相同的硬件资源可以支持更多的虚拟机 | 更少,Host Os本身需要使用物理资源,Host OS上运行的其他进程也需要物理资源 |
虚拟机的可迁移性 | 更差 | 更好,只需导出虚拟机镜像文件即可迁移到另一台Host Os上,商业化应用更广泛 |
运行模式 | 第一类VMM运行在最高特权级(Ring 0),可以执行最高特权的指令。 | 第二类VMM部分运行在用户态、部分运行在内核态。GuestOs发出的系统调用会被VMM截获,并转化为VMM对Hostos的系统调用 |
除了上述两类虚拟机外,近年来还出现了一些新的虚拟化技术和实现方式,如操作系统级虚拟化(如Docker容器)、库操作系统虚拟化(如Unikernel)、硬件辅助虚拟化(如Intel VT、AMD-V)等,以进一步提高虚拟化的性能、安全性和灵活性。
Once Day
也信美人终作土,不堪幽梦太匆匆......
如果这篇文章为您带来了帮助或启发,不妨点个赞👍和关注,再加上一个小小的收藏⭐!
(。◕‿◕。)感谢您的阅读与支持~~~