王道考研:特权指令、用户态与核心态、内核程序与应用程序;中断和异常;系统调用;宏内核与微内核;电脑开机全过程;虚拟机原理

news2025/2/23 23:48:20

一、操作系统的运行机制 

kernel当中包含的是OS当中最核心的部分,像图形界面不是放在kernel当中的,离开图像界面OS仍然可以通过命令行来使用 

CPU拿到一条指令就已经可以区分它是特权指令还是非特权指令了

操作系统根据PSW来判断当前正在运行的是用户程序还是内核程序 

刚开机的时候,CPU为内核态,操作系统的内核程序先上CPU执行 》》开机完成后,用户可以启动某款应用程序,此时操作系统内核程序主动让出CPU,让用户程序上CPU执行(在让出CPU之前把PSW标志位设置为用户态)

如果在用户态植入一条特权指令,CPU可以检查出来下一句要执行的指令为特权指令,但是同时检测到当前程序为用户态程序,就会触发一个中断。当CPU检测到中断之后就会立即变为核心态,并停止运行当前应用程序,转而运行操作系统的内核代码(中断使得OS再次夺取CPU的使用权),当OS处理完中断之后,就会再次将CPU的使用权交给其他应用程序

核心态》用户态:只需要修改PSW即可 

用户态》核心态:只能通过中断引发,由硬件自动转变,触发中断后OS就会夺回CPU的使用权进而执行核心态的相关功能来响应这次中断请求

二、中断和异常

像整数除以0是程序设计的bug,不是OS能够修复的,就直接终止掉就可以了 

当一个用户程序执行陷入指令的时候,就意味着用户程序主动把CPU的使用权还给给内核程序,想让操作系统内核来为他提供某种服务,前面提到的系统调用就是通过陷入指令来完成的,陷入指令不是特权指令,因为它是由用户程序执行的,意味着他工作在用户态

之所以称之为内中断,是因为中断来自于CPU的内部,他是由于CPU执行当前指令所产生的中断

外中断和当前执行的指令是没有关系的

只要产生中断,不管内外,都会切换到内核程序去执行,来处理这个中断

CPU在每一条指令执行结束的时候,都会例行检查是否有外部中断的信号需要我来处理,并根据中断信号的类型来决定走哪一条中断处理子程序

三、系统调用 

 

GUI:用户对窗体进行的所有操作都需要执行OS的GUI模块的代码来执行,GUI不在ker32模块里面,他是独立出来的模块,负责执行单独的任务,比如多核的CPU,我就可以提供一个核主要给GUI模块使用

操作系统向上层提供的接口是系统调用

涉及到共享设备的操作一般都需要进行系统调用,让OS来合理分配资源

例如C语言的printf函数,它是帮助你封装好之后的结果,最后编译的时候就会变成上图所示的一系列命令,其中就包含陷入指令的汇编代码

例如:执行CreateProcess函数的时候,里面内嵌fork代码,fork函数执行之前肯定要给寄存器赋值,里面就包含了是几号系统调用,然后执行陷入指令,产生中断,根据刚刚传递的参数决定进入几号中断处理函数(系统调用) 

系统调用仅仅是OS kernel的一部分,而且是可以供用户调用的接口的那一小部分

  系统调用检测寄存器当中的参数,来进一步执行中断处理子程序 

四、操作系统体系结构(上)

  

Ubuntu主要是实现非内核的功能,主要功能的内核都还是使用的Linux

大内核保留了OS传统的所有功能,微内核则是把其中最重要的功能独立出来做出微内核 

四、操作系统体系结构(下) 

  

分层结构:层与层直接紧密耦合,便于调试和验证,但是层数多,不可以跨层调用,使得系统调用的时间开销大

模块化:将操作系统按照功能分成若干模块,规定各个模块的接口,便于模块之间进行通信不需要消息机制,这样引入新的模块/文件系统就不需要重新编译整个内核 

微内核:只把中断、原语、进程通信等最核心的功能放到内核,其余的放入用户态

外核:内核负责进程调度、通信,外核为用户进程分配未经抽象的硬件资源(不虚拟、不抽象),减少了频繁的映射开销

 

