OS如何保持对计算机的控制权?
前面我们提到: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如何保持对计算机的控制权?的更多相关文章
- os用法总结:python中必须掌握的内置模块os,实现与计算机操作系统的常规交互!
os模块说明 ''' os 模块 Os库是python标准库,包含几百个函数 常用路径操作.进程管理.环境参数等几类 路径操作:os.path子库,处理文件路径及信息 进程管理:启动系统中其他程序 环 ...
- os 计算机的启动
零.boot的含义 先问一个问题,”启动”用英语怎么说? 回答是boot.可是,boot原来的意思是靴子,”启动”与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一 ...
- 计算机启动boot
原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 零.boot的含义 先问一个问题,"启动"用英语怎么说? 回答是boot.可是,boo ...
- Lab_1:练习4——分析bootloader加载ELF格式的OS的过程
一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...
- 计算机的启动和Linux的启动
计算机的启动和Linux的启动 一 计算机的启动 计算机的启动过程分为四个阶段,分别是:BIOS.MBR.启动管理程序.加载操作系统内核.操作系统启动. 1.1 BIOS 计算机加电后,第一件 ...
- linux --> 计算机是如何启动的?
计算机是如何启动的? 零.boot的含义 "启动"用英语怎么说?回答是boot.boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是b ...
- python-时间模块,random、os、sys、shutil、json和pickle模块
一.time与datetime模块 time模块: 时间戳:表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回类型为float类型 格式化时间字符串(Format String) ...
- 常用模块之 time,datetime,random,os,sys
time与datetime模块 先认识几个python中关于时间的名词: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“ty ...
- Firefox OS简单介绍
Firefox OS系统架构框图 一些Firefox相关的术语简单介绍: B2G Boot to Gecko 的简称. Boot to Gecko Firefox OS 操作系统的project代号. ...
- 计算机/linux启动过程
开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程. 分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径. 计算机开机过程是一个非常复杂的过程,想真正理解透彻并 ...
随机推荐
- Prometheus组件构成及介绍
Prometheus是一个开源的监控和告警工具包,其常用的组件主要包括以下几个部分: Prometheus Server 功能:Prometheus Server是Prometheus的核心组件,负责 ...
- Spring Boot 2.0 新人会踩的坑--启动报404错误
转载自:http://www.javaman.cn/channels/sb2 启动程序,验证效果 根据图示,点击按钮,来启动 Spring Boot Web 程序, 查看控制台输出: . ____ _ ...
- Welcome to YARP - 1.认识 YARP 并构建反向代理服务
目录 Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 Welcome to YARP - 3.负载均衡 Welcome to ...
- 还在用Calendar操作Date?Java8都弃用了,还不知道它的这款强大的工具吗?
引言 在过去的Java版本中,日期和时间的处理主要依赖于java.util.Date和java.util.Calendar类,然而随着业务系统的复杂以及技术层面的提升,这些传统的日期时间类暴露出了若干 ...
- Linux输入输出
1.重定向概述 1.什么是重定向 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中.比如:每天凌晨定时备份数据,希望将备份数据的结果保存到某个文件中. 这样第二天通过查看文件的内容就知道昨天备 ...
- PLC与上位机传递数据
1.我这里使用的是HslCommunication 假如传递的是word类型,PLC以16进制封装数组,它有预留,我扩充 PLC博图上是 word[5] 上位机接收 ushort[] Data1=ne ...
- 聊聊微信小程序的隐私协议开发
为什么需要隐私协议? 小程序隐私授权弹窗FAQ官方:https://developers.weixin.qq.com/community/develop/doc/00000ebac5c3e042384 ...
- 2022福州大学MEM复试英语口语准备
一.自我介绍 Dear professors, it's my honor to be here for my interview. My name is ,I finished my undergr ...
- 11 CSS盒子模型(重点)
11 CSS盒子模型(重点) 盒模型是CSS的核心知识点之一,它指定元素如何显示以及如何相互交互.HTML页面上的每个元素都可以看成一个个方盒子,这些盒子由元素的content(内容).padding ...
- #树状数组,欧拉函数#CF594D REQ
题目 给定 \(n\) 个数,求 \(\varphi(\prod_{i=l}^r{a_i})\) 分析 考虑单个欧拉函数的求法,只需要求出这个数的质因数计算即可. 那么考虑离线,枚举右端点,记录每个质 ...