04_磁盘(计算机科学)
带着问题学习(磁盘)
- 存储程序方式是指的什么?
- 如何通过内存来提高磁盘的访问速度?
- Windows为例,它为了节约内存用了哪些手段?
磁盘
我们已经知道的能够存储数据的介质有:
- 寄存器:在CPU的内部,相当于CPU的内存。它的读写速度是最快的,但是数量是最少的,价格也是最昂贵的。
- 内存:通过内存地址来进行访问内存中存储的数据,内存地址并不代表内存。它的速度一般快,数量一般多,价格一般贵。
- 磁盘:它的速度是最慢的,数量是最多的,价格是最便宜的。
磁盘的物理结构
硬盘扇区:硬盘扇区是硬盘的内部圆形金属盘片被磁道划分成若干个扇形区域,这就是硬盘扇区。若干个扇区就组成整个盘片,硬盘的读写以扇区为基本单位。这种以簇为最小分配单位的机制,使硬盘对数据的管理变得相对容易。
百度百科硬盘扇区
磁盘中的簇:数据存储在硬盘的时候都是以簇位单位,所以无论文件大小是多少,除非正好是簇大小的倍数,否则文件所占用的最后一个簇或多或少都会产生一些剩余的空间,且这些空间又不能给其它文件使用,即使这个文件只有0字节,也不允许两个文件或两个以上的文件共用一个簇,不然会造成数据混乱。百度百科簇
簇大小和扇区大小
计算机的外部存储器中也采用了类似磁带的装置,比较常用的一种叫磁盘,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失。参考于百度百科磁盘
目前计算机的运算速度的瓶颈是在磁盘读写速度的上面!
电脑在执行程序的时候,过程是这样的:在存储式计算机诞生之前,数据存储都是在外部用纸袋打孔等方式存储的,比如图灵机。如果想了解更多,请参考百度百科图灵机
后来就有了冯诺依曼结构的计算机,它是存储式的计算机(冯诺依曼结构):硬盘->内存->CPU参考于百度百科冯诺依曼
磁盘缓存
简单的说,就是拿着内存来当磁盘用,因为CPU访问内存的速度远远大于访问磁盘的速度。
如果想了解更多的信息,请参考百度百科磁盘缓存
磁盘缓存是在硬盘容量不是很大,内存空间相对较大的基础上出现的技术。随着科技的发展,磁盘的容量在快速的增加,而内存相对来说就变得紧缺起来,所以就又出现了虚拟内存的技术。
虚拟内存
简单的来说,虚拟内存就是将磁盘中的一块作为内存来使用。但是CPU比较傻,它只能从物理内存里面,是因为当CPU用到虚拟内存中的数据时,物理内存中的数据需要和虚拟内存中的数据进行交换,从而达到CPU能够执行虚拟内存中的程序的目的(实际上CPU还是直接从物理内存中取得数据)。这样解决了某些比较占内存的应用程序的运行问题。
虚拟内存与物理内存中数据置换算法有两种参考:
- 分页式:将内存分成固定大小的页(一般是4KB),分配若干页将整个进程载入。页面可以不连续是其重要优点,不会产生外碎片,更有效地利用了内存,不过会产生一些内碎片,即分配给进程的最后一个页往往不能正好用完,不过在页面大小不是很大的时候可以接受。
- 分段式:将程序分为若干个段,如数据段和代码段,加以不同的保护。施加保护是分段式的优点,但其仍是向分区式管理一样的连续分配。
百度百科虚拟内存
节约内存的编程方式
- 函数共用:即动态链接库(DLL. Dynamic Link Library),Windows中几乎所有的函数都是写在DLL中。内存中只有一份DLL,可以被多个进程同时调用,达到节省内存空间的目的。
- 被调用方清理栈:即__stdcall,这是Windows中使用的清理栈的方式,这样可以达到节省内存空间的目的。函数被调用完以后,需要将这个函数用到的栈空间进行清理。还有另外一种清理栈的方式,那就是__cdecl,调用方清理栈,这种方式比较浪费空间。
- 数据压缩:常见的有RLE压缩算法(传真、exe可执行程序等用的一种算法。但是对于文本就不适合了,压缩后反而会变大)、哈夫曼压缩算法(适用于文本的压缩)这两种压缩算法都是可逆的;还有像JPEG图像压缩算法是不可逆的。