第五章——内存和磁盘的亲密关系
本章重点是在计算机系统中高速小容量的内存与低速高容量的磁盘如何协同作业。
内存主要是指主内存(负责存储CPU中运行的程序指令和数据的内存),磁盘主要是指硬盘。
不读入内存就无法运行
存储程序方式:
程序保存在存储设备中,通过有序地被读出来实现运行。
磁盘中存储的程序,必须要加载到内存后才能运行。
原因:CPU需要通过内部程序计数器来指定内存地址,然后才能读出程序。即使CPU可以直接读出并运行磁盘中保存的程序,由于磁盘读取速度慢,程序运行速度还是会降低。所以,存储在磁盘中的程序需要读入到内存后才能运行。
磁盘缓存加快了磁盘访问速度
磁盘缓存:
指的是把从磁盘中读出的数据存储到内存空间中的方式。当接下来需要读取同一数据时,就不用通过实际的磁盘(低速),而是从磁盘缓存(高速)中把内容读出,改善磁盘数据的访问速度。
随着磁盘访问速度的改善,磁盘缓存的效果没有之前那么明显。
缓存:
把低速设备的数据保存在高速设备中,需要时可以直接将其从高速设备中读出。例如在Web浏览器的使用中会用到。
虚拟内存把磁盘作为部分内存来使用
虚拟内存:
是指把磁盘的一部分作为假想的内存来使用。
磁盘缓存是假想的磁盘(实际是内存),虚拟内存是假想的内存(实际是磁盘)。
为了实现虚拟内存,就必须把实际内存的内容,和磁盘上的虚拟内存的内容进行部分置换(swap),并同时运行程序。
虚拟内存的方法:有分页式和分段式两种。
分页式:在不考虑程序构造的情况下,把运行的程序按照一定大小的页(page)进行分割,并以页为单位在内存和磁盘间进行置换。为了实现虚拟内存功能,Windows在磁盘上提供了虚拟内存用的文件(page file,页文件)。
分段式:分段式虚拟内存是指,要把运行的程序分割成以处理集合及数据集合等为单位的段落,然后再以分割后的段落为单位在内存和磁盘之间进行数据置换。
节约内存的编程方法
(一)通过DLL文件实现函数共有
DLL文件,在程序运行时可以动态加载Library(函数和数据的集合)的文件。多个文件可以共有同一个DLL文件,可达到节约内存的效果。
(二)通过调用-stdcall来减小程序文件大小
通过调用-stdcall来减小程序文件的方法,是用C语言编写应用时可以利用的高级技巧。
栈清理处理:
C语言中,在调用函数后,需要执行栈清理处理指令。把不需要的数据从接收和传递函数时使用的内存上的栈区域中清理出去。该命令是程序编译时由编译器自动附加到程序中的,编译器默认将该处理附加在函数调用方。
栈清理处理,比起在函数调用方进行,在反复被调用的函数一方进行时,程序整体要小一些。所使用的就是-stdcall,就可以把栈清理处理变为在被调用函数一方进行。
磁盘的物理结构(存储数据的形式)
磁盘是通过把其物理表面划分成多个空间来使用的。
划分方式分为扇区方式和可变长方式两种。扇区是指将磁盘划分为固定长度的空间,可变长方式是指把磁盘划分为长度可变的空间。一般的Windows计算机所使用的都是硬盘和软盘,都是扇区方式。
扇区方式:把磁盘表面分成若干个同心圆的空间就是磁道,把磁道按照固定大小划分成的空间就是扇区。
扇区是对磁盘进行物理读写的最小单位。但在逻辑方面(软件方面)磁盘进行读写的单位是扇区整数倍簇。
磁盘容量越大,簇的容量也越大。但在软盘中,簇和扇区的大小是相等的。
注意:不管是硬盘还是软盘,不同的文件是不能存储在同一个簇中的,否则就会导致只有一方的文件不能被删除,所以不管多么小的文件,都会占用1簇的空间。
以上就是本章所学内容,下章见!
标签:缓存,有感,程序,扇区,第五章,内存,磁盘,虚拟内存 From: https://www.cnblogs.com/zyk0915-/p/18025856