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

前言:

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

基于这张图,我们将陷入内核分为了两个大块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及课上讲解。不要私下外传

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv9改进策略:注意力机制 |通道注意力和空间注意力CBAM | GAM超越CBAM,不计成本提高精度

💡💡💡本文改进内容:通道注意力和空间注意力CBAM,全新注意力GAM:超越CBAM,不计成本提高精度 改进结构图如下: YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️…

【Claude 3 Haiku】基于Amazon Bedrock初体验Claude 3 Haiku 模型

文章目录 1. Claude 3 Haiku介绍2. Amazon Bedrock介绍3. 访问 Amazon Bedrock UI4. 授权Claude 3 Haiku访问权限5. Claude 3 Haiku 初体验6. Claude 3 Haiku 用例6.1 让Claude 3 Haiku写一段Code6.2 让Claude 3 Haiku翻译英文6.3 让Claude 3 Haiku 识别图片并作文字性描述 7. …

第六节:使用SMB开发WebService

一、概述 webservice在日常开发中是常用的接口形式,SMB在设计之初就将webservice作为重要的代理协议。在组件库中提供了webservice input和webservice output两个组件,分别用于发布接口和调用接口。 二、发布webservice 在csdnProject工程中创建名为c…

教师人事档案管理系统|基于springboot框架+ Mysql+Java+B/S架构的教师人事档案管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 教师后台功能模块 系统功能设计 数据库E-R图设计 lu…

永热爱 敢向前 | Paraverse平行云的2023 年终总结

永热爱,敢向前 值此新年,回顾2023,仅以此句,献给所有XR产业信仰者 2023 年,是XR产业技术和场景承上启下的关键之年 在这场波澜壮阔的技术潮中 「Paraverse平行云」踏浪前行 已是第八个年头,让我们一起…

【C++map和set容器:AVL树、红黑树详解并封装实现map和set】

[本节目标] map和set底层结构 AVL树 红黑树 红黑树模拟实现STL中的map和set 1.底层结构 前面对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现,这几个容器有个 共同点是:其底层都是按照二叉搜索树来实现的,但…

如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档

目录 前言 Swagger Editor本地接口文档公网远程访问 1. 部署Swagger Editor 2. Linux安装Cpolar 3. 配置Swagger Editor公网地址 4. 远程访问Swagger Editor 5. 固定Swagger Editor公网地址 结语 前言 作者简介: 懒大王敲代码,计算机专业应届生 …

独立开发的轻量级简洁开源论坛BBS PHP源码 – 2023新版发布

最新的轻量级开源论坛php源码发布啦!这是一款独立开发的论坛系统,可以帮助你快速地开发出你想要的网站。 如果你是PHP初学者,这款论坛系统非常适合你入门学习。不过,需要注意的是,由于它并没有进行商业化改造&#xf…

【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…

中电金信:技术实践|Flink维度表关联方案解析

导语:Flink是一个对有界和无界数据流进行状态计算的分布式处理引擎和框架,主要用来处理流式数据。它既可以处理有界的批量数据集,也可以处理无界的实时流数据,为批处理和流处理提供了统一编程模型。 维度表可以看作是用户来分析数…

HTML案例-2.标签综合练习

目录 效果 知识点 1.图像标签 2.链接标签 3.锚点定位 4.base标签 源码 页面1 页面2 效果 知识点 1.图像标签 <img src="图像URL" /> 单标签 属性 属性值 描述 src URL 图像的路径 alt 文本

phpstudy自定义安装mysql8.3并启动

phpstudy自定义安装mysql8.3并启动 先去官网:https://dev.mysql.com/downloads/下载压缩包文件 然后按下面的图片一步一步操作 选择版本&#xff0c;选择第一个压缩包文件&#xff0c;下载 下载完成后&#xff0c;解压到phpstudy环境目录下&#xff0c;如下图 然后进入mysq…

欧科云链:比特币现货ETF后时代,链上数据揭示真实供需关系

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 本文于3月11日首发TechFlow深潮&#xff0c;原标题为《比特币现货ETF通过后的2个月&#xff1a;链上数据揭示BTC供不应求》。文中观点纯属笔者基于链上数据进行分析&#xff0c;不构成对任何潜在投资目标的推荐或意见…

github 中的java前后端项目整合到本地运行

前言: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

【MySQL基础】MySQL基础操作

文章目录 &#x1f349;什么是数据库&#xff1f;&#x1f353;MySQL数据库&#x1f9c0;1.数据库操作&#x1f346;1.1展示数据库&#x1f346;1.2创建数据库&#x1f346;1.3使用数据库&#x1f346;1.4删除数据库 &#x1f9c0;2.常用数据类型&#x1f9c0;3.数据表操作&…

SkyWalking上报Java应用数据

重要 本文中含有需要您注意的重要提示信息&#xff0c;忽略该信息可能对您的业务造成影响&#xff0c;请务必仔细阅读。 通过SkyWalking为应用埋点并上报链路数据至可观测链路 OpenTelemetry 版后&#xff0c;可观测链路 OpenTelemetry 版即可开始监控应用&#xff0c;您可以…

容联云携手农商行,大模型应用·容犀Copilot重塑营销与服务

当下银行业希望通过大模型探索&#xff0c;提升客服中心的效能和产能&#xff0c;并获得更佳的客户体验及业务转化效果。 某上市农商行与容联云携手&#xff0c;在智能客服、智能荐卡、智能分期、智能运营等业务场景中&#xff0c;通过大模型知识库、会话洞察、话术挖掘等&…

高端,漂亮,看的过眼的模板才能激起我的学习兴趣嘛

在这个万物vue的年代&#xff0c;网页设计越来越框架化。 上网搜个资料学习学习吧&#xff0c;咵咵咵&#xff0c;“游泳健身&#xff0c;vue了解一下” 我只是想简单地学个html&#xff0c;js啊&#xff01;怎么就这么复杂&#xff01; 曾几何时&#xff0c;在网上找个网页…

日志 | 日志级别 | c/c++ | 终端显示不同的颜色

日志想必都知道 优先级从高到低依次为&#xff1a;OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL日志参考1 #define RED "\x1B[31m" #define GRN "\x1B[32m" #define YEL "\x1B[33m" #define BLU "\x1B[34m" #define MAG "…

Spring Boot 中使用 Redis + Aop 进行限流

Spring Boot 中使用 Redis 进行限流&#xff0c;通常你可以采用如下几种方式&#xff1a; 令牌桶算法&#xff08;Token Bucket&#xff09;漏桶算法&#xff08;Leaky Bucket&#xff09;固定窗口计数器&#xff08;Fixed Window Counter&#xff09;滑动日志窗口&#xff08…