高级软件工程师之路-磁盘

来源:互联网 发布:dnf一进去网络连接中断 编辑:程序博客网 时间:2024/05/22 21:52

1.硬盘的物理结构


文件占用磁盘空间时,基本单位不是字节而是簇。簇的大小与磁盘的规格有关,一般情况下,软盘每簇是1个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……。
  通常在Windows平台下使用的3种文件系统是FAT(文件分区表),FAT32(32位文件分区表)和NTFS(NT文件系统)。在FAT文件系统下,每一个磁盘被分成固定大小的簇。簇最少为512个字节,其大小可以成倍增长,最大为32K。每个簇都是由唯一的索引号——一个16位二进制数来标识。因为16位二进制数最大为65536,所以FAT分区所拥有的簇的数量不可能超过65536个。簇的数量和大小的限制,就是FAT分区为什么不能超过2GB的原因。
  FAT中的入口连接着组成一个文件的各个簇,文件的目录入口包含其第一个簇的索引号,而该簇在FAT中的入口又包含着下一个簇的索引号,依此类推。一个文件的最后一簇对应的FAT入口则包含着一个特殊的文件终止符,未使用的簇和损坏的簇也会用特殊代码标识出来。FAT32文件的原理几乎与此相同,但它的簇更小,而且由于FAT32入口是32位,所以其容量理论上可以超过40亿个字节。
  NTFS是一个相当高级的文件系统。它的主文件表(MFT)是一个非常完整的数据库,它负责对磁盘上的每个文件进行索引。每个MFT的入口通常为1K大小,其中记录了大量的文件信息。NTFS可以在文件的MFT入口中存储非常小的文件的全部内容;对于大一些的文件,这些入口会标识出包含文件数据的簇。
  硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。盘片被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2的2次方=512字节,盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道。硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆,在许多场合,磁道和柱面可以互换使用,我们知道,每个磁盘有两个面,每个面都有一个磁头,习惯用磁头号来区分。扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参数,帮这些参数可以得到硬盘的容量,基计算公式为:
  存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数。
  要点:
  (1)硬盘有数个盘片,每盘片两个面,每个面一个磁头。
  (2)盘片被划分为多个扇形区域即扇区。
  (3)同一盘片不同半径的同心圆为磁道。
  (4)不同盘片相同半径构成的圆柱面即柱面。
  (5)公式: 存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数。
  (6)信息记录可表示为:××磁道(柱面),××磁头,××扇区。

1.一个文件大小比一簇小的,读入磁盘中时,也按一簇大小计算2.一簇不能同时存储两个不同的文件,否则会导致其中一个无法正常读取

2.存储数据的部件(存储介质):


1.寄存器: cpu内部,速度最快,容量小
2.内存:速度中等,容量中等
3.磁盘:速度慢,容量大,价格低

3.程序的执行


1.cpu直接从硬盘中读取
2.通过内存中缓存数据进行加载

4.加快程序运行方法


1).磁盘缓存


最开始的时候, 计算机在使用数据时, 先从硬盘加载.
同时, 将数据也放到内存
那么再次读取同一数据的时候就从内存中取
这就是早期的磁盘缓存技术

2).虚拟内存


虚拟内存就是在硬盘上划分出一块空间来当作内存使用,代替内存存储数据。

在运行程序的时候,物理内存和虚拟内存之间存在数据的交换。分页式互换:将程序分为固定大小的好多页,使用的时候加载某一页或某几页,使用PAGEIN(放入物理内存),PAGEOUT(放入虚拟内存)操作来进行交换。分段式互换:将程序分成算法段,数据段等各种段,物理内存中只放我们需要用到的段,用完了再和虚拟内存交换。

5.节约内存的编程方式


1.函数共用

将公共方法写成动态链接库(dll或so文件)动态加载,内存共享。

2.被调用方清理栈

清理栈操作是在函数调用完成之后进行的。    Windows下是使用 _stdcall 和 其他函数 两种方式_stdcall 的节省方法在函数的最后加上一句 add esp, 8

3.压缩数据

压缩数据就是通过一定的压缩算法把数据进行压缩可逆算法:1).RLE算法:善于图像的压缩,原理->把连续的数据变成单个数据+次数表示2).哈夫曼算法:根据出现的频率来进行压缩,然后以编码的方式重新编排数据。出现次数最多的用最短的编码表示。不可逆算法:JPEG格式的图像,有损压缩,不能还原。
0 0
原创粉丝点击