当前位置:  技术问答>linux和unix

[内核入门] 关于select和poll的问题

    来源: 互联网  发布时间:2017-05-03

    本文导语:  新手第一次发帖好紧张,也不知道这个问题是不是太浅显了,但是还希望各大牛能帮帮小弟。废话不多说 1.我使用系统调用select去检测是否有设备文件可读,首先运行./monitor 此时打印的信息是,显示无文件可读(因为我还没...


新手第一次发帖好紧张,也不知道这个问题是不是太浅显了,但是还希望各大牛能帮帮小弟。废话不多说

1.我使用系统调用select去检测是否有设备文件可读,首先运行./monitor
此时打印的信息是,显示无文件可读(因为我还没有执行写操作),这个可以理解。
2.说道第一步的monitor,通过printk,发现底层驱动的poll函数被调用了一次,记住仅仅是一次,我使用的dmesg命令查看的,
在这里有个问题。因为我在晚上查阅资料,有人说,隔一段时间会调用一次poll?
3.执行完monitor后,我这边的效果是进入睡眠了,所以我就执行write,写数据进去。此时monitor突然活了,也就是说被唤醒了。因为我在底层的write函数中实现了唤醒操作
这个也没有问题,之后,程序就跑完了。

现在我的理解是:select会去检测一类设备文件,测试其是否可以读写,如果没有则进入休眠,记住如果需要用到它,一定记得唤醒。
如果有设备可读写呢?就不会进入阻塞。那它的优势到底体现在什么地方呢?

这是我不解的地方,上面的理解也不知道有没有错误,还请各位指教!

|
汗。。。别上升到内核级别,你这缺乏应用层经验啊。

没有select/poll,你一样可以在一个线程里处理若干个fd,无非设置成非阻塞,不停的去尝试read/write而已。

但这样的问题就是如果长时间不可读写,你还不停的忙轮询,就是浪费CPU了,所以就发明了select/poll。

具体到实现,select/poll都是走系统调用syscall陷入内核,然后让出cpu挂起,等内核获得相关设备中断后重新schedule恢复select进程的执行。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux内核中影响tcp三次握手的一些协议配置
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 进程内核栈和操作系统内核栈的关系
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • Linux中内核线程不访问内核态地址空间?
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 2.6内核下编译2.4内核
  • linux内核中的likely宏和unlikely宏介绍及用法
  • 谁能提供kgdb内核补丁内核模块的下载
  • CentOS 6.5 下载地址及如何升级内核(kernel)版本到 3.10.28
  • 编译新内核后怎么进入原来内核
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请问linux中如何判断内核是否已经启动。(在内核中写程序)
  • docker使用的技术之Container内核原理介绍
  • 内核模块跟内核版本不匹配????????
  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!!
  • linux为什么要升级内核?升级内核有何作用?
  • 内核升级后,如何在新的内核中加载显卡驱动?
  • 内核源码和结果make过的内核源码有什么区别
  • 不重新编译内核能修改内核函数吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,