跳过正文
  1. 博客/
  2. 随笔/
  3. 编程/

从CS寄存器看段的前世今生

2 分钟· ·
随笔 编程 MIT6.828
作者
Allen
一个强大、轻量级的 Hugo 主题。
目录

引言
#

Intel作为作为微处理器的航头老大,一直引导CPU的进步发展,也正是因为Intel是一个有着历史包袱的企业,所以站在现代CPU看起来,有一些非常奇葩的设计遗留下来,这些设计一开始是为了兼容,慢慢的将这种兼容又发展成新的功能,把“包袱”转换成“亮点”,段设计就是其中的一个很重要的代表,要想搞懂这个设计在不同的CPU的如何保持兼容和强化,我们必须要慢慢的把CPU的历史给捋顺。

前言
#

我们要介绍第一个CPU是8086,虽然Intel前面也生产了4004、8008、8080微处理器,但是8086基本上后面所以现代化CPU始祖,Intel后面生产的CPU都对8086兼容,所以可以说段这个“祸端”就是从8086种下来的

8086作为第一款的16位处理器,由于技术的问题,出现了一个严重问题寄存器只有16位,而地址总线却有20位,要想只通过一个寄存器表达地址的值显示无法实现,所以8086采用了一个段寄存器,segment × 16+offset(CS:IP),采用这个方式就能实现20位地址索引

段设计对程序影响
#

前面简单的介绍了段设计的原因,现在我们来看看这个设计的对16位程序的影响。

兼容性
#

由于段的存在,我们设计程序的时候可以更加自由,我们可以假设我们是在任何低16位置的内存上,只有到时切换程序时候切换段就可以

安全性
#

我们可以用相同的低地址存代码和数据,只需要切换段就行,而且我们也不需要考虑数据要多少空间,代码要多少空间,以便设定跳转地址

可以说段设计是16位程序的一个很优雅的做法,但是到了32位的时候程序不行了

32位处理器的改变
#

我们知道32位处理器的诞生带来了两件事,第一个就是寄存器有32位了,说明最大内存地址可以到4G了(0x000000-0xffffff),而且总线地址也有32位了。这个时候就很尴尬了,原来的段设计到这里就成鸡肋了。但是为了兼容,我们还是给他一个功能,段选择子,当然现代Unix操作系统没有用这个东西,只是在初始化的时候意思意思一下,具体可以看一下这篇博客GDB

总结
#

最近学操作系统感觉有很多疑惑,了解很多知识,总想好好总结一下细节,结果发现总有大神们早就写出来了,而且非常详细,我就不班门弄釜了,把下面的lab好好思考,提炼出自己的知识。

相关文章

什么是操作系统
8 分钟
随笔 编程 MIT6.828
mit6.828课程总结
2 分钟
随笔 编程 MIT6.828
二叉搜索树实现原理
4 分钟
随笔 编程
红黑树实现原理
1 分钟
随笔 编程 红黑树
AVL树实现原理
2 分钟
随笔 编程
从问题理解动态规划
5 分钟
随笔 编程