BIO模式和NIO模式下cpu的使用分析

前言:
1.内核可以看作一组系统调用。
2.时钟中断可以中断系统调用。
3.系统调用返回时,一定是发起系统调用的进程。
4.进程有两个栈:用户栈和内核栈。前者用于进程切换,后者用于系统调用。
在这里插入图片描述

BIO模式
在这里插入图片描述
以两个进程为例
(1)进程1在用户态运行一段时间(假定为第一个时间片)后,CPU会接收到计时部件(操作系统内核的时钟管理部件)发生的时钟中断(https://blog.51cto.com/u_14813976/5086372)信号,表示进程1已用完一个时间片,该信号触发CPU去执行一个中断服务程序。在时钟中断返回时执行进程调度程序,将CPU的使用权交给进程2。
(2)在第2个时间片内,进程2拿到CPU执行权后,先在用户态执行。执行一段时间后,进程2发起read系统调用,系统调用借助软中断实现,进程2由用户态切换到内核态,CPU交给内核使用,内核接管进程2的系统调用请求,调用IO设备开始输出工作。软中断发生后,进程2的内核栈将保存进程处于用户态的现场,进程的用户栈则是空的。**注意,在BIO(同步阻塞)模式下,由于没有采用DMA技术,在内核没有完成工作(将数据准备好,并从内核拷贝数据到应用进程)前,cpu将一直被占用。**如果在当前时间片(第2个时间片)内,内核没能完成工作,当时钟中断到来时,系统调用会被中断,cpu将执行时钟中断程序,重新分配cpu的使用权。
(3)下一个时间片(第3个时间片)会被分配给进程1,因此会发生进程切换。发生进程切换后,进程2的用户栈将保存进程2处于内核态时的现场,而内核栈则依旧保存之前系统调用时进程处于用户态的现场。
(4)进程1运行到期后,第4个时间片会被分配给进程2。在进程切换时,由于之前进程2的用户栈保存的内容是进程2处于内核态时的现场,所以进程2还是会运行在内核态。假设在第4个时间片未结束前,内核完成了工作,就会发生系统调用返回,这时会使用到内核栈。由于内核栈保存内容的是进程处于用户态的现场,进程得以成功由内核态切换至用户态。

NIO模式
在这里插入图片描述

以两个进程为例
(1)进程1在用户态运行一段时间(假定为第一个时间片)后,CPU会接收到计时部件(操作系统内核的时钟管理部件)发生的时钟中断信号,表示进程1已用完一个时间片,该信号触发CPU去执行一个中断服务程序。在时钟中断返回时执行进程调度程序,将CPU的使用权交给进程2。
(2)在第2个时间片内,进程2拿到CPU执行权后,先在用户态执行。执行一段时间后,进程2发起read系统调用,系统调用借助软中断实现,进程2由用户态切换到内核态,CPU交给内核使用,内核接管进程2的系统调用请求,调用IO设备开始输出工作。软中断发生后,进程2的内核栈将保存进程处于用户态的现场,进程的用户栈则是空的。**注意:在NIO(同步阻塞)模式下,由于采用了DMA技术,在内核没有完成工作(将数据准备好,并从内核拷贝数据到应用进程)前,不需要一直占用cpu,系统调用会立即返回。**系统调用返回后,内核栈的内容直接作废,此时用户栈还是空的。在剩余的时间内,进程2得以执行之后的代码,比如有可能再次发起系统调用来查看数据是否已经准备好了。如果在当前时间片(第2个时间片)内数据还没准备好(注意:有了DMA技术,这时不再需要内核参与数据的准备工作了。),当时钟中断到来时,无论这时进程2是处于用户态,还是内核态(发生了系统调用),都会被中断。cpu将执行时钟中断程序,重新分配cpu的使用权。
(3)下一个时间片(第3个时间片)会被分配给进程1,因此会发生进程切换。注意:如果在第2个时间片时,进程2处于用户态,其用户栈将保存进程2处于用户态的现场,内核栈中的内容是废料。如果在第2个时间片时进程2处于内核态,其用户栈将保存进程2处于内核态的现场,内核栈中内容则是进程2系统调用时用户态的现场。
(4)进程1运行到期后,第4个时间片会被分配给进程2。在进程切换时,如果在第2个时间片时,进程2处于用户态,其用户栈保存的内容是进程2处于用户态的现场,那么进程2将得以恢复到用户态并继续执行。如果在第2个时间片时进程2处于内核态,其用户栈保存的内容是进程2处于内核态的现场,内核栈中内容则是进程2系统调用时用户态的现场,那么进程2将得以恢复到内核态并继续执行。假设在这个时间片内,DMA控制器将数据准备好了,DMA控制器会在所要求传送的数据块全部传送结束时要求CPU进行中断处理。

参考:https://www.zhihu.com/zvideo/1494331615563743232?utm_id=0和https://www.elecfans.com/d/1846938.html
另外,https://www.cnblogs.com/ttaall/p/13738562.html中对DMA的理解是错误的。

如有错误,欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值