博客园  :: 首页  :: 联系 :: 管理

2013年5月9日

摘要: select 实现分析 –2 【整理】l select相关的结构体比较重要的结构体由四个:struct poll_wqueues、struct poll_table_page、struct poll_table_entry、struct poll_table_struct。每一个调用select()系统调用的应用进程都会存在一个struct poll_wqueues结构体,用来统一辅佐实现这个进程中所有待监测的fd的轮询工作,后面所有的工作和都这个结构体有关,所以它非常重要。struct poll_wqueues { poll_table pt; struct poll_table_page 阅读全文

posted @ 2013-05-09 21:43 Apprentice89 阅读(8227) 评论(3) 推荐(2) 编辑

摘要: 等待队列 正如list_head结构那样,等待队列(wait queue)作为linux内核中的基础数据结构,与进程调度紧密结合在一起;在驱动程序中,常常使用等待队列来实现进程的阻塞和进程的唤醒。因此,我们很有必要对它的内部实现进行分析。 0.数据结构 一般我们的链式线性表都会有一个头结点,以使我们迅速找到这个线性链表的“领导”。在等待队列中,同样有队列头,只不过等待队列头和普通的等待队列结... 阅读全文

posted @ 2013-05-09 18:55 Apprentice89 阅读(3012) 评论(0) 推荐(0) 编辑

摘要: select源码结构图:源码分析:#undef __NFDBITS#define __NFDBITS (8 * sizeof(unsignedlong))#undef __FD_SETSIZE#define __FD_SETSIZE 1024#undef __FDSET_LONGS#define __FDSET_LONGS (__FD_SETSIZE/__NFDBITS)typedefstruct { unsignedlongfds_bits [__FDSET_LONGS]; //1024个bit。} __kernel_fd_set;//由上可以看到可以支持1024个描述符//系统调用(内核态 阅读全文

posted @ 2013-05-09 18:55 Apprentice89 阅读(1214) 评论(1) 推荐(1) 编辑

摘要: l select是什么select是UNIX下一种IO多路转接(IO Multiplexing)的技术。select系统调用是用来让我们的程序监视多个文件描述符的状态变化的。程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变。l select用法int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval *timeout);Ø fd_set定义如下:typedefstructfd_set { u_int fd_count; //fd_set中 阅读全文

posted @ 2013-05-09 18:54 Apprentice89 阅读(407) 评论(0) 推荐(0) 编辑