计算机组成原理 - 3
计算机组成 - 存储器
计算机中存储的容量单位

为什么硬盘买的500G,格式化却只有465G?
这是因为硬盘厂商一般使用的是10进位

为什么100M带宽下载速度最高只有12M左右?
网络中常用的单位是 Mbps
100M代表的是100Mbps = 100Mbit/s = (100/8)MB/s = 12.5MB/s
存储器的分类
按照存储介质分:磁介质(磁带、磁盘)和半导体(内存、U盘、固态硬盘)
按照存取方式分:随机存储器(RAM)、串行存储器、只读存储器(ROM)
在读写速度上:5400转、7200转越大越快
在存储容量上:1T、2T越大越快
所以在速度和容量的综合性能比对上:高速缓存 > 主存 > 辅存
主存
运行时临时存放的存储器,比如键盘输入的文字暂时是保存在内存中的,但是只要另存为本地后才会保存到辅存(磁盘)中。
在RAM内存中,需要通电不断刷新来存或者读数据,所以在断电一段时间后,存储的数据就没有了。
内存的引脚数量越多,存储的数据量就越大。

如上图所示,计算机识别的是电流信号,所以一个引脚就只有0和+5V两种状态。即是二进制中的0和1.那么图中有八个数据引脚,说明一次存储的数据最多为8位0和1。也就是一个bit。而地址信号则有十个引脚。则说明能存放的数据地址数量一共有2^10=1024。所以这个存储器的容量就有1024*1bit = 1KB。


高级程序中的数据类型定义代表什么?
在程序中一般都用楼房模型来表示内存存储状况

比如在高级程序中定义的变量
编程语言中的数据类型代表的是存储的是何种类型的数据,也是占用内存的大小。比如a = ‘中文’ b = 3 一个中文和一个数字在程序运行时最终都会转换成2进制的本地机器代码,也有可能一样。但是数据类型定义了就可以明确表示这个数据是一个字符串还是一个数字。

在c语言中char代表一个字节长度,short表示2个字节,long代表4个字节,虽然都保存的是123这个数据,但是在内存中占据的位置是不同的。

在程序中只要定义了变量 var a; 就代表了开辟了内存空间,只是没有赋值
除了基本的数据类型,程序中有更高效的利用内存的数据结构--数组。其他的数据结构都是以数组为基础的,比如链表、栈、队列、二叉树,各自都有各自的适应情况和特点
辅存
内存的存取速度快,但是容量不够,这时候就需要辅存来辅助存储。例如磁盘、软盘
由于磁盘读取慢,程序应用必须加载到内存中才能运行,这是因为cpu需要从内存中取出指令执行

磁盘缓存
磁盘缓存表示在磁盘和内存中间也是有一层高速缓存区的,从磁盘中读取的信息会存入缓存中,下次读取相同数据时就直接从磁盘缓存中取,不需要读取磁盘

tip:现代计算机的磁盘读取速度越来越快,所以缓存的意义已经不大了,更多的是存在于浏览器中,访问过的数据可以缓存到本地,下次不需要发送请求。
虚拟内存
虚拟内存是指把磁盘假想成内存来使用。
一个50G的游戏在计算机中是怎么运行的?
内存中只会保存程序正在运行的部分,其余的部分都在磁盘中,如果需要执行下面的程序,内存会和磁盘中的程序进行置换,保证每次内存中只是正在运行的程序。
虚拟内存的方法有分页和分段式,window使用的是分页式,指的是把程序分成相同大小的页来进行置换

节约内存的方式 - DLL
DLL文件可以来实现函数共有,比如一个公共函数-弹出窗口的方法,如果很多应用使用。就只需要这一个DLL文件。来实现抽取公共函数

磁盘结构
磁盘中会划分扇区和磁道。一个扇区一般是512字节。扇区越大磁盘容量越大。

在磁盘中读写是扇区的整数倍叫做簇,根据容量大小一簇可以为1个扇区也可以为2个扇区。。。但是不同的文件是不可以存储在一个簇下的。
比如一个文字一个字节,存入磁盘中也是占用一个簇。