操作系统的本质

操作系统本质上也是一个进程,它与其他用户进程共享CPU。与普通进程不同的是,它具有硬件的所有访问权限。而用户进程默认对硬件是没有任何访问权限的,它只能通过系统调用,委托操作系统来完成这些操作。

问题

当操作系统在创建完一个进程后,会将CPU的控制权交给这个新创建的进程。上下文切换,大家应该都知道。操作系统要做的就是停止一个进程,然后再启动另一个进程。很简单是吧,那么问题来了,操作系统的程序都不在运行了,它已经把CPU的使用权给其他进程了,怎么对这个进程进行控制呢?

协作方式:等待系统调用

在过去的某些系统中曾经就使用过这种方式,在这种情况下,操作系统信任用户进程可以正确地执行,不会出幺蛾子。

以下两种情况出现时,CPU会恢复操作系统进程:

注:trap handler和exception handler是在电脑开机的时候告知CPU的

操作系统就恢复了对CPU的控制,在这个时候它就可以决定要不要进行上下文切换。

缺点:

1.只能被动地等待用户进程进行System Call或者出错,操作系统才能恢复对CPU的控制

2.如果用户进程没有进行I/O操作,进入死循环,则操作系统永远无法恢复控制,唯一的解决方法就是重启

非协作方式:定时器中断

以上方式有明显的缺点,为了让计算机提供稳定的服务,操作系统必须把对用户进程进行把控。而要想把控进程则必须保持对CPU的控制权。

如果不能让在CPU内部执行的程序让出CPU,那能不能从外部侵入,打断CPU的执行呢?

可以,早期的操作系统开发人员就想到用定时器中断的方式来处理,定时器是单独的一个硬件设备,它可以独立运行。每隔一段时间就给CPU一个中断信号,打断它的执行。

但是打断归打断,怎么恢复操作系统呢?

和上面一样,CPU在开机的时候会被告知一个interrup handler,当中断出现的时候,它的处理方式就是恢复操作系统进程。那这个时候OS的程序就又可以继续运行了。

准备工作

综上,针对这个定时器中断的方案,操作系统在电脑开机的时候,要做这几件事,一个是开启定时器,设定间隔时间。另一个是告知CPU,让它知道当定时器中断产生的时候该执行什么代码。

注:时间片的大小一般是定时器中断时间的倍数。所以当某次因中断恢复OS的时候,刚好可以执行上下文切换。

