操作系统如何管理CPU

CPU工作原理

CPU工作原理很简单,就是不断的取指执行。CPU根据PC寄存器中的值到内存中取指令,PC会自动+1,当执行完本条指令后,CPU又根据PC寄存器取指执行。

所以我们让CPU执行一段程序最直接的做法就是让PC的值设置为程序的起始地址,这样CPU会自动的执行这段程序直到程序结束。

这样做本身没什么问题,但会导致CPU的利用率比较低。我们来看两段代码执行时间。

# 计算任务
import time
start = time.time()
sum = 0
for i in range(100000):
    sum += i
print(time.time()-start)

执行时间为: 0.007977724075317383
# IO任务
import time
start = time.time()
for i in range(100000):
    print(i)
print(time.time()-start)

执行时间为 0.29421424865722656

可以看到同样的循环次数,但IO任务的执行时间远远大于计算任务,但在执行IO任务时,CPU是空闲的,此时CPU利用率很低。

当我们将PC的值设置为程序的起始地址,如果我们不对CPU进行特别的管理,让CPU自动的取指执行,如果程序有大量的IO任务时,CPU的利用率极低,这是对宝贵的CPU资源的极大浪费!!!所以我们要对CPU进行管理,提高CPU的利用率。

CPU管理

怎么办呢?当在执行IO任务时,我们可以将CPU分配给其他程序使用,当IO任务完成时,CPU又切换到该程序继续执行。

现实生活中,这样的例子比比皆是。拿我们平时烧开水举例。我们拿着热水瓶到炉子旁边,我们会一直傻傻的站在炉子旁边等着水烧开在装水吗,不会的,我们会去做其他事,等到炉子发出嘀嘀嘀的声音,我们才回到炉子旁装水。

这里的核心是任务的切换。做法就是内存存放多个程序,多个程序交替执行。

image

如何做到

直观的做法:当一个程序执行IO任务时,我们把PC的值设置为另一个程序的执行地址就可以去执行另一个程序,然后IO任务完成,又切回原来的程序执行。

说起来简单,做起来难啊!你考虑下仅仅修改PC的值能正常进行切换吗?

image

当程序1执行到52时,修改PC为200就可以执行程序2,当在程序2的202执行完切换到程序1,仅仅修改PC为53可以吗?

程序1执行到53时,ax的值为2,但由于执行了程序2,ax的值为20,导致切回去的时候程序1的上下文环境不一致,程序1肯定出错。

所以在进程切换的时候有个专门的步骤——保存上下文,只要切回来的时候,回复上下文才能保证程序不出错。

进程的引入

放在磁盘上的静态程序和运行中的程序不一样,运行中的程序时刻在变化,为了抽象运行中的程序,引入进程的概念。其实进程的概念和系统的快照类似,都是描述一个变化的物体在某个时刻的状态。

进程和程序的一些区别:

  1. 进程是有状态的。有开始、结束等运行状态,而程序没有。
  2. 进程会记录一些寄存器的值,这些值就是上下文。
  3. 进程会走走停停,程序没有这个概念。

结语

CPU的管理是为了提高CPU的利用率,提高的核心思想就是多道程序交替执行,为了实现多道程序交替执行,通过进程来管理程序的运行。

关注我的个人微信公众号——追梦程序员,和我一起学技术。

在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值