• 【译】x86程序员手册00


    从上一次学习MIT的操作系统课程又过去了一年。上次学习并没有坚持下去。想来虽有种种原因,其还在自身无法坚持罢了。故此次再鼓起勇气重新学习,发现课程都已由2014改版为2016了。但大部分内容并没有改变。在这一年多的时间里,也曾学习过其他课程,比如孟宁的Linux内核分析,也看过其他人写的文章。但还是有很多内容无法全部理解,而且从网上文章或讨论中也看出,象我这种似懂非懂的状态很多人都有。比如,在看到linux0.11中的那个TSS结构时就一直在想,为什么要这样设计呀?系统明明没有使用到那么多结构成员,为什么还要保留呢?还有在调用系统调用时,讲课的老师总是说,硬件帮我们把返回地址、栈信息等自动保存起来,但到底做了什么呢?这个问题我发现其实很多人都存在。类似的问题还有很多。比如,如果有人问在linux下最多可以有多少个进程?这怎么计算呢?由什么来决定 ?网上也有文章介绍过,但为什么是那样呢?诸如此类。为此,我也困惑很久。再比如,总是说,在linux下,逻辑地址就是线性地址,可是线性地址是由三部分构成的,而逻辑地址是由两部分构成的,由于在linux中段基址永远是0,那程序中的偏移地址如何就是线性地址了呢?如果是,那如何与线性地址中的三部分对应的?程序中的地址到底是线性地址中的偏移地址还是三部分都包含在内呢?操作系统到底如何转换的?还需要做转换工作吗?可以从代码角度 看又没有这种转换呀?那程序如何转换地址呢?页目录到底是所有进程用一套,还是每个进程各用一套?如此等等,都似乎有一层迷雾一般。为了解决这个问题,此次我并没有在一开始学习MIT课程的时候就急着去做那些实验。而是跟随着实验指导的说明,把x86手册内容看了一次。其实上次学习也曾想读一读,但内容实在太多,又都是英文的,所以最终放弃了。此次,终于下定决心看下去。而由于本人英文水平实在有限,读手册时太过艰辛,为了更方便以后查看,遂决定将其内容翻译一遍,这样一来有助于理解,二来将来再看时就不用面对英文了,也方便查找。之所以放在这里,是想也许有许多人和我一样,如果能让我们这些人能有一丝帮助,就是最好的结果。

    下面说一下我看完手册的感觉。以前对linux操作系统中的很多内容都无法真正理解,此次看完手册方才明白,linux之所以那样设计,其实很多结构和内容都是因为x86就是那样设计的。比如,段选择子、特权级别、任务切换、端口访问的映射位图,等等,这些结构在X86设计之初就已经决定了,不是操作系统可以左右的。看完之后,对很多以前不理解的都有了近一步的了解,例如,授课老师总是说在系统调用时硬件帮我把很多内容自动保存起来,在不同特级特权间进行切换时会导致栈切换,等等。看完这本手册你就彻底明白这些话的真正含义。

    注:本人并没有对手册的所有内容进行翻译,其实有些章并没有看,比如关于兼容性的那一部分,还有协处理器和多处理器章节等,一来时间所限,二来觉得和理解linux0.11和MIT的实验系统并无多少相关,所以未做翻译。

    下面是手册的来源地址:https://pdos.csail.mit.edu/6.828/2016/readings/i386/toc.htm

  • 相关阅读:
    PAT查找题---1032 挖掘机技术哪家强 (20分)
    PAT查找题---1028 人口普查 (20分)
    PAT查找题---1004 成绩排名 (20分)
    01_1JAVA简介
    01考试简介
    shell时间变量拼接问题
    如何将oracle查询的结果传输给变量
    生产环境邮件问题总结
    mutt+msmtp做linux邮件客户端
    linux配置邮件客户端
  • 原文地址:https://www.cnblogs.com/mqmelon/p/6692335.html
Copyright © 2020-2023  润新知