前天去网吧跟朋友包宿,导致昨天一整天都报废,今天早上研究了一下nethunter导致手机成功变砖,感冒不停地咳嗽,这些理由应该足够我前两天拖更了吧,下面开始正题
磁盘学习路线
虚拟缓存
虚拟内存
节约内存的编程方式
函数公用
被调用方清理栈
数据压缩
让我们带着问题来学习:
存储程序方式是指什么?
如何通过内存来提高磁盘的访问速度?
windows为例,他为了节约内存用了哪些手段?
首先我们来了解下磁盘这个部件
磁盘是我们电脑中必不可少的硬件,他近几年的发展非常迅猛,但同时磁盘也是我们现在计算机运算速度的瓶颈
我们知道CPU的运算速度是以GHz来计算的,也就是每GHz=10亿次运算,内存也同样是以GHz来计算,但我们的磁盘的运算速度却仅以MB来计算
再来看下磁盘的历史:
最开始的磁盘是软盘,以碟片方式来存储,理论速度可以达到100MB(理论上,现实不成立)
之后发展为现在的SSD芯片式磁盘,民用的运算速度可达到500MB,商用可达到2000MB
磁盘与内存的关系:
电脑中能够存储数据的硬件:
寄存器:存在于CPU的内部,速度最快,容量最少,价格最贵
内存:一般快,一般多,一般贵
磁盘:速度最慢,容量最多,最便宜
电脑执行程序的过程:
CPU向硬盘取出数据,放入寄存器中进行运算,运算结束后放回数据,这是最早的操作方式,但是我们知道硬盘的读取操作非常慢,所以加入了内存这一概念:
程序在使用前从硬盘加载到内存中,cpu在使用时直接访问内存,结束后再讲数据传送到cpu中
以上统称为存储程式计算机,将程序存储在一个固定的地方,运行时加载就可以了
在此之前使用外部介质来存储,典型的是图灵机
但是我们还有一个问题,内存从硬盘中读取数据也要花时间,我们如何节省?
通过磁盘缓存技术:
这里我们分为第一次读取和第二次读取,第一次读取硬盘会同时将数据发送到我们使用数据的地方和内存上,这样在下次使用的时候就会直接访问内存来执行程序
磁盘缓存技术很大程度上解决了访问速度的问题,相当于把内存当做了磁盘使用,我们只需访问一次磁盘下次就可以直接访问内存
磁盘缓存技术的使用范围:win95,98,浏览器,数据库,服务端
但是磁盘并不能一次性的将数据写入到内存上面,因为内存的空间是有限的,这时引入了虚拟内存
虚拟内存:
分为物理内存和虚拟内存
将磁盘中的一块当成内存使用,使cpu在访问有限的内存空间时能够把物理内存和虚拟内存的空间结合起来,最终达到程序的运行目的
举例:
若可用内存5mb
程序运行需:10mb
在磁盘中划分5mb用于加载程序所使用的的内存
cpu向内存调用程序数据中的123,物理内存123与虚拟内存456互换,cpu再次向程序中调用程序数据中的456,程序成功运行
虚拟内存的置换算法:
分页式
分段式
分段式:将需要运行的程序内的逻辑(算法,数据)分段,物理内存只执行当前使用的段,cpu处理完物虚置换,此方法有点类似磁盘缓冲
分页式:将数据做成一页一页(页:一个固定的大小),例如:
10mb=4kb,4kb,4kb......
4kb=一页
以页为单位,在虚拟内存和物理内存间进行交互