操作系统总结(第二周 第一堂)

前言:

第一周的重点就在于一张图表:

基于这张图,我们将陷入内核分为了两个大块Trap和Interrupt。同时我们知道一件事情任何一次I/O操作或者错误程序操作都将陷入内核,从而使得内核可以监控所有的外部设备以及维护整个电脑程序运行的安全。

此时就要提出一个问题:

如果每次I/O请求都需要陷入操作系统,或者每次运行n/0时都会报错从而陷入操作系统 。那么我们可不可以自己去通过汇编语言写一个I/O操作或者div操作使得这些操作不会陷入内核,从而提高程序运行的效率。

答案自然是:不可以的

操作系统的保护

保护原因

对于上面那个问题——跨过内核直接进行I/O操作,或者进行非法操作,这会导致操作系统崩溃。

正常流程:

此时如果一开始跨过内核,直接调用I/O接口,那么在最后cpu调用操作系统时,操作系统进程记录中并没有一开始调用I/O接口的进程记录,此时操作系统就会崩溃(操作系统需要对每一个操作完成进程的管理

保护方式

为了防止上面的情况出现设计了一种特殊结构包括:

指令集的双类型、硬件系统的双模式

这一结构的要点在于:

一、硬件系统双模式有:内核模式、用户模式

二、指令集的双类型有:特征指令、非特征指令

三、特征指令:可能对操作系统或计算机本身造成损害的机器指令

四、内核模式:操作系统开始运行后,包括cpu在内的计算机硬件状态

五、内核模式下才能运行特征指令,用户模式下只能运行非特征指令

 保护逻辑

进一步来思考为什么这个结构可以实现保护:

保护原因里面提到的出现崩溃的原因就是:有一些指令他跨过了操作系统被用户直接调用,而这些指令对整个计算机系统的运行是有潜在损害的。

所以解决问题的关键就是让用户不能使用这些指令,让这些指令只能被操作系统使用

此时

将这些指令设置为特征指令,再让硬件系统只有在陷入内核时才转为内核模式,平时硬件系统为用户模式

那么

如果用户不陷入内核,硬件系统会保持用户模式,此时调用I/O指令(属于特征指令),硬件系统会认为这是一种错误的指令调用,于是认为是interrupt重新陷入内核,然后内核会将进程杀死。从而起到保护的作用 

注意:1、陷入内核是非特征指令,回到用户模式是特征指令 

           2、在kernal mode下运行的软件总体叫作kernal

           3、进入kernal mode的方式只有三种中断

操作系统保护的验证(开源编程工具集、GDB调试工具集)

课上老师利用C语言内嵌汇编语言来给我们展示如果直接调用特征指令的后果。

具体操作如下:

这里老师使用的是开源的编程工具集,常用于编译和链接各种编程语言的源代码:

gcc -g :编译C语言文件(包含调试信息,源代码放到目标文件当中)

gcc -o :生成C语言文件的目标文件,文件名为staticcli

gcc -S :将C语言文件变为汇编文件

由于GDB是为unix系统开发的,在window系统上不能直接使用,所以老师这里远程连接了一台linux的虚拟机。linux、MaxOs都是基于unix开发的,所以可以调用GDB。

通过上面的linux操作语句得到包含调试信息的目标文件staticcli,这里再调用gdb -x staticcli对包含调试信息的目标文件进行深入调试。

start语句表示开始gdb模式,info all-registers语句表示查看寄存器中的信息(如下图),寄存器中存放的就是一条条机器语句。通过这个我们可以找到main所在的寄存器位置,然后利用jump指令跳转到main的寄存器。因为编译器为了和操作系统等联系,会在我们的代码外面自动加上一层。

由于staticcli是目标文件,目标文件是由机器代码组成的,而机器代码是汇编语言组成的,所以下面调用x/i语句就可以一一查看文件汇编代码的一条条语句。

nexti语句就是一步步去运行汇编代码。运行结果如下:

一步步查看并运行汇编代码到达asm(“cli”), 由于该指令是一条关中断指令(特征指令)而我们并不是调用接口通过操作系统去运行,而是自己写汇编去运行。所以会被操作系统强行中断进程,报出segmentation fault(段错误)

总结

本文到这里就结束啦~~这堂课设计的内容较为杂乱、复杂,但是学一学拓展一下知识是非常好的呀~~
如果觉得对你有帮助,辛苦友友点个赞哦~理解+总结+编辑花了4h左右呢

知识来源:操作系统概念(黑宝书)、山东大学高晓程老师PPT及课上讲解。不要私下外传

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python绘图】turle 绘图基本案例

文章目录 0. 基础知识1. 蟒蛇绘制2. 正方形绘制3. 六边形绘制4. 叠边形绘制5. 风轮绘制 0. 基础知识 资料来自中国mooc北京理工大学python课程 1. 蟒蛇绘制 import turtle turtle.setup(650, 350, 200, 200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pen…

uniapp开发的跳转到小程序

uniapp开发的h5跳转到小程序 https://www.cnblogs.com/xiaojianwei/p/16352698.html官方&#xff1a;使用 URL Scheme 打开小程序 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html 链接代码 <a href"weixin://dl/business/…

Windows系统搭建Cloudreve结合内网穿透打造可公网访问的私有云盘

目录 ⛳️推荐 1、前言 2、本地网站搭建 2.1 环境使用 2.2 支持组件选择 2.3 网页安装 2.4 测试和使用 2.5 问题解决 3、本地网页发布 3.1 cpolar云端设置 3.2 cpolar本地设置 4、公网访问测试 5、结语 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff…

网站首页添加JS弹屏公告窗口教程

很多小白站长会遇到想给自己的网站添加一个弹屏公告&#xff0c;用于做活动说明、演示站提示等作用与目的。 下面直接上代码&#xff1a;&#xff08;直接复制到网页头部、底部php、HTML文件中&#xff09; <script src"https://www.mohuda.com/site/js/sweetalert.m…

Css基础——精灵图(sprites)和字体图标

1、精灵图 1.1、精灵图的由来 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送 请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 因此&#xff0c;为了有效地减…

37. 解数独

代码实现&#xff1a; bool isValid(char **board, int row, int col, char c) {for (int i 0; i < 9; i) { // 行if (board[row][i] c) {return false;}if (board[i][col] c) { // 列return false;}}int startRow (row / 3) * 3;int startCol (col / 3) * 3;for (int …

【数据分析】数据分析介绍

专栏文章索引&#xff1a;【数据分析】专栏文章索引 目录 一、介绍 二、生活中的数据分析 1.无处不在的数据 2.为什么要进行数据分析&#xff1f; 三、数据挖掘案例 1.案例分析 一、介绍 数据采集&#xff1a;数据采集是指从不同来源收集原始数据的过程&#xff0c;包括…

Linux:kubernetes(k8s)Deployment的操作(13)

创建deployment 命令 kubectl create deploy nginx-deploy --imagenginx:1.7.9 再去使用以下命令分别查询 ubectl get deploy kubectl get replicaset kubectl get pod 他是一个层层嵌套的一个关系 首先是创建了一个 deploy 里面包含着replicaset replicaset里面含有…

计算机视觉——目标检测(R-CNN、Fast R-CNN、Faster R-CNN )

前言、相关知识 1.闭集和开集 开集&#xff1a;识别训练集不存在的样本类别。闭集&#xff1a;识别训练集已知的样本类别。 2.多模态信息融合 文本和图像&#xff0c;文本的语义信息映射成词向量&#xff0c;形成词典&#xff0c;嵌入到n维空间。 图片内容信息提取特征&…

C++四种类型转换

本章草稿代码Gitee仓库&#xff1a;type_cast 文章目录 0.前言1. static_cast2. reinterpret_cast3. const_cast4. dynamic_cast 0.前言 C语言的类型转换有2种&#xff1a; 隐式类型转换显式类型转换 这里的类型转换并不是很规范&#xff0c;有时候会有潜在风险&#xff0c;…

VMware安装Ubuntu 18.04.2

下载Ubuntu映像 下载地址&#xff1a;http://old-releases.ubuntu.com/releases/18.04/ 下载名称&#xff1a; ubuntu-18.04.2-desktop-amd64.iso 清华镜像站&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/ 阿里云镜像站&#xff1a;https://mirrors.ali…

2024年最新阿里云优惠券获得方法整理

随着云计算技术的日益普及&#xff0c;阿里云作为国内领先的云服务提供商&#xff0c;受到了越来越多企业和个人的青睐。为了吸引广大用户&#xff0c;阿里云经常推出各种优惠活动&#xff0c;其中就包括阿里云优惠券&#xff0c;可以帮助用户降低成本&#xff0c;享受更优惠的…

【计算机网络】1.5 分组交换网中的时延、丢包和吞吐量

A.分组交换网中的时延 当分组从一个节点沿着路径到后一节点时&#xff0c;该分组在沿途的各个节点经受了几种不同类型的时延。 时延的类型 处理时延 - d n o d a l d_{nodal} dnodal​ 处理时延包括以下部分—— a. 检查分组首部 b. 决定分组导向 排队时延 - d p r o c d_{…

【超万字超详细Linux常用命令大全】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;书生♡&#xff0c;今天主要和大家分享一下LIinux的基础命令&#xff0c;带有各种命令的作用&#xff0c;语法&#xff0c;参数和详细案例&#xff0c;希望对大家有所帮助。 &#x1f49e;&#x1f49e;前路漫漫…

【MySQL性能优化】- 一文了解MVCC机制

MySQL理解MVCC &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff…

C# ListView 控件使用

1.基本设置 listView1.Columns.Add("序号", 60); //向 listView1控件中添加1列 同时设置列名称和宽度listView1.Columns.Add("温度", 100); //下同listView1.Columns.Add("偏移", 100);listView1.Columns.Add("分割", 50);listView1…

QT----计算器

目录 1 搭建标准界面2、 逻辑编写2.1 初始化 github链接&#xff1a;基于qt的计算器 更多内容可以点击这里查看个人博客&#xff1a;个人博客 1 搭建标准界面 按照下图搭设界面 修改样式让这计算器看起来更像一点&#xff0c;同时对按钮分组进行样式编辑&#xff0c;添加字符…

导入fetch_california_housing 加州房价数据集报错解决(HTTPError: HTTP Error 403: Forbidden)

报错 HTTPError Traceback (most recent call last) Cell In[3], line 52 from sklearn.datasets import fetch_california_housing3 from sklearn.model_selection import train_test_split ----> 5 X, Y fetch_california_housing(retu…

IDEA编写各种WordCount运行

目录 一、编写WordCount(Spark_scala)提交到spark高可用集群 1.项目结构 2.导入依赖 3.编写scala版的WordCount 4.maven打包 5.运行jar包 ​6.查询hdfs的输出结果 二、本地编写WordCount(Spark_scala)读取本地文件 1.项目结构 2.编写scala版的WordCount 3.编辑Edit …

根据服务器系统选择对应的MySQL版本

1. 根据服务器系统选择对应的MySQL版本 MySQL有多个版本&#xff0c;选择对应的版本&#xff0c;重点信息是Linux的GLIBC版本号&#xff0c;Linux的版本、系统位数。 1.1 查看Linux的GLIBC版本号 通常libc.so会支持多个版本&#xff0c;即向前兼容&#xff0c;查看该文件中…