【译】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 ...
随机推荐
- P1009 阶乘之和 洛谷
https://www.luogu.org/problem/show?pid=1009 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=54321. ...
- MAPZONE GIS SDK接入Openlayers3之三——瓦片数据集接入
瓦片数据集接入实现思路: 1.构造ol.source.TileImage数据源,构造该数据源需要以下几项: 1)空间参考,通过如下代码构造 2)TileGrid,构造需要以下几项: a)原点 b)分辨 ...
- yum 源本地化 (two)
之前写过一个yum源本地化的文章. 后来发现那个方法有些缺陷, yum install --downloadonly --downloaddir=/tmp/atomicdownload memcach ...
- 【CV论文阅读】Network in Network
目的: 通过用Mlpconv层来替代传统的conv层,可以学习到更加抽象的特征.传统卷积层通过将前一层进行了线性组合,然后经过非线性激活得到(GLM),作者认为传统卷积层的假设是基于特征的线性可分.而 ...
- Java 注解入门实例 && 注解传參
參考 概念:java提供了一种原程序中的元素关联不论什么信息和不论什么元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已 ...
- VFL语言简洁
一.VFL语言简洁 VFL(Visual format language)语言是苹果为了简化手写Autolayout代码所创建的专门负责编写约束的代码.为我们简化了许多代码量. 二.使用步骤 使用步骤 ...
- NSDate 格式化 及 互转
/* NSDateFormatter的作用 1.NSString -> NSDate 2.NSDate -> NSString */ void fmt_date_to_string(); ...
- cojs1101. [Vijos1369] 难解的问题==codevs 2188 最长上升子序列
[题目描述] 在你的帮助下,蔚蓝来到了埃及.在金字塔里,蔚蓝看到了一个问题,传说,能回答出这个问题的人就能受到埃及法老的祝福,可是蔚蓝日夜奋战,还是想不出来,你能帮帮他么?(XXX: 胡扯,教主怎么可 ...
- luogu 3834 【模板】可持久化线段树 1(主席树)
我这种菜鸡还是%一下棒神比较好 #include<iostream> #include<cstdio> #include<cmath> #include<cs ...
- MySQL 1366错误解决办法
MySQL 1366错误大致描述如下 SQL Error: 1366: Incorrect string value: "xE8xAFxA6xE7xBBx86-" for colu ...