[Linux内核设计与实现]Linux内核简介

1969年,Dennis RitchieKen Thompsond等人发布Unix系统,它是从贝尔实验室一个失败的多用户操作系统Multics发展而来。1979年起加州大学伯克利分校开始推出Berkeley Software DistributionsBSD),1983ATT推出SystemV。这两个版本成为后来许多工作站和服务器厂商推出他们自己Unix版本的基础,其中包括DigitalTru64HPHP-UnixIBMAIXSequentDYNIX/ptxSGIIRIXSunSolaris


由于最初一流的设计和以后多年的创新和逐步提高,Unix系统成为了一个强大、健壮和稳定的操作系统。它拥有以下特点:首先,Unix很简洁。Unix仅仅有几百个系统调用并且有一个非常明确的设计目的。第二,在Unix中,所有的东西都被当作文件对待。这种抽象使对数据和对设备的操作是通过一套相同的系统调用界面进行:open()read()write()ioctl()close()。第三,Unix的内核和相关的系统工具软件使用C语言编写。这个特点使其具有很好的移植能力,并且使广大的开发人员很容易接受。第四,Unix的进程创建非常迅速,并且有一个非常独特的fork()系统调用。最后,Unix提供了一套非常简单但很稳定的进程间通信元语。快速简洁的进程创建过程使Unix的程序把目标放在一次执行集中完成一个任务上,而简单稳定的进程间通信机制又可以保证这些独立的简单程序可以方便地组合在一起,从而完成复杂的多重任务。


1991年,Linus Torvalds发布Linux系统。由于其开放性,Linux很快吸引了很多开发者对其代码进行修改和完善。Linux克隆了Unix,但Linux不是Unix。尽管Linux借鉴了Unix的许多设计并且实现了UnixAPIPosix标准),但Linux没有像其他Unix变种那样直接使用Unix的源代码。必要的时候,Linux的实现甚至与Unix的实现大相径庭,但它完整的表达了Unix的设计目标,并且保证了应用程序编程界面的一致。Linux系统的基础是内核、C库、编译器、工具集和系统的基本工具。


操作系统是指整个系统中负责完成最基本功能和系统管理的那部分,包括内核、设备驱动程序、启动引导程序、命令行shell或者其他类似的用户界面、基本的文件管理工具和系统工具。系统其他部分必须依靠操作系统提供的服务工作,比如管理硬件设备,分配系统资源等。内核有时候被称为超级管理者或者操作系统核心。通常一个内核由负责响应中断的中断服务程序,负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间的内存管理程序和网络、进程间通信等系统服务程序共同组成。


对于提供保护机制的现代操作系统来说,内核独立于普通应用程序,它一般处于系统状态,拥有受保护的内存空间和访问硬件设备的所有权限。这种系统态和被保护起来的内存空间,统称为内核空间。相对的,应用程序在用户空间执行。它们只能看到允许它们使用的部分系统资源,并且不能使用某些特定的系统功能,不能直接访问硬件设备,还有其他一些使用限制。当内核运行的时候,系统以内核态进入内核空间,相反,普通用户程序以用户态进入用户空间。如图1.1所示。内核还负责管理系统的硬件设备。现在的几乎所有的体系结构,包括全部的Linux支持的体系结构,都提供了中断机制。当硬件设备想与系统通信时,它首先发出一个异步的中断信号去打断内核正在执行的工作。中断通常对应着一个中断号,内核通过这个中断号查找相应的中断服务程序,并调用这个程序响应和处理中断。


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



另一方面,微内核并不作为一个单独的的大过程来实现。相反,微内核的功能被划分为独立的过程,每个过程叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。不过,所有的服务器都保持独立并运行在各自的地址空间。服务之间通过进程间通信(IPC)来实现。模块化的系统允许一个服务器为了另一个服务器而换出。因为IPC机制的开销比函数调用多,又因为会涉及内核空间到用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中简单的函数调用没有这些开销。基于此,付之于实际的微内核系统让大部分或者全部服务器位于内核,这样,就可以直接调用函数,消除频繁的上下文切换。Windows NT内核和MachMac OS X的组成部分)是微内核的典型实例。


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


Linux内核与Unix内核比较分析:

  • Linux支持动态加载内核模块。尽管Linux也是单内核,可是允许在需要的时候动态的加载和卸载部分内核代码。

  • Linux支持对称多处理(SMP)机制。尽管许多Unix变体也支持SMP,但传统的Unix并不支持这种机制。

  • Linux内核可以抢占(preemptive)。与传统Unix不同,Linux内核具有允许在内核运行的任务优先执行的能力。SolarisIRIX支持抢占,大多数传统Unix内核不支持抢占。

  • Linux对线程支持的实现比较有意思:内核并不区分线程与进程。对于内核来说,所有的进程都一样,只不过其中的一些共享资源而已。

  • Linux提供具有设备类的面向对象的设备模型,热插拔事件,以及用户空间和设备文件系统(sysfs)。

  • Linux忽略了一些被认为是设计的很拙劣的Unix特性,像STREAMS,还忽略了那些实际上已经根本不会使用的过是标准。

  • Linux体现了自由这个词的精髓。

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



参考资料:

Linux内核设计与实现》第二版



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值