Linux 操作系统中断
-
什么是系统中断
系统处理中断的过程: 首先由需要紧急处理的程序向处理器发送中断请求,处理器收到请求后进行中断响应
暂停现行程序,并保存(现行程序的现场),然后引出中断处理程序处理。中断处理程序(中断处理服务程序)
会转而从等待队列中取出进程并调入运行队列中-
中断:是处理器对软件发出的需要关注的事件的响应。是用来处理中断请求的。它能使处理器在运行过程中对外部事件发出的 中断请求进行及时地处理,处理完成后又立刻返回断点,继续进行处理器原来的工作。
-
中断请求:是由"紧急事件"向处理器发出的申请,这个申请请求处理器先停下"自己手头的工作",然后处理发出申请的"紧急事件"
-
中断响应:是中央处理器发现已有中断请求时,暂停现行的程序保存现行程序的状态(现场),并自动引出中断处理程序的过程
- 硬中断: 一般都是由外部硬件发出的(比如键盘,鼠标,网卡等)中断,一般是异步的随时可能发生的中断。
- 异步中断:指cpu外部产生的,对于执行程序来说,这种中断完全是异步的,因为不知道什么时候发生cpu对其的响应完全是被动的
- 软中断: 也称内中断,是由执行某些指令引起的
-
-
BIO和NIO
- BIO: Blocked IO 阻塞IO当试图对文件进行读写时,如果当时没有东西可读,或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止(强迫症,必须这件事做完才能做其他的事,否则一直等待)
- NIO: Non Blocked Io 非阻塞IO,如果没有东西可读,或者不可写,读写函数马上返回,而不会等待(先取号,可以去做其他事情,叫号后,过来完成该事情。)
Linux IO多路复用
IO多路复用的本质时通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪,能够通知程序进行相应的读写操作
-
select的工作原理
select通过轮询来检测各个集合中的描述符的状态,如果描述符的状态发生改变,则会在该集合中设置相应的标志位;如果指定描述符的状态没有发生改变,则将该描述符从对应集合中移除以一个保姆照看一群孩子,如果把孩子是否需要尿尿比作网络IO事件,select的作用就好比这个保姆改革询问每个孩子:你要尿尿吗?如果孩子回答是,保姆则把孩子拎出来放到另一个地方。当所有孩子询问完之后保姆领着这些要尿尿的孩子去上厕所(处理网络IO事件)
-
epoll工作原理
epoll是select/poll的增强版本,它能显著提高程序在并发连接中只有少量活跃的情况下的系统cpu利用率。它无需便利整个被监听的描述符集,只需要便利那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行同样用保姆的例子,epoll中,保姆不需要挨个询问每个孩子是否需要尿尿。每个孩子如果需要尿尿,就自己占到事先约定好的地方,保姆只需要去事先约定好的地方查看。如果有小孩,则领着孩子去上厕所撒尿就行。
网友评论