[1.3_1]计算机系统概述——操作系统的运行机制

news2025/1/16 2:32:01

文章目录

  • 第一章 计算机系统概述
    • 操作系统的运行机制
      • 前提知识:程序是如何运行的
      • 内核程序与应用程序
      • 特权指令与非特权指令
      • 内核态与用户态
    • 小结

第一章 计算机系统概述

操作系统的运行机制

操作系统的运行机制,也就是操作系统在计算机上是怎样运行的问题。

操作系统的运行机制

  • 两种指令
    • 特权指令
    • 非特权指令
  • 两种处理器状态
    • 核心态
    • 用户态
  • 两种程序
    • 内核程序
    • 应用程序

前提知识:程序是如何运行的

image-20230303205240710

  我们平时写的C语言代码,要先经过编译器“翻译”为机器能读懂的机器指令(二进制编码)。

image-20230303205319530

  C语言写的简单的2行代码,编译成机器指令,就会形成多条机器指令(此处是瞎编的01编码,反正都看不懂)。

  虽然我们看不懂这些二进制编码,但是,对于CPU来说,对于计算机来说,这样的二进制代码才是它能够看得懂的语言。

image-20230303205542377

image-20230303205558282

  程序运行的过程其实就是CPU执行一条一条的机器指令的过程。

  这里提到的“指令”(机器指令),就是能让CPU处理、识别的最基本命令。(比如让CPU执行一个加法操作、执行一个赋值操作等等)

  很多人习惯把Linux、Windows的“小黑框”中使用的命令(比如ls、mkdir)也称为“指令”,其实这是“交互式命令接口”。注意与此处的“指令”区别开。此处的“指令”指的是二进制机器指令。

内核程序与应用程序

  应用程序就是平时跑在操作系统之上的,我们平时很熟悉的、很喜欢用的那些程序,比如QQ、微信等。

  我们普通程序员写的程序就是“应用程序”,是跑在操作系统之上的。

  但是还有一批人,比如微软、苹果,开发操作系统的这帮人写的程序,就是操作系统的内核程序。这帮人写了很多内核程序,这么多内核程序,最终组合成了操作系统内核,或简称“内核(Kernel)”。

  内核是操作系统最重要最核心的部分,也是最接近硬件的部分

  之前说过,操作系统最重要的一个角色,是他要作为系统资源的管理者,而操作系统对系统资源的管理工作其实就是在内核部分实现的。甚至可以说,一个操作系统只要有内核就够了。(例如:Docker→仅需Linux内核)

  用户平时使用到的操作系统的功能,并不是都在内核中的,例如图形化用户界面GUI。即使没有GUI,我们依然可以通过命令行的方式来使用操作系统。所以操作系统的内核中包含的是操作系统的最重要、最核心、最必不可少的那些功能。

特权指令与非特权指令

  既然操作系统内核是系统资源的管理者,那么它作为管理者这样一个角色,有的时候就有可能让CPU执行一些比较特殊的指令,比如“内存清零指令”。这种指令会对其他程序的运行造成很严重的影响,因此,像这样的“特权指令”,就只允许“管理者”——即操作系统内核来使用。

  假如CPU要执行的一段程序是内核程序,那这些指令当中,可以出现特权指令。

  如果这段程序是普通的应用程序,那么,这其中就不应该包含特权指令,而只能使用非特权的指令,如:加减乘除运算指令。

  CPU在设计和生产时,就已经划分了哪些指令是特权指令、哪些指令是非特权指令,因此CPU在拿到一条指令的时候,它就可以区分出这到底是特权指令还是非特权指令了。

