(这个学期做助教,说来好惭愧啊,虽然我也是考研进来的,但是就在两年前复习的资料居然全部都忘光了。对大二的孩子们提问的问题多半都解决不了!!!越来越觉得自己的学习方法有问题了,总是想着一些知识能够根据自己多看几遍印象就深刻了,或者说每次记忆知识时总是想下次再记在脑海里吧!这样导致很多东西必须看资料才能想起来:啊原来是这样的,我看过啊,我知道的啊!这样的陋习一定要赶紧改正了,每次学习一个新的知识,都要记在脑海里,深刻地理解一下!!!)

1. CPU位数:一个时钟周期内处理器处理的二进制位数。

CPU位数 = CPU中寄存器的位数 = CPU一次并行处理的数据宽度

CPU为了实现其功能一般设计了指令集,即是CPU的全部指令,这就是机器语言。计算机的所有功能都是基于CPU的指令集。

如Intel 8086 CPU 是16位,其指令集也是16位。如Intel 80386DX CPU 是32位,其指令集也是32位,但它也保持原16位指令集,这是为了向上兼容。

2. 操作系统位数

操作系统位数 = 其所依赖的指令集位数 <= CPU位数

操作系统位数对CPU位数有向上兼容,如32位CPU上运行16操作系统,64位CPU上运行32位操作系统等情况。

3. 内存容量与操作系统位数的关系。(有种说法是:32位操作系统最大只能支持4G内存)

在使用计算机时,其支持的最大内存是由操作系统硬件两方面决定的。

在早期的PC机中,采用的是三总线结构:数据总线,地址总线和控制总线。分别来实现不同的功能:数据总线用来传输数据,地址总线用来传输地址,控制总线用来传输一些控制信号。但在现在的PC机中,一般使用了总线复用功能。如在PCI总线中,地址总线和数据总线总是分时复用的(也就是说假如PCI总线有32为数据总线,这32位数据总线在某个时刻传输数据,在下一个时刻却用来充当地址总线的作用)。

回顾了关于总线的一点知识后,先来说硬件方面对内存容量的控制作用。

在计算机中地址总线的数目决定了CPU的寻址范围,这种由地址总线对应的地址称为 物理地址

先说一下硬件方面的因素,在上面已经提到了地址总线,在计算机中 CPU的地址总线数目 决定了CPU 的寻址范围,这种由地址总线对应的地址称作为物理地址。假如CPU有32根地址总线(一般情况下32位的CPU的地址总线是32位,也有部分32位的CPU地址总线是36位的,比如用做服务器的CPU),那么提供的可寻址物理地址范围 为 232=4GB(在这里要注意一点,我们平常所说的32位CPU和64位CPU指的是CPU一次能够处理的数据宽度,即位宽,不是地址总线的数目)。自从64位CPU出现之后,一次便能够处理64位的数据了,其地址总线一般采用的是36位或者40位(即CPU能够寻址的物理地址空间为64GB或者1T)。CPU访问任何存储单元必须知道其物理地址。

再说说物理地址,线性地址,逻辑地址的关系:

1) 物理地址(Physical Address): 刚刚讲过了,由CPU地址总线的位数决定。

2) 线性地址(Linear Address): 如果没有开启分页机制,线性地址就等于物理地址。如果开启了分页机制,线性地址到物理地址需要经过二级地址转换。线性地址可以很大,但最终要运行在物理地址上,而缺页机制和进程挂起等,就是为了让远比物理内存大的程序,运行在如此小的物理内存中。在网上看到一个例子,生动又形象:好比公交车上让座,假设座位是内存,其他站立空间是硬盘,刚上车的时候你很高兴,你和你女朋友(进程A,B)都有座位(进入内存),如果此时,有个孕妇上车了,售票员大姐(操作系统)发现了,"孕妇优先",于是开始问"谁给孕妇让个座啊"(进程调度),不过很不幸,这个系统是非抢占式的,孕妇(进程S)只好等待,作为一个有理想有道德的程序猿(优先级低),当仁不让,自己站了起来了(进程挂起),操作系统一看,有个家伙把座椅(内存)释放出来了,于是排队等候的孕妇就坐到了你原来的位置,你切换到公交地板上(硬盘)。车到某站,孕妇下车了,于是你重新坐上座位(内存占有),在公家车的整个运营过程中,座位(内存)是有限的,而人不不断上下,所以人上来首先站在车厢内,然后根据各种成文的,不成文的规矩,占有或者释放内存(座位)。座位是有限的,而人相对来说是无限的,怎么利用有限的资源,服务更多的进程,这或许是操作系统应该考虑的。

3) 逻辑地址(Logical Address): 指分段机制提供的地址,由段部分和一个便宜部分构成。段机制是虚拟地址到线性地址的基础。线性地址 = 段基址 + 偏移地址。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。

这三种地址关系为,逻辑地址经过段式映射(Segmentation Translation)到线性地址线性地址经过页面映射(Page Translation)后,得到物理地址

言归正传,再说说操作系统对内存容量的控制作用。

