操作系统的本质

操作系统本质上也是一个进程,它与其他用户进程共享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. [Asp.Net Core] - 设置 Syncfusion / RichTextEditor 移除超链接及高度自适应 的方法

    背景 使用 Syncfusion / RichTextEditor 对录入后的信息进行展示:1. 希望内容高度自适应.2. 希望禁用原文中的超链接.   实现 <div class=" ...

  2. java多线程中篇(三) —— 线程的控制(创建,运行,阻塞,中断,结束)

    简介 线程的控制就是程序对线程的主要管理,最重要的就是状态的切换维护. 每种转态都有不同的引发事件(对应线程的方法),每种状态又有各自不同的处理步骤和过程,整个线程控制主要就是涉及这些内容. 正文 线 ...

  3. (四)Spring Boot官网文档学习

    文章目录 关于默认包的问题 加载启动类 配置 Bean管理和依赖注入 @SpringBootApplication Developer Tools 关于 Developer Tools 的一些细节 原 ...

  4. 又是a+b

    题目描述: 给定两个整数 a, b (a, b 均不超过 int 类型的表示范围),求出 a + b 的和.输入描述: 多组输入,每组输入为一行,里面有 2 个数 a, b.输出描述: 对于每一组输入 ...

  5. a+b的问题

    题目描述: 给定两个整数 a, b (a, b 均不超过 int 类型的表示范围),求出 a + b 的和. 输入描述: 每行输入两个整数 a 和 b,用空格隔开. 输出描述: a + b 的值. 样 ...

  6. Pygame01之游戏开发

    一.Pygame库 Pygame是一个利用SDL库写的游戏库,SDL库全名:Simple DirectMedia Layer,据说是SamLantinga写的大牛写的为了让Loki(公司)更好的向li ...

  7. 20191031:Python底层机制

    20191031:Python底层机制 python底层从3个方面来说,分别是: 引用计数机制 垃圾回收机制 内存池机制 引用计数机制 使用引用计数来追踪内存中的对象,所有对象都有引用计数,并且这个引 ...

  8. closed channel

    func Test_chanel(t *testing.T) { c := make(chan int, 1) go func() { time.Sleep(time.Second * 3) clos ...

  9. sidecar-inject代码分析

    Istio通过对serviceMesh中的每个pod注入sidecar,来实现无侵入式的服务治理能力.其中,sidecar的注入是其能力实现的重要一环(本文主要介绍在kubernetes集群中的注入方 ...

  10. Spring Cloud Alibaba学习笔记(9) - RocketMQ安装与RocketMQ控制台

    搭建RocketMQ 系统环境准备 64位操作系统,推荐使用Linux.Unix.MacOS 64位 JDK1.8+ Maven 3.2.x 适用于Broker服务器的4g +可用磁盘 下载与搭建 下 ...