从上一次学习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

【译】x86程序员手册00 - 翻译起因的更多相关文章

  1. 【译】x86程序员手册01

    Intel 80386 Reference Programmer's Manual 80386程序员参考手册 Chapter 1 -- Introduction to the 80386 第1章 - ...

  2. 【译】x86程序员手册03 - 2.1内存组织和分段

    2.1 Memory Organization and Segmentation 内存组织和分段 The physical memory of an 80386 system is organized ...

  3. 【译】x86程序员手册38-10.2实在址模式下的软件初始化

    10.2 Software Initialization for Real-Address Mode   实地址模式的软件初始化 In real-address mode a few structur ...

  4. 【译】x86程序员手册09-第3章程序指令集

    注:觉得本章内容与理解操作系统不直接相关,所以本章并未看完,也就没有翻译完,放在这里中是为了保证手册的完整.有兴趣的人可以去原址查看. https://pdos.csail.mit.edu/6.828 ...

  5. 【译】x86程序员手册40-10.5初始化的例子

    10.5 Initialization Example初始化的例子 译注:本来想把这个例子全部注释完,但由于对intel汇编实不熟悉,有太多的伪指令,本人也是免强看懂,所以就不再做翻译了. $TITL ...

  6. 【译】x86程序员手册35-9.8异常条件

    译注:一些异常没有翻译,因为看书时主要为了理解linux代码,所以代码中没有主要使用的就没有仔细看.这部分内容后期再看时再进行翻译. 9.8 Exception Conditions 异常条件 The ...

  7. 【译】x86程序员手册31- 第9章 异常和中断

    Chapter 9 Exceptions and Interrupts 第9章 异常和中断 Interrupts and exceptions are special kinds of control ...

  8. 【译】x86程序员手册18-6.3.1描述符保存保护参数

    6.3 Segment-Level Protection 段级保护 All five aspects of protection apply to segment translation: 段转换时会 ...

  9. 【译】x86程序员手册02 - 基本的程序模式

    Chapter 2 -- Basic Programming Model: 基本的程序模式 Introduces the models of memory organization. Defines ...

随机推荐

  1. The Pilots Brothers' refrigerator DFS+枚举

    Description The game “The Pilots Brothers: following the stripy elephant” has a quest where a player ...

  2. N - Is It A Tree? 并查集

    A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one ...

  3. @Autowired中无法注入RestTemplate的问题

    1.在启动类中添加 @Beanpublic RestTemplate restTemplate(){ return new RestTemplate();} 即可解决无法注入RestTemplate的 ...

  4. Java数据库连接池研究

    一.背景 连接池简介: 连接池初始化时创建一定数量的连接,然后从连接池中重用连接,而不是每次创建一个新的. 数据库连接是一种关键的.有限的.昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对 ...

  5. MVC中从控制器到视图的数据传递方法汇总

    1.ViewData对象概述ViewData是一种字典集合数据,是"视图基类"和"控制器基类"的属性常见用法是在控制器中写入数据,在视图中读取数据ViewDat ...

  6. 【翻译自mos文章】使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方式。

    使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方式. 參考原文: ORA-01555 Using Automatic Undo M ...

  7. Python FAQ1:传值,还是传引用?

    在C/C++中,传值和传引用是函数参数传递的两种方式.由于思维定式,从C/C++转过来的Python初学者也经常会感到疑惑:在Python中,函数参数传递是传值,还是传引用呢? 看下面两段代码: de ...

  8. Cocos Code IDE + Lua初次使用FastTiledMap的坑

    近期想玩玩Lua.又想玩玩Cocos Code IDE.更加想写一个即时战斗的.防守的.会动的.有迷雾的.要探索的(旁白:给我停!)跑地图游戏. 于是我就用Cocos Code IDE来写游戏了.挑战 ...

  9. 关于Android中的四大组件(Service的开启与关闭)

    前言 服务(Service)是Android系统中的四大组件之中的一个.服务主要用于两个目的:后台执行和跨进程訪问. 通过启动 一个服务.能够在不显示界面的前提下在后台执行指定的任务,这样能够不影响用 ...

  10. Android 驱动 (一) GPIO

    前面的博文对Lichee做了系列分析,事实上就是对在<七年之痒>中所说的,Android BSP具备的一项基本素养-SHELL脚本,所以我们Lichee系列的文章着重分析了SHELL脚本和 ...