系统编程 - I/O模型

 

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系统调用来修改其文件状态标志。

 

 

 

 

 

 

 

 

.

 

posted @ 2020-10-11 21:20  一匹夫  阅读(97)  评论(0编辑  收藏  举报