在保护模式下,IA-32处理器可访问最高达4GB的内存,这是32位无符号二进制整数地址能够寻址的上限。

 今天看汇编的时候发现书里带过一句,不太明白为什么内存上限是4GB,就搜了一下,总结了一下答案。
 
1. 对计算机来说一个存储单元大小是8 bits (1字节);
 
2. 每一个存储单元都要对应一个地址,地址不管里面的内容是什么,如一个int类型是16 bits,占用2个存储单元,第一个存储单元的地址假设为 FFFFFFF1 (32bits),则第二个存储单元的地址就为FFFFFFF2。而字符串或者数组的话占用连续的内存空间;
 
3. CPU里有很多寄存器,有储存指令的指令寄存器,有储存数据的数据寄存器,有储存地址的地址寄存器,还有既可以储存数据又可以储存地址的通用寄存器等等。寄存器的作用是储存CPU的运算器所需要的或生成的数据的。
 
4. IA-32(Intel Architecture,英特尔体系架构),属于X86体系结构的32位版本,即具有32位内存地址和32位数据操作数的处理器体系结构,从1985年面世的80386直到Pentium 4,都是使用IA-32体系结构的处理器。
 
5. 系统的32位就是指寄存器的大小,IA-32对应32bits的地址寄存器,即一共有2^32个地址,每个地址对应一个8 bits的存储单元
 
6. 32bits * 8bits = 4GB内存大小(2^2*2^10*2^10*2^10*1B)
 
7. 但其实这个问题是错的,32位CPU是可以访问4GB以上内存的,通过一种叫做PAE(物理地址扩展,Physical Address Extension)的技术。Windows之所以不能支持是因为微软的市场策略问题(服务器版的就支持PAE)。
 
8. 可是,地址不光是给内存用的,但计算机的其他部件也需要地址,所以虽然能编址4GB的空间,但实际用到内存上的只有3.2GB,这也就是为什么4GB内存在Windows上只能使用3.2GB的原因了。
 
9. 相比之下64位的CPU虽然比32位看起来相差不多,但是内存却可以达到16TB!!不过也并不是这个数字越大越好,单纯内存的提高并不能提高性能,就现在而言性能上可能还是32位CPU更好一些。

为什么在保护模式下IA-32处理器最高可访问4GB的内存的更多相关文章

  1. 有关80386cpu在保护模式下的虚拟地址,线性地址和实际物理地址的关系

    80386cpu是8086cpu的升级版,其具有32位的寄存器.(32根地址线和32根数据线) 8086cpu其是16位的寄存器但是其地址线有20根,其寻址范围为2的20次方,但是有一个16位的寄存器 ...

  2. ASM:《X86汇编语言-从实模式到保护模式》第17章:保护模式下中断和异常的处理与抢占式多任务

    ★PART1:中断和异常概述 1. 中断(Interrupt) 中断包括硬件中断和软中断.硬件中断是由外围设备发出的中断信号引发的,以请求处理器提供服务.当I/O接口发出中断请求的时候,会被像8259 ...

  3. 软件调试——IA-32 保护模式下寄存器一览

    最近在看张银奎先生的<调试软件>一书,想将关键的技术记录下来,以便日后查阅,也分享给想看之人吧. 1 通用寄存器 EAX,EBX,ECX,EDX:用于运算的通用寄存器,可以使用AX,BX等 ...

  4. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

  5. ASM:《X86汇编语言-从实模式到保护模式》第13章:保护模式下内核的加载,程序的动态加载和执行

    ★PART1:32位保护模式下内核简易模型 1. 内核的结构,功能和加载 每个内核的主引导程序都会有所不同,因为内核都会有不同的结构.有时候主引导程序的一些段和内核段是可以共用的(事实上加载完内核以后 ...

  6. x86架构:保护模式下利用中断实现抢占式多任务运行

         站在用户角度考虑,一个合格的操作系统即使在单核下也能 "同时" 执行多个任务,这就要求CPU以非常快的频率在不同任务之间切换,让普通人根本感觉不到任务的切换.windwo ...

  7. x86架构:保护模式下加载并运行用户程序

    本章的代码分3个模块: MBR 引导:加载内核core程序 core:包含内核代码段(从磁盘加载用户程序并重定位).内核数据段(存放api名称.临时缓冲.字符串等).API段(供用户程序调用) 用户程 ...

  8. 保护模式下pmtest1.asm的理解

    整个代码对应内存线性地址分为四段,[gdt] [code32] [video32] [code16] 代码先在实模式[code16]下运行,code16中的cs就是系统分配的该程序物理地址的基址. 编 ...

  9. 80x86保护模式下IDT和中断调用过程分析

    80x86保护模式下IDT和中断调用过程分析 1.中断描述符表(IDT),将每个异常或中断向量分别与它们的处理过程联系起来.与GDT和LDT类似,IDT也是由8字节长度的描述符组成.IDT空描述符的存 ...

随机推荐

  1. 【转】mysql安装图解

    转载地址:http://www.jb51.net/article/23876.htm 很多朋友刚开始接触mysql数据库服务器,下面是网友整理的一篇mysql的安装教程,步骤明细也有详细的说明.   ...

  2. mfc通过消息传递参数进行程序间通信

    这样的程序主要实现windows平台下两个应用程序间的通信. 最简单的单元分为两个部分,一个是引用的程序,一个是被引用的程序. 一.如果引用他人,需要传递参数找到运行的程序,并且传递消息过去 void ...

  3. jQuery 遍历(上)

    目录: 一:定义二:遍历 DOM三:jQuery 参考手册 - 遍历 定义:什么是遍历?jQuery 遍历,意为"移动",用于根据其相对于其他元素的关系来"查找" ...

  4. 初学画布canvas的chapter1

    ——这篇读后感是我阅读<写给Web开发人员看的HTML5教程>一书中的第5章画布后的小小看法,由于编程实力有限,很多效果病没有一一去实现,所以只是停留在纸上谈兵的阶段. 画布(canvas ...

  5. 配置org.springframework.scheduling.quartz.CronTriggerBean (转载)

    在项目中又用到了定时器,对于定时器的应用总是模模糊糊的,今天结合网上找到的资料与自己在项目中写的简单地在此写一下,以备需要时查阅. 一个Quartz的CronTrigger表达式分为七项子表达式,其中 ...

  6. 微软2017校招笔试题2 composition

    题目 Alice writes an English composition with a length of N characters. However, her teacher requires ...

  7. 经典SQL语句大全以及50个常用的sql语句

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  8. AngularJS: 'Template for directive must have exactly one root element' when using 'th' tag in directive template

    .controller('HomeController', function($scope,$location) { $scope.userName='天下大势,为我所控!'; $scope.clkU ...

  9. 关于电脑安装多个版本JDK后使用时的切换

    描述:刚到新公司,自己安装了jdk1.7和开发工具myeclipse10,但是由于公司项目的需要(具体原因不详细描述了),需要使用myeclipse6.5和jdk1.6.于是在切换jdk1.7和jdk ...

  10. State(状态)

    props和state.props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变. 对于需要改变的数据,我们需要使用state.般来说,你需要在constructor中初始化st ...