您当前的位置: 首页 >  linux
  • 2浏览

    0关注

    880博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Linux内核设计与实现】 2 Linux内核与传统Unix内核的比较

CodeAllen嵌入式编程 发布时间:2020-11-16 00:48:45 ,浏览量:2

系列文章参考资料为《Linux内核设计与实现》,源码为个人私有,未经允许不得转载 技术交流群或资料添加微信号:CoderAllen,回复关键字即可

1.对于MMU的需求

Unix内核几乎毫无例外都是一个不可分割的静态可执行库,所以其必须以巨大的,单独的可执行块的形式在一个单独的地址空间中运行,这就需要硬件系统提供页机制(MMU)管理内存 初期的Linux也是需要MMU的支持的,但有些特殊版本是不依赖于此的,这是一个非常简洁的设计,可以使Linux运行与没有MMU的小型嵌入式系统上

2.单内核和微内核

单内核是两种中较为简单的设计,早期的系统基本都是基于单内核的,内核本身正题作为一个单独的大过程实现,同时也运行在一个单独的地址空间上,因此内核通常以单个二进制文件存放在磁盘中,因此其内核之间的通信几乎微不足道,因为大家都运行在内核态,内核可以直接调用函数,这和用户空间应用程序没有什么区别,特点是简单性能高,大多数Unix都是设计为单内核。

相反,微内核功能被划分为多个独立的过程,理想状态下,只有强烈请求的过程才处于特权模式,其他过程都运行在用户空间。所有服务器都保持独立并运行在各自的地址空间上,因此,需要通过消息传递处理微内核通信,系统一般采用进程间通信(IPC)机制。各个server通过IPC机制互通消息,各自独立的机制有效避免了一个server的故障祸及另一个

因为上述两种特性,所以基于微内核的系统都让大部分或全部server位于内核,可以直接调用函数,消除频繁的切换,Windows NT内核(Windows XP,Windows Vista,Windows 7都是基于此)和Mach(Mac OS X)是微内核的 典型实例,但是不管是Windows NT还是Mac OS X,都在其近期版本中不让任何微内核server运行在用户空间,这违背了微内核设计的初衷

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

3.Linux内核与传统的Unix存在一些显著的差异
  1. 尽管Linux也是单内核,可是Linux支持动态加载模块
  2. Linux支持对称处理(SMP)机制
  3. Linux内核可以抢占,在Unix产品中,只有Solaris和IRIX支持抢占,大多数Unix不支持
  4. Linux并不区分线程和其他的一般进程,只不过是其中的一些共享资源而已
  5. Linux提供具有设备类的面向对象的设备模型,热插拔事件,以及用户关系空间的设备文件系统(sysfs)
  6. linux忽略了一些被认为是设计的很拙劣的Unix特性,比如STREAMS,还忽略了那些难以实现的过时标准
  7. Linux体现了自由的精髓,果断的摒弃了很多Unix中出于宣传目的或没有普遍意义的特性,如内核换页机制
关注
打赏
1665938897
查看更多评论
立即登录/注册

微信扫码登录

0.1385s