ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:246.50KB ,
资源ID:2994544      下载积分:15 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-2994544.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(UNIX系统的IO模型.doc)为本站会员(11****ws)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

UNIX系统的IO模型.doc

1、 UNIX 系统的 IO 模型 其实并非原创,只是摘录了 Stevens的大作UNIX 网络编程,写下来,一、加深理解和记忆;二、书是借的,记录一下备忘。感谢臻,借我此书一阅,受益匪浅。6.2 I/O 模型阻塞式 I/O;非阻塞式 I/O;I/O复用;信号驱动式 I/O;异步 I/O;一个输入操作通常包括两个不同的阶段:1) 等待数据准备好;2) 从内核向进程复制数据;对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待分组到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。6.2.1 阻塞式 I/O模型最流行的 I/O模型是阻塞式 I/

2、O(blocking I/O)模型,默认情况下,所有套接字都是阻塞的。以数据报套接字作为例子,我们有如图 6-1所示的情形。图 6-1 阻塞式 I/O模型在图 6-1中,进程调用 recvfrom,其系统调用直到数据报到达且被复制到应用进程的缓冲区中或者发生错误才返回。我们说进程在从调用 recvfrom开始到它返回的整段时间内是被阻塞的。recvfrom 成功返回后,应用进程开始处理数据报。6.2.2 非阻塞式 I/O模型进程把一个套接字设置成非阻塞是在通知内核:当所请求的 I/O操作非得把本进程投入睡眠才能完成时,不要把本进程投入睡眠,而是返回一个错误。非阻塞式 I/O(notblocki

3、ng I/O)模型如图 6-2所示:图 6-2 非阻塞式 I/O模型前三次调用 recvfrom时没有数据可返回,因此内核转而立即返回一个EWOULDBLOCK错误。第四次调用 recvfrom时已有一个数据报准备好,它被复制到应用进程缓冲区,于是 recvfrom成功返回。我们接着处理数据。当一个应用进程像这样对一个非阻塞描述符循环调用 recvfrom时,我们称之为轮询(polling)。应用进程只需轮询内核,以查看某个操作是否就绪。这么做往往耗费大量 CPU时间。6.2.3 I/O复用模型有了 I/O复用(I/O multiplexing),我们就可以调用 select或 poll,阻塞

4、在这两个系统调用中的某一个上,而不是阻塞在真正的 I/O系统调用上。图 6-3概括展示了 I/O复用模型。图 6-3 I/O复用模型我们阻塞于 select调用,等待数据报套接字变为可读。当 select返回套接字可读这一条件时,我们调用 recvfrom把所读数据报复制到应用进程缓冲区。比较图 6-3和图 6-1,I/O 复用并不显得有什么优势,事实上由于使用 select需要两个而不是单个系统调用,I/O 复用还稍有劣势。使用 select的优势在于我们可以等待多个描述符就绪。与 I/O复用密切相关的另一种 I/O模型是在多线程中使用阻塞式 I/O(我们经常这么干)。这种模型与上述模型极为

5、相似,但它并没有使用 select阻塞在多个文件描述符上,而是使用多个线程(每个文件描述符一个线程),这样每个线程都可以自由的调用 recvfrom之类的阻塞式 I/O系统调用了。6.2.4 信号驱动式 I/O模型我们也可以用信号,让内核在描述符就绪时发送 SIGIO信号通知我们。我们称这种模型为信号驱动式 I/O(signal-driven I/O),图 6-4是它的概要展示。图 6-4 信号驱动式 I/O模型我们首先开启套接字的信号驱动式 I/O功能,并通过 sigaction系统调用安装一个信号处理函数。改系统调用将立即返回,我们的进程继续工作,也就是说他没有被阻塞。当数据报准备好读取时

6、,内核就为该进程产生一个 SIGIO信号。我们随后就可以在信号处理函数中调用 recvfrom读取数据报,并通知主循环数据已经准备好待处理,也可以立即通知主循环,让它读取数据报。无论如何处理 SIGIO信号,这种模型的优势在于等待数据报到达期间进程不被阻塞。主循环可以继续执行,只要等到来自信号处理函数的通知:既可以是数据已准备好被处理,也可以是数据报已准备好被读取。6.2.5 异步 I/O模型异步 I/O(asynchronous I/O)由 POSIX规范定义。演变成当前 POSIX规范的各种早起标准所定义的实时函数中存在的差异已经取得一致。一般地说,这些函数的工作机制是:告知内核启动某个操

7、作,并让内核在整个操作(包括将数据从内核复制到我们自己的缓冲区)完成后通知我们。这种模型与前一节介绍的信号驱动模型的主要区别在于:信号驱动式 I/O是由内核通知我们何时可以启动一个 I/O操作,而异步 I/O模型是由内核通知我们 I/O操作何时完成。图6-5给出了一个例子。图 6-5 异步 I/O模型我们调用 aio_read函数(POSIX 异步 I/O函数以 aio_或 lio_开头),给内核传递描述符、缓冲区指针、缓冲区大小(与 read相同的三个参数)和文件偏移(与 lseek类似),并告诉内核当整个操作完成时如何通知我们。该系统调用立即返回,并且在等待 I/O完成期间,我们的进程不被

8、阻塞。本例子中我们假设要求内核在操作完成时产生某个信号。改信号直到数据已复制到应用进程缓冲区才产生,这一点不同于信号驱动 I/O模型。6.2.6 各种 I/O模型的比较图 6-6对比了上述 5中不同的 I/O模型。可以看出,前 4中模型的主要区别在于第一阶段,因为他们的第二阶段是一样的:在数据从内核复制到调用者的缓冲区期间,进程阻塞于 recvfrom调用。相反,异步 I/O模型在这两个阶段都要处理,从而不同于其他 4中模型。图 6-6 5种 I/O模型的比较6.2.7 同步 I/O和异步 I/O对比POSIX把这两个术语定于如下:同步 I/O操作(sysnchronous I/O opetation)导致请求进程阻塞,直到 I/O操作完成;异步 I/O操作(asynchronous I/O opetation)不导致请求进程阻塞。根据上述定义,我们的前 4种模型-阻塞式 I/O模型、非阻塞式 I/O模型、I/O复用模型和信号驱动 I/O模型都是同步 I/O模型,因为其中真正的 I/O操作(recvfrom)将阻塞进程。只有异步 I/O模型与 POSIX定义的异步 I/O相匹配。由东莞搬迁公司 东莞搬家公司 东莞搬运公司 东莞搬厂 东莞搬家公司 东莞搬家公司 东莞搬家公司 东莞搬家公司 整理

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。