Linux0.1内核详解,珍贵的linux0.01内核

我最开始接触linux内核是2.4.16版本,然后就一直跟踪到了2.6.27版本,今天是2008年11月5号,一年前我好奇地想知道最开始的 linux内核是个什么样子,然后如何一步一步变成今天的这个样子,于是我就开始找原代码,呵呵,已经被命名为oldlinux了,然后看了一下内核,十 分小,李纳斯本人的注释写得也十分高笑,一切那么纯真,不出半天时间就可以通读全部代码,当然前提是你对x86平台十分熟悉,熟悉分段,熟悉分页,熟悉保 护模式。

0.01是最原始的版本了,它和现在linux的最大不同可能就是内存管理这一块了,至于进程调度则直接受内存管理的影响,至于算法嘛,那是个没完没了的 概念,说不定明天cfs调度算法就可能被淘汰,关键是框架。如果你有更好的进程调度算法,你可以很容易的更换现有的内核进程调度算法,但是0.01版本的 linux却是一个耦合性相当高的内核,不过那毕竟是李纳斯为x86专门写的。

0.01中,内核严重依赖了分段这种已经没有什么意义的技术,使intel害苦了当年的李纳斯啊,如果没有分段,那么李纳斯也不会给内核强加那么多的限制。有谁能证明分页不是一种障碍呢?

在分段模型中,段选择子中有段描述符索引和相应的特权环,linux0.01的全局描述符有256项,每个进程用两项,一个ldt,一个tss,还有中断 描述符,而且0.01内核强制每个进程的虚拟地址空间为64m,那么一共就可以拥有4g/64m=64个进程,所有进程共享一个页目录,区别之处就是用不 同的页目录项,因为有64m的内存,因此用16个页目录项,这种方式在当今很很让人想不通的,当然在嵌入式设备上还在用这种方式呢。内核将不同的进程映射 到不同的“线性空间”,然后再通过不同的页目录项映射到物理内存,这里有必要说一下线性空间的概念,intel的分页机制使得cpu拥有4g大小的线性空 间,从0到4g,而程序中用到的地址是虚拟地址而不是线性地址,比如进程0和进程1 的虚拟地址空间都是0到64m,但是由于所有进程共享这4g的线性空间,则进程0拥有0到63m的线性空间,而进程1拥有接下来64m到127m的线性空 间,分段机制把地址从虚拟空间映射到线性空间而分页机制将地址从线性空间映射到物理地址空间,0.01内核就是完全按照这种映射接力来完成的,不知道这是 不是intel的意愿。现在,不管是linux还是windows都是使用平坦模式来绕开了分段,这样每个进程都可以独享4g的虚拟地址空间 了,intel提供了一种机制可以使得cpu寻址4g空间,而且提供cr3页目录寄存器,这就是说intel的本意是让进程独享4g空间的,可是估计当时 李纳斯认为没有那需求,而且共享页表可以省去切换开销,所以就选择了这种现在看来很奇怪的方式。下面分析一些代码,看看一切多么的纯真:

1.schedule函数:

void schedule(void)

{

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值