设备的驱动程序就属于可加载的内核模块,它并不影响系统能不能正常运行,它只是影响系统的可拓展性,如果我们加载了驱动程序的模块,系统就可以支持新的模块,所以可加载的内核模块是一个锦上添花的东西 

五、操作系统的引导

开机的时候如何让操作系统在你的电脑上运行起来?

C盘安装了操作系统并使用C盘来启动操作系统,就称C盘为你的这个磁盘的活动分区

本质就是找到启动管理程序并且执行它去完成OS的启动工作 

ROM引导程序/自举程序/boot程序

磁盘引导程序根据分区表去判断C盘所处的位置

硬件自检,会自己检查主机的硬件是否一切正常,然后执行第二步

六、虚拟机

第一类:当上层的操作系统想要使用特权指令的时候,底层的VMM会截获这条指令,并合理执行,让上层的OS以为自己有特权一样

第二类:OS就和宿主OS里的一个普通进程差不多

下载另一个操作系统的镜像文件

 

 第二类可以很方便地进行迁移,你把自己虚拟机的iso镜像文件发给别人,别人在用的时候就和你的电脑环境一模一样了,里面的软件也都保持不变

把特权指令进行了细分,只有少数的敏感指令会被VMM截获,从而提高系统执行的效率

第二类:一部分VMM运行在用户态,一部分运行在内核态,在内核态的这部分是以虚拟机驱动程序的方式加载到操作系统的内核当中的,用户所有系统调用,比如write都会被VMM截获,并进行处理,代替应用程序向底层的宿主OS发出系统调用

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

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

相关文章

html实现元素拖动替换

效果 实现 复制粘贴.html即可使用 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>拖动替换</title></head><style>.box {width: 500px;height: 500px;background: gainsboro;border-radius: 10px;}…

Java中HashMap的基本介绍和详细讲解,HashMap的遍历以及HashMap的底层源码的分析

HashMap 基本介绍 HashMap 是 Java 中的一个集合类&#xff0c;实现了 Map 接口&#xff0c;用于存储键值对&#xff08;key-value&#xff09;数据。它基于哈希表的数据结构实现&#xff0c;可以实现高效的查找、插入和删除操作。 HashMap 细节讨论 无序性&#xff1a; Has…

多语言对接电商平台api接口获取京东商品评论数据代码展示示例

商品评论接口的意义&#xff1a; 确认消费者关注与产品卖点是否一致&#xff1b; 洞察用户对价格、促销、直播的敏感度&#xff1b;发现产品质量、客服、物流等方面的问题&#xff1b;找到品牌宣称与用户预期、实际场景之间差异化&#xff1b;挖掘消费者偏好的差异性&#xff…

【设计模式--原型模式(Prototype Pattern)

一、什么是原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它的主要目的是通过复制现有对象来创建新的对象&#xff0c;而无需显式地使用构造函数或工厂方法。这种模式允许我们创建一个可定制的原型对象&#xff0c;然后通过复制…

windows下Qt、MinGW、libmodbus源码方式的移植与使用

windows下Qt、MinGW、libmodbus源码方式的移植与使用 1、前言 libmodbus官网&#xff1a;https://libmodbus.org/ github下载&#xff1a;https://github.com/stephane/libmodbus 截止2023年8月26日时&#xff0c;libmodbus最新版本为3.1.10&#xff0c;本篇博客基于此版本进…

揭秘蓝牙技术:从概念到应用的全解析

目录 引言一、蓝牙技术的概念和历史1、简介2、各个版本3、分类 二、蓝牙技术的工作原理二、蓝牙技术的优点和缺点三 、蓝牙技术的设计和应用四、总结 引言 当我们谈论蓝牙技术时&#xff0c;首先浮现在脑海中的可能是那些小巧的、形似鹅卵石的设备。它们是我们的移动电话、平板…

MIUI 欧版刷机教程(操作篇)

文章目录 0 前置条件1 下载ROM包2 确定刷机方式3 线刷教程4 卡刷教程使用系统更新使用 TWRP 问题汇总 0 前置条件 必须先解除手机的 bootloader 锁。详细教程参见官网&#xff1a;申请解锁小米手机 (miui.com)。 1 下载ROM包 在 MIUI EU 官方论坛&#xff08;需要科学上网&a…

