(精选)网络应用程序设计(方敏 西电版)第7章 阻塞式非阻塞式课件.ppt

(精选)网络应用程序设计(方敏 西电版)第7章 阻塞式非阻塞式课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
演示文稿演讲PPT学习教学课件医学文件教学培训课件

第7章 阻塞式/非阻塞式I/O ;7.1 I/O模型 ; (2) 等待态:进程在等待一个事件的发生或某种系统资源。这种状态又分为两个类型:可中断型和不可中断型。可中断型等待进程可以被某一信号中断,而不可中断型等待进程将一直等待硬件状态的改变。 (3) 停止态:进程已经被停止,如正被调试的程序。 (4) 死亡态:进程已经被终止,释放掉了曾经占用的程序、数据及堆栈空间,只是还在进程向量表中占有一个task_struct结构。; Linux系统使用时间片的调度算法,每个当前进程在占用CPU一个时间片后就被挂起,另一个处于运行队列的进程将占用CPU。如果当前进程需要等待其他的系统资源,而这个进程又不是非阻塞类型进程时,则它将转入等待状态;如果这个进程是非阻塞进程,则它将仍处于运行态。处在等待队列的进程,如果发生信号中断或硬件状态改变,则这个进程将转变为可运行状态。 一个包含阻塞式套接字函数的进程被启动后,它将处于可运行状态,在成为当前进程时,如果调用了connect()、read()、write()等函数,进程需要等待足够的缓存区或通信对方的响应,这些要求常常不能立刻得到满足,于是进程转换到等待状态,产生阻塞。这种阻塞一直持续到函数需求得到满足、得到通信对方的响应、被信号中断或发生系统故障。;图7-1 网络接口内核程序的层次结构示意图; socket函数中能够产生阻塞的有四类: (1) 数据发送:包括sendmsg()、sendto()、send()、write()和writev()。 (2) 数据接收:包括revvmsg()、recvfrom()、recv()、read()和readv()。 (3) 建立连接:connect()。 (4) 接受连接:accept()。 这些函数有些是套接字所特有的,如sendto()和connect()等,有些是通用的文件操作函数,如write()和read()。在内核代码socket.c中,套接字特有的函数对应的系统调用函数名称是在套接字函数名称前面加sys_,即存在表7-1的对应关系。;表7-1 套接字函数与内核函数名称的对应关系; 通用的文件操作函数在socket.c中也通过以下一个结构,被映射为套接字的操作函数,源代码如下: 通用的文件操作函数在socket.c中也通过以下一个结构,被映射为套接字的操作函数,源代码如下: 114 static struct file_operations socket_file_ops = { 115 llseek: no_llseek, 116 read: sock_read, 117 write: sock_write, 118 poll: sock_poll, 119 ioctl: sock_ioctl,; 120 mmap: sock_mmap, 121 open: sock_no_open, 122 release: sock_close, 123 fasync: sock_fasync, 124 readv: sock_readv, 125 writev: sock_writev, 126 sendpage: sock_sendpage 127 }; ; 当我们在用户程序中调用read()函数时,内核就调用sock_read()函数;当我们在用户程序中调用sendto()函数时,内核就调用sys_sendto()函数。其他函数的调用情况可依此类推。 现在来看sys_sendmsg()函数,它的部分源代码如下: 1343 asmlinkage long sys_sendmsg(int fd, struct msghdr *msg, unsigned flags) 1344 { 1345 struct socket *sock; 1346 char address[MAX_SOCK_ADDR]; 120 mmap: sock_mmap, 121 open: sock_no_open ; 122 release:

文档评论(0)

youngyu0329 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档