谁能帮我理解一下这段话!

为当前最终发行版之前的所有版本提供支持
回复
头像
greencoral
帖子: 147
注册时间: 2006-06-27 23:34
送出感谢: 0
接收感谢: 0

谁能帮我理解一下这段话!

#1

帖子 greencoral » 2007-06-23 15:51

不大理解,谁能帮我通俗的讲解一下!
什么是异步呢?举例来说:『当系统读取了某一个档案,则该档案所在的 区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中,若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变,而且在缓冲区当中的区块数据会被标记为” Dirty “,这个时候磁盘实体区块尚未被修正!所以亦即表示,这些” Dirty “区块的数据必需回写到磁盘当中,以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。』
http://gslinux.blog.sohu.com/
我的linux博客,希望大家多多指点!
stevenlee008
帖子: 30
注册时间: 2007-02-02 15:18
来自: 上海
送出感谢: 0
接收感谢: 0

#2

帖子 stevenlee008 » 2007-06-23 16:19

就是说,在你进行文件的读写操作的时候,系统并不直接对磁盘进行读写,而是在第一次访问的时候把文件读到内存缓冲区(或虚拟/交换内存)中,当你再次访问文件的时候,系统就不再读取磁盘了,而是读取内存(或虚拟/交换内存)中所对应的那个地址。同样,写操作的时候,也不是直接写磁盘,而是写对应的内存(或虚拟/交换内存)。这样做的好处是加快了文件读写的速度。只有在你退出系统的时候,才将对应的内存(或虚拟/交换内存)写入磁盘。

也就是说你内存(或虚拟/交换内存)中的数据与磁盘中的数据是不同步的。所以在Linux中拨出移动存储设备中一定要卸载设备,不然数据的修改是无效的。

你也可以通过执行sync命令来进行数据同步。
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40
送出感谢: 4 次
接收感谢: 2 次

#3

帖子 ubuntu777 » 2007-06-23 16:32

电脑由cpu 内存 还有硬盘组成。这个知道吧?

当要cpu要处理硬盘上面的数据的时候,要预先把数据读到内存里面,然后再由内存提供给cpu进行处理。

这样cpu在处理硬盘上面的数据的时候,其实不用读硬盘了。就使用内存里面对应的数据就行了。反正是从硬盘里面读出来的,都一样。不过当cpu修改这些数据的时候。那先修改内存里面的数据。内存里面的数据修改了。可是对硬盘做没做操作?不知道。一关电源,内存里面的数据就会消失。那修改就白做了。
如果cpu一修改内存里面的数据,马上相应的就对硬盘也做一个修改操作。就是同步了。即使断电了,反正硬盘上的数据已修改。就没关系。
如果异步,修改内存里面的数据时不马上对硬盘进行操作。只是在内存里面标记一下,这些数据还没有写到硬盘上面。可能在最后统一等所有的修改完成再对硬盘进行写操作。这就是异步了。
在异步的时候,你改变硬盘的数据的时候,其实计算机还没改真正硬盘上的数据。它改硬盘数据的时间和修改内存里面对应的数据块的时间是不同步的。可能这就是为什么叫做异步的原因吧。
头像
rhfcaesar
帖子: 2996
注册时间: 2005-11-17 15:45
来自: 湖北
送出感谢: 0
接收感谢: 1 次

#4

帖子 rhfcaesar » 2007-06-23 16:33

要是都像ls这样写教科书就好了。
antiar
帖子: 10
注册时间: 2007-06-08 14:36
送出感谢: 0
接收感谢: 0

#5

帖子 antiar » 2007-06-23 17:26

恩~一定是会等到要关机的时候才会对硬盘上的原始数据进行写操作么(如果有改动的话)?
如果都等到关机时候才将改动的数据写入硬盘,这样应该会有一些缺点的吧。
头像
greencoral
帖子: 147
注册时间: 2006-06-27 23:34
送出感谢: 0
接收感谢: 0

#6

帖子 greencoral » 2007-06-23 18:16

谢谢我想我明白了
但是有个问题,如果累及了很多又都要到关机的时候再修改的话
那么不是要消耗掉很大的内存而且关机速度不是变的得超级慢吗?
http://gslinux.blog.sohu.com/
我的linux博客,希望大家多多指点!
头像
greencoral
帖子: 147
注册时间: 2006-06-27 23:34
送出感谢: 0
接收感谢: 0

#7

帖子 greencoral » 2007-06-23 18:27

