让梁大侠头疼的CPU段式结构的由来
梁在其<编程高手箴言>一书第二章说:8086最头疼的问题在于段式结构,1MB的内存被它的段偏移所限制。至今我也不明白Intel当初为什何要设计成这么复杂的内存机制,也许是为了与8080兼容的需要。这套笨拙的体系一直延续到IA64为止。
以下文字参考Linux内核源代码情景分析一书。
当我们说一个CPU是”16位”或”32”位时,指的是处理器中”算术逻辑单元”[ALU]的宽度。系统总线中的数据线部分,称为数据总线,它通常与ALU有相同的宽度。另外,还有一条地址总线来访问内存,它的宽度应该与数据总线一致,这是因为从程序设计的角度来说,一个地址是一个指针,最好与CPU所处理的一个整数的宽度一致,但实际情况是不可能这样的。8位CPU如果让地址总线也是8位,那只能寻址256个不同的地址单元,太小了。所以8位的CPU的地址总线通常是16位的,但这样,在8位的指令系统中常存在着一些16位的操作。后来CPU发展到了16位,本来地址总线和数据总线的宽度应该可以一致了,但当时人们又觉得16位的地址总线可以寻址的空间还是太小啊,还要加大。那加到多大?Intel结合当时人们所能看到的微型计算机的应用前景以及存储器芯片的价格,决定用1MB。由此可见,CPU的地址总线不是你觉得多少位好就采用多少位的宽度了,它要对当时存储器的价位进行衡量才可以确定要多少位的地址总线,假如当时人们不是普遍觉得1MB内存足够用的话,那么CPU发展到我们今天就有可能不是现在这样了,可能32位的地址总线就在8086中出现了。就这样,8086决定要用1MB的内存时,那么地址总线就必须是20位的宽度,但CPU的ALU的宽度只有16位,也就是说在内存寻址时参与计算的地址指针也只能是16位的。该如何解决这个问题,这应该是当时很困扰Intel的设计人员的问题,如果像8位计算机所做的那样,在CPU的指令集中添加一些20位的指令来进行内存寻址,这样会导致CPU内部结构的不均匀性(想一想就知道了,CPU内部的电路系统又要处理16位的指令,又要处理20位的指令,麻烦不麻烦?)。Intel设计人员后来选择了分段机制,这在当时看来应该是很巧妙的方法了。当时PDP-II小型机也是16位的,但它可以通过内存管理机制将16位的地址映射到24位的地址空间,intel应该是借鉴了它的思路。
Intel在8086CPU中设置了四个”段寄存器”,每个段寄存器都是16位的,对应于地址总线的高16位。每条访问内存的指令中的内部地址也都是16位的,但是在将地址传到地址总线上之前,要使用CPU内部的加法器对内部地址和某个段寄存器中的地址相加,形成一个20位的地址。由于段寄存器中的内容对应于20位地址总线中的高16位,所以在相加时是拿内部地址的高12位与段寄存器中的16位相加,而内部地址中的低四位保持不变。这个方法与操作系统理论中的”段式内存管理”相似,但并不完全一样,主要是没有地址空间的保护机制,对每一个由段寄存器的内容确定的”基地址”,一个进程总是能够访问从此开始的64K字节的连续空间,而无法加以限制。同时,可以用来改变段寄存器内容的指令也不是什么”特权指令”,也就是说通过改变段寄存器的内容,一个进程可以随心所欲地访问内存中的任何一个单元,而丝毫不受到限制,能对一个进程的内存访问加以限制,也就谈不上对其他进程以及系统本身的保护。与此相应,一个CPU如果缺乏对内存访问的限制,就谈不上什么内存管理,也就谈不上是现代意义上的中央处理器。由此,而生出”保护模式”的概念。
让梁大侠头疼的CPU段式结构的由来相关推荐
- 简介九段式结构化访谈
一.什么是结构式访谈 结构式访谈又称标准化访谈(Standardized Interview),它是一种对访谈过程高度控制的访问.这种访谈的对象必须按照统一的标准和方法选取.访问的过程也是高度标准化的 ...
- SCI论文写作视频1.论文的三段式结构
导语: 本期,投必得学术邀请了堪萨斯州立大学刘子非教授为大家讲<论文的三段式结构>,本次讲座是视频推送的形式,分多期推送.欢迎大家观看和分享,如果您不想错过任何一期,请一定锁定投必得唯一官 ...
- 【408预推免复习】计算机组成原理之CPU的结构和功能
文章目录 1 CPU 的结构 2 指令周期 3 指令流水 4 中断系统 1 CPU 的结构 控制器的功能 取指令 分析指令 执行指令,发出各种操作命令 控制程序输入及结果的输出 总线管理 处理异常情况 ...
- 计算机组成原理——CPU的结构和功能
第8章 CPU的结构和功能 8.1 CPU 的结构 一. CPU 的功能 1. 控制器的功能 取指令 指令控制 分析指令 操作控制 执行指令,发出各种操作命令 时间控制 控制程序输入及结果的输出总线管 ...
- 计算机组成原理CPU与译码器,计算机组成原理CPU的结构和功能.ppt
计算机组成原理CPU的结构和功能 算术逻辑单元 状态条件寄存器 程序记数器PC 地址寄存器AR 地址总线ABUS 数据总线DBUS 累加器AC 缓冲寄存器DR CPU ALU 指令寄存器IR 指令译码 ...
- CPU的结构和功能——指令流水及中断系统
CPU结构 (一)CPU的功能 想了解CPU的结构,首先要知道CPU的功能.然后讨论什么样的结构能够为CPU提供相应的功能.CPU由运算器和控制器组成. 1.控制器的功能 取指令,把指令从内存单元中取 ...
- 单片机工作笔记002---认识CPU的结构_哈佛结构和冯·诺依曼结构的区别
技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 哈佛结构 (英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构.中央处理器首 ...
- 计算机基本原理——CPU的结构与原理
一. CPU的逻辑结构 (一)冯·诺依曼计算机的结构与原理 (0)冯·诺依曼:"存储程序控制"式原理.----现代计算机的工作原理. (1) 计算机的工作由程序控制,程序是一个指令 ...
- 计算机组成原理(8)CPU——基本结构
CPU的功能 CPU中包括运算器和控制器.运算器是对数据进行加工,其功能为以下的4:控制器是协调并控制计算机各部件执行程序的指令序列,功能为1.2.3.5 CPU的功能: 1.指令控制:取指令.分析指 ...
最新文章
- 部分背包的贪婪算法 java_使用JAVA实现算法——贪心算法解决背包问题
- modelsim-win64-10.4-se 破解(win7实验成功)(其他操作系统也可参考,大同小异)
- NeHe教程Qt实现——lesson17
- 显著增加bash交互舒适度的.inputrc
- group plot simplest approach in matlab
- 访问数据库_Lua 数据库访问
- php 权限规范,项目人员权限验证
- hdu 5172 GTY's gay friends(线段树最值)
- 如何判断lib是/md or /mt编译的
- 松下抛却Jungle掌机研发项目
- http server类型和版本号_nginx 简单隐藏服务器版本号
- flex布局最后一行左对齐的处理
- 分布式和微服务区别_分布式、集群、微服务到底有啥区别?
- 路由器OSPF配置2
- Apache目录禁止解析
- linux开启cups服务,Linux中cups打印服务实战设置
- xlwings对excle文档设置条件格式
- h5后缀文件python处理
- 计算机怎么没有word文档,word没了怎么回事 为什么电脑没有了word
- 步进电机基础(2.6)-直线步进电机
热门文章
- 亚马逊账户安全需要做什么?亚马逊账户规则
- CSS设置输入框默认文字颜色(webkit-input-placeholder等)
- JAVA设计模式之备忘录模式
- CCF论文列表(2022拟定)大更新!NAACL升B!ICLR继续陪跑...MICCAI空降B!PRCV空降C!
- layerui如何隐藏按钮?
- 知云文献翻译打不开_学用系列|自带翻译功能的PDF文献阅读器——知云文献翻译3.0...
- 汇编语言六 报数出列设有n(设为17)个人围坐在圆桌周围,按顺时针给他们编号(1,2,~~~,n),从第1个人开始顺时针方向+1报数,当报数到m(设为11)时,该人出列
- Android应用内增量更新
- 阿里云共享型云服务器与独享型云服务器有什么区别?如何选择?
- LeetCode Count Complete Tree Nodes(二分法)