在系统内存中设置磁盘缓冲区区位于磁盘中还是内存中?

  首先聊这个话题,我们先了解两个函数:
  1.printf函数
  2.write函数
  一.首先了解缓冲区的概念,Linux下的缓冲区分为以下三种:
  1.全缓冲,顾名思义,除非你主动刷新缓冲区,不然只能等到缓冲区满,才能刷新缓冲区。比如写入磁盘。
  2.行缓冲,当遇到'\n'时,刷新缓冲区,比如 C库函数。
  3.无缓冲,接受多少给多少,比如stderr。
  今天主要讲述的是行缓冲,如果想在不使用'\n'的情况下刷新缓存区,有下列手段——
  1.fflush()函数。
  函数原型:int fflush(FILE *stream),在这里的stream就是所要清除缓存区的文件。
  举个很简单的例子,我想模拟实现一个shell界面就会用如下方式:
printf("Myshell$[");
fflush(stdout):
  2.getchar()和scanf()函数。
  当我想要使用键盘与屏幕终端时,printf也会主动刷新缓冲区。
  比如:
  在暂停下,输出毫无反应。
  如果我加入getchar,则会出现如下情况:
  屏幕终端在等待我的键盘输入。同时他也刷新了输出缓冲区。
  需要说明的是,千万不要认为输入输出是同一块缓冲区,虽然可能有该系统存在,但是Linux下并不是这样的。
  3.setbuf()函数。
  函数原型:void setbuf(FILE* stream, char *buf);
  该函数作用就是关闭缓存区并将缓存区指向buf区域。
  看下列代码:
int main(void)
setbuf(stdout,NULL);
printf("hello");
sleep(<span style="color: #);
return <span style="color: #;
  可以看到 在sleep过程中,也就是进程还没结束的时候,stdout缓冲区关闭且无跳转,所以直接输出。
  二.接下来再了解刷新内存内容到磁盘的几大方式:
  write()函数,它与read不同,read是直接系统调用将磁盘中的内容读到内存中。而write仅仅只是将内存中的东西写到磁盘文件的缓冲区中,至于何时将这些内容放入磁盘,得看操作系统的心情——CPU的调度,队列的优先级都是关键。
  当然也会有如下情况,我们意图立即将内容刷新至磁盘,因为可能现在在一个多用户条件下,磁盘内容极有可能马上要被别人获取。
  以下情况会立即刷新数据到磁盘:
  1.exit函数,而非_exit函数,
  exit函数的主要步骤有下面三项:
    1.调用退出处理函数。
    2.刷新输出缓存。
    3.调用_exit函数。
  2.return时。
  这个不用解释,当进程结束,PCB回收,当然会释放文件描述符表中的文件。
  3.缓存区满。
  4.fsync()函数。
  函数原型:int fsync(int fd);//成功返回0,出错返回-1.
  《UNIX高级环境编程》如下简单描述:
阅读(...) 评论()在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
数据从内存要写入磁盘中时,数据会被先写入到磁盘缓冲区,磁盘再从磁盘缓冲区中读取数据写入,磁盘缓冲区是为了平滑不同I/O设备的速度差。
那“内存缓冲区”的作用是什么?node中的内存缓冲区,是不是就是一般所说的“内存缓冲区”?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
应该是这样:数据从内存要写入磁盘中时,数据会被先写入到磁盘缓冲区,磁盘缓冲区满了再把数据写入磁盘。
磁盘缓冲区是为了平滑不同I/O设备的速度差。
是的,磁盘是分区分块存储的。如果是机械硬盘,是分磁道和扇区的。当磁头转到一个扇区的某磁道时,开始读取数据,如果只读取了 100KB 的数据,这时操作系统就想,磁头转到这儿看不容易啊,反正来都来了,顺带多读点数据吧,万一用的着呢。
所以,读取数据的时候也是通过缓冲区的。
题外话:如果应用的数据存放在不同的磁道,不同的扇区,那么读取的效率是很低的,这被称为磁盘碎片,所以 windows 有个操作叫“整理磁盘碎片”。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。请大神帮忙解答一下
磁盘缓冲区是在内存中
还是在那里啊【计算机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:236,480贴子:
请大神帮忙解答一下
磁盘缓冲区是在内存中
还是在那里啊收藏
偶去。。。卤煮这个问题在这里问。。。。磁盘缓冲区在磁盘中,没猜错的话楼主在学操作系统的双缓冲区
登录百度帐号已解决问题
磁盘缓冲区是&&
a.在ROM存储器中建立的一个保留区域
b。读写磁盘文件时用到的内存中的一个区域c 磁盘上存放暂存数据的存储空间
d,上述三者都不对
浏览次数:840
用手机阿里扫一扫
最满意答案
答案是b。磁盘缓冲区是为提高磁盘读写速度,而在内存分配的一个暂存区域。
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok迅雷配置里“磁盘缓冲区设置”里的缓存是哪里的
本回答由提问者推荐
var sogou_ad_id=731547;
var sogou_ad_height=160;
var sogou_ad_width=690;}

我要回帖

更多关于 设置磁盘缓冲区的目的 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信