内核结构与设计

本文详细介绍了操作系统内核的主要职责,包括管理硬件和软件资源,并探讨了宏内核、微内核和混合内核三种架构的工作原理。宏内核将所有组件整合为一个可执行程序,强调性能但扩展性较差;微内核则将大部分功能作为服务进程,注重模块化和可扩展性;混合内核结合两者优点,通过软件抽象层实现硬件无关性。内存分配、进程管理、文件系统、网络通信和设备管理等核心组件在不同内核架构中的实现方式也进行了阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 内核的作用:管理资源的。
  2. 管理什么资源:
  1. 硬件资源:
  1. 总线:负责连接各种其它设备,是其它设备工作的基础。
  2. CPU:中央处理器,负责执行程序和处理数据运算。
  3. 内存:负责储存运行时的代码和数据。
  4. 硬盘:负责长久储存用户文件数据。
  5. 网卡:负责计算机与计算机之间的通信。
  6. 显卡:负责显示。
  7. 各种I/O设备:如显示器,打印机,键盘,鼠标等。
  1. 软件资源:

计算机中各种形式的数据。如文件,软件应用程序等。

3     如何管理,其内部组成如何?

       (1)     管理CPU:CPU是执行程序的,内核把运行的程序抽象成进程,所以管理CPU又称为进程管理

       (2)     管理内存:内核有分配和释放内存的权力。

       (3)     管理硬盘:硬盘存放用户数据,而内核将用户数据抽象位文件,因此内核主要是管理文件,即合理组织,方便用户查找和读写文件,于是,形成文件系统,内核管理此系统。

       (4)     管理显卡:负责显示信息,支持GUI(图形用户接口),即内核管理图形系统

       (5)     管理网卡:网络通信需要网络协议,内核中形成网络协议栈,又称网络组件。

       (6)     管理各种I/O设备:键盘,鼠标等I/O设备,在内核抽象成I/O管理器

       (7)     驱动程序,安全组件等:驱动程序是内核管理和控制硬件需要用到的程序,驱动程序根据硬件的型号和规格等不同而不同。

总结:上述3,其实在告诉我们内核中一定要有啥:进程管组件,内存管理组件z,文件管理组件,图形系统组件,网络组件,I/O设备管理器组件,还有一些安全组件和硬件驱动程序等。

  1. 假设有了这些组件,如何去用它们,乐高积木如何拼凑,这里介绍三种经典内核架构:
  1. 宏内核:
  1. 一个可执行程序;
  2. 性能优,可扩展性差,没有模块化,一个错误就完蛋。。。
  3. 宏内核就是把3中的组件编译链接在一起,形成一个可执行程序。
  4. 内存分配服务过程:

$ 应用程序调用内存分配API(应用程序接口)函数。

$   处理器切换特权模式,开始运行内核代码。

$   内核里的内存管理代码按照特定的算法,分配一块内存。

$   把分配的内存块的首地址,返回给内存分配的API函数。

$   内存分配的API函数返回,处理器开始运行用户模式下的应用程序,引用程序就得到了一块内存的首地址,并且可以使用这块内存。

  1. 微内核:
  1. 多个库链接。
  2. 可扩展性优,模块化,性能差。
  3. 微内核中仅有进程调度,处理中断,内存空间映射,进程间通信等功能,其余的实际的功能性组件如进程管理,内存管理等都做成服务进程,和上位机用户进程一样的实现,只不过他们服务于内核。
  4. 如何做组件应用之间的通信? 答:消息。。。(服务进程的标称模型就是循环处理来自其他进程的消息,完成相关服务功能)
  5. 内存分配服务过程:

$ 应用程序发送内存分配的消息,发消息的是微内核提供的函数,相当于系统API。(微内核的 API(应用程序接口)相当少,极端情况下仅需要两个,一个接收消息的 API 和一个发送消息的 API

$   处理器切换特权模式,开始运行内核代码。

$ 微内核代码让当前进程停止运行,并根据消息包中的数据,确定消息发送给谁。(这个例子当然是内存管理服务进程)

$ 内存管理服务进程收到消息,分配一块内存。

$ 内存管理服务进程,,也会通过消息返回分配内存块的地址给内核,然后继续等待下一条消息。

$ 处理器开始运行用户模式下的应用程序,引用程序就得到一块内存首地址,并且可以使用这块内存了。

  1. 混合内核:
  1. 结合了宏,微内核优点
  2. 这里提供一个叫软件抽象层(它是独立层)的概念:我理解:将每次都需要改变的代码放到这一层,主要用于硬件,分离硬件的相关性,就是要把操作硬件和处理硬件功能差异的代码抽离出来,形成一个独立的软件抽象层,对外提供相应的接口,方便上层开发。
  3. 一个例子说明软件抽象层:

1.进程调度,它的目的是要从众多进程中选择一个将要运行的进程,当然有各种选择的算法,例如,轮转算法、优先级算法等。

2.进程切换,它的目的是停止当前进程,运行新的进程,主要动作是保存当前进程的机器上下文,装载新进程的机器上下文。

3.我们不难发现,不管是在 ARM 硬件平台上还是在 x86 硬件平台上,选择一个进程的算法和代码是不容易发生改变的,需要改变的代码是进程切换的相关代码,因为不同的硬件平台的机器上下文是不同的。

4.因此将进程切换放到软件抽象层。

  1. 混合层架构分成三层:内核接口层,内核功能层,内核硬件层。
  2. 内核接口层:定义了一套 UNIX 接口的子集,接口少,并且这几个接口又能大致定义出操作系统的功能;检查其参数是否合法,如果参数有问题就返回相关的错误。
  3. 内核功能层:主要完成各种实际功能,这些功能按照其类别可以分成各种模块,当然这些功能模块最终会用具体的算法、数据结构、代码去实现它。
  1. 进程管理,主要是实现进程的创建、销毁、调度进程,当然这要设计几套数据结构用于表示进程和组织进程,还要实现一个简单的进程调度算法。
  2. 内存管理,在内核功能层中只有内存池管理,分两种内存池:页面内存池和任意大小的内存池。
  3. 中断管理,这个在内核功能层中非常简单:就是把一个中断回调函数安插到相关的数据结构中,一旦发生相关的中断就会调用这个函数。
  4. 设备管理,这个是最难的,需要用一系列的数据结构表示驱动程序模块、驱动程序本身、驱动程序创建的设备,最后把它们组织在一起,还要实现创建设备、销毁设备、访问设备的代码,这些代码最终会调用设备驱动程序,达到操作设备的目的。
  1. 内核硬件层:主要包括一个具体硬件平台相关的代码。
  1. 初始化,初始化代码是内核被加载到内存中最先需要运行的代码,例如初始化少量的设备、CPU、内存、中断的控制、内核用于管理的数据结构等。
  2. CPU 控制,提供 CPU 模式设定、开、关中断、读写 CPU 特定寄存器等功能的代码。
  3. 中断处理,保存中断时机器的上下文,调用中断回调函数,操作中断控制器等。
  4. 物理内存管理,提供分配、释放大块内存,内存空间映射,操作 MMUCache 等。
  5. 平台其它相关的功能,有些硬件平台上有些特殊的功能,需要额外处理一下。

【8】

总结:我知道内核中基础的组件,和三种基本内核架构,至于为什么就需要这些组件和这些组件都干什么,什么作用,为什么混合内核那么设计,每个组件之间的联系,我不知道啊。。。。。

感谢极客时间彭东大神。。。基本复制原文。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值