系统编程-文件IO-IO处理方式
2024-10-09 20:16:32
I/O处理五种模型
*** 阻塞I/O模型
*** 非阻塞I/O模型
*** I/O多路转接模型
*** 信号驱动I/O模型
当数据报准备好的时候,内核会向应用程序发送一个信号,进程对信号进行捕捉,并且调用信号处理函数来获取数据报。
该模型分为两个阶段:
1.数据准备阶段:未阻塞,当数据准备完成之后,会主动的通知用户进程数据已经准备完成,对用户进程做一个回调。
2.数据拷贝阶段:阻塞用户进程,等待数据拷贝。
*** 异步I/O模型
同步和异步是针对应用程序和内核交互而言的;
同步是用户进程触发IO操作并等待或轮询的去查看是否就绪;
异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知,这需要CPU支持。
类比一下,将异步I/O模型类比为叫外卖:
此时科技已经非常发达,外卖机器人将外卖自动送达并转换成营养快速注入我的体内,同时还能得到口感的满足。
注入结束后,机器人会提醒我注入完毕。
在这个期间我可以放心大胆的做其他事情,甚至注射的时候也不需要停下来!
即用户进程发起系统调用后,立刻就可以开始去做其他的事情,然后直到I/O数据准备好并复制完成后,内核会给用户进程发送通知,告诉用户进程操作已经完成了。
1.异步I/O执行的两个阶段都不会阻塞读写操作,由内核完成。
2.完成后内核将数据放到指定的缓冲区,通知应用程序来取。
小实验
非阻塞小实验 - 思路
* 使用open打开文件时,设置O_NONBLOCK文件状态标志。
* 对于已经打开的文件, 则使用fcntl系统调用来修改其文件状态标志。
.
最新文章
- odoo种种
- 朴素贝叶斯算法下的情感分析——C#编程实现
- 获取documents、tmp、app、Library的路径的方法
- [Dynamic Language] 用Sphinx自动生成python代码注释文档
- .Net Web项目安装包制作 (一)
- NTKO Officecontrol在线Word编辑器的使用
- Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统)
- hdu 1022 Train Problem I 解题报告
- MySQL主备停机步骤与注意事项
- AsyncTask下载网络图片
- mysql中不同事务隔离级别下数据的显示效果--转载
- js实现键盘操作对div的移动或改变-------Day43
- Dropbox 用什么语言开发的?(Python在各个平台都是全能的,特别是有PyObjC真没想到)
- 【SICP感应】1 工艺和替代模式
- cddiv/数组维护
- mysql5.6 主从复制
- Objective-C与Java类的一些区别
- 筛选最小值---verilog
- codeforces439B
- 数据正规化 (data normalization) 的原理及实现 (Python sklearn)
热门文章
- 避免nullpointer 空指针
- 关于`ClawHub的技术分享`公众号
- iptables防火墙说明即使用
- Iterator泛型指针
- 自定义AQS独占模式下的同步器来实现独享锁
- oracle数据处理之逻辑备份与恢复
- loadrunner跑场景时报错Full MDB file. New error messages will be ignored
- [LeetCode]621. 任务调度器(贪心)
- Scala的递归函数应用
- JS中call()、apply()、bind()的用法