现在位置: 首页 > IO
2018-03-04 22:26 工业·编程 ⁄ 共 1507字 暂无评论
1、 同步阻塞IO(Blocking IO) 即传统的IO模型。当用户进程向系统发起read操作时,首先需要在内核中数据准备和内核态到用户进程的数据拷贝。当两个步骤都完成后,才会返回read结果状态,才能执行后续的数据处理操作。 {     read(socket, buffer);     process(buffer); } 2、 同步非阻塞IO(Non-blocking IO) 默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。当用户进程向...
阅读全文
2017-06-14 11:21 工业·编程 ⁄ 共 1936字 暂无评论
I/O复用虽然可以同时监听多个文件描述符,但他本身是阻塞的。并且,当多个文件描述符同时就绪时,如果不采用额外的措施,程序就只能按顺序依次处理其中的每一个文件描述符,这样I/O复用看起来就像是串行的,要实现并法就需要用多进程或多线程实现。 select  poll  epoll  比较 1:事件集 select的参数没有将文件描述符单独与事件绑定,而是用文件描述符的集合fd_set中的每一位代表文件描述符,0/1代表事件是否发...
阅读全文
2017-06-07 11:13 工业·编程 ⁄ 共 5905字 暂无评论
epoll内核实现 (1)内核为epoll做准备工作 这个模块在内核初始化时(操作系统启动)注册了一个新的文件系统,叫"eventpollfs"(在eventpoll_fs_type结构里),然后挂载此文件系统。另外还创建两个内核cache(在内核编程中,如果需要频繁分配小块内存,应该创建kmem_cahe来做“内存池”),分别用于存放struct epitem和eppoll_entry。这个内核高速cache区,就是建立连续的物理内存页,就是物理上分配好你想要的size的内...
阅读全文
2017-05-31 11:11 工业·编程 ⁄ 共 1259字 暂无评论
应用层调用poll时,内核调用了sys_poll 在sys_poll中首先初始化,判断了nfds是超过struct file支持的最大的fd数(默认256),将传入的timeout时间转化为cpu时钟周期,并且调用了poll_initwait初始化了一个函数指针,用于操作系统异步回调的; 接下来,进行了一个while循环,从0到nfds给每一个struct pollfd对象开辟内存,是以链表节点poll_list大小开辟的(一个链表节点是一个page,链表节点中有struct pollfd结构),然后将用户空...
阅读全文