Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3079|回复: 1
打印 上一主题 下一主题

Unix与Linux内核一样吗?

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
跳转到指定楼层
楼主
发表于 2017-6-16 17:18:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Unix是一个庞大的家族。
Linux的最早期版本也是基于Unix发展起来的。早期版本的Linux与Unix内核类似。
但是随着Linux的不断演进,在资源管理、进程调度系统管理等方面,逐渐吸收和更新、更好的概念。所以,今天的Linux内核已经和传统Unix差异较大了。
最后,附上一张经典的Unix家族图谱。


回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
沙发
 楼主| 发表于 2017-6-16 17:20:10 | 只看该作者
Linux内核和传统Unix内核的比较


    所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。
Unix内核 几乎毫无例外的都是一个不可分割的静态可执行块(文件) 。也就是说,它们必须以完整、单
独的可执行块的形式在一个单独的地址空间 中运行。
Unix内核几乎都需要硬件系统提供页机制以管理内存 。这种页机制可以加强内存空间的保护,并保证每
个进程都可以运行于不同的虚地址空间上。
    单内核与微内核设计之比较
    操作系统内核可以分为两大设计阵营:单内核和微内核 (第三阵营外内核 ,主要用在科研系统中,
但也逐渐在现实世界中壮大起来)。
    单内核是两大阵营中一种较为简单的设计,在1980年之前,所有的内核都设计成单内核。所谓单内
核就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。 因此,这样的
内核通常以单个静态二进制文件的形式存放于磁盘。所有内核服务都在这样的一个大内核空间中运行。
内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间:内核可以直接调用函
数 ,这与用户空间没有什么区别。这种模式的支持者认为单模块具有简单和高性能的特点。大多数Unix
系统都设计为单模块。
    另一方面,微内核并不作为一个单独的大过程来实现。相反,微内核的功能被划分为独立的过程,
每个过程叫做一个服务器。 理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服
务器都运行在用户空间。 不过,所有的服务器都保持独立并运行在各自的地址空间。 因此,就不可能像
单模块内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用了进程间通信(IPC)机制,
因此,各种服务器之间通过IPC机制互通消息,互换“服务”。服务器的各自独立有效地避免了一个服务
器的失效祸及另一个。(譬如,文件管理服务器,设备驱动程序服务器都是运行在用户空间 )
    同样,模块化的系统允许一个服务器为了另一个服务器而换出。因为IPC机制的开销比函数调用多,
又因为会涉及内核空间到用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中简单的
函数调用没有这些开销。基于此,付之于实际的微内核系统让大部分或全部服务器位于内核,这样,就
可以直接调用函数,消除频繁的上下文切换。Windows NT内核和Mach(Mac OS X的组成部分)是微内核
的典型实例。不管是Windows NT还是Mac OS X,都在其新近版本中不让任何微内核服务器运行在用户空
间,这违背了微内核设计的初衷。
    Linux是一个单内核,也就是说,linux内核运行在单独的内核地址空间。不过,Linux汲取了微内核
的精华:其引以为豪的是模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。 不仅
如此,Linux还避其微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无需消
息传递。至今,Linux是模块化的、多线程的以及内核本身可调度的操作系统 。实用主义再次占了上风。
    当Linus和其他内核开发者设计Linux内核时,他们并没有完全彻底地与Unix诀别。他们充分地认识
到,不能忽视Unix的底蕴(特别是Unix的 API)。而由于Linux并没有基于某种特定的Unix,Linus和他
的伙伴们对每个特定的问题都可以选择已知最理想的解决方案—在有些时候 ,当然也可以创造一些新的
方案。以下是对Linux内核与Unix各种变体的内核特点所作的分析比较:
    ·Linux支持动态加载内核模块。尽管Linux内核也是单内核,可是允许在需要的时候动态地卸除和
加载部分内核代码。
    ·Linux支持对称多处理(SMP)
机制,尽管许多Unix的变体也支持SMP,但传统的Unix并不支持这种
机制。 [
    ·Linux内核可以抢占(preemptive) 。与传统的Unix不同,Linux内核具有允许在内核运行的任务
优先执行的能力。在其他各种Unix产品中,只有Solaris和IRIX支持抢占,但是大多数传统的Unix内核不
支持抢占。
    ·Linux对线程支持的实现比较有意思:内核并不区分线程和其他的一般进程。对于内核来说,所有
的进程都一样—只不过其中的一些共享资源而已。
    ·Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统
(sysfs)。
    ·Linux忽略了一些被认为是设计得很拙劣的Unix特性,像STREAMS,它还忽略了那些实际上已经根
本不会使用的过时标准。
    ·Linux体现了自由这个词的精髓。现有的Linux特性集就是Linux公开开发模型自由发展的结果。如
果一个特性没有任何价值或者创意很差,没有任何人会被迫去实现它。相反的,在Linux的发展过程中已
经形成了一种值得称赞的务实态度:任何改变都要针对现实中确实存在的问题,经过完善的设计并有正
确简洁的实现。于是,许多其他现代Unix系统包含的特性,如内核换页机制,都被毫不迟疑的引入进来
    不管Linux和Unix有多大的不同,它身上都深深地打上了Unix烙印。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 15:07 , Processed in 0.060905 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表