前面我们提到:OS希望在保持控制权的同时,为用户提供高性能的并发。

  那么OS究竟是如何保持对计算机的控制权呢?这似乎是一个令人迷惑(但很重要!)的问题:OS也是进程,自然也需要计算资源。那既然我们希望一直保持OS的控制权,难道OS需要一直占用计算资源么?当然不是这样。

  在微内核OS中,一般有两种模式 —— 内核模式(Kernel Mode)和 用户模式(User Mode),普通用户进程基本都运行在用户模式中,只能执行一些一般的、基本的操作。那不一般的操作(我们称之为“特权操作”)有哪些呢?比如I/O操作、中断处理、时钟管理、还有相当重要的进程调度操作等,这些“特权操作”只能在内核模式中由操作系统进行,而用户模式下则不能执行任何特权操作。

  上述内核模式与用户模式的关系类似于什么呢?其实有点像父母给小孩子的安全屋:所有比较危险的东西(比如带电的插座、窗户等)都被保护起来了,小孩子可以在里边安全的活动。但是一旦他想做任何“危险行为”,就应该找他的父母来完成那些“危险行为”。

  类似的,一旦某个程序希望执行某个特权操作,它就会调用OS内核(syscall)来执行,这样CPU的控制权就被原先的程序移交给了OS。

  好,看起来我们已经保证了OS的控制权:通过用户进程主动syscall移交控制权。但是这个方式没有解决另外一个问题:如果一个进程一直不愿意交出CPU控制权怎么办?这样的进程很容易实现:一个while(true);无限循环就行。对于这些不友好的进程,我们该如何处理才能保证OS的控制权?

  (想一想,你可以想到的!)

  没错,我们可以定时将控制权移交给OS,这可以利用时钟(如石英振荡器)来实现,每隔一段时间定时syscall,强制将计算机控制权移交给OS就行,当然这需要硬件中断的支持。

  综上,现在我们有两种方式来保证OS对计算机的控制权:1 友好的进程会主动syscall来移交控制权;2 对于不友好的进程,我们使用定时中断的方式获得控制权。

  当然,上述两种方式还带来了2个小问题:

  1.    所有用户模式的进程在将控制权移交给OS后(或主动或被动),它都相当于从原本的运行状态被硬生生地打断了。那么它下一次运行的时候,我们是不是需要将计算机恢复到它被打断之前的状态,从而接着运行呢?没错,当然是需要的,我们可以用Process Control Block来实现,这个过程就叫Context Switch —— 上下文切换

  2.    OS或主动或被动地获得控制权后,都必须要决定接下来要运行哪个用户进程,那么OS是如何来决定接下来运行什么进程的呢?这就要通过调度算法 —— Scheduler来实现。

OS如何保持对计算机的控制权?的更多相关文章

  1. os用法总结:python中必须掌握的内置模块os,实现与计算机操作系统的常规交互!

    os模块说明 ''' os 模块 Os库是python标准库,包含几百个函数 常用路径操作.进程管理.环境参数等几类 路径操作:os.path子库,处理文件路径及信息 进程管理:启动系统中其他程序 环 ...

  2. os 计算机的启动

    零.boot的含义 先问一个问题,”启动”用英语怎么说? 回答是boot.可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一 ...

  3. 计算机启动boot

    原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 零.boot的含义 先问一个问题,"启动"用英语怎么说? 回答是boot.可是,boo ...

  4. Lab_1:练习4——分析bootloader加载ELF格式的OS的过程

    一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...

  5. 计算机的启动和Linux的启动

    计算机的启动和Linux的启动 一 计算机的启动   计算机的启动过程分为四个阶段,分别是:BIOS.MBR.启动管理程序.加载操作系统内核.操作系统启动.   1.1 BIOS 计算机加电后,第一件 ...

  6. linux --> 计算机是如何启动的?

    计算机是如何启动的? 零.boot的含义 "启动"用英语怎么说?回答是boot.boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是b ...

  7. python-时间模块,random、os、sys、shutil、json和pickle模块

    一.time与datetime模块 time模块: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回类型为float类型 格式化时间字符串(Format String) ...

  8. 常用模块之 time,datetime,random,os,sys

    time与datetime模块 先认识几个python中关于时间的名词: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“ty ...

  9. Firefox OS简单介绍

    Firefox OS系统架构框图 一些Firefox相关的术语简单介绍: B2G Boot to Gecko 的简称. Boot to Gecko Firefox OS 操作系统的project代号. ...

  10. 计算机/linux启动过程

    开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程. 分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径. 计算机开机过程是一个非常复杂的过程,想真正理解透彻并 ...

随机推荐

  1. 微信小程序直播,腾讯云直播+微信小程序实现实时直播

    一:小程序代码端 小程序直播使用小程序组件 live-pusher 组件和live-player组件 首先开通直播权限 小程序开发工具内进行推流拉流都不会成功,所以需要使用两个手机进行推拉流测试: 1 ...

  2. MyEclipse之各个版本的区别

    跟Eclipse一样,MyEclipse的各个版本也是有区别的,他们所集成的插件是不同的. 从插件数量和功能的强大程度上讲:Blue>Professional>Standard MyEcl ...

  3. 通过socket进行网络通信(服务端)

    声明:此文只是为自己方便理解,做了一些具象的比喻和假设,并不符合客观事实,谨慎阅读! ​ 在一台主机中, 两个进程想要通信可以通过一个管道(文件):一个从管道的一端写,一个从另一端读 , 然而管道是半 ...

  4. 观展新体验!3DCAT助力青桔 “未来之见”线上发布会炫酷亮相

    在"未来之见"滴滴青桔2021新品发布会现场,青桔推出概念车"青桔X","X"代表了无限可能和憧憬,街边的共享单车?这只是其中一面,青桔为您 ...

  5. 除gRPC之外的另一个选择,IceRPC-支持QUIC

    作者引言 自从19年开始接处到RPC,当时完全没有相关概念,接触到的都是http,tcp等,当时公司用的是zeroc出品的ice框架,对应rpc非常强大,跨平台,跨语言.可惜的国内并不是主流,主流是g ...

  6. 记录-记一次不规范使用key引发的惨案

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 平时在使用v-for的时候,一般会要求传入key,有没有像我一样的小伙伴,为了省心,直接传索引index,貌似也没有遇到过什么问题, ...

  7. 基于vivado中AXI的模型分析

    基于vivado中AXI的模型分析 1.底层代码 `timescale 1 ns / 1 ps module myip_v1_0_S00_AXI # ( // Users to add paramet ...

  8. Circle Loss:从统一的相似性对的优化角度进行深度特征学习 | CVPR 2020 Oral

    论文提出了Circle loss,不仅能够对类内优化和类间优化进行单独地处理,还能根据不同的相似度值调整对应的梯度.总体而言,Circle loss更灵活,而且优化目标更明确,在多个实验上都有较好的表 ...

  9. Light-Head R-CNN : 旷世提出用于加速two-stage detector的通用结构,速度达102fps

    论文提出Light-Head R-CNN,一个精简的two-stage目标检测器设计准则,在表达能力很强的精简特征图上使用轻量级的R-CNN子网,不仅大量减少推理耗时,还提高了准确率,结合Xcepti ...

  10. KingbaseES V8R6 集群运维案例 -- 集群断电重新加电后恢复

    ​ 官方文档介绍: https://help.kingbase.com.cn/v8/highly/availability/cluster-use/cluster-use-2.html#id35 全局 ...