11<!-- TOC -->
22
3- * [ Linux IO模型 ] (#Linux IO模型 )
3+ * [ Linux IO ] (#Linux IO )
44 * [ 操作系统的内核] ( #操作系统的内核 )
55 * [ 操作系统的用户态与内核态] ( #操作系统的用户态与内核态 )
66 * [ 为什么要有用户态与内核态?] ( #为什么要有用户态与内核态 )
1616
1717<!-- /TOC -->
1818
19- # Linux IO模型
19+ # Linux IO
2020
2121** 图源:
2222[ 简书] ( https://www.jianshu.com/p/85e931636f27 ) (如有侵权,请联系俺,俺会立刻删除)**
3333unix与linux的体系架构:分为用户态与内核态。
3434用户态与内核态与内核态是操作系统对执行权限进行分级后的不同的运行模式。
3535
36- ![ 用户态与内核态] ( ../../media/pictures/java/linux_io模型 /用户态与内核态.png )
36+ ![ 用户态与内核态] ( ../../media/pictures/java/linux_io /用户态与内核态.png )
3737
3838
3939#### 为什么要有用户态与内核态?
@@ -100,7 +100,7 @@ Linux下共有5种IO模型:
100100那么用户应用进程(线程)就阻塞,直到内核准备好数据并把数据从
101101内核复制到用户应用进程,** 最后应用程序再处理数据。
102102
103- ![ BIO原理] ( ../../media/pictures/java/linux_io模型 /BIO原理.png )
103+ ![ BIO原理] ( ../../media/pictures/java/linux_io /BIO原理.png )
104104
105105** 阻塞IO是同步阻塞的。**
106106
@@ -127,7 +127,7 @@ Linux下共有5种IO模型:
127127这个过程就叫轮询。** 轮询直到内核准备好数据,然后内核把数据拷贝到用户应用进程,
128128再进行数据处理。
129129
130- ![ NIO原理] ( ../../media/pictures/java/linux_io模型 /NIO原理.png )
130+ ![ NIO原理] ( ../../media/pictures/java/linux_io /NIO原理.png )
131131
132132非阻塞IO的非阻塞体现在: ** 用户应用进程不用阻塞在对内核的系统调用上**
133133
@@ -146,7 +146,7 @@ Linux下共有5种IO模型:
146146当select/poll/epoll函数返回后,即某个socket有事件发生了,用户应用进程就会
147147发起系统调用,处理事件,将socket数据复制到用户进程内,然后进行数据处理。
148148
149- ![ IO多路复用原理] ( ../../media/pictures/java/linux_io模型 /IO多路复用原理.png )
149+ ![ IO多路复用原理] ( ../../media/pictures/java/linux_io /IO多路复用原理.png )
150150
151151** IO多路复用模型是同步阻塞的**
152152
@@ -177,7 +177,7 @@ select/poll/epoll函数是IO多路复用模型的基础,所以如果想
177177发送SIGIO信号,应用进程收到信号后,发起系统调用,
178178将数据从内核拷贝到用户进程,** 然后进行数据处理。
179179
180- ![ 信号驱动IO原理] ( ../../media/pictures/java/linux_io模型 /信号驱动IO原理.png )
180+ ![ 信号驱动IO原理] ( ../../media/pictures/java/linux_io /信号驱动IO原理.png )
181181
182182个人感觉在内核收到系统调用就立刻返回这一点很像异步IO的方式了,不过
183183与异步IO仍有很大差别。
@@ -188,7 +188,7 @@ select/poll/epoll函数是IO多路复用模型的基础,所以如果想
188188都会立即返回。用户应用进程不会阻塞,可以继续执行其他任务。当内核准备好数据,
189189会直接把数据复制到用户应用进程。最后内核会通知用户应用进程IO完成。**
190190
191- ![ 异步IO原理] ( ../../media/pictures/java/linux_io模型 /异步IO原理.png )
191+ ![ 异步IO原理] ( ../../media/pictures/java/linux_io /异步IO原理.png )
192192
193193** 异步IO的异步体现在:内核不用等待数据准备好就立刻返回,
194194所以内核肯定需要在IO完成后通知用户应用进程。**
0 commit comments