内核缓冲技术

1、缓冲区的大小对性能的影响

缓冲区的大小对性能有很大的影响,对文件操作而言,来看一个2500字节的文件的copy操作,如果缓冲区大小=100字节,那么需要25次read和25次write,如果缓冲区大小=1000字节,那么需要3次read和3次write,把缓冲区从100字节增加到1000字节会使系统调用次数从50次减少到6次。read和write这些系统调用是需要时间的,程序中频繁的系统调用会降低程序的运行效率。

2、为什么系统调用需要很多时间

用户进程位于用户空间,内核位于系统空间,磁盘只能被内核直接访问。程序cp1要读取磁盘上的数据只能通过系统调用read,而read的代码在内核中,所以当read调用发生时,执行权会从用户代码转移到内核代码,执行内核代码是需要时间的。

系统调用的开销大不仅仅是因为要传输数据,当运行内核代码时,CPU工作在管理员模式,这对应于一些特殊的堆栈和内存环境,必须在系统调用时建立好。系统调用结束后,CPU切换到用户模式,必须把堆栈和内存环境恢复成用户程序运行时的状态,这种运行环境的切换要消耗很多时间。所以要尽可能地减少模式间的切换。对系统来说这种时间上的开销是昂贵的。内核缓冲技术就可以减少模式间的切换。

3、内核缓冲技术

应用缓冲技术对提高系统的效率是很明显的,它的主要思想是一次读入大量的数据放入缓冲区,需要的时候从缓冲区取得数据。

管理员模式和用户模式之间的切换需要消耗时间,相比之下,磁盘的IO操作消耗的时间更多,为了提高效率,内核也使用缓冲技术来提高对磁盘的访问速度。

正如utmp文件是用户登录记录的集合,磁盘是数据块的集合,内核会对磁盘上的数据块做缓冲,就像who程序缓冲utmp记录一样,内核将磁盘上的数据块复制到内核缓冲区中,当一个用户块间中的进程要从磁盘读数据时,内核一般不直接读磁盘,而是将内核缓冲区中的数据复制到进程的缓冲区中。

当进程所要求的数据块不在内核缓冲区时,内核会把相应的数据块加入到请求数据列表中,然后把该进程挂起,接着为其他进程服务。一段时间之后(很短),内核把相应的数据块从磁盘读到内核缓冲区,然后再把数据复制到进程的缓冲区中,最后唤醒被挂起的进程。

理解内核缓冲技术的原理有助于更好地掌握系统调用read和write,read会把数据从内核缓冲区复制到进程缓冲区,write把数据从进程缓冲区复制到内核缓冲区,它们并不等价于数据在内核缓冲和磁盘之间的交换。

应用内核缓冲技术导致的结果:

  • 提高磁盘IO效率
  • 优化磁盘的写操作
  • 需要及时地将缓冲数据写入磁盘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值