本专栏源于极客时间《操作系统实战45讲》个人的学习笔记
一、计算机中资源大致可以分为两类资源,一种是硬件资源,一种是软件资源,而内核是硬件资源和软件资源的管理者。
硬件资源:
1.总线,负责连接各种其它设备,是其它设备工作的基础。
2.CPU,即中央处理器,负责执行程序和处理数据运算。
3. 内存,负责储存运行时的代码和数据。
4. 硬盘,负责长久储存用户文件数据。
5. 网卡,负责计算机与计算机之间的通信。
6. 显卡,负责显示工作。
7. 各种 I/O 设备,如显示器,打印机,键盘,鼠标等。
软件资源:
各类文件、软件程序
内核
内核的组成:
1.管理 CPU,由于 CPU 是执行程序的,而内核把运行时的程序抽象成进程,所以又称为进程管理。
2.管理内存,由于程序和数据都要占用内存,内存是非常宝贵的资源,所以内核要非常小心地分配、释放内存。
3.管理硬盘,而硬盘主要存放用户数据,而内核把用户数据抽象成文件,即管理文件,文件需要合理地组织,方便用户查找和读写,所以形成了文件系统。
4.管理显卡,负责显示信息,而现在操作系统都是支持 GUI(图形用户接口)的,管理显卡自然而然地就成了内核中的图形系统。
5.管理网卡,网卡主要完成网络通信,网络通信需要各种通信协议,最后在内核中就形成了网络协议栈,又称网络组件。
6.管理各种 I/O 设备,我们经常把键盘、鼠标、打印机、显示器等统称为 I/O(输入输出)设备,在内核中抽象成 I/O 管理器。
驱动程序
各种计算机硬件的性能不同,硬件型号不同,硬件种类不同,硬件厂商不同,内核要想管理和控制这些硬件就要编写对应的代码,通常这样的代码我们称之为驱动程序。
二、经典内核结构
1.宏内核结构
宏内核就是把以上诸如管理进程的代码、管理内存的代码、管理各种 I/O 设备的代码、文件系统的代码、图形系统代码以及其它功能模块的代码,把这些所有的代码经过编译,最后链接在一起,形成一个大的可执行程序。
优点: 性能很好,因为在内核中,这些组件可以互相调用,性能极高。
缺点: 没有模块化,没有扩展性、没有移植性,高度耦合在一起,一旦其中一个组件有漏洞,内核中所有的组件可能都会出问题。
2.微内核结构
微内核架构正好与宏内核架构相反,它提倡内核功能尽可能少:仅仅只有进程调度、处理中断、内存空间映射、进程间通信等功能
==优点:==系统结构相当清晰利于协作开发。其次,系统有良好的移植性,微内核代码量非常少,微内核有相当好的伸缩性、扩展性,因为那些系统功能只是一个进程,可以随时拿掉一个服务进程以减少系统功能,或者增加几个服务进程以增强系统功能。
==缺点:==消息带来了非常大的开销,当然各个服务进程的切换开销也不小。这样系统性能就大打折扣。
3、宏内核结构和微内核结构中系统调用过程的区别(以内存分配为例)
宏内核结构下的系统调用过程(内存分配为例)
微内核结构下的系统调用过程(内存分配为例)
三、分离硬件的相关性
分层的主要目的和好处在于屏蔽底层细节,使上层开发更加简单。
四、操作系统如何实现多任务
1.进程调度
它的目的是要从众多进程中选择一个将要运行的进程,当然有各种选择的算法,例如,轮转算法、优先级算法等。
2.进程切换
它的目的是停止当前进程,运行新的进程,主要动作是保存当前进程的机器上下文,装载新进程的机器上下文。
不管是在 ARM 硬件平台上还是在 x86 硬件平台上,选择一个进程的算法和代码是不容易发生改变的,需要改变的代码是进程切换的相关代码,因为不同的硬件平台的机器上下文是不同的。所以,这时最好是将进程切换的代码放在一个独立的层中实现,比如硬件平台相关层,当操作系统要运行在不同的硬件平台上时,就只是需要修改硬件平台相关层中的相关代码,这样操作系统的移植性就大大增强了。
五、现代操作系统内核的分层
内核接口层主要功能
内核接口层主要是定义了一套 UNIX 接口的子集
内核功能层主要功能
内核功能层主要完成 I/O 管理组件、内存管理组件、文件系统组件、进程管理组件、图形系统组件、网络组件、安全组件的通用功能型代码
内核硬件层主要功能
内核硬件层则完成其内核组件对应的具体硬件平台相关的代码。