内核态与用户态

  此时有一个问题:CPU能判断出指令类型,但是它怎么区分此时正在运行的是内核程序还是应用程序?

  为了让CPU能够区分此时运行的程序是内核程序还是应用程序,CPU被划分为两种状态:“内核态”和“用户态”。

  处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令

  处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令

  怎么看CPU当前到底处于哪种状态呢?

  CPU中会有一个寄存器叫程序状态字寄存器(PSW),其中有个二进制位,1表示“内核态”,0表示“用户态”。(有的CPU也可能1和0表示状态是反过来的,这无所谓了,知道通过这个方法对CPU状态能够进行识别就可以)

  别名:内核态 = 核心态 = 管态; 用户态 = 目态


  接下来,要探讨的问题是:CPU怎么实现这两个状态之间的切换?

  一个例子:

  ①刚开机时,CPU为“内核态”,操作系统内核程序先上CPU运行。比如系统初始化的工作就是由内核当中的一些程序来完成的,所以此时也肯定处于内核态。

  ②开机完成后,用户就可以启动某应用程序。但是问题是,CPU还正处于内核态,在执行内核程序中的指令,怎么办?此时,如果操作系统的内核,它想让用户的应用程序开始运行的话,那么这个内核程序就需要执行一条特权指令,这个特权指令会把PSW的标志位,从内核态转变为用户态,就完成了CPU状态的切换。

  ③操作系统内核程序会在合适的时候主动让出CPU,让该应用程序上CPU运行,并切换至“用户态”。

  ④应用程序运行在“用户态”。CPU会执行该程序一条条的指令。

  ⑤此时,如果该程序出现意外,例如一个黑客在该应用程序中植入了一条特权指令,企图破坏系统。

  ⑥CPU其实在读入这条指令的时候,它就已经知道,这条指令是一条特权指令,但是CPU又根据自己的PSW寄存器,发现自己是处于“用户态”。因此,CPU目前知道这是一个应用程序,想要执行的是一条特权指令,那么这种事情是坚决不能进行的,是一个非法事件。

  ⑦这个非法事件会引发一个中断信号。当CPU检测到中断信号后,会立即强行变为“核心态”,同时拒绝执行这条特权指令,并停止运行当前的应用程序,转而会执行一个处理中断信号的内核程序。

  ⑧“中断”使操作系统再次夺回CPU的控制权。

  ⑨内核程序会对这一“中断”进行相应处理,等处理完后,它才会把CPU的使用权再重新还给别的应用程序。

可以看出,CPU从内核态→用户态,其实是修改了一下PSW的标志位,通过执行一条特权指令把PSW的标志位置为“用户态”,这个动作意味着操作系统将主动让出CPU使用权。之后,CPU上就可以运行应用程序。

而CPU从用户态→内核态,是由“中断”引发的,硬件自动完成变态过程,触发中断信号意味着操作系统将强行夺回CPU的使用权。

  除了非法使用特权指令之外,还有很多事件会触发中断信号。但有一个共性是,但凡需要操作系统介入的地方,都会触发中断信号

小结

image-20230303214345819

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言的条件控制语句及循环语句的学习笔记

一、Go的条件控制语句 Go 语言提供了以下几种条件判断语句: 语句描述if 语句if 语句 由一个布尔表达式后紧跟一个或多个语句组成。if…else 语句if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。if 嵌套语句你可以在 if 或…

C++概览:工具链、基础知识、进阶及总结

本篇写给C初学者,作为概览,文中仅包含各方面基础知识,无深入分析。 C基础概念简介 C编译过程示意图 关键词:源文件、预编译、编译、汇编、链接 C工具链总结 cmake项目工程文件是一种中介工程文件,可以转化成其他…

Python+Qt指纹录入识别考勤系统

PythonQt指纹录入识别考勤系统如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonQt指纹录入识别考勤系统>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学…

如何在 OpenEuler 系统中安装 Docker

Docker 是一种流行的开源容器化平台&#xff0c;它能够将应用程序与其依赖项打包成可移植的容器&#xff0c;从而简化了应用程序的部署和管理。本文将介绍在 OpenEuler 系统中安装 Docker 并使用 Docker 容器控制 5G 模块的具体步骤。 安装 Docker 安装 Docker 的具体步骤如下…

react动态路由组件的封装

react动态路由组件的封装 我这篇比较全面 首先下载包 npm i react-router-dom5 这里为什么要用5的版本为啥不用最新的&#xff0c;原因在于老版本跟新版本写法不一样 老版本 import { HashRouter, Route, Switch, Redirect } from react-router-dom;render() {return (<Ha…

JavaEE——何为线程及创建线程

文章目录一、认识线程1. 线程的概念2. 出现多线程的原因3. 进程与线程4. 对多线程的详细解释二、初次实现多线程代码1. 初步了解2. 使用 Java 中的工具查看当前的所有线程3. Java 中创建线程的多种方式一、认识线程 1. 线程的概念 所谓线程&#xff0c;就是指在一个 ‘执行流…