在上面中有提到,用户使用计算机时,直接操纵的只能是逻辑地址,要经过操作系统的转换后才能变换为物理地址。如对于32位的操作系统而言,其逻辑地址编码采用的地址位数是32位,那么操作系统所提供的逻辑地址寻址范围为:232 = 22 * 230 = 4GB(所以在32位CPU和32位的操作系统中,最大支持的内存为4G)。但是理论上是4G的内存,在我们真正使用时并不到4G,大约只有3.2G左右。这是因为在intel x86架构下,采用的是内存映射技术(Memory-Mapped I/O, MMIO),也就说将4GB逻辑地址中一部分要划分出来与BIOS ROM、CPU寄存器、I/O设备这些部件的物理地址进行映射,那么逻辑地址中能够与内存条的物理地址进行映射的空间肯定没有4GB了。

参考文献:

【1】http://blog.csdn.net/ray_zhang_3/article/details/5447140

【2】http://www.cnblogs.com/dolphin0520/archive/2013/05/31/3110555.html

【3】http://bbs.51cto.com/thread-1089741-1.html

【4】http://blog.csdn.net/macrossdzh/article/details/5954763

【5】http://laoxu.blog.51cto.com/4120547/1166661

【6】http://ilinuxkernel.com/?p=414

【7】http://blog.csdn.net/linpeng12358/article/details/41450805

关于CPU位数,OS位数以及内存大小关系的一点总结的更多相关文章

  1. ubuntu系统AndroidStudio修改内存大小

    位于android-studio/bin目录下的studio64.vmoptions和studio.vmoptions文件. 把Xms,Xmx,-XX:MaxPermSize,-XX:Reserved ...

  2. ubuntu系统AndroidStudio改动内存大小

    位于android-studio/bin文件夹下的studio64.vmoptions和studio.vmoptions文件. 把Xms,Xmx,-XX:MaxPermSize.-XX:Reserve ...

  3. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  4. C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息

    摘要 有时需要获取电脑的相关信息.这时可以通过调用windows api的方式,进行获取. 方法 可以通过在powershell中 通过下面的命令进行查询,然后可以通过c#调用获取需要的信息. gwm ...

  5. 获取指定订阅下所有Azure ARM虚拟机配置(CPU核数,内存大小,磁盘信息)的使用情况

    脚本内容: <# .SYNOPSIS This script grab all ARM VM VHD file in the subscription and caculate VHD size ...

  6. zabbix的安装(一)监控os资源:内存,cpu,io,负载,带宽

    一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...

  7. 计算Java对象内存大小

    摘要 本文以如何计算Java对象占用内存大小为切入点,在讨论计算Java对象占用堆内存大小的方法的基础上,详细讨论了Java对象头格式并结合JDK源码对对象头中的协议字段做了介绍,涉及内存模型.锁原理 ...

  8. 每个内存大小:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Size:"

    CPU: 型号:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}' 数量:lscpu |grep "CPU ...

  9. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

随机推荐

  1. java后台导出pdf

    新页面打开wpf @RequestMapping("/showPdf") public String getpic( HttpServletRequest request, Htt ...

  2. SpringBoot学习5:访问静态资源

    springboot默认从项目的resources里面的static目录下或者webapp目录下访问静态资源 方式一:在resources下新建static文件(文件名必须是static) 在浏览器中 ...

  3. java基础必备单词讲解 day two

    variable 变量 count 统计 sum 总数 salary 薪水 Scanner 接收 import 导入 eclipse 日食 control 控制 shift 改变 alt 替换键 ha ...

  4. vue的生命周期和路由守卫

    组件相关钩子函数: beforeCreate.created.beforeMount.mounted.beforeUpdate.updated.beforeDestroy.destoryed   还有 ...

  5. 第35题:LeetCode138. Copy List with Random Pointer

    题目 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的深度拷贝. 考点 思路 代码 /** * Definition for singly ...

  6. 《JSON笔记之三》---postman中传入json串

    1.关于如何使用postman工具,简单的介绍一下, 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等 ...

  7. VMware虚拟机安装CentOS 7 Minimal 详细全过程

    VMware虚拟机安装CentOS 7 Minimal 详细全过程记录,并进行CentOS7 的网络配置,本次安装的CentOS镜像版本为官方网站下载的 CentOS-7-x86_64-Minimal ...

  8. vue学习--父子组件通讯

    this.$parent        // 子组件访问父组件 this.$root            // 访问根实例 this.$children        // 父组件的所有子元素 *一 ...

  9. scrapy--Cookies

    大家好,之前看到的关于cookies的应用,由于有段时间没看,再看的时候花了一些时间,来给大家总结下.本文是根据:"http://www.bubuko.com/infodetail-2233 ...

  10. cmd中编译java脚本 (2013-05-02-bd 写的日志迁移

    此前提是已经搭建好了jdk的编译环境! 先写一个java脚本如:建立一个HelloWord.java //public : 表示此类是公共的 一个java文件中只能有一个public类 //class ...