博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机中的存储器们
阅读量:7044 次
发布时间:2019-06-28

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

计算机当中包含的存储器可以分为随机存储器(RAM)和只读存储器(ROM)(好像硬盘也能叫存储器,但本文不讨论)。RAM的特点是要持续供电才能保存数据,可读可写,而ROM就算断电,也不会丢失数据,而且是只读的。

我们打开机箱的盖子,罗列一下所有的RAM和ROM,首先主板上有一根或者几根4G/8G的RAM,还有一个CMOS,它也是RAM,显卡上面有2G的RAM(就是显存),还有ROM,网卡上面也有ROM。而CPU和这些存储器是通过总线连在一起,我们整理一下,他们的逻辑连接大概就像这样。

为什么每个接口卡都有ROM

ROM是只读的,硬件厂商在制作硬件的时候会在里面设置一些程序(比如一些可供调用的函数,就是所谓的BIOS),至于这些函数是干嘛用的下面再说。你也许会说,为什么不把所有的程序都写到主板上的ROM里面?我们拿显卡举例吧,生产显卡的厂商不止一家,他们的ROM里面的程序是不一样的,如果把所有的程序都写到主板上的ROM,那我以后换显卡该怎么办?这其实就像你写程序一样的,你应该不会把所有功能都写在一个函数里面吧?!所以不同的接口卡都有自己的ROM。

这些不同的存储器在物理上都是独立的,但是在CPU眼里,它们被抽象成了一块逻辑存储器(就是所谓的内存地址空间),每个设备对应逻辑存储器的一个地址范围,就像这样。

当cpu访问相应的内存区段时,实际上就是在访问相应设备的内存。当然,这里还有一个有意思的问题,就是CPU如果要把显存上的一个地址的内容挪到cpu内部,就像执行指令"MOV ax, [B800:0]"(当然这是伪代码,实际上是不合法的。B800:0是显存上的一个地址),但CPU如何根据这个指令判断出应该去显存上面去读数据,而不是其他什么存储器呢?这涉及到计算机组成原理了,有兴趣的可以去学习下。

接下来我们聊一个有意思的话题,就是主板上的ROM在操作系统被加载的过程中扮演一个什么样子的重要角色?我们知道任何程序(包括操作系统)一开始是被存在硬盘上的,想要得到执行的话,肯定需要被加载到内存条上才行,可是谁来加载呢?因为我们在按下开机键的时候,内存条才刚刚通电,上面什么东西都没有啊!等等,我们好像漏掉了什么?回顾上面的内存地址空间示意图,我们主板上的Rom已经有程序了,且内容不会因为断电而消失记得吗?所以当机器通电的时候,cpu就可以访问到System Rom 里面的BIOS程序了。所以整个过程是这样的,当我们按下开机键的时候,cpu直接从某一地址开始执行代码(在8086CPU的机器中,该地址是FFFF:0000,这个地址刚好在"System Bios Rom"这个地址范围内,我们不需要关心这具体地址是什么,反正就是在硬件层面“写死了的地址”),好了,接下来想干嘛就干嘛,当然也可以从硬盘把操作系统的代码给load到内存条(这是笼统的描述,以后再详细描述操作系统从硬盘加载到内存的过程),这差不多就是“盘古开天地”的过程了。

转载地址:http://tlhal.baihongyu.com/

你可能感兴趣的文章
iOS 自定义步骤进度条
查看>>
ArcGIS 服务对象扩展(SOE)新手自学笔记(3):REST SOE模板下
查看>>
iOS基础控件之UISegmentedControl
查看>>
【SSH项目实战】国税协同平台-3.资源文件分类&log4j&抽取BaseAction
查看>>
《Redis官方教程》-基准测试
查看>>
C++之继承
查看>>
一分钟了解阿里云产品:E-MapReduce五大热点技术问题分析
查看>>
Servlet处理客户端HTTP请求
查看>>
TFS ErasureCode线上问题
查看>>
Less mobile, more everything-重新思考Mobile
查看>>
Android反编译工具Apktool浅析
查看>>
重学js之JavaScript基本概念(上)=> 数据类型
查看>>
C++ 类模板
查看>>
使用Travis+github+hexo持续部署博客项目
查看>>
JS监听手机物理返回键(及IOS微信端的bug)
查看>>
JS数据类型检测
查看>>
H5页面在ios下部分兼容问题
查看>>
订单及会员管理系统
查看>>
设计模式6大原则杂谈
查看>>
闲谈Monaco Editor-自定义语言之Monarch
查看>>