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

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

·2 分钟· ·
随笔 编程 MIT6.828
目录

引言
#

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 的lab1对操作系统的思考,网上有不少关于lab1的博客,大部分都是介绍如何完成lab1的问题,介绍的比较详细的有这个博客,在这里我就不从问题出发,建议大家看完上面的博客在看我这篇博文,我这篇博文就是从把我遇到的疑惑提炼出知识点,然后再把这些知识点串起来
mit6.828课程总结
·2 分钟
随笔 编程 MIT6.828
引言 # 一开始想直接做一个操作系统,但是万事开头难,学习操作系统需要太多基础知识了,所以就按照网上推荐先学习mit6.828的课程,先把xvf6操作系统搞懂,然后在来实现自己的操作系统,下面就是学习这个课程的体会,按照各个lab的顺序,介绍自己的心得体会
二叉搜索树实现原理
·4 分钟
随笔 编程
本篇博客主要基于这篇博客的扩展,建议阅读前先阅读这篇博文,这篇博文详细介绍二叉搜索树的实现原理,完整代码在github的binary.go文件中 浅谈"树"这种数据结构 Github 可视化页面 引言 # 之所以使用Go来实现,个人还是比较喜欢Go的,作为一个基础数据结构,Go用来实现这个速度比Java、C++都快,而且相比Java也能节省内存,而且我也不喜欢换使用冒号。
红黑树实现原理
·1 分钟
随笔 编程 红黑树
本篇博客主要基于这篇博客的扩展,建议阅读前先阅读这篇博文,这篇博文详细介绍红黑树的实现原理,完整代码在github的rbtree.go文件中 浅谈"树"这种数据结构 Github 可视化页面 引言 #
AVL树实现原理
·2 分钟
随笔 编程
本篇博客主要基于这篇博客的扩展,建议阅读前先阅读这篇博文,这篇博文详细介绍AVL树的实现原理,完整代码在github的avl.go文件中 浅谈"树"这种数据结构 Github 可视化页面 引言 # AVL树是在对二叉搜索树的一种优化,通过构造一棵高度平衡的二叉搜索树从而实现提高空间利用率,所以在了解如何实现之前,必须了解如何构造一棵二叉搜索树,你可以阅读我的这篇博客了解如何构建一棵二叉搜索树,虽然我是用Go来实现的,但是不必了解太多Go方面的知识,我在博客中尽量使用图片的方式来介绍实现原理
从问题理解动态规划
·5 分钟
随笔 编程
网上关于动态规划的资料,大部分直接给结论,所以一开始我一头雾水,搞不懂为什么要这么做,这篇博文就从实际问题出发,简单的剖析动态规划