机器学习、数据挖掘和统计模式识别学习(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 机器学习是让计算机在没有明确编程的情况下采取行动的科学。在过去的十年中&#xff0c;机器学习为我们提供了自动驾驶汽车&…

【2021.12.25】xv6系统入门学习

【2021.12.28】为xv6系统添加一个开机密码 文章目录【2021.12.28】为xv6系统添加一个开机密码0、说明1、Ubuntu20上安装xv62、测试指令3、修改系统代码4、添加自己的程序命令0、说明 xv6 是 MIT 设计的一个教学型操纵系统。 记录Ubuntu上安装x86版本的xv6系统&#xff0c;为其…

Acwing---843. n-皇后问题——DFS

n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n&#xff0c;请你输出所有的满足条件的棋子摆法。 …

ChatGPT介绍以及一些使用案例

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

AJAX 异步请求详细教程

文章目录AJAX 异步请求简介Jquery 版 Ajax$.ajax() -- Jquery提供的 ajax 函数注册验证用户名是否可用$.get() 与 $.post()Ajax 返回数据类型JSONjson 简介JSON 对象JSON 数组对象数组混合格式小结JSON 应用JSON 对象的使用JSON 数组的使用响应的 json 数组数组对象混合格式Jac…

八大排序算法之堆排序的实现+经典TopK问题

目录 一.堆元素的上下调整接口 1.前言 2.堆元素向上调整算法接口 3.堆元素向下调整算法接口 二.堆排序的实现 1.空间复杂度为O(N)的堆排序(以排升序为例) 思路分析: 代码实现: 排序测试: ​时空复杂度分析: 2. 空间复杂度为O(1)的堆排序(以排降序为例) 将数组arr调…

IGKBoard(imx6ull)-SPI接口编程-回环测试

文章目录1- 使能imx6ull开发板SPI驱动2- 回环测试imx6ull开发板物理连接3- 编程SPI回环测试4- 代码重难点分析&#xff08;1&#xff09;spi_device结构体&#xff08;2&#xff09;spi_ioc_transfer结构体&#xff08;3&#xff09;ioctl函数对于SIP不了解的可以参考这篇文章&…

GVRP-LNP-VCMP讲解

目录 GVRP讲解 动态创建Vlan并将端口加入Vlan GVRP消息类型 GVRP工作原理 LNP讲解 动态修改接口链路类型 VCMP讲解 动态创建Vlan 相关概念 Vlan同步 VCMP与GVRP的区别 GVRP讲解 动态创建Vlan并将端口加入Vlan GVRP&#xff08;GARR Vlan Registration Protocol&#xf…

28个案例问题分析---01---redis没有及时更新问题--Redis

redis没有及时更新问题一&#xff1a;背景介绍二&#xff1a;前期准备pom依赖连接Redis工具类连接mysql工具类三&#xff1a;过程使用redis缓存&#xff0c;缓存用户年龄业务对应流程图使用redis缓存用户年龄对应代码四&#xff1a;总结一&#xff1a;背景介绍 业务中使用redis…

【机器学习面试】百面机器学习笔记和问题总结+扩展面试题

第1章 特征工程 1、为什么需要对数值类型的特征做归一化&#xff1f; &#xff08;1&#xff09;消除量纲&#xff0c;将所有特征统一到一个大致相同的区间范围&#xff0c;使不同指标之间具由可比性&#xff1b; &#xff08;2&#xff09;可以加快梯度下降收敛的速度&#…

powershell-dns-txt远程加载

2022-10-30 参考原文&#xff1a; 远程下载的通用替代方案 &#xff5c; 红队攻防 https://mp.weixin.qq.com/s/9MAKZZfNB5YFT7jgln5lXQ实现过程 dns环境&#xff1a;kali bind9&#xff08;docker版&#xff09;&#xff0c;ip&#xff1a;192.168.161.128 靶机&#xff…

AD封装转Allego Cadence

AD封装转Allego CadenceAD封装转Allego Cadence软件版本转换步骤导出AD文件在PADS导入AD在cadence导入PADS在cadence导出library修改焊盘替换焊盘AD封装转Allego Cadence 有时候在网上下载的封装是AD格式的&#xff0c;但内容实在太多&#xff0c;为了快速便捷获得cadence格式…

梯度提升算法决策过程的逐步可视化

梯度提升算法是最常用的集成机器学习技术之一&#xff0c;该模型使用弱决策树序列来构建强学习器。这也是XGBoost和LightGBM模型的理论基础&#xff0c;所以在这篇文章中&#xff0c;我们将从头开始构建一个梯度增强模型并将其可视化。 梯度提升算法介绍 梯度提升算法&#x…

【VC 7/8】vCenter Server 基于文件的备份和还原Ⅰ——基于文件的备份和还原的注意事项和限制

目录1.1 协议1.2 还原后配置说明1.3 Storage DRS1.4 分布式电源管理1.5 分布式虚拟交换机1.6 内容库1.7 虚拟机生命周期操作1.8 vSphere High Availability1.9 基于存储策略的管理1.10 其它注意事项虚拟存储区域网络修补关联博文[图片来源]&#xff1a;https://www.vmignite.co…