【杂谈】操作系统如何有效地掌控CPU的更多相关文章

  1. IT运维大会精华回顾 等保2.0时代掌控万物互联

    10月24日,由<网络安全和信息化>杂志社.IT运维网联合主办的“2019(第十届)IT运维大会”在北京新世纪日航酒店成功举行. 随着大数据.云计算.物联网.互联网+等快速发展,IT系统架 ...

  2. 全面认识 RUST -- 掌控未来的雷电

    文章目录 RUST 简介 如何衡量语言的好坏? 静态语言 编译器 语言定位 代表性项目 Hello World RUST 前景 RUST 简介 Rust 是一种兼顾内存安全.高并发和稳定运行的编程语言 ...

  3. ACM对时间掌控力和日积月累的习惯的意义

    马云说,要想创业成功,不是要知道现在什么东西最火,而是要清楚的知道十年以后什么东西最火.这就意味着,你对时间掌控力,至少要有十年. 但是仔细回想一下自己的学生时代,自己对时间的把握是怎样的?有些人只能 ...

  4. IQ一个人的智力和对科学知识的理解掌握程度。 EQ对环境和个人情绪的掌控和对团队关系的运作能力。 AQ挫折商 一个人面对困境时减除自己的压力、渡过难关的能力。

    IQ: Intelligence Quotient 智商 一个人的智力和对科学知识的理解掌握程度. EQ: Emotional Quotient 情商 一个人对环境和个人情绪的掌控和对团队关系的运作能 ...

  5. 4星|《行为设计学:掌控关键决策》:影响决策质量的四大思维陷阱及WRAP应对法

    行为设计学:掌控关键决策 两位作者认为,有四大思维陷阱让人做出错误的决策:思维狭隘.证实倾向.短期情绪.过度自信.两位作者提出WRAP决策流程来应对:Widen your options(拓宽选择空间 ...

  6. CIO需加强对战略管理层面的掌控-精华篇

    当代CIO面临提升信息化作用的新机遇.CIO在企业中,不能满足于职能性的技术支撑角色,要找到新的着力点,以发挥信息化在全局战略中的作用,把信息化力量聚焦于做强做优,提高国际竞争力上来,成为企业不可或缺 ...

  7. Streamr助你掌控自己的数据

    博客说明 所有刊发内容均可转载但是需要注明出处. 项目简介 Streamr 致力于为世界实时数据的自由公平交换打造开源平台,并促进全球数据经济的发展.Streamr项目基于区块链技术,并向用户提供数据 ...

  8. Javascript通过bind()掌控this

    Javascript通过bind()掌控this: http://blog.csdn.net/rznice/article/details/26134201 bind能为我们做些什么,同时它的好处在哪 ...

  9. TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子

    TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子 一.<如何掌控你的自由时间> (1)时间管理的传统思维:守时和节省零散的时间.演讲者认为这个观点已经彻底落后. ...

随机推荐

  1. go select 使得一个 goroutine 在多个通讯操作上等待。

    select 语句使得一个 goroutine 在多个通讯操作上等待. select 会阻塞,直到条件分支中的某个可以继续执行,这时就会执行那个条件分支.当多个都准备好的时候,会随机选择一个. pac ...

  2. 【模拟】Clock

    Clock 题目描述 wls有一个钟表,当前钟表指向了某一个时间.又有一些很重要的时刻,wls想要在钟表上复现这些时间(并不需要依次复现).我们可以顺时针转动秒针,也可以逆时针转动秒针,分针和时针都会 ...

  3. .NET Core 使用swagger进行分组显示

    其实,和swagger版本管理类似;只是平时接口太多;不好供前端人员进行筛选. 下面进入主题: 首先: //注册Swagger生成器,定义一个和多个Swagger 文档 services.AddSwa ...

  4. .net core使用CSRedisCore连接哨兵集群,并用作redis使用分布式缓存。

    CSRedisCore是国内大佬出品的一个Redis-Cli-SDK. Github地址:https://github.com/2881099/csredis 使用此插件作为分布式缓存也十分简单. 一 ...

  5. win7实现tensorflow中的物体识别

    实现条件: 1.win7 2.python 3.运行所需要的库:matplotlib.lxml.pillow.Cython 具体参考:https://github.com/tensorflow/mod ...

  6. stm32 ADXL345传感器

    加速度灵敏度轴 沿敏感轴加速时相应输出电压增加 寄存器映射 寄存器定义 0x31-DATA_FORMAT SELF_TEST位:设置为1,自测力应用至传感器,造成输出数据转换.值为0时,禁用自测力 S ...

  7. pygame安装遇到的坑

    坑一:python版本冲突,电脑同时安装多个版本的python,由于每个都是python.exe,cmd命令窗口输入的python不一定是你想要的版本,所以最好还是安装单个版本即可. 坑二:由于电脑安 ...

  8. 面试常考HTTP协议知识点

    协议简介 1. 应用层协议, 一般以TCP为基础,数据收发通过TCP实现: 2. 一次性连接.服务器与客户端的每次连接只处理一个请求,下次请求重新建立连接: 3. 无状态协议.服务器不保留与客户交易时 ...

  9. MySQL binlog反解析

    反解析delete语句 背景:delete table忘了加条件导致整张表被删除 恢复方式:直接从binlog里反解析delete语句为insert进行恢复 导出删指定表的DELETE语句: # my ...

  10. Android小经验:启动Eclipse,出现提示“......发现了以元素'd:skin'开头的无效内容。此处不应含有子元素...”

    如图所示: 解决办法: 进入sdk目录下,把D:\android-sdks\system-images\android-22\android-wear\armeabi-v7a\devices.xml和 ...