关于CPU位数,OS位数以及内存大小关系的一点总结
(这个学期做助教,说来好惭愧啊,虽然我也是考研进来的,但是就在两年前复习的资料居然全部都忘光了。对大二的孩子们提问的问题多半都解决不了!!!越来越觉得自己的学习方法有问题了,总是想着一些知识能够根据自己多看几遍印象就深刻了,或者说每次记忆知识时总是想下次再记在脑海里吧!这样导致很多东西必须看资料才能想起来:啊原来是这样的,我看过啊,我知道的啊!这样的陋习一定要赶紧改正了,每次学习一个新的知识,都要记在脑海里,深刻地理解一下!!!)
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位数以及内存大小关系的一点总结的更多相关文章
- ubuntu系统AndroidStudio修改内存大小
位于android-studio/bin目录下的studio64.vmoptions和studio.vmoptions文件. 把Xms,Xmx,-XX:MaxPermSize,-XX:Reserved ...
- ubuntu系统AndroidStudio改动内存大小
位于android-studio/bin文件夹下的studio64.vmoptions和studio.vmoptions文件. 把Xms,Xmx,-XX:MaxPermSize.-XX:Reserve ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息
摘要 有时需要获取电脑的相关信息.这时可以通过调用windows api的方式,进行获取. 方法 可以通过在powershell中 通过下面的命令进行查询,然后可以通过c#调用获取需要的信息. gwm ...
- 获取指定订阅下所有Azure ARM虚拟机配置(CPU核数,内存大小,磁盘信息)的使用情况
脚本内容: <# .SYNOPSIS This script grab all ARM VM VHD file in the subscription and caculate VHD size ...
- zabbix的安装(一)监控os资源:内存,cpu,io,负载,带宽
一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...
- 计算Java对象内存大小
摘要 本文以如何计算Java对象占用内存大小为切入点,在讨论计算Java对象占用堆内存大小的方法的基础上,详细讨论了Java对象头格式并结合JDK源码对对象头中的协议字段做了介绍,涉及内存模型.锁原理 ...
- 每个内存大小:sudo dmidecode -t memory |grep -A16 "Memory Device$" |grep "Size:"
CPU: 型号:grep "model name" /proc/cpuinfo |awk -F ':' '{print $NF}' 数量:lscpu |grep "CPU ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
随机推荐
- Map详解
https://mp.weixin.qq.com/s/s4KLQyE5bY833kGzWl3vsg
- 08_1_IO
08_1_IO 1. 输入/输出流的分类 java.io包中定义了多个流类型(类或抽象类)来实现输入/输出功能:可以从不同的角度对其进行分类: 按数据流的方向不同可以分给输入流和输出流. 按处理数据单 ...
- node-inspector调试工具使用方法
开发node.js程序使用的是javascript语言,其中最麻烦的还是调试,这里介绍一下node-inspector使用方法.具体资料可以看参考资料中的GITHUB文档. 工具/原料 node. ...
- 关于props的注意事项!
起于昨晚大半夜在群里看到有人问这个问题,在子组件的data属性里重新赋值props属性 this.a = this.propA,不生效! 提示了他如果是异步的话,就要注意watch.决定今日敲个dem ...
- Linux实战教学笔记16:磁盘原理
第十五节 磁盘原理 标签(空格分隔): Linux实战教学笔记 1,知识扩展 非脚本方式的一条命令搞定批量创建用户并设置随机10位字母数字组合密码. 1.1 sed的高级用法 [root@chensi ...
- 基本形状的绘制&添加文字
本次用opencv在图像上绘制了线,矩形,椭圆,圆的形状和放置了文字. #include<iostream> using namespace std; using namespace cv ...
- [BZOJ1009][HNOI2008]GT考试(KMP+DP)
[不稳定的传送门 Solution dp[i][j]表示前i个字符当前匹配到不吉利串的第j个,即当前方案的后缀等于不吉利串前缀 然而由于n过大,不能直接转移,用矩阵优化 Code #include & ...
- Hibernate---开发环境搭建
下载安装Hibernate 在官网http://hibernate.org/tools/上下载eclipse安装插件的文件/安装插件的地址.点击download选择JBoss Tools,选择Arti ...
- sql查询作业答案
sql查询作业答案 阅读目录 一 题目 二 答案 一 题目 1.查询所有的课程的名称以及对应的任课老师姓名 2.查询学生表中男女生各有多少人 3.查询物理成绩等于100的学生的姓名 4.查询平均成 ...
- android MotionEvent
getAction() 获取事件的类型,这是一个组合值,由pointer的index值和事件类型值组合而成的 getActionMasked() 获取事件的类型,不具有其他信息 参考: http:// ...