博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Intel的X86芯片段式管理历史起源(CS、DS、ES、SS)——避免产品公司的小九九
阅读量:5354 次
发布时间:2019-06-15

本文共 1278 字,大约阅读时间需要 4 分钟。

       Intel公司在1974年4月发布8080 CPU。这是一枚8位元处理器,时脉为2MHz,亦是第一枚可算得上的处理器。   

       注意,这里的8位、16位指的是ALU的宽度,而并不是地址线的宽度(如果CPU与地址线的宽度相同,也就不需要分段管理了)。

       从设计人员的角度来讲,把地址宽度与ALU宽度设计成一样,这是最简单便捷的。但是,这显然是不合理的——8位的地址线只能寻址256位,这样的存储空间基本上什么都做不了。

       所以,8位的ALU对应的是16位的地址线——寻址空间为64k,这个内存空间在上世纪70年代(1974?)来说,够用了。

       1978年,8086 CPU问世(第一枚真正意义上的通用微处理器),此时,CPU已经是16位。ALU的宽度与地址线的宽度已经一致了,似乎完美的时刻到了。

        不过,到1978年的时候,程序猿们觉得内存似乎还是有些小了(小?),与此同时,内存的价格也不再是天价。Intel决定把地址线的宽度再扩个容。

        地址线扩成多大呢?20位,也就是说,此时的CPU寻址能力是1MB。

        1MB的内存空间在现在看来,实在是很小很小。不过,在1978年的程序员看来,这实在是微处理器内存中的巨无霸了——因为1978年的小型机(如PDP-11)也就才4MB的内存空间。

        可是,多出来的4位怎么弥补呢?

        当时一般有如下2种方法:

        1、在16位CPU内专门设计一些用于20位的指令用于地址运算和寻址。(会造成CPU内部结构特殊化,如果CPU变成32位,需要从头改造)

        2、PDP-11的MMU内存管理机制。(小型机解决方案,可以寻址到24位——4MB)

        Intel选择了第三种——段式管理。

        Intel设计了4个新的寄存器:CS、DS、SS、ES分别用于存储指令、数据、堆栈、其他。

        分段的设计模式是:把整块内存空间分割成多个(?)段,以上4个寄存器存储的是当前(记住,是当前)操作的段的起始地址。由于CPU只能寻址16位,每个段的限长是64k。16位的段地址左移四个二进制位,加上16位的段内偏移地址,得到的和就是20位的物理地址。

        不过,由于段式管理是Intel在某种条件(?)下设计出来的,Linux以及大多数操作系统对段式管理基本上避而远之的。

        实际上,在Linux内核里,对分段管理用得极少,而DS、SS的指向基本上也从来没有做过区分;Linux的内核也仅用了段的0级、3级权限——它并没有陷入Linux以及别的芯片厂商的设计之中,真正做到了独立性。

        每一个企业造出来的CPU或者数据库或者别的什么产品,都有其本源的商业驱动力,目的都是盈利。

        所以,不需要站在一个产品内部去看问题,也不要把它供起来当成祖师爷膜拜。只有把一个产品当成一个普通朋友,明白它的优点和缺陷,心思和小九九,才能得心应手、运用自如。

      至于Linux是如何看透Intel的小九九,又如何避免的呢? Linux是如何做到的呢?

      以后再做分析。

转载于:https://www.cnblogs.com/dyllove98/archive/2013/06/12/3132986.html

你可能感兴趣的文章
转:LoadRunner中web_custom_request 和 web_submit_data的差别
查看>>
HTC G7直刷MIUI开启A2SD+亲测教程
查看>>
shiro的rememberMe不生效
查看>>
const 不兼容的类型限定符问题
查看>>
OpenCV的配置
查看>>
spring Cache + Redis 开发数据字典以及自定义标签
查看>>
成功连上数据库顿感世界美好许多
查看>>
编程注意2
查看>>
《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
查看>>
javascript中sort()排序方法总结
查看>>
实现聊天界面的代码
查看>>
自己生成一个NDK的浅析
查看>>
Excel数据导入到数据库
查看>>
jQuery最佳实践
查看>>
SELinux FAQ
查看>>
Java中synchronized同步的理解
查看>>
python 数值计算库
查看>>
java 服务重启 js 中被注释代码仍然执行
查看>>
我并不是不闻不问![C#]
查看>>
web前端经典小题
查看>>