×

《Linux设备驱动开发详解》第8章、Linux设备驱动中的阻塞与非阻塞IO

消耗积分:0 | 格式:rar | 大小:0.49 MB | 2017-10-27

分享资料个

  阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。

  被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程

  在不能进行设备操作时并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。

  驱动程序通常需要提供这样的能力:当应用程序进行 read()、write()等系统调用时,若设备的资源不能

  获取,而用户又希望以阻塞的方式访问设备,驱动程序应在设备驱动的 xxx_read()、xxx_write()等操作中将

  进程阻塞直到资源可以获取,此后,应用程序的 read()、write()等调用才返回,整个过程仍然进行了正确的

  设备访问,用户并没有感知到;若用户以非阻塞的方式访问设备文件,则当设备资源不可获取时,设备驱

  动的 xxx_read()、xxx_write()等操作应立即返回,read()、write()等系统调用也随即被返回。

  阻塞从字面上听起来似乎意味着低效率,实则不然,如果设备驱动不阻塞,则用户想获取设备资源只

  能不停地查询,这反而会无谓地耗费 CPU 资源。而阻塞访问时,不能获取资源的进程将进入休眠,它将

  CPU 资源让给其他进程。

  因为阻塞的进程会进入休眠状态,因此,必须确保有一个地方能够唤醒休眠的进程。唤醒进程的地方

  最大可能发生在中断里面,因为硬件资源获得的同时往往伴随着一个中断。

  代码清单 8.1 和代码清单 8.2 分别演示了以阻塞和非阻塞方式读取串口一个字符的代码。实际的串口

  编程中,若使用非阻塞模式,还可借助信号(sigaction)以异步方式访问串口以提高 CPU 利用率,而这里

  仅仅是为了说明阻塞与非阻塞的区别。

《Linux设备驱动开发详解》第8章、Linux设备驱动中的阻塞与非阻塞IO

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !