Linux内核设计与实现 之一 Linux内核简介

来源:互联网 发布:淘宝有电话客服吗 编辑:程序博客网 时间:2024/04/28 11:05
Linux内核设计与实现 之一 Linux内核简介

1991年 Linus Torvalds 开发全新的操作系统Linux

Linux克隆了Unix,但Linux不是Uninx

Linux不是一个商业化的产品

Linux用途广泛

用户界面是操作系统的外在表象,内核才是操作系统内在的核心

通常一个内核由负责响应中断的中断服务程序,进程调度程序,内存管理程序,进程间通信等组成

内核一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限

内核还要管理系统的硬件设备       

处理器在任何指定的时间点上的活动范围概括为下列三者之一:
1、运行于内核空间,处于进程上下文,代表某个特定的进程执行;
2、运行与内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断;
3、运行与用户空间,执行用户进程。

 
操作系统内核可以分为两大设计阵营:单内核和微内核

在1980年以前,所有的内核都设计成单内核,所谓单内核,就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间,通常以单个静态的二进制文件的形式存放于磁盘,所有的内核服务都在这样一个大内核空间运行,内核之间通信是微不足道的,内核可以直接调用函数,这与用户空间没有区别,这种模式的支持者认为,单模块具有简单和高性能的特点,大多数的Unix都设计为单模块。

微内核并不作为一个单独的大过程来实现,微内核的功能被划分为独立的过程,每个过程叫做一个服务器,理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间,不过,所有服务器都保持独立并运行在各自的地址空间内,因此就不能像单内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用了进程间通信(IPC)机制,因此各种服务器之间通过IPC机制互通消息,互换“服务”。服务器的各自独立有效地避免了一个服务器的失效祸及另一个。

因为IPC机制比函数调用开销大,又因为会涉及到用户空间到内核空间的上下文切换,因此消息传递需要一定的周期,因此,实际的微内核系统让大部分或全部服务器位于内核,这样就可以直接调用函数,消除频繁的上下文切换,windowsNT和Mach是微内核的典型实例,在最近的版本中,这两个系统都不让任何微内核服务器位于用户空间中,这违背了微内核设计的初衷。

Linux是一个单内核,也就是说Linux内核运行在单独的内核地址空间中,不过,Linux吸取了微内核的精华:其引以为豪的是模块化设计、抢占式内核、支持内核线程以及动态加载内核模块的能力,不仅如此,Linux还避其微内核设计上性能损失的缺陷, 让所有事情都运行在内核态,直接调用函数,无需消息传递。至今,Linux是模块化的、多线程的以及内核本身可调度的操作系统。

当然Linux也借鉴了Unix的优点,以下是Linux内核与Unix各种变体的内核特点所做的分析比较:
1、Linux支持动态加载内核模块。尽管Linux内核也是单内核,可是允许在需要的时候动态的卸载和加载部分内核代码;
2、Linux支持对称多处理(SMP)机制。尽管许多Unix变种也支持SMP,但传统的Unix并不支持这种机制;
3、Linux内核支持抢占。与传统Unix不同,Linux内核具有允许在内核运行的任务优先执行的能力,在其他各种Unix产品中,只有Solaris和IRIX支持抢占,但是大多数传统的Unix不支持。
4、Linux对线程的支持比较有意思,内核并不区分线程和其他一般进程,对于内核来说,所有的进程都一样——只不过其中的一些共享资源而已;
5、Linux提供了具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统(sysfs)
6、Linux忽略了一些被认为是设计的很拙劣的Unix特性,如STREAMS
7、Linux体现了自由这个词的精髓

不管Linux和Unix有多大不同,它身上都深深的打上了Unix烙印。