嵌入式系统原理与技术课件:Chap6 linux IO-1.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统原理与技术课件:Chap6 linux IO-1.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统原理与技术课件:Chap6 linux IO-1 嵌入式 系统 原理 技术 课件 Chap6 IO
- 资源描述:
-
1、6C H A P T E RLinux IO目录q同步/异步、阻塞/非阻塞的概念qLinux IO 模型n1 同步与异步u同步:一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。 要么成功都成功,失败都失败,两个任务的状态可以保持一致。同步/异步、阻塞/非阻塞n异步:不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。 至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列。n消息通知消息通知 当一个同步调用发出后,调用者要一直等待返回消息
2、(结果)通知后,才能进行后续的执行;当一个异步过程调用发出后,调用者不能立刻得到返回消息(结果)。 实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。n去银行办理业务,可能会有两种方式: 选择排队等候; 另种选择取一个小纸条上面有我的号码,等到排到我这一号时由柜台的人通知我轮到我去办理业务了;(排队等候)就是同步等待消息通知,也就是我要一直在等待银行办理业务情况;(等待别人通知)就是异步等待消息通知。 在异步消息处理中,等待消息通知者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在所等待的事件被触发时由触发机制(在这里是柜台的人)通过某种机制(在这里是写在小纸条上的
3、号码,喊号)找到等待该事件的人。2 阻塞与非阻塞阻塞与非阻塞n 阻塞和非阻塞这两个概念与程序(线程)等待消息通知(无所谓同步或者异步)时的状态有关。n 阻塞与非阻塞主要是程序(线程)等待消息通知时的状态角度来说的。n阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。函数只有在得到结果之后才会返回。 非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。系统的线程切换增加阻塞调用和同步调用n对于同步调用来说,很多时候当前线程可能还是激活的,只是从逻辑上当前函数没有返回而已,此时,这个线程可能也会处理其他的消息。n对
4、于阻塞调用来说,则当前线程就会被挂起等待当前函数返回;n同步阻塞、同步非阻塞:n 如果这个线程在等待当前函数返回时,仍在执行其他消息处理,那这种情况就叫做同步非阻塞;n如果这个线程在等待当前函数返回时,没有执行其他消息处理,而是处于挂起等待状态,那这种情况就叫做同步阻塞;n同步的实现方式会有两种:同步阻塞、同步非阻塞; 同理,异步也会有两种实现:异步阻塞、异步非阻塞;进程切换进程切换n保存处理机上下文,包括程序计数器和其他寄存器。n更新PCB信息。n把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。n选择另一个进程执行,并更新其PCB。n更新内存管理的数据结构。n恢复处理机上下文。注:
5、总而言之就是很耗资源文件描述符文件描述符fdn文件描述符(File descriptor)是用于表述指向文件的引用的抽象化概念。n文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。n在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。缓存缓存 IOn缓存 IO 又被称作标准 IO,大多数文件系统的默认 IO 操作都是缓存 IO。n在 Linux 的缓存 IO 机制中,操作系统会将
6、IO 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。Linux IO模型模型n对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。n当一个read操作发生时,它会经历两个阶段: 第一阶段:等待数据准备 第二阶段:将数据从内核拷贝到进程中n对socket流, 第一步:通常涉及等待网络上的数据分组到达,然后被复制到内核的某个缓冲区。 第二步:把数据从内核缓冲区复制到应用进程缓冲区。 网络应用需要处理的
7、无非就是两大类问题,网络IO,数据计算。相对于后者,网络IO的延迟,给应用带来的性能瓶颈大于后者。Linux IO的模型:n同步模型(synchronous IO)n阻塞IO(blocking IO)n非阻塞IO(non-blocking IO)n多路复用IO(multiplexing IO)n信号驱动式IO(signal-driven IO)n异步IO(asynchronous IO) signal driven IO在实际中并不常用n基本 Linux IO 模型的简单矩阵n同步阻塞同步阻塞 IO(blocking IO) 同步阻塞 IO 模型是最常用的一个模型,也是最简单的模型。在linu
8、x中,默认情况下所有的socket都是blocking。它符合人们最常见的思考逻辑。 阻塞就是进程 被 休息, CPU处理其它进程去了。n调用recv()/recvfrom()函数时,发生在内核中等待数据和复制数据的过程 2.1.3 流程描述流程描述blocking IO的特点就是在IO执行的两个阶段都被blockn用户进程调用了recv()/recvfrom()这个系统调用:n第一个阶段: kernel准备数据这个过程需要等待,也就是说数据被拷贝到操作系统内核的缓冲区中是需要一个过程的。而在用户进程这边,整个进程会被阻塞(当然,是进程自己选择的阻塞)。n第二个阶段:当kernel一直等到数据
9、准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来。blocking IO的特点n优点: 能够及时返回数据,无延迟; 对内核开发者来说这是省事;n缺点: 对用户来说处于等待就要付出性能的代价;n同步非阻塞同步非阻塞 IO(nonblocking IO)n同步非阻塞就是 “每隔一会儿” 的轮询(polling)方式。在这种模型中,设备是以非阻塞的形式打开的。这意味着 IO 操作不会立即完成,read 操作可能会返回一个错误代码,说明这个命令不能立即满足(EAGAIN 或 EWOULDBLOCK)。n网络同步非阻塞同步非阻塞
10、 IO 在网络IO时候,非阻塞IO也会进行recvform系统调用,检查数据是否准备好,与阻塞IO不一样,”非阻塞将大的整片时间的阻塞分成N多的小的阻塞, 所以进程不断地有机会 被 CPU光顾”。 轮询检查内核数据,直到数据准备好,再拷贝数据到进程,进行数据处理。 轮询:非阻塞的recvform系统调用调用之后,进程并没有被阻塞,内核马上返回给进程,如果数据还没准备好,此时会返回一个error。进程在返回之后,可以干点别的事情,然后再发起recvform系统调用。重复上面的过程,循环往复的进行recvform系统调用。 n在linux下,non-blocking socket读操作流程n当用户
展开阅读全文