操作系统是指在整个系统中负责完成基本功能和系统管理的部分,这些部分包括内核、设备驱动程序、启动引导程序、命令行shell或其它种类的用户界面、基本的文件管理工具和系统工具。其中,用户界面只是操作系统的外在表象,内核才是操作系统的内在核心。通常一个内核由负责响应中断的中断程序,负责管理多个进程从面分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。对于提供保护机制的现代操作系统来说,内核独立于普通应用程序,它一般处理系统态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。相对的,应用程序在用户空间执行。它们只能看到允许他们使用的部分系统资源,并且不能使用些某些特定的系统功能,不能直接访问硬件,还有其它一些使用限制。当内核运行的时候,系统以内核态进入内核空间,相反,普通用户程序以用户态进入用户空间。应用程序通过系统调用和内核通信来运行。应用程序通过调用库函数,再由库函数通过系统调用界面让内核代其完成各种不同任务。
内核负责管理系统的硬件设备,当硬件设备想和系统通信的时候,它首先要发出一个异步中断信号去打断内核正在执行的工作。中断通常对应着一个中断号,内核通过这个中断号查找相应的中断服务程序,并调用这个程序响应和处理中断。
操作系统内核分为单内核和微内核两种:
单内核就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。这样的内核通常以单个静态二进制文件的形式存放于磁盘。所有内核服务都在这样的一个大内核空间中运行,内核之间的通信是微不足道的,因为大家都在内核态,并处于同一个地址空间。
微内核的功能被划分为独立的过程,每个过程叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其它服务器都运行在用户空间。不过,所有的服务器都保持独立并运行在各自的地址空间,因为,不可能像单内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用了进程间通信(IPC)机制,因此,各种服务器之间通过IPC机制传递消息,互换“服务”。服务器的各自独立有效地避免了一个服务器的失效影响另一个。
linux是一个单内核,linux内核运行在单独的内核地址空间,但linux汲取了微内核的精华,包括模块化设计、抢占式内核、支持内核线程以及装载内核模块的能力。不仅如此,linux还避其微内核设置上的性能损失缺陷,让所有事情都运行在内核态,直接调用函数,无需消息传递
原文地址:http://tobeone.blog.51cto.com/817917/1549732