03.03 操作系统内核是个什么东西?

莉所当燃


什么是内核

  内核是操作系统的最核心最重要的模块,是操作系统首先加载到内存的部分,在保证尽可能小的内存使用的同时要尽可能多的为操作系统的应用程序以及其他部分提供基本的服务,内核代码通常是被加载到内存的保护区域,从而防止应用直接访问内核的内存区域,起到应用和内核隔离的作用,保证了操作系统的可靠稳定。

  严格地说,内核并不是计算机操作系统中必要的组成部分,但是为了抽象出统一的硬件操作接口,几乎每个操作系统都会有一个内核,比如Linux内核就被广泛的使用在Linux,FreeBSD,Android等操作系统上。

内核负责哪些内容

  内核是连接硬件和应用的桥梁。通常来说,内核负责的内容包括:

  • 内存管理
  • 进程和任务管理
  • 设备管理
  • IO通信
  • 中断处理
  • 文件系统等等

两个主要内核架构

1 宏内核架构(Monolithic Kernel)

  在此类内核架构的早期阶段,所有基本的系统服务(如进程和内存管理,中断处理等)都打包到内核空间中的单个模块中。这种类型的体系结构存在一些严重的缺点,例如:内核的大小非常大;可维护性很差;修复一个错误或添加某个新功能可能导致重新编译整个内核,耗费数小时。

  在现代的宏内核架构中,内核由可以动态加载和卸载的不同模块组成。这种模块化方法可以轻松扩展操作系统的功能。内核的可维护性变得非常容易,因为每当特定模块中发生更改或错误修复后,只需要加载和卸载相关的模块。没有必要重新编译整个内核。此外,这种动态加载模块的方式为各种平台(例如嵌入式设备等)裁剪内核变得非常容易,因为我们可以轻松卸载我们不想要的模块。我们熟知的Linux内核就是宏内核。

2 微内核架构(Micro Kernel)

  这种内核架构主要为了解决不断增长的内核代码大小的问题,因为在宏内核中不能很有效的进行控制。微内核架构允许在用户空间运行设备驱动程序,协议栈,文件系统等基本服务。这减少了内核代码的大小,并且还提高了操作系统的安全性和稳定性,因为我们只在内核中运行最少的代码。假如网络服务等基本服务因缓冲区溢出而崩溃,那么只有网络服务的内存会被破坏,系统的其余部分仍然可以运行。

  在微内核架构中,操作系统所有基础的服务都作为户空间的一部分,系统中的其他程序通过进程间通信(IPC)使用这些服务。例如:有用于设备管理的驱动,网络协议栈,文件系统,图形管理等服务。微内核服务本质上是一些守护进程,除了内核授予它们中的一些特权来与物理内存的某些部分进行交互,否则大多数程序都不能与这些部分进行交互。授予特权的服务(尤其是设备驱动服务)可以直接与硬件交互。

那么,微内核架构在内核空间中推荐的最低限度是什么,或者说最基本的微内核需要包括什么?

  • 内存保护

  • 进程调度

  • 进程间通信(IPC)

除此之外,所有其他基本服务都可以成为用户空间的一部分,并且可以以服务的形式运行。

  总结,不管是微内核还是宏内核,内核的主要就是在硬件或底层接口和应用程序之间起到桥梁的作用,隔离用户空间和内核空间。保证了操作系统的稳定性。


拉那烈


简单来说内核就是特殊权限下执行的一些指令。这些指令大部分是分配资源。

比如内存分配,当程序向系统申请内存的时候,只有系统能查找空闲内存,而程序想直接访问自己之外的内存区域,会被系统阻止,除非你使用系统规定的方法去查看,不然都会把你禁止。

除了内存分配,还有虚拟内存的管理。有些程序长时间不执行,系统就会把这部分不用的内存放到硬盘,等需要运行的时候再放回内存即可。

内核功能还有CPU调度,以四核CPU为例,同时能运行四个程序,那超过四个程序怎么办?这时候系统内核帮忙分配时间,A程序执行几个毫秒,B程序执行几个毫秒。

前面提到了各程序之间的内存不能直接访问,需要系统提供的通信手段去传输内存,有些通信方式是经过内核传递数据的。

现在的操作系统内核设计都是微内核设计,也就是把很多功能放到内核之外执行。但是CPU调度和内存分配都是必须的。


活在童话里102211721


\n

{!-- PGC_VIDEO:{"thumb_height": 360, "file_sign": "edb6221b16ad26f58e1e934c1ead4ac0\


分享到:


相關文章: