【译】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
【译】x86程序员手册00 - 翻译起因的更多相关文章
- 【译】x86程序员手册01
Intel 80386 Reference Programmer's Manual 80386程序员参考手册 Chapter 1 -- Introduction to the 80386 第1章 - ...
- 【译】x86程序员手册03 - 2.1内存组织和分段
2.1 Memory Organization and Segmentation 内存组织和分段 The physical memory of an 80386 system is organized ...
- 【译】x86程序员手册38-10.2实在址模式下的软件初始化
10.2 Software Initialization for Real-Address Mode 实地址模式的软件初始化 In real-address mode a few structur ...
- 【译】x86程序员手册09-第3章程序指令集
注:觉得本章内容与理解操作系统不直接相关,所以本章并未看完,也就没有翻译完,放在这里中是为了保证手册的完整.有兴趣的人可以去原址查看. https://pdos.csail.mit.edu/6.828 ...
- 【译】x86程序员手册40-10.5初始化的例子
10.5 Initialization Example初始化的例子 译注:本来想把这个例子全部注释完,但由于对intel汇编实不熟悉,有太多的伪指令,本人也是免强看懂,所以就不再做翻译了. $TITL ...
- 【译】x86程序员手册35-9.8异常条件
译注:一些异常没有翻译,因为看书时主要为了理解linux代码,所以代码中没有主要使用的就没有仔细看.这部分内容后期再看时再进行翻译. 9.8 Exception Conditions 异常条件 The ...
- 【译】x86程序员手册31- 第9章 异常和中断
Chapter 9 Exceptions and Interrupts 第9章 异常和中断 Interrupts and exceptions are special kinds of control ...
- 【译】x86程序员手册18-6.3.1描述符保存保护参数
6.3 Segment-Level Protection 段级保护 All five aspects of protection apply to segment translation: 段转换时会 ...
- 【译】x86程序员手册02 - 基本的程序模式
Chapter 2 -- Basic Programming Model: 基本的程序模式 Introduces the models of memory organization. Defines ...
随机推荐
- UIColor用自定义颜色,TableView去掉背景色
1.用mac系统自带的数码测色计,选RGB模式,将值添加到ColorWithRed:xxx.0/255 最后的alpha选1.0 2.TableView的背景色要用setBackgroundView的 ...
- delphi不同版本字符串类型的演化
string,DELPHI2009以前的版本string=ansistring,一个字符占一个字节,DELPHI2009及以上版本string=unicodestring,一个字符占二个字节. cha ...
- MySQL用户及数据安全专题
1 简单介绍 1.1 概要 1.2 权限分类 2 加入用户 2.1 语法例如以下: CREATE USER user_specification [, user_specification] ...
- swift 2.0 语法 常量变量
import UIKit /*: 常量变量 * 常量: let * 变量: var 完整格式: * 修饰符(let/var) 常量/变量名称: 数据类型 */ let number: Int var ...
- 【http代理报文】自己开发HTTP代理工具,不限语种。
我们知道通过修改浏览器设置可以使用代理访问网页,其实这个操作就是修改了每次的HTTP头. 工作中,我们难免需要通过TCP/IP协议发送HTTP报文来直接请求网页内容(比如爬虫工具),有同学问如何通过H ...
- java 多线程——同步 学习笔记
一.实例的同步方法 public synchronized void add(int value){ this.count += value; } Java 实例方法同步是同步在拥有该方法的对象上 ...
- Ajax之XMLHttpRequst对象
XMLHttpRequest对象提供客户端与Http服务器异步通信的协议.通过该协议,Ajax可以使页面像桌面应用程序一样,只同服务器进行数据层的交换,而不用每次都刷新页面,也不用每次将数据处理工作提 ...
- 快速编译system.img和boot.img的方法【转】
本文转载自:http://www.cnblogs.com/wanqieddy/archive/2012/10/22/2734024.html 快速编译system.img,可以使用这个命令: #mak ...
- POJ3090 Visible Lattice Points 欧拉函数
欧拉函数裸题,直接欧拉函数值乘二加一就行了.具体证明略,反正很简单. 题干: Description A lattice point (x, y) in the first quadrant (x a ...
- Spark SQL中 RDD 转换到 DataFrame
1.people.txtsoyo8, 35小周, 30小华, 19soyo,882./** * Created by soyo on 17-10-10. * 利用反射机制推断RDD模式 */impor ...