java八股文面试[多线程]——合适的线程数是多少

知识来源&#xff1a; 【并发与线程】 合适的线程数量是多少&#xff1f;CPU 核心数和线程数的关系&#xff1f;_哔哩哔哩_bilibili

深入篇【C++】set和map(multiset/multimap)特性总结与使用

深入篇【C】set和map(multiset/multimap&#xff09;特性总结与使用 一.set/multiset总结二.map/multiset总结三.set/map应用 一.set/multiset总结 set是按照一定次序存储元素的容器在set中&#xff0c;元素的value也标识它(value就是key&#xff0c;类型为T)&#xff0c;并且每…

【趣味随笔】怎么维护自己的电脑?

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

微信小程序开发教学系列(4)- 数据绑定与事件处理

4. 数据绑定与事件处理 在微信小程序中&#xff0c;数据绑定和事件处理是非常重要的部分。数据绑定可以将数据和页面元素进行关联&#xff0c;实现数据的动态渲染&#xff1b;事件处理则是响应用户的操作&#xff0c;实现交互功能。本章节将详细介绍数据绑定和事件处理的基本原…

Java项目-苍穹外卖-Day06-微信小程序开发

文章目录 前言1.HttpClienthttpclient是什么入门案例发送GET请求发送POST请求Httpclient工具类 2.微信小程序介绍准备工作注册小程序和完善对应信息下载开发者工具 入门案例 前言 本篇主要是主要是wx小程序开发入门和HttpClient的使用介绍 完成了苍穹外卖用户端的 微信登陆 和…

Leetcode-每日一题【剑指 Offer 37. 序列化二叉树】

题目 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑&#xff0c;你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 …

抖店必须绑定抖音账号吗?聊6个抖店不为人知的小细节,别外传

我是王路飞。 现在做抖店&#xff0c;比如绑定一个抖音账号吗&#xff1f; 了解过抖店的朋友都知道&#xff0c;之前开通抖音小店&#xff0c;是需要绑定一个抖音号作为店铺的官方账号的。 而且属于硬性规定&#xff0c;必须要绑定&#xff0c;否则店铺无法正常运营。 但是…

Adams软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Adams是一款由Mechanical Dynamics Inc&#xff08;MDI&#xff09;开发的有限元分析软件&#xff0c;主要用于模拟机械系统的运动和动力学行为。它广泛应用于汽车、航空航天、机械、电子等多个领域。以下是对Adams软件的详细介…

利用lammps模拟蓝宝石在水润滑环境下的抛光

一 问题描述 蓝宝石&#xff08;Al2O3&#xff09;由于其独特的晶体结构&#xff0c;优异的物理化学特性&#xff0c;被广泛应用于航空航天等领域。高精尖的应用领域要求蓝宝石具有纳米级的表面粗糙度以及严格可控的亚表面缺陷。影响超精密加工最终性能的因素主要集中在工件表…

Linux学习之Ubuntu 20使用systemd管理OpenResty服务

sudo cat /etc/issue可以看到操作系统的版本是Ubuntu 20.04.4 LTS&#xff0c;sudo lsb_release -r可以看到版本是20.04&#xff0c;sudo uname -r可以看到内核版本是5.5.19&#xff0c;sudo make -v可以看到版本是GNU Make 4.2.1。 需要先参考我的博客《Linux学习之Ubuntu 2…

Ngnix配置Minio动态代理:访问桶列表报错解决方案:

报错信息&#xff1a; Objects List unavailable. Please review your WebSockets configuration and try again nginx配置如下: [rootwww conf]# cat nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro…

朋友圈如何快速转发?怎么自动定时转发朋友圈?

微信朋友圈是微信的一个功能&#xff0c;可以让用户分享生活动态、照片、视频等&#xff0c;也可以看到好友分享的动态。朋友圈的分享可以增加社交互动&#xff0c;可以加强朋友之间的联系&#xff0c;分享彼此的生活和心情。 转发朋友圈的作用也是非常明显的。当用户看到有趣的…