社区
英特尔边缘计算技术
帖子详情
计算机写文件是一个簇为原子操作还是以扇区为原子操作
yuzhouhenan
2009-02-14 08:19:50
加精
小弟遇到一个问题:计算机写文件是一个簇为原子操作还是以扇区为原子操作,也即:当计算机断电的话,操作系统会保证我的一个簇的数据要么写成功要么写失败;还是只能保证一个扇区要么写成功要么写失败。
望高手不吝赐教,最好给出你的论据和参考资料的网址
...全文
1237
38
打赏
收藏
计算机写文件是一个簇为原子操作还是以扇区为原子操作
小弟遇到一个问题:计算机写文件是一个簇为原子操作还是以扇区为原子操作,也即:当计算机断电的话,操作系统会保证我的一个簇的数据要么写成功要么写失败;还是只能保证一个扇区要么写成功要么写失败。 望高手不吝赐教,最好给出你的论据和参考资料的网址
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
操作系统的
文件
系统基础
扇区
是硬盘或其他存储设备上最小的物理存储单元。
一个
扇区
的大小通常为 512 字节 或 4 KB,具体取决于硬盘的格式和设计。簇 是
文件
系统中用于管理磁盘空间的最小分配单元。
一个
簇由
一个
或多个相邻的
扇区
组成,通常是 2 的幂(例如,2
扇区
= 1 KB,4
扇区
= 2 KB,8
扇区
= 4 KB,等)。连续存储:
文件
的所有数据块在磁盘上是连续排列的,没有被其他
文件
的数据块分隔开。这意味着
文件
的第
一个
数据块紧跟着第二个数据块,第二个紧跟第三个,依此类推,直到
文件
的最后
一个
数据块。
单片机 原子性操作_浅谈
原子操作
导读:针对多个对象的
原子操作
,引入事务或者事务内存的概念,实际上的实现要么是
写
日志,要么是依赖于 COW 或加锁的方式,最终依赖于原子指令。作者 | 子札前言所谓
原子操作
,就是要么不做,要么全做。在很多场景中,都有对
原子操作
的需求。在翻 aep 的 spec 文档时,也发现了
一个
巧妙的方法。所以顺便发散性地总结一下各种实现
原子操作
的方法,欢迎大家交流探讨。小粒度——指令根据 intel 手册卷三第...
mysql 原子
写
_深度解读原子
写
– 运维那点事
为大家介绍一下所谓的原子
写
,Atomic Write。一、从
文件
系统删除
文件
说起
文件
删除操作过程比较复杂,如果简化的来讲,可以分为两步:1. 删除该
文件
在
文件
记录表中的条目。2. 将该
文件
之前所占据的空间对应的块在空间追踪bitmap中将对应的bit置0。假设该
文件
的
文件
名非常短,尺寸也非常小,只有不到4KB,那么,上述这两个动作,就可以分别只对应
一个
4K的IO(如果
文件
系统格式化时选择4K的分块...
SQLite的原子提交--单
文件
场景
1. 简介 原子提交(atomic commit)是类似SQLite这样的事务性数据库的
一个
重要特性.原子提交意味着, 在单一的事务中,所有的数据改变或者全部生效或者全部不生效.具有原子提交后, 对于数据库
文件
的不同部分的多个
写
入操作,就好像是同时并且瞬态发生的.但是在硬件层面, 对大容量存储设备的
写
入操作, 以及对
一个
扇区
的
写
操作都是需要一定时间的,因此对
一个
数据库
文件
的多个
扇区
的
写
入操作是不...
[linux] page
写
磁盘并不是原子性
以 page 为单位,向磁盘
写
数据,并不是原子性的,举例说明:
写
线程 writer 每次向磁盘输入
一个
page 的数据量,w1 w2 w3 ... w1 w2 w3 ... 分别代表
一个
page 的数据量 读线程 reader 每次从磁盘读
一个
page 的数据量 操作系统并不保证 writer
写
完整个 page 后,才让当前
写
入的数据整体对 reader 可见 reader 读取
一个
pape 的数据,可能部分来自 w1 部分来自 w2 测试代码如下: package main import
英特尔边缘计算技术
568
社区成员
7,024
社区内容
发帖
与我相关
我的任务
英特尔边缘计算技术
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
复制链接
扫一扫
分享
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章