第9章 服务器模型-【千锋教育】Linux系统编程(慕课版)

2023-03-21
| 52页
| 124人阅读
| 0人下载
教辅

内容正文:

®干锋教育 第9章服务器模型 ·/O模型 ·TCP文件服务器 ·TCP服务器模型 ·UDP网络聊天室 四目录 9.1 I/O模型 口点击查看本)小节知识架构 9.2 TCP服务器模型 口点击查看本小节知把构 93 TCP文件服务器 口点击查看本小节知识架构 9.4 UDP网络聊天室 口点击查看本小节知识架构 学习目标 理解/O模型的 掌握1/O多路复用的 2 概会 使用方法 理解 掌 握 理解 掌握服务器模型的实 理解服务器模型的 3 现方法 思想 ·本章介绍两个独立的模块,一个是/O模型的思想,另一个是TCP服务器模型。前 半部分是对/O的进一步讨论,前面的章节中已经介绍了/O的各种接口及使用, 本章继续深入讨论/O的几种访问文件的方式,通常称为/O模型。后半部分是针 对TCP编程的进一步讨论,使用TCP编程结合其他技术实现循环或并发服务器模型。 网络编程在实际应用层开发中使用率较高,因此本章在最后结合服务器模型介绍 TCP、UDP的经典编程案例。望读者在理解基础概,念的前提下,熟练编程并加以 应用。 ◆知识架构 9.1/O模型 返回目录 9.1.1 阻塞I/O 9.1.2 非阻塞/O 9.1.3 /O多路复用 9.1.4 信号驱动/O 9.1/O模型 9.1.1阻塞1/0 ·第2章介绍了文件/O这种采用系统调用的方式对文件进行读写操作,这其中涉及 到CPU状态的切换、空间进程的切换以及数据的传递。对于一次/O访问(如 read(函数、write(0函数等)来说,数据会先被复制到操作系统内核的存储区域 中,然后再从操作系统内核的存储区域中复制到应用程序的地址空间。因此,当 一个read(函数操作发生时,通常会经历两个阶段:第一阶段是等待数据准备;第 二阶段是将数据从内核空间中复制给进程。 。 综上所述,阻塞/O就是当用户进程发起一个/O请求操作(以读取为例),内核 将会查看读取的数据是否准备就绪,如果没有准备好,则当前进程被挂起(睡 眠),阻塞等待结果返回。 ·例如,本教材的例9-1,则是一个典型的阻塞/O。 9.1/O模型 9.1.1阻塞1/0 ·如果fgets0函数读取终端输入时,没有输入,则printf(0函数将不会执行。程序将 会在fgets(0函数处一直等待,直到有终端输入为止。 while(1)( fgets(buf,N,stdin); printf("******** "): I/O根据操作对象的不同可以分为内存/O、网络/O和磁盘/O三种,通常情况下, 所指的/O为后两者。例9-1属于磁盘1/O的范畴。在网络1/O(如UDP编程)中, 当用户进程调用recvfrom(O这个系统调用,内核就开始了l/O的第一阶段:准备数 据。对于网络/O来说,很多时候数据在一开始并没有到达,这个时候内核就要等 待足够的数据到来。磁盘/○的情况则是等待磁盘数据从磁盘上读取到内核所访问 的内存区域中。 9.1/O模型 9.1.1阻塞1/0 ·这个过程需要等待,也就是说数据被复制到操作系统内的存储区域是需要一个过 程的。而在用户进程这边,整个进程会被阻塞。当内核等到数据准备就绪,它就 会将数据从内核访问区域中复制到用户进程使用的内存中,之后内核返回结果。 用户进程解除阻塞状态,重新运行。 。 进程调用recvfrom(O阻塞等待的过程如图所示。 位司进洞 内性无粒搭报性备好 reevfroa 系统调用 数摆 航指表准名好 进程处塞于reevfroe 诞制数提根 的调用 特数把从为愤 复制到同户空何 处进数据提 返民成功指示 复制先 9.1/O模型 9.1.2非阻塞1/0 非阻塞/O与阻塞I/O不同的是,当用户进程执行读操作时,如果内核中的数据没 有准备就绪,那么它并不会阻塞用户进程,而是立刻返回一个错误码。从用户进 程角度讲,它发起一个读操作后,并不需要等待,而是马上得到一个结果。用户 进程判断结果是一个错误码时,它就知道数据还没有准备就绪,于是它可以再次 发送读操作。一旦内核中的数据准备好了,并且再次收到用户进程的系统调用请 求,则它会立刻将数据复制到用户进程使用的内存。 ·/O操作函数将不断地测试数据是否已经准备就绪,如果没有准备就绪则继续, 直到数据准备就绪为止。整个/O请求的过程中,虽然用户程序每次发起/O请 求后可以立即返回,但是为了得到数据,仍需要不断地轮询、重复请求,这消耗 了大量的CPU的资源。所以,非阻塞/O的特点是用户进程需要不断的主动询问 内核数据是否准备就绪。在数据复制阶段,用户进程还是阻塞的。 9.1/O模型 9.1.2非阻塞1/0 在套接字编程中,如果设置参数为NONBLOCK(非阻塞,准确为 SOCK NONBLOCK)就是告诉内核,当所请求的/O操作无法完成时,不要将进 程睡眠,「 而是返回一个错

资源预览图

第9章 服务器模型-【千锋教育】Linux系统编程(慕课版)
1
第9章 服务器模型-【千锋教育】Linux系统编程(慕课版)
2
第9章 服务器模型-【千锋教育】Linux系统编程(慕课版)
3
第9章 服务器模型-【千锋教育】Linux系统编程(慕课版)
4
第9章 服务器模型-【千锋教育】Linux系统编程(慕课版)
5
第9章 服务器模型-【千锋教育】Linux系统编程(慕课版)
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。