内核是操作系统的内在核心。系统的其他部分必须依靠内核这部分软件提供的服务,想管理硬件设备、分配系统资源等。
内核有时候被称作是管理者或者操作系统核心。通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。
内核独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。应用程序在用户空间执行。他们只能看到允许他们使用的部分系统资源,并且只使用特定的系统功能,不能访问硬件,也不能访问内核划给别人的内存范围,还有一些其他的限制。
系统中运行的应用程序通过系统调用来与内核通信。应用程序通常调用库函数再由库函数通过系统调用让内核代其完成各种不同任务。
内核分为单内核和微内核:
单内核整体运行在一个单独的地址空间。内核以静态二进制文件的形式存放在磁盘中。所有内核服务都在一个大内核地址空间上运行。内核间的通信是微不足道的。
微内核的功能被划分为多个独立的过程,每个过程叫做一个服务器。所有服务器都保持独立并运行在各自的地址空间。不能像单内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用进程间通信机制(IPC)来完成服务器之间的互通消息。
Linux内核运行在单独的内核地址空间。不过Linux汲取了微内核的进化:模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。并且规避了微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无需消息传递。
Linux内核与传统Unix系统之间存在一些显著的差异:
1、Linux支持动态加载内核模块。
2、Linux支持对称多处理SMP机制 。
3、Linux内核可以抢占。允许内核运行的任务优先执行。
4、Linux对线程支持的实现比较有意思:内核并不区分线程和其他的一般进程。
5、Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统。
6、Linux忽略了一些被认为是设计得很拙劣的Unix特性,像STREAMS,它还忽略了那些难以实现的过时标准。
什么是系统级的操作?
当程序需调用中断服务程序、调度程序、内存管理程序或系统服务程序时,都需要调用系统调用,让内核代其完成各种任务。