计算机写文件是一个簇为原子操作还是以扇区为原子操作

yuzhouhenan 2009-02-14 08:19:50
加精
小弟遇到一个问题:计算机写文件是一个簇为原子操作还是以扇区为原子操作,也即:当计算机断电的话,操作系统会保证我的一个簇的数据要么写成功要么写失败;还是只能保证一个扇区要么写成功要么写失败。
望高手不吝赐教,最好给出你的论据和参考资料的网址
...全文
1197 38 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
soft小兵 2011-06-06
  • 打赏
  • 举报
回复
了解.............
长见识了.....
wohow 2009-03-11
  • 打赏
  • 举报
回复
非常奇怪,我已经说过NTFS卷中右键查看文件属性里面看到的文件占用空间并不是真正的占用空间,可是这么多人还是认为liwei222说法正确。如果大家不熟悉MFT,不知道怎么查看的话,最简单的办法就是在NTFS卷中先查看卷的使用空间和空闲空间,把他们的值记录下来,然后创建或复制一个很小的文件(几十个字节),然后再查看卷的使用空间和空闲空间,此时这两个值都没有变化,就说明了这个很小的文件簇占用空间就是0。这个特性在FAT(FAT32)中是无法实现的
yuzhouhenan 2009-03-05
  • 打赏
  • 举报
回复
谢谢大家这么热情的关注,大家最好对自己的观点提出佐证的资料。
danxuezx 2009-02-27
  • 打赏
  • 举报
回复
跟大家道歉,我在14楼的回复是错的。是我自己没弄清楚,很抱歉。同时感谢24楼的讲解。
fdsgfdgfdsgfd 2009-02-27
  • 打赏
  • 举报
回复
学习。
exocell 2009-02-26
  • 打赏
  • 举报
回复
妈的这个帖子里的人是搞电脑的吗?好像机械人
devoc 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 antimatterworld 的回复:]
写文件的时候,磁头由于盘片旋转带动空气运动而漂浮在盘片上。
实际上,在内容还没有写完的时候,硬盘已经想操作系统发送了“数据已写完”的信号。这些还没有写完的数据,是保存在硬盘换存中的。随后磁盘会继续写完数据。
如果这时候断电了,盘片由于惯性会继续旋转,磁头会把数据写在盘片外围的“临时数据区”,下次通电的时候,硬盘会把“临时数据区”的内容写在正确的位置上。

如果再断电前,操作系统就没接收到“数据…
[/Quote]
这位兄台说的很有道理!
zhuweiping2003 2009-02-25
  • 打赏
  • 举报
回复
mark
antimatterworld 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 nullw 的回复:]

antimatterworld
如果这时候断电了,盘片由于惯性会继续旋转,磁头会把数据写在盘片外围的“临时数据区”
==问一下,硬盘怎么知道断电的,电源发送电压低的时候,主板已经复位了??
[/Quote]
所谓断电,是指断电的时间达到一定长度。如果断电时间是千万亿分之一秒,我们的电脑基本不受影响。
50Hz的交流电,不是没秒还有100次电压位0的时候吗。
可以在硬盘里加个微型的续电装置,使断电后可以提供微量的电能来完成磁头的写入。
判断电压为零,电路设计上很容易实现。
kerneliahou 2009-02-25
  • 打赏
  • 举报
回复
mark
fly4free 2009-02-25
  • 打赏
  • 举报
回复
我的所有分区,除了特殊情况,都是 一簇 512 字节, 保存小文件省啊~~~~不过格式化需要使用50+MB的不知道干什么的空间(根据分区大小有不同)。
liwei222 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 danxuezx 的回复:]
2楼的说法中有一些是不正确的。虽然操作是以簇为单位的,现在一般一个卷都大于30G,一个簇基本上都是4096B。但是建立一个文件它的大小还是以K为单位的。大家可以试试,在你的盘里建一个文件,往里写一个数据,然后看看文件大小是多少。
[/Quote]

老兄,文件的大小以K为单位是什么意思?
liwei222 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wohow 的回复:]
liwei222说的很有道理,但是不全对。例如在NTFS上,如果一个文件足够小(上限约几百字节,具体数值是多少各位可以自己去验证),它的“文件内容”属性会“常驻”MFT中,因此该文件的簇存储空间可以为0(这种情况下查看文件属性中的占用空间大小是不对的,要直接读取MFT中的“文件记录”才能看到真正的占用空间)

现在的大硬盘都支持基本和扩展的INT13中断来读写硬盘。该API结果参数中有正确读写的扇区个数,因此尽管操作系统以簇…
[/Quote]

我这里讲的是好几年前的理解,那时候还无法找到NTFS的相关资料,我上面所说的主要是FAT类型的分区。文件的属性、权限等附加信息FAT/NTFS/EXT中的存储位置是完全不同的。我估计这几种分区在存储文件内容时都应该是以簇为单位(想想看,对于大分区,如果以扇区为单位,记录文件内容的分配表要多么巨大啊,大家别忘了,文件内容的存放在磁盘上不是顺序的)。至于直接读写扇区,DOS时代就支持啦,WINDOWS 也有直接操作扇区的API,你可以自己写BT的程序,将自己的一些信息保存到指定的扇区,但是这就不是正常的做法啦,应该不在这里讨论。
WillyWonka 2009-02-24
  • 打赏
  • 举报
回复
学习,哈哈
KeSummer 2009-02-24
  • 打赏
  • 举报
回复
磁盘的话是按扇区的,而分区格式是按照簇,但是在写一个扇区,还没写完就停电,这种就很难说了,antimatterworld 说得很有道理诶。。
itspider 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 danxuezx 的回复:]
2楼的说法中有一些是不正确的。虽然操作是以簇为单位的,现在一般一个卷都大于30G,一个簇基本上都是4096B。但是建立一个文件它的大小还是以K为单位的。大家可以试试,在你的盘里建一个文件,往里写一个数据,然后看看文件大小是多少。
[/Quote]

创建1个1byte的文本文件,你在资源管理器里看到的1K,是windows对目录文件(目录是一个特殊的系统文件)中的该文件大小按ceiling函数方式取到的值,以kB为单位。实际上,你右键查看其属性,仍然是一个簇的大小,比如4096字节。

liwei222对FAT文件系统的理解很正确,毋庸置疑。

codesnail 2009-02-24
  • 打赏
  • 举报
回复
FAT16 文件系统一个簇是8个扇区 4KB
codesnail 2009-02-24
  • 打赏
  • 举报
回复
文件系统的读写操作单位是簇。
koc886 2009-02-24
  • 打赏
  • 举报
回复
支持2 楼 liwei222 的
koc886 2009-02-24
  • 打赏
  • 举报
回复
支持2 楼 liwei222 的
加载更多回复(17)

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