Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1211582
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2007-12-25 11:25:22

由于缓冲读不确保原子性,因此OS需要文件系统读/写锁确保正在读的文件系统缓冲不会被改变。否则将会返回不一致性的数据。

    

    文件系统读/写锁是一个POSIX请求。在UNIX下称为inode locks,这就是LOCK应用的地方,在Windows NT/2000,则通过在FCB上的ERESOURCE锁实现。这些锁允许并行度,但是排斥写。他们在所有的文件访问中被使用,因为OS不会假设并行读/写不会映射到相同的缓冲。这意味着并行度和写必须进行争夺。

    如,一些Oracle进程正在某个特定文件的读过程中,DBWn必须等待所有这些读完成,然后才能得到文件系统读/写锁以写入文件。即使读写文件的不同部分,也是如此。一旦DBWn得到锁,所有的读也必须等待DBWn完成。类似的,如果一个进程正在执行一个直接写到临时表空间数据文件,那么没有进程可以并行读取或写入文件的其他分区,虽然他们的活动完全没有关系。

    虽然逻辑上只有缓冲i/o会这样,但是读写锁在直接IO上也会产生。理由是如果设备块边界分配请求不能满足,直接IO请求可能需要通过缓冲IO执行。否则,必须使用裸文件或者更快的IO才能避免读/写锁。

阅读(857) | 评论(0) | 转发(0) |
0

上一篇:flashback得简单用法

下一篇:内核异步IO

给主人留下些什么吧!~~