第三课:内核结构与设计
前言:这一章节令我对内核的基本组成有了一个大概的印象,以后就跟着老师一点一点的去了解它了。
1 六类必要组件
1) 管理CPU(进程管理)
CPU是执行程序的,内核将运行时的程序抽象成各种进程,所以CPU管理又称为进程管理。
2) 管理内存
程序和数据都会占用一定的,内核按照一定的规则分配和释放内存。
3) 管理硬盘(管理文件)
硬盘主要存放用户数据,内核把用户数据抽象成文件。文件需要合理的组织,便于用户查找和读写,内核中文件系统负责管理文件。
4) 管理显卡
负责显示信息,用于操作系统提供GUI接口,内核中图形系统负责管理显卡。
5) 管理网卡
网卡主要完成网络通信,网络通信需要各种通信协议,最后在内核中形成了网络协议栈,又称网络组件。
6) 管理各种IO设备
通过驱动程序管理不同的硬件。
2 宏内核的工作原理和优缺点
宏内核将内核各种组件及其他功能代码编译链接成一个可执行程序,功能尽可能的多。宏内核具备极致的性能
3 微内核的工作原理和优缺点
提倡功能尽可能的小,仅具备进程调度、处理中断、内存空间映射、进程间通信等功能。这样的内核是不能完成什么功能的,开发者将文件管理,内存管理,进程管理等功能做成一个个服务进程,就像用户进程那样。
微内核定义了一种进程间通信的机制——消息。应用程序如果要请求相关服务,像微内核发送一条请求消息,微内核再将消息转发给服务进程。进程切换带来了带来了一定的开销,令系统性能降低了不少。
微内核具备极致的可移植性,可扩展性。
4 设计软件抽象层的目的是什么
屏蔽底层细节,使上层开发更简单。底层向上层提供接口供上层调用。比如驱动层,如果更换硬件后驱动层的代码可能会存在改动,但只要提供的接口不变,上层代码就不需要修改。系统可移植性增强。
5 内核结构大致是什么样的
5.1 内核接口层
检查参数是否合法,如果不合法返回对应的错误码。合法就调用下层完成功能的接口。
5.2 内核功能层
完成各种实际功能。
1) 进程管理
主要实现进程的创建、销毁和调度,需要设计几套数据结构用于表示和组织进程。还需要一个进程调度算法。
2) 内存管理
内核功能层中只有内存池管理,分为页面内存池和任意大小的内存池。
3) 中断管理
将一个中断回调函数插入到相关的数据结构中,一旦发生中断,调用此回调函数。
4) 设备管理
需要一系列的数据结构表示驱动程序模块、驱动程序本身、驱动程序创建的设备,最后把他们组织在一起。还要实现创建、销毁和访问设备的代码,这些代码最终会调用驱动程序,达到操作设备的目的。
5.3 内核硬件层
- 初始化,初始化代码是内核被加载到内存中最先需要运行的代码,例如初始化少量的设备、CPU、内存、中断的控制、内核用于管理的数据结构等。
- CPU 控制,提供 CPU 模式设定、开、关中断、读写 CPU 特定寄存器等功能的代码。
- 中断处理,保存中断时机器的上下文,调用中断回调函数,操作中断控制器等。
- 物理内存管理,提供分配、释放大块内存,内存空间映射,操作 MMU、Cache 等。
- 平台其它相关的功能,有些硬件平台上有些特殊的功能,需要额外处理一下。