【本文内容参考自Linux内核设计与实现,仅作笔记】
一、内核介绍
1.什么是内核
用户操作的界面是操作系统的外在表象,内核才是操作系统的内在核心。系统其它部分
必须依靠内核这部分软件提供的服务,像管理硬件设备、分配系统资源等。
通常内核由负责响应中断服务程序、负责管理多个进程从而分享处理时间的调度程序、
负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。
对于提供保护机制的现代系统来说,内核独立于普通应用程序,它一般处于系统态,
拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,称为
内核空间。
2.内核的运行相关
当硬件设备想要和系统通信的时候,它首先要发出一个异步的中断信号去打断处理器的执行,
继而打断内核的执行。中断通常对应着一个中断号,内核通过这个中断号查找对应的中断服务程序,
并调用这个程序响应和处理中断。许多操作系统的中断服务程序,包括linux,都不在进程上下文中执行。
它们在与一个所有进程都无关的、专门的中断上下文中运行。
【注】这样做是为了保证中断服务程序能够在第一时间响应和处理中断请求,然后快速的退出。
三种运行状态
·运行于用户空间,执行用户进程。
·运行于内核空间,处于进程上下文,代表某个特定的进程执行。
·运行于内核空间,处于中断上下文,与任何进程无关处理某个特定的中断
【注】当cpu空闲时,内核就运行一个空进程,处于进程上下文,但运行于内核空间。
二、内核分类
操作系统可以分为俩大阵营:单内核和微内核(第三阵营外内核,主要用于科研系统中)。
1.单内核
1980年前,所有的内核都设计成单内核。所谓单内核就是把它从整体上作为一个单独的大过程来实现,
同时运行在一个单独的地址空间上。
因此,这样的内核通常以单个静态二进制文件的形式存放于磁盘中。所有内核服务
都在这样的一个大内核地址空间上运行。内核之间的通信是微不足道的,因为都运行在内核,态,
并身处于同一地址空间:内核直接调用函数,与用户空间的应用程序没什么区别。
特点:简单、性能高
2.微内核
微内核没有作为一个单独的大过程来处理去实习。相反微内核被划分为多个独立的过程,
每个过程叫做一个服务器。理想情况下,只有强烈请求特权的服务器才运行在特权模式下,
其它服务器运行在用户空间。不过,所有的服务器都保持独立运行在各自的地址空间上。
因此,不能像单模块那样直接调用函数,而是通过消息传递处理微内核通信:系统通信采用了进程间通信(IPC)机制,
因此,各个服务器之间通过IPC机制互通消息,互换“服务”。服务器各自独立有效地避免了一个服务器的失效
祸及另一个。同样,模块化的系统允许一个服务器为了另一个服务器而换出。
【注】目前Windows NT内核(WindowsXP、Windows Vista和Windows7等不让任何微内核服务器运行在用户空间)
Linux是一个单内核,Linux内核运行在单独的内核地址空间上。