Linux I/O缓冲
1:两类I/O函数的缓冲机制
1.1 系统调用(System call)
这类代表就是read/write等系统函数,它们是不带缓冲的,这里的缓冲指的是进程缓冲,在内核到磁盘之间还是有内核缓冲的。

1.2 标准I/O
这类代表就是fread/fwrite等函数,它们带有进程缓冲,可移植性强,最后还是通过read/write函数实现的。

2:两种缓冲的作用
首先要了解一下写一条内容到文件中的过程,以标准I/O的fwrite为例,首先将buffer拷贝到进程缓冲区,fwrite函数即刻就返回,标准I/O检查进程缓冲区是否填满,如是,将进程缓冲区内容拷贝至内核缓冲区,内核查看内核缓冲区是否填满,如是,将内核缓冲区内容通过磁盘I/O写入到磁盘块中。
缓冲的主要作用是提高I/O的效率,缓冲分为两种,一种是标准I/O有的进程缓冲,一种就是大家都有的内核缓冲。
进程缓冲(注:系统调用没有此机制):此缓冲是为了防止频繁调用系统调用而设置的,提高了系统调用的效率,因为将数据从用户空间拷贝到内核缓冲区需要进行角色切换,这个过程比较耗时。
内核缓冲:此缓冲是为了防止频繁调用磁盘I/O而设置的,如果没有内核缓冲区,系统调用直接将内容写到磁盘块中会频繁调用磁盘I/O,磁盘I/O的效率是很低的(硬件磁盘多样,且相比于CPU的写入动作来讲超级慢,所以CPU必定会花很多时间等待磁盘的数据录入,造成效率低下),有了内核缓冲区就可以先将数据暂存在这里,达到阈值之后一次性写入到磁盘块中。
那么什么时机会将缓冲的数据进行冲洗呢?
3:冲洗缓冲区
3.1 无缓冲
read/write就是属于无缓冲的,常见的例子就是向stderr输出,会立即输出到终端设备。
3.2 行缓冲
所谓行缓冲就是遇见换行符就会刷新缓冲区将数据输出,如标准输入和标准输出就是遇见换行符就会将数据输入或写入内核。
标准输出:printf("xxxx\n"),默认输出是遇见"\n"就向终端打印,如果是printf("xxxx"),xxxx是留在缓冲区的,直到缓冲区填满或进程退出(退出会调用fflush)才输出到终端。
标准输入:scanf("%d",&d),标准输入在键入换行符之前数据都暂存在内核缓冲区中,直到键入换行符才将内核缓冲区的数据写入到磁盘块中。
3.3 全缓冲
一般的写入磁盘文件都属于全缓冲,一定要等到缓冲区填满才将数据写到文件中。
Linux I/O缓冲的更多相关文章
- Linux禁用显示“缓冲调整”
Linux禁用显示"缓冲调整" youhaidong@youhaidong-ThinkPad-Edge-E545:~$ free -o total used free shared ...
- linux标准IO缓冲(apue)
为什么需要标准IO缓冲? LINUX用缓冲的地方遍地可见,不管是硬件.内核还是应用程序,内核里有页高速缓冲,内存高速缓冲,硬件更不用说的L1,L2 cache,应用程序更是多的数不清,基本写的好的软件 ...
- Linux IO Scheduler(Linux IO 调度器)
每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的request.I/O调度器的基本目的是将请求按照它们对应在块设 ...
- linux IO调度
I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色.他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能.在linux下面列出4种调度算法CFQ (Completely ...
- Linux文件系统性能优化 (转)
http://blog.chinaunix.net/uid-7530389-id-2050116.html 由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍 ...
- linux下proc里关于磁盘性能的参数
我 们在磁盘写操作持续繁忙的服务器上曾经碰到一个特殊的性能问题.每隔 30 秒,服务器就会遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒).后来上网查了一下资料,通过调整内核参数,将写活动的高峰 ...
- linux setsockopt
linux setsockopt Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, ...
- Linux IO 调度器
Linux IO Scheduler(Linux IO 调度器) 每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交 ...
- 在linux系统中I/O 调度的选择
I/O 调度算法再各个进程竞争磁盘I/O的时候担当了裁判的角色.他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能. 在linux下面列出4种调度算法 CFQ (Compl ...
随机推荐
- Linux内核学习笔记(7)--完全公平调度(CFS)
一.完全公平调度算法 完全公平调度 CFS 的出发点基于一个简单的理念:进程调度的效果应该如同系统具备一个理想中的完美多任务处理器.在这种系统中,每个进程能够获得 1/n 的处理器时间(n 为可运行进 ...
- drupal CVE-2018-7600 复现
1.系统环境 Drupal 8.5 linux 主机 ruby 代码 2.原理说明 影响版本 Drupal 6.x,7.x,8.x 参考:CVE-2018-7600漏洞分析 3.利用 在Python2 ...
- GitHub 的简单使用
GitHub 的简单使用 2016-01-28 16:32:481909浏览1评论 一.Git 版本控制器 commit:做一个版本:commit new file:添加到版本中,下边填的是项目的描述 ...
- Beta周王者荣耀交流协会第三次Scrum会议
1.立会照片 成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐. master:王玉玲 2.时间跨度: 2017年11月12日 18:00 — 18:20 ,总计20分钟. 3.地点: 一食 ...
- 团队展示(I know)
一.队员姓名与学号 姓名 学号 组长 陈家权 031502107 赖晓连 031502118 ★ 雷晶 031502119 林巧娜 031502125 庄加鑫 031502147 二.队名 I kno ...
- Alpha冲刺——第七天
Alpha第七天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...
- SGU 181 X-Sequence(一题比较水的求模找规律)
E - X-Sequence Time Limit:500MS Memory Limit:4096KB 64bit IO Format:%I64d & %I64u Submit ...
- java沙盒入门
程序员写一个Java程序,默认的情况下你可以访问任意的机器资源,比如读取,删除一些文件或者网络操作等.当你把程序部署到正式的服务器上,系统管理员要为服务器的安全承担责任,那么他可能不敢确定你的程序会不 ...
- BurpSuite 激活破解
1.下载软件关于Burp Suite, 它是进行Web应用安全测试的一个集成平台,无缝融合各种安全工具并提供全面的接口适配,支持完整的Web应用测试流程,从最初的映射和应用程序的攻击面分析到发现和利用 ...
- Android性能测试工具:Emmagee介绍
简介 Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具.该工具的优势在于如同windows系统性能监视器类似,它提供的是数据采集的功能,而行为则基于用户真实 ...