在linux里面是如何实现的呢?
比如:
我修改一个文件名为“123”内容为“A”的文本文档,把它改成“AB”
当我修改的时候,硬盘里面的数据还没有被修改,然后我关闭文件“123”
此时硬盘里面依然没有被修改吗?
然后我读取“123”内容为“AB”这个时候读出来的内容是直接从内存里面调用出来的?
这样,如果有大量的数据不断的累及,一直到关机的时候再处理的话,
那么关机速度不是要非常的满(系统要处理完才能关机)
而且内存消耗也是相当大的呀!
http://gslinux.blog.sohu.com/
我的linux博客,希望大家多多指点!
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

#8

帖子 BigSnake.NET » 2007-06-23 18:38

我修改一个文件名为“123”内容为“A”的文本文档,把它改成“AB”
当我修改的时候,硬盘里面的数据还没有被修改,然后我关闭文件“123”
此时硬盘里面依然没有被修改吗?

看情况而定

然后我读取“123”内容为“AB”这个时候读出来的内容是直接从内存里面调用出来的?

看情况而定

这样,如果有大量的数据不断的累及,一直到关机的时候再处理的话,
那么关机速度不是要非常的满(系统要处理完才能关机)

不是的..隔一段时间就刷到硬盘上

而且内存消耗也是相当大的呀!

其他程序需要分配内存时自动会调整...内存是买来使用的,不是买来空闲的
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
ubuntu777
帖子: 249
注册时间: 2007-03-28 18:40
送出感谢: 4 次
接收感谢: 2 次

#9

帖子 ubuntu777 » 2007-06-23 21:14

linux怎么实现的我不知道。

不过通常是等cpu空闲的时候就把修改写到硬盘上了。

你修改一个小文档。不怎么占用cpu。可能马上就修改到硬盘上了。

如果是程序要通过占用大量的cpu资源进行处理数据。就可能等到cpu空闲的时候再写到硬盘上。

比如你玩一个大型的游戏。你的游戏数据,得分,过关数,使用的武器等等都要从硬盘上读取,然后保存到硬盘上。但是由于游戏本身很由cpu资源。不停地读写硬盘,硬盘灯闪来闪去就会影响游戏运行的流畅。
那么在游戏进行得很激烈的时候,它只是在内存中预读了这些硬盘数据的区域读写操作。从内存读写出数据的速度比从硬盘快很多。比如你要在游戏中调用某一过去的纪录。它直接就在内存中找到这些数据。在游戏过程中你要保存这些游戏进度,它也只是把新进度数据在内存中进行修改。等cpu空闲下来的时候再把这些内容真正地写到硬盘上面。

说是最后修改。不是指关机。而是指cpu优先处理其它指令的运行。等其它的指令和数据处理完了,空闲下来再进行写磁盘的操作。
头像
greencoral
帖子: 147
注册时间: 2006-06-27 23:34
送出感谢: 0
接收感谢: 0

#10

帖子 greencoral » 2007-06-23 22:57

谢谢各位耐心的讲解,
我已经完全明白了!
http://gslinux.blog.sohu.com/
我的linux博客,希望大家多多指点!
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星
送出感谢: 1 次
接收感谢: 0

#11

帖子 xhy » 2007-06-24 11:20

当块设备的数据被修改时 内核设置缓冲区中该数据块的PG_dirty标志
早期的内核有一个bdflush线程 负责定期扫描标记为PG_dirty的数据块 并且将他们写入块设备
还有一个kupdate内核线程负责保证没有很长时间得不到刷新的数据块
2.6的内核有一个pdflash线程 完成类似的事情

36 /*
37 * The pdflush threads are worker threads for writing back dirty data.
38 * Ideally, we'd like one thread per active disk spindle. But the disk
39 * topology is very hard to divine at this level. Instead, we take
40 * care in various places to prevent more than one pdflush thread from
41 * performing writeback against a single filesystem. pdflush threads
42 * have the PF_FLUSHER flag set in current->flags to aid in this.
43 */



65 /*
66 * The pdflush thread.
67 *
68 * Thread pool management algorithm:
69 *
70 * - The minimum and maximum number of pdflush instances are bound
71 * by MIN_PDFLUSH_THREADS and MAX_PDFLUSH_THREADS.
72 *
73 * - If there have been no idle pdflush instances for 1 second, create
74 * a new one.
75 *
76 * - If the least-recently-went-to-sleep pdflush thread has been asleep
77 * for more than one second, terminate a thread.
78 */
目前负债150多万
回复

回到 “老旧版本支持”