linux文件传输阻塞了,Linux 中的read系统调用到底是阻塞还是非阻
满意答案
dynofatcat
2018.02.02
采纳率:59% 等级:10
已帮助:1269人
所谓阻塞,即当内核发现请求条件不满足时(可能需要产生IO)将调用进程挂起,让出CPU给需要的进程执行,提高效率,调用者进程被阻塞至条件满足时再被唤醒。
我们来深入跟踪read/write系统调用,因为Linux内核中对文件的读写采用了缓存,文件数据按照页面(默认大小为4096字节)为单位缓存在内存中,对于read系统调用,内核会根据应用程序发出的读偏移在缓存中查找所读位置对应的缓存页面是否存在,如果存在,那么万事大吉,只需将数据从缓存页面copy至用户缓冲区即可,但如果此页面尚未被缓存,那么没有别的办法,只能从磁盘上读出该页面数据并缓存在内存中,所谓的读过程,其实文件系统所需做的只是锁定页面,然后构造一个读请求,并将请求发送给底层的IO子系统即可。文件系统发送完请求并不代表该页面已经从磁盘中读出,如果此时read系统调用返回,那就意味着该调用是非阻塞,不等IO完成即返回至调用者,但阅读内核代码发现,文件系统在发送完IO请求后并不立即返回,而是在接下来的流程中去尝试锁定该读页面,因为在前面文件系统发IO请求时页面已经被锁定,因此,如果页面尚未被读出的话,此时锁定的话必然会阻塞,至此,我们就清楚了Linux内核中的read系统调用默认实现是阻塞方式。
00分享举报
linux文件传输阻塞了,Linux 中的read系统调用到底是阻塞还是非阻相关推荐
- window linux传输工具,window与linux文件传输工具,linux文件传输
window与linux文件传输工具,linux文件传输 window与linux文件传输工具 [一般用于SecureCRT ssh中使用] 法一:直接用yum安装lrzsz(推荐) yum inst ...
- linux文件传输限制带宽,linux – 如何限制CentOS服务器上传/下载带宽?
我在这里为你添加脚本代码时遇到了麻烦,可以通过这个要点获得 – https://gist.github.com/akrasic/7242498#file-limit-tc-sh 该脚本使用TC和Hie ...
- linux下测试ftp传输,linux下ftp命令使用详解---linux文件传输ftp命令
linux下ftp命令使用详解---linux文件传输ftp命令 上一篇 / 下一篇 2010-12-18 09:15:35 / 个人分类:Linux ftp(file transfer proto ...
- linux pscp 上传_Pscp实现Linux文件传输
Pscp 是 putty 安装包所带的远程文件传输工具,可以在Putty官方下载.使用和 Linux 下 scp 命令相似. 具体的使用 方法如下: PSCP 和 SCP 功能相同,在 windows ...
- linux文件的权限模式,Linux文件权限和访问模式
为了更加安全的存储文件,Linux为不同的文件赋予了不同的权限,每个文件都拥有下面三种权限: 所有者权限:文件所有者能够进行的操作 组权限:文件所属用户组能够进行的操作 外部权限(其他权限):其他用户 ...
- Linux文件关联详解 linux 修改默认文件关联打开程序
linux 修改默认文件关联打开程序 从总体上讲 /etc/gnome/defaults.list 保存了全局的打开方式 /.local/share/applications/mimeapps.lis ...
- linux文件权限对应数字,linux文件权限更改命令chmod及数字权限
chmod -change file mode bits :更改文件权限 chmod是用来改变文件或者目录权限的命令,但只有文件的属主和超级用户(root)才有这种权限. 更改文件权限的2种方式: 一 ...
- Linux文件的rwx含义,Linux文件权限rwx简单了解
Ⅰ 了解Linux下的文件权限 如上图所示,ll命令详细展示当前目录下的文件或者子目录信息 红框标注的即为此文件或者目录的权限 [第一行文件10.c的权限以-开头,用来说明这是一个文件:第四行cod ...
- android 传输视频文件,如何将音视频文件传输到安卓设备中
如何将音视频文件传输到安卓设备中 万兴优转与Android设备完全兼容,并且可以通过几个鼠标剪辑轻松地将媒体文件传输到Android智能手机或平板电脑上. 你所需要做的就是,在你的电脑上获取视频,将你 ...
- 一步一步做一个linux文件传输软件(一)
曾经在linux上实现过一个文件传输软件,客户端可以向服务器一次传输多个文件或者图片,并且在客户端可以看到文件传输的进度. 功能非常简单,但是涉及到的知识挺多的:GDB的调试:socket编程:多线程 ...
最新文章
- ICLR2020 | CS-GNN:用平滑度刻画图信息的使用
- 数据中心网络架构 — 传统数据中心网络 — 胖树型三层网络架构
- 落地华东总部、上线创新云、签约AIoT产业基金……京东云南京“新动作”
- Touch the AppCache manifest file
- python平方数迭代器_Python三大神器之迭代器详解
- 第二个冲刺周期第二天
- Spring集成PageHelper的简单用法
- k3服务器端的虚拟,k3服务器 客户端配置
- 结对项目——数独扩展
- java 创建Reader_java – 最佳实践:为XMLReader创建SAX解析器
- sklearn之KNN详解+GridSearchCV使用方法
- SpringMVC中解决POST和GET请求中文乱码问题
- 用命令行安装IIS(pkgmgr版)
- MySQL基础知识,入门必备
- PDF所有目录的页码全部变为“错误!未定义书签!”
- 腾讯云服务器443端口无法访问
- 【网络特效】12 个炫酷背景特效库
- 解决win10部分程序文本乱码,亲测有效
- java飘落的雪花_[Java教程]树叶飘落、雪花飘落等同时多个图片飘落
- MFC之CFile读取和写入文件
热门文章
- datatable的数据进行组内排序_极客算法训练笔记(六),十大经典排序之希尔排序,快速排序...
- finalize()与PhantomReference学习笔记
- struts2初步学习路线
- ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
- 使用 Vim 的 jump list 看代码
- lamp搭建wordpress后升级安装主题,提示输入ftp账号密码
- Win10 镜像安装到新固态硬盘两法
- 【云计算】docker registry v2简介
- 使用Water-Scrum-Fall交付软件
- 新手指南: 手把手教你安装 Ubuntu 和 Fedora