扇区、块和簇有什么区别?

2019年5月28日 0条评论 194次阅读 N/A分 未分类

扇区(Sector):指的是物理上存储器最小操作的单位。我们都知道衡量存储空间大小的基本单位是字节(Byte),但是由于物理构造或者说制造工艺的限制,存储器并不一定能1个字节1个字节的操作他自己。比如STM32内部的Flash,在F103系列中的大容量产品中Flash一个Sector是2KB,而擦除操作只能以Sector作单位。这意味着,比如我想先写入100字节数据然后删除里面的50字节重写别的数据是不可能的,必须一次把这2KB的Sector全部删除重写才行。扇区是客观存在的物理性质。

块(Block)和簇(Cluster):本质上它们是同一个东西,只不过Linux系统里叫块、Windows系统里叫簇而已,以下为了简便我统一称之为块。块的出现是为了应对操作的过于频繁,比如一个扇区大小为512B的磁盘,我要读10KB的文件需要做20次读写操作,但如果人为设置一个最小单位比如2KB作为读写的最小单位,只需要5次读写即可。操作系统频繁响应读写中断会导致性能下降(比如复制数据时很卡),而块的出现解决了这个问题。

值得一提的是,块和簇都是逻辑上的概念,是操作硬件的具体软件(比如Windows操作系统)自己定义的概念,磁盘自己不关心也不知道这一概念,磁盘只关心读写操作的地址和大小以及检查其是否符合自己的扇区规定,以扇区的整倍数作为单位响应这次读写操作。

另一个问题是,块既然能提高操作系统性能,为什么不尽可能大的定义块呢?因为,块是操作的基本单位,则也是存储的基本单位。比如一个块是2KB,那么我创建一个仅仅100B的文本文件,在物理上也必须占用2KB,因而有95%的浪费,随着块的增大浪费会越来越严重。除非我们电脑里的文件实际内容都恰好是块的整倍数,否则必然会有浪费。因此性能和空间浪费率是鱼和熊掌不可兼得的,操作系统一般在其中寻求一个平衡,所以一般定义块为512B~4KB之间。

最后,上述讨论给我们的一个启示是文件最小的占用单位是1块的大小,而块最小不能小于扇区大小。那么比如我用STM32F4系列单片机的内部Flash模拟U盘就会很蛋疼,因为其一个扇区就有128K之大,也就是说我用其内部512KB的大小分个比如400K当U盘,存不下2、3个文件就满了,即便文件内容可能连1KB都不到;而STM32F103ZE内部的Sector都是2KB的,所以我分150KB当U盘少说能存几十个小文件,用来当脚本语言的存储空间有一定实用性,可F4乃至F7系列巨大的Sector则只能望洋兴叹。(不过如果人为规定只准创建一个文件,然后脚本全部写在一个文件里;或者只存放1个bin文件用作刷机升级还是有一定意义的)

Please wait...
 

扇区、块和簇有什么区别?》上有1条评论

  1. Pingback引用通告: viagra

发表评论