扇区与块的区别
1、硬盘:
最终文件总还是要贮存在硬盘上的嘛。
fdisk -l
Disk /dev/cciss/c0d0: 146.7 GB, 146778685440 bytes
255 heads, 63 sectors/track, 17844 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
能够看到几个名词:heads/sectors/cylinders,别离就是磁头 / 扇区 / 柱面,每个扇区 512byte(当初新的硬盘每个扇区有 4K)了;
硬盘容量就是 headssectorscylinders512=2556317844512=146771896320b=146.7G
留神:硬盘的最小存储单位就是扇区了,而且硬盘自身并没有 block 的概念。
2、操作系统的文件系统
文件系统不是一个扇区一个扇区的来读数据,太慢了,所以有了 block(块)的概念,它是一个块一个块的读取的,block 才是文件存取的最小单位。
先来晓得是哪种文件系统
df -T
/dev/cciss/c0d0p5 ext3 112738028 81733116 25185772 77% /
OK,ext3 文件系统。
tune2fs -l /dev/cciss/c0d0p5 | grep “Block size”
Block size: 4096
一个 block 是 4K,也就是说我所应用的文件系统中 1 个块是由间断的 8 个扇区组成。
简略的说扇区是对硬盘而言,块是对文件系统而言。
块是文件系统的形象,不是磁盘自身的属性。扇区大小则是磁盘的物理属性,它是磁盘设施寻址的最小单元。
Cache 和 Buffer 都是缓存,次要区别是什么?
背景常识一:咱们当初的计算机、手机都是冯诺依曼架构,CPU 只能操作内存中的数据,无奈间接操作硬盘上的数据。
背景常识二:硬盘上的数据,最小读写单位是扇区(Sector)。老式硬盘上一个扇区是 512 字节,古代硬盘上一个扇区是 4K 字节。计算机不能以单个字节为单位拜访硬盘上的数据。当初很常见的固态硬盘,物理上最小读写单位是页(Page),但大部分固态硬盘通过主控芯片模仿传统硬盘的扇区来进行读写。古代硬盘罕用的 LBA(Logical Block Addressing,逻辑块寻址)寻址形式,是把硬盘上的扇区调配从 0~N- 1 的编号(N 为硬盘上所有可用扇区数量)。
Cache,缓存:将迟缓的拜访后果保留下来。
buffer,缓冲:将突发疾速的拜访安稳下来。
cache 是为了补救高速设施和低速设施的鸿沟而引入的中间层,最终起到 放慢访问速度 的作用。
而 buffer 的次要目标进行流量整形,把突发的大数量较小规模的 I/O 整顿成安稳的小数量较大规模的 I/O,以 缩小响应次数(比方从网上下电影,你不能下一点点数据就写一下硬盘,而是积攒一定量的数据当前一整块一起写,不然硬盘都要被你玩坏了)。
1、Buffer(缓冲区)是零碎两端处理速度均衡(从长时间尺度上看)时应用的。它的引入是为了减小短期内突发 I / O 的影响,起到流量整形的作用。比方生产者——消费者问题,他们产生和耗费资源的速度大体靠近,加一个 buffer 能够对消掉资源刚产生 / 耗费时的忽然变动。
2、Cache(缓存)则是零碎两端处理速度不匹配时的一种折衷策略。因为 CPU 和 memory 之间的速度差别越来越大,所以人们充分利用数据的局部性(locality)特色,通过应用存储系统分级(memory hierarchy)的策略来减小这种差别带来的影响。
3、假设当前存储器拜访变得跟 CPU 做计算一样快,cache 就能够隐没,然而 buffer 仍然存在。比方从网络上下载货色,刹时速率可能会有较大变动,但从长期来看却是稳固的,这样就能通过引入一个 buffer 使得 OS 接收数据的速率更稳固,进一步缩小对磁盘的挫伤。
4、TLB(Translation Lookaside Buffer,翻译后备缓冲器)名字起错了,其实它是一个 cache.
read cache(读缓存),read buffer(读缓冲),write cache(写缓存),write buffer(写缓冲)。
read cache(读缓存),read buffer(读缓冲):
读缓存跟读缓冲的最大区别在于,读缓存的指标数据是始终无效的,如果不从缓存中读取,也能够间接读取理论数据,只不过理论数据读取会慢一些,当这个数据在缓存中,读取速度将会变快。当一个缓存中的数据被屡次读取,实际上就缩小了该数据从慢速设施中读取的量,这就存在某种算法去抉择「什么数据须要保留在 cache 中」,因为尽可能多的让 cache 命中能进步性能。先进入 cache 的数据不肯定先被读取,甚至说进入 cache 的数据有可能永远不被读取就被革除了,因而 read cache 呈现出非常明显的随机拜访个性。而读缓冲 buffer 的数据则不是始终无效,而是实时生成的数据流,每当 buffer 满或者被动 flush buffer 的时候触发一次读取,对于小数据,这样能够缩小读取次数,对于大数据,这能够管制单次读取的数据量。换句话说,无论数据量大还是小,单次读取数据量都依照 buffer 尺寸进行归一化了。通常来说,先喂给 buffer 的数据肯定会先被读取,所有 buffer 的数据简直肯定会被读取,这是很显著的程序拜访个性。
从下面的状况看到,读缓存以及读缓冲很明确的反馈出了我所说的外表个性。而其本质个性在于 cache 的指标是缩小读取总量每次 cache 命中都减小了读取总量。而 buffer 并不能缩小读取总量,只能规整化每次读取数据的尺寸大小。
write cache(写缓存),write buffer(写缓冲):
write buffer 是 read buffer 的对应,对于小数据的写入,它须要填满 write buffer 再进行一次写入,对于大数据,大数据会被宰割到 buffer 尺寸的大小分批写入。因而,write buffer 的用途在于使得每次写入的数据量绝对固定。如果一次写入 4k 对某个设施来说效率最高,那么把 buffer 定为 4k,小数据积攒到 4k 写一次,大数据宰割到每个碎片 4k 屡次写入,这样就是 write buffer 的用途。最初咱们来说 write cache。所谓 write cache,就是要设法缩小写入次数。也就是说,如果某些数据须要产生屡次写入,那么应用 cache 就能够只将最终数据写入,导致最终写入数据缩小。在理论利用中,咱们有时会应用到 write buffer 跟 write cache 的合体状态。buffer 自身须要规整尺寸,与此同时,buffer 还容许屡次随机写入,使得屡次写入的数据只用写入最初一次,这属于 cache 的个性。BT 软件应用的写缓存往往具备相似个性,因此这种状态它同时既是 buffer 又是 cache。正因为在写入场合 buffer 跟 cache 没有那么显著的分界,所以才会有产生 buffer 跟 cache 到底有啥区别的疑难。
我的论断:
在 read(读取)的场合,cache 通常被用于缩小反复读取数据时的开销,而 buffer 则用于规整化每次读取数据的尺寸,在读取场合两者用处差异很大。
在 write(写入)的场合,两者性能仍然没变,但因为 cache 跟 buffer 的性能在写入场合能够交融应用,所以两者能够被混同,写入缓冲跟写入缓存往往会同时担当规整化写入尺寸以及缩小写入次数的性能,所以两者有时会被混同,但这只是个名称问题,没有原则性关系。