第四课:磁盘
磁盘的发展
软盘——>碟片式硬盘(100MB)——>SSD芯片式硬盘(民用500MB,商用2000MB)
磁盘和内存息息相关。
储存数据
- 内存:通过内存地址进行访问,一般快、一般多、一般贵;
- 寄存器:在CPU内部,速度最快、数量最少、最贵;
- 磁盘:速度非常慢、数量最多、最便宜。
目前计算机运算速度的瓶颈在磁盘
程序执行的方式(存储程序式计算机——冯·诺依曼模型):
- CPU直接从磁盘中取数据,取回到寄存器中进行运算,再将数据存储到磁盘中;
- 通过内存,将硬盘当中的数据加载到内存中,CPU直接访问内存。
加快磁盘的运作
磁盘的介质决定了运行速度,内存从硬盘中读取数据要花费时间(设计磁盘缓存来减少这部分时间)。
磁盘缓存:
CPU从磁盘中读取数据的同时,将数据加载在内存当中,再次使用可直接读取内存(win95/win98/现在的浏览器)。
应用:浏览器、数据库、服务端。
虚拟内存:
内存不够用,将磁盘划分一部分空间当作内存使用。
物理内存:CPU只能执行物理内存当中的程序;
虚拟内存:虚拟内存当作加载使用,当需要使用这部分的时候,再与物理内存做置换。
虚拟内存置换算法:
- 分段式:需要运行的程序以处理集合(逻辑分段),需要用的存储到物理内存中,其余的放到虚拟内存中,需要使用时进行置换;
- 分页式:把程序做成一页页的大小,以页为单位,在物理内存和虚拟内存中置换。
节约内存的编程方式:
- 函数共用:动态加载,DLL动态链接库(程序A、B相同部分可以通过DLL存储)。
- 被调用方清理栈:在内存中有一块专门的空间存储临时值,这块地址叫做栈(栈不能无限大)。一般清理栈是在函数调用完之后进行的,两种调用方式(Windows的_stdcall和其他方式)。
_stdcall:被调用方底部生成addesp8,更加节省内存,调用完清理;
其他方式:在调用代码下面用addesp8进行栈清理,每调用一次清理一次。
节省磁盘的方式
数据压缩:
- RLE压缩算法:
(AAAABBCCCDDDD——>A4B2C3D4)可以很好的压缩图像(图像黑白两种颜色连续的)和EXE(EXE有很多0000空白区)。
无法有效的压缩文本,有时候会造成空间扩大(l love——>l1l1o1v1e1)。 - 哈弗曼算法:
压缩文本,采用编码的方式将经常出现的字符用短编码表示。
可逆压缩(可还原,上述);不可逆压缩(JPEG格式)
内存物理结构
扇区、可变长
扇区(按磁道划分):以簇的方式进行读写,即使文件大小不能满足一簇,也按照一簇操作;一簇中不能有相同的文件。(簇是Windows对磁盘读写的单位)