4.I/O & Syscalls
Operating System / Linux · 5 篇笔记
- 4.1 系统调用historical
1. 系统调用是什么 使用类似函数调用的方式调用操作系统提供的API 2. 系统调用 vs 函数调用 系统调用 函数调用 ------- ----------------------------------------------- ------- CPU态 内核态 用户态 调用方式 整型编号 函数
- 4.2 IO模型historical
1. 同步 vs 异步 - 应用程序调用系统调用,过程由谁处理 - 前者是我来询问你 同步是由应用程序自己处理 - 后者是你来通知我 异步是由操作系统处理,完成之后通过回调或者事件通知 2. 阻塞 vs 非阻塞 - 应用程序调用系统调用,没有结果怎么办? - 阻塞是应用程序会等待 - 非阻塞是应用程
- 4.3 select、poll、epollhistorical
1. select - select的几大缺点: - 每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大 - 同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大 - select支持的文件描述符数量太小了,默认是1024 - 2
- 4.4 IOhistorical
1. 什么是文件 文件是由字节序列组成的,在Linux下一切皆文件 所有的IO设备都是文件 - /dev/sda2 (/usr disk partition) - /dev/tty2 (terminal) 内核也是文件 - /boot/vmlinuz-3.13.0-55-generic (kerne
- 4.5 零拷贝机制historical
1. 传统IO 正常的数据处理流程是这样的: 1. 使用DMA copy(不需要cpu参与)把磁盘中的数据copy到磁盘缓冲区 2. 使用cpu copy把磁盘缓冲区的数据复制到用户区 3. 用户区进行处理 4. 使用cpu copy把 用户区的数据拷贝到Socket缓冲区 5. 使用DMA cop