全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
在看xv6的资料的时候发现有几个概念没弄清楚,结果让我理解资料的时候感觉比较模糊。这几个概念名词也倒是简单:逻辑地址、线性地址、物理地址、虚拟地址等。其实,几个概念中,最让我不理解的是线性地址,因为这个地址在不同的条件下可能代表不同的含义。为此,找了一份资料来做一下理解。
1. 我这份资料的原始版本是英文资料,最近的英文资料看了不少,但是总觉得效率低一些。我尝试直接使用机器翻译来翻译了一下,感觉整体的翻译效果还不错,不理解的地方对照原文稍加理解很多地方也可以弄清楚。在看这样的资料的时候,这种方式节省了不少时间。
2. 在x86体系中,有两个地址相关的转换概念需要先明确一下,一个是分段,另一个是分页。而分页不一定一定会启用。
3. 我一直有一些不理解的这个线性地址其实是分段器产生的输出。而线性地址在使用分页功能的时候则会作为分页器的输入,经过分页器转换成物理地址。
4. 在保护模式下,分段器通过逻辑地址来产生线性地址。而这个逻辑地址,可以理解为是软件程序所操作的地址。
1. 线性地址是直接跟操作系统相关的。
2. 段选处理的过程是为了找出段描述符,关于段描述符的则是为了定义访问信息以及限制字段而设计的。
3. 从段描述符中,可以获取段的基地址信息。如此,有了基地址以及偏移量之后就可以计算出来线性地址。
4. 如果分页机制没有使用,那么线性地址将会直接对应物理地址。如果分页机制启用了,那么分页器将会进一步把线性地址转换成物理地址。由此也可以看得出来,分页机制启用之后其实是多了一步地址处理过程。
1. 段寄存器用作段选作用,但是并不是基地址信息,不过里面包含了基地址信息。
2. 段寄存器中的索引段,可以用于从段描述表中的指定位置提取信息。表指示器,用来确认采用什么段描述表。而权限,则是设置了权限的几级访问。
1. 全局描述表GDT定义了定存中的段大小和大小,而LDT的作用则限定服务于当前的活动任务。
2. 20bit究竟决定1MB还是4GB,取决于粒度的单位到底是字节还是4K字节。这个看上去也是是否分页生效的一个区分点。
3. 段缓存器从描述上看是具备一定的加速效果的,主要是在段寄存器的内容不发生变化的时候可以省略从内存中读取段描述表的过程。
1. 中断体系的处理机制与段选的处理机制非常相似。
2. 从机制上看,中断向量应该是类似一个索引输入。
任务状态段跟嵌套调用等相关,这并不是本次计划了解的部分,暂且跳过。