一 、 带着问题学习 磁盘
现在计算机的运行速度越来越快,那么它最拖速度的又是什么呢?也就是说现阶段计算机速度的瓶颈是哪个部件呢?
现在来说,磁盘的速度成为了计算机速度的瓶颈了。cpu的频率高的已经达到了5.0GHZ,也就是说一个核心一秒钟运算了50亿次。
1. 存储程序方式是指的什么?
外部介质来存储,比如图灵机 ,效率低下,存储有的用打孔的方式记录,慢慢的发展,就有了现在冯诺依曼式的结构,存储式计算机。
存储式计算机,存储的介质,最开始用软盘,再发展成碟片式的磁盘,现在发展成芯片式的ssd。
能用来存储的东西有哪些? 寄存器 内存 磁盘 看图:
那么程序在执行的过程中,是怎么访问磁盘的呢?
2. 如何通过内在来提高磁盘的访问速度?
3. windows为例,他为了节约内存用了哪些手段?
二 、磁盘
磁盘缓存
虚拟内存
节约内在的编程方式有哪些?
磁盘缓存
我们的计算机先访问内存,内存读取硬盘上的数据,在内存读取硬盘上的数据,也是要发时间的,那么,怎么节省这个时间?
那我们能不能提高内存访问磁盘的速度呢?答案是可以!这样就引申出磁盘缓存的概念。什么是磁盘缓存呢?
我们在使用数据的时候,同时会悄悄的载入一些数据到内存中,而当我们第2次使用这段数据的时候,我们就到内存里面取用
以上是比较老式的系统中,如win95/98,曾经使用过的磁盘缓存方式。当时的磁盘相当的慢,内存也是很有限,这种方式能很大的程度上解决磁盘太慢的问题。另:磁盘缓存,存在哪呢?把它存在内存当中。磁盘缓存就是:使用内存,当作磁盘用。当用完了之后,再把数据还回磁盘。当然,我们使用数据的地方,它还是会偶尔的访问我们的磁盘的。但它只访问一次,再次访问的时候,直接去内存找了。这项技术在我们开发的服务端上大量的运用,还有数据库上也得到很多的运用,我们接触最多的,用浏览器上网,也会使用磁盘缓存的技术。也就是拿着内存来当磁盘用。
磁盘缓存 很大的解决了磁盘慢的问题,但慢慢的,我们发现内存不够用了,引出虚拟内存的方案。
虚拟内存
什么是虚拟内存? 虚拟内存是将我们的磁盘特定的一块,当作内存使用。
虚拟内存的算法有两种:1分页式 2 分段式 分页式就是把数据分成一页一页的,什么是一页呢?一页就是一个大小,分成一个个的页,比如一页是一个4KB大小,很久之前的数据是4KB大小。分段呢,它会考虑数据里面的逻辑,比如说,这一块是处理什么事情的,我把它分出一块来,那一块又是处理什么的,我又把它分一块。当内存的一块事情处理完成,再和虚拟内存的数据交换。
page in page out 交换,虚拟内存和内存交换,加载进内存是page in ,还给虚拟内存是page out。
虚拟内存 它的存在就是:让你的程序能运行起来 。 如一个程序6G大小,你的内存只有4G,那操作系统就会把2G分配给虚拟内存。
节约内存的编程方式
函数共用
比如:动态链接 DLL英文是动态加载的意思
函数共用 ,提升了利用率,节省了内存,能做更多的事情。
被调用方清理栈
程序运行中,内存会有一块专门的区域,负责存储一些临时的值。这块区域我们称为“ 栈 ”。
栈不能无限的扩大,还需要回收空间,使用完了之后,要回收。所以呢,就要有一个程序回收我们的栈空间。清理栈一般会在一个函数调用完成之后进行清理动作。而函数的调用分为2种方式:
1 windows中使用_stdcall
2 其它方式
其它方式是如何来清理栈的呢?很早以前是如图所示
数据的压缩
磁盘的物理结构:
磁道 扇区 簇 粗略的了解下 1簇=1个扇区 512byte 这个数据不是一成不变的,磁盘越大,簇就可能更大。windows操作磁盘最小单位就是簇, 同一簇里面不能有相同的数据。如果装了2个相同 的文件,那么这个簇就打不开了。
磁盘有时也是不够用的,这就有了相应的数据压缩的算法
RLE 压缩算法
能很好 的压缩 图像 比如传真机 2种色,黑和白
exe文件 有很多0000的空白区,也能很好的压缩
RLE 无正儿八经的压缩文本的
里面没有重复的
哈夫曼 压缩算法
一篇文章,长关键字出现的频率,记录下来,分别使用编码的方式代替关键字
特点:将长的特征编成短的编码
压缩:有可逆的,也有不可逆的如:jpeg格式,有损压缩
固态硬盘,也是机械硬盘的原理改良的,原理还是一样,只是改成了ica芯片存储了。
混合硬盘,它有磁盘结构,它还有一块ic结构,把它做成磁盘的缓存。
磁盘阵列,在磁盘读取的峰值,可以使用几块硬盘,几块分布写出,同时多线读取
总结
原文:http://www.cnblogs.com/bing-z/p/5827331.html