【绪论0】

#pic_center

R 1 R_1 R1

R 2 R^2 R2

目录

  • 知识框架
  • No.0 引言
  • No.1 操作系统的概念功能和定义
    • 一、操作系统的概念和定义
      • 1、电脑的演变
    • 二、操作系统的功能和目标
  • No.2 操作系统的特征
    • 一、并发
    • 二、共享
    • 三、虚拟
    • 四、异步
  • No.3 操作系统的发展与分类
    • 一、手工操作阶段
    • 二、批处理阶段
    • 三、分时操作系统
    • 四、实时操作系统
    • 五、网络操作系统+分布式操作系统+个人计算机操作系统
  • No.4 操作系统的运行机制
    • 一、简单了解程序的运行原理
    • 二、两类程序
    • 三、两类指令
    • 四、两种处理器状态
    • 五、内核
    • 六、如何变态
  • No.6 中断和异常
    • 一、中断的作用
    • 二、中断的分类
    • 三、中断机制的基本实现原理
  • No. 6 操作系统的体系结构
    • 一、大内核
    • 二、微内核
  • No.7虚拟机
    • 一、传统计算机
    • 二、虚拟机
    • 三、两类虚拟机对比

知识框架

No.0 引言

首先来看一下大家都熟悉的操作系统都有哪些:

比如说苹果的电脑使用的操作系统是mac os、手机使用的操作系统是IOS;

比如常用的电脑:Windows系统、以及手机Android系统。

对于技术专业的来说:Linux操作系统

在我们学习这门课的时候我们可以通过日常生活中使用操作系统的经验来结合我们所要学习的到的知识点进行思考。

并且把操作系统知识和我们的啊现实生活给连接起来做到学以致用

No.1 操作系统的概念功能和定义

一、操作系统的概念和定义

要回答的就是什么是操作系统这样一个问题?

1、电脑的演变

结合生活经验,操作系统在整个计算机体系中的所处的位置和角色。

即电脑的演变:电脑是怎么样一步一步变成我们现在看到的这个样子的

即一台电脑的产生~~~

step1:厂家组装一台裸机

step2:出售前安装操作系统

step3:用户安装应用程序(eg:QQ)

step4:用户使用QQ聊天;

下面是计算机系统的层次结构

  1. 裸机(纯硬件) 裸机包括:CPU+内存+硬盘+主板等等。

二、操作系统的功能和目标

要回答的就是它需要做什么这样的一个问题。

1,资源的管理者

2/ 向上提供服务

对硬件机器的扩展

No.2 操作系统的特征

image-20230801144557377

一、并发

其中并发和共享是最基本的特征,并且两者互为存在条件。

定义:并发是指两个或者多个事件同一时时间间隔内发生这些事件宏观上看是同时发生的微观上其实是交替发生的
与这个并发概念比较容易混淆的是并行的概念并行是指两个或者多个事件在同一时刻同时发生。

例子如下:

那么在操作系统上并发性的体现是?

操作系统的并发性:操作系统的并发性指的是在计算机当中同时运行着多个程序这些程序宏观上看
他们是同时运行着的但是微观上看其实是交替运行的

二、共享

三、虚拟

四、异步

No.3 操作系统的发展与分类

image-20230801153318850

一、手工操作阶段

主要想解决的问题:?

优点?

缺点?

二、批处理阶段

三、分时操作系统

四、实时操作系统

五、网络操作系统+分布式操作系统+个人计算机操作系统

No.4 操作系统的运行机制

image-20230801154101591

一、简单了解程序的运行原理

二、两类程序

三、两类指令

四、两种处理器状态

五、内核

六、如何变态

No.6 中断和异常

image-20230803204323453

一、中断的作用

二、中断的分类

三、中断机制的基本实现原理

No. 6 操作系统的体系结构

一、大内核

二、微内核

No.7虚拟机

一、传统计算机

我们来介绍虚拟机的概念:

首先看一下传统的计算机,传统的计算机在一个物理机器上只能运行一个操作系统,操作系统之上又可以运行各种各样的用户进程,那这看起来似乎是很合理的,但是在有的商业化的环境当中,这会导致硬件资源利用率不充分的一个问题:比如你拥有一个非常强大的一个物理机性能很好,但是由于这台机器上他只能运行一个操作系统,那么你的这台机器如果说你想要租给其他人使用的话,那其他人的这个要运行的东西只能在同一个操作系统之上运行。比如说王者荣耀的这个游戏服务器和吃鸡的那个游戏服务器他必须放在同一个操作系统之上来运行,但两个进程他们在同一个操作系统之上是不是有可能会有一些安全隐患?他们之间可能会相互影响也会相互的争夺操作系统管理的这些资源。

所以在商业环境当中两个应用让他们同时在一个操作系统上运行这可能会造成一些隐患,那一种解决方法是:我们把其中一个应用把它迁移到另一台物理机器上,然后这台物理机器上有一个独立的操作系统。那这样两个应用就不可能相互影响对吧,但是这又会导致物理机器硬件资源的极大浪费,刚才说很多商业级的这种物理机器它的性能是很强的,我的这个硬件性能本来可以同时支持你们两个进程的使用绰绰有余,但是为了安全起见我又不得不浪费把其中一个进程迁移到另一台机器上去运行,所以传统的这种结构一个机器上只能安装一个操作系统会带来很多应用上的限制。

image-20230805155609308

二、虚拟机

因此就有人发明了虚拟机Virtual machine英文缩写叫VM,虚拟机是使用虚拟化的技术把一台物理机器虚拟化为多台虚拟机器,每一个虚拟机器上都可以独立的运行一个操作系统,要把一台物理机器虚拟化为多台虚拟机器,就需要使用到虚拟机管理程序,英文叫Virtual machine monitor缩写VMM,这个缩写也非常常见,那也有人把虚拟级管理程序称为hypervisor,在中文上也会把它翻译为虚拟机监控程序,所以虚拟机管理程序虚拟机监控程序VMM hypervisor这些术语都是一个意思。那接下来使用虚拟机管理程序这个术语。

虚拟机管理程序分为两类:

第一类的虚拟机管理程序会直接运行在硬件之上,虚拟机管理程序会把一个物理机器虚拟化为多台虚拟机器,会把一个总的硬件资源划分为多个部分,分别给各个虚拟机来使用,那每一台虚拟机器上面可以安装各自的操作系统,比如第一台虚拟机上安装Windows,第二台上面安装Linux,而第三台上面又安装Windows,在每一个操作系统之上又可以运行各自的用户进程,我们可以简单说一下如何把一个机器上的硬件资源把它分配给各个虚拟机器:比如一个CPU一个单核的CPU它也可以模拟多台虚拟机器,我们只需要把这个CPU的时间片进行划分,每个虚拟机器分配若干的时间片,那这样的话在上层的这个操作系统看来似乎给自己分配的就是一个独立的CPU,但事实上只是把这个物理CPU的某一些时间片分配给他了而已,那磁盘和内存的分配更不用说了只需要把磁盘空间划分出来分配给个虚拟机器,内存空间划分出来分配给各个虚拟机器那这样的话,每个虚拟机器都可以拥有各自独立的硬件资源,就有点类似于传统的计算机当中操作系统把硬件资源进行了划分,像CPU就是按时间划分为时间片像内存磁盘这些就是划分为了不同的空间分配给各个进程,这样每个进程是不是也可以拥有自己独立的资源。所以第一类虚拟机管理程序就有点类似于我们传统的操作系统一样,他会负责直接管理这些硬件资源并且分配这些硬件资源这只是一层更深的套娃而已。

那值得一提的是只有虚拟机管理程序是运行在内核态的,只有他可以使用特权最高的那些指令,而上层的操作系统和应用程序他们实际上是运行在用户态的。那这会导致一个问题:上层的操作系统他可不知道自己运行在用户态,他以为自己运行在内核态,所以上层的操作系统依然会使用一些特权指令,对吧但是刚才说,只有虚拟及管理程序运行在内核态,所以上层的这个操作系统不能让他使用特权指令,那这种情况怎么办呢?当上层的操作系统想要使用特权指令的时候,他的这个行为动作会被虚拟管理程序给截获,然后这个虚拟级管理程序会负责把上层的操作系统想要执行的这个特权指令进行一些等价的转换,反正就是要给上层模拟出好像这个指令执行成功了那种感觉,所以我们说上层的操作系统它是运行在虚拟内核空间的,它并不是真正的内核空间,实际上是用户空间,只不过他自己以为自己运行在内核空间而已,这是第一类虚拟级管理程序直接运行在硬件之上,直接会管理硬件分配硬件资源接下来。

再来看第二类的虚拟级管理程序,那这一类的虚拟管理程序它不是直接运行在硬件上的,而是运行在一个宿主操作系统上host OS。比如在我的Mac电脑上我安装了Mac OS这个操作系统,那我可以在我的这个电脑上安装第二类的虚拟机管理程序。比如很多同学可能听过Virtual box或者Vain well,这是学生比较常用的两款虚拟机管理程序。那电脑上是安装了Virtual box安装了这个软件之后,就可以去下载另一个操作系统的镜像文件。比如在这个Virtual box上安装了一个Linux的操作系统,并且可以指定要给我上层安装的这个操作系统分配多大的内存,也可以给他指定要给他分配多大的磁盘空间,那接下来我就可以点这个启动,然后在我的Mac电脑上启动一个Linux的操作系统。所以我的电脑本身是Mac OS的操作系统这就是宿主操作系统,在我的操作系统之上我安装了某一个第二类的虚拟机管理程序Virtual box,在这个虚拟管理程序之上我就可以安装一个客户操作系统,比如我安装的就是一个Linux,那如果我愿意的话我也可以安装一个Windows的操作系统那如果我再安装一个Windows的这个客户操作系统的话,我可以在我的电脑上同时启动两个客户操作系统,当然也可以只启动一个,只要我的硬件资源足够那我就可以在我的这个宿主操作系统之上安装并且同时启动多个客户操作系统,那显然在我的操作系统之上除了客户操作系统之外还会同时运行着很多我自己安装的一些进程,比如我的电脑上还在运行PPT相关的进程,同时我也可以启动我的这个客户操作系统让我的客户操作系统也正常的工作,而我的客户操作系统启动了之后就跟正常的操作系统一样,我也可以在上面安装软件也可以让这些软件正常的运行,如果想要给大家演示Windows操作系统的一些情况,那我就会启动一个Windows操作系统的虚拟机器然后在上面安装一些Windows的应用程序给大家做,这样的演示好所以第二类的虚拟机管理程序它并不是直接运行在硬件之上而是运行在宿主操作系统上面,这个虚拟机管理程序想要给各个虚拟机器分配硬件资源,那么他只能请求操作系统给他分配然后再由这个虚拟机管理程序进行再分配硬件资源的管理者,依然是宿主操作系统。

image-20230805155644440

三、两类虚拟机对比

那这是两类虚拟机管理程序第一类虚拟机管理程序和第二类虚拟机管理程序思想各不相同那由于他们的实现方式不同因此就造成了一些特性上的差异这给大家做一个总结首先对物理资源的控制权第一类的虚拟机管理程序它是直接运行在硬件之上的可以直接控制和分配这些物理硬件资源。而第二类的这个虚拟机管理程序它是运行在宿主操作系统之上的依赖于宿主操作系统为其分配物理资源他要使用硬件资源只能向宿主操作系统申请并且被分配好。因此两类虚拟机管理程序在给上层的这个客户操作系统分配资源的时候也会出现一些差异:比如第一类虚拟机管理程序在安装客户操作系统的时候他会直接在原本的硬盘上给他划分一些存储空间直接分配给他。比如说我把0号块到1024号块全部分配给第一台虚拟机VM1然后从1025号快一直到2048号快全部给他分配到第二台虚拟机VM2,我可以直接把一些未经抽象的物理资源分配给上层的虚拟机器那这就有点类似于我们之前说的外核的那种分配方式,那相比之下第二类的虚拟机器向宿主操作系统申请物理资源的时候宿主操作系统给他分配的这个资源是经过抽象的。比如第二类虚拟机管理程序想要给第一台虚拟机分配10个GB的磁盘存储空间那么这个虚拟机管理程序会向操作系统申请创建一个大小为10GB的大文件,那这个大文件具体存放在磁盘当中的哪些位置是由宿主操作系统来决定的,那虚拟机管理程序在获得了这10GB的大文件之后他又会把这10GB的空间给分配给第一台虚拟机器,让第一台虚拟机器以为自己好像拥有了10GB的磁盘存储空间一样,但事实上这只是一个虚拟磁盘这10GB的空间,在磁盘当中未必是连续的背后对应的是宿主操作系统文件系统当中的一个大文件而已,这是对于外存的分配那对于内存的分配是不是也一样?第二类的虚拟机管理程序向操作系统请求给他分配一片内存空间,那宿主操作系统给他分配了4 GB的内存空间但这4 GB事实上是虚拟内存对吧各个页面也许是离散存储的好那这个虚拟机管理程序获得了这4 GB的虚拟内存之后,又可以把这4 GB的虚拟内存拆分分给不同的这个虚拟机器比如第一台虚拟机器分两GB第二台虚拟机器又分两GB他就是这么干的。所以就是多增加了一层套娃他本身得到的也是一个虚拟的硬件资源然后他又把这个虚拟的硬件资源再虚拟再分配给各个虚拟机器那显然这会导致第一类虚拟机管理程序性能更好,因为我们每进行一次硬件的虚拟化就意味着上层的这些用户操作系统在使用这些硬件资源的时候他的这个地址需要先映射为这个虚拟机管理程序获得的这个虚拟地址空间,然后宿主操作系统又需要把这个4GB的虚拟地址空间再给映射到实际的物理地址空间,所以经过了多层的虚拟就意味着在使用这些资源的时候又需要经过多层的映射才可以对应到最终的一个物理地址上,那这就会导致第二类的虚拟及管理程序它的性能更差总是需要通过这个宿主操作系统作为中介,

image-20230805155721784

另一个方面在一台机器它的硬件资源确定固定不变的情况下,第一类的虚拟机管理程序往往可以支持更多台的虚拟机因为第一类的这个虚拟机管理程序他拥有所有的硬件资源对吧,而第二类的虚拟机管理程序他自己的资源需要跟宿主操作系统申请那宿主操作系统他本身也需要一些硬件资源,同时他上面的这些进程也需要使用一些硬件资源可以在硬件资源相同的情况下显然第一类的这个虚拟机管理程序可以支持更多台的虚拟机,这是可以支持的虚拟机数量

接下来虚拟机的可迁移性:第一类的虚拟机管理程序要迁移虚拟机比如要把这台虚拟机器迁移到另一个虚拟机管理程序之上那这个迁移的动作是比较麻烦的而第二类的虚拟机管理程序要迁移一台虚拟机就非常方便,比如我自己的这个虚拟机管理程序上我要迁移这个Linux操作系统我要把我的这个操作系统给你用,那么我只需要把这个操作系统导出导出为ISO就是镜像文件,然后你直接把我这个镜像文件考过去,在你自己的Virtual box上面一加载一安装你就可以使用到跟我这边完全一样的操作系统了,包括我在我的这个客户操作系统上安装的一些程序或者数据什么的都可以一起打包给你,然后你可以很方便的迁移到你自己的Virtual box上所以这是由于它的可迁移性好,所以第二类的这个虚拟机管理程序它的商业化应用目前来看是更广泛一些的,使用起来会很灵活

image-20230805155739401

最后运行模式方面:第一类的虚拟级管理程序它运行在最高的特权级别可以使用最高特权的指令那以前当我们介绍指令的时候只是把指令分为了非特权指令和特权指令这样的两个特权级别,但是在近几年的CPU当中指令的特权级可能会被进行更多层次的划分比如化为0级一级二级三级越往上特权级越低,越往下特权级别就越高所以这地方我们说第一类的虚拟级管理程序运行在0环指的就是它运行在最高的这个特权级别它可以使用最高特权的一些指令,把指令划分为更多的特权级别是有好处的,比如像刚才我们说如果指令只分为非特权指令和特权指令那么任何一条特权指令的这个使用都需要虚拟及管理程序把它截获并且判断这条特权指令的使用是否合法,如果合法的话还需要由它来模拟出特权指令执行的一个效果,但是如果我们对指令的这个特权级进行更精细化的一个分类。让第一类的虚拟程序运行在最高特权级,我们把这个最高的特权级别称为0环然后让这个客户操作系统的内核运行在一环次高特权级,接下来让用户进程运行在二环就最低的特权级那进行了这样的划分就可以保证当上层的客户操作系统他使用二环一环的这些指令的时候,我这个虚拟级管理程序不用管直接让你执行就行了,除非你需要使用到少数的一些0环的指令,我才帮你检查这些0环的指令应不应该让你执行会不会导致不安全等等,这就相当于我们把原本的特权指令进一步的进行了细分,把特权指令当中的一些敏感指令放在0环,然后把一些不敏感的指令放在一环,这样的话虚拟机管理程序不用检查每一条特权指令的执行,只需要检查某一些敏感指令的执行就可以了,所以在第一类的虚拟机管理程序当中只有虚拟机管理程序是运行在最高特权机的,上层的操作系统运行在次高优先级,再来看第二类的虚拟机管理程序,第二类虚拟机管理程序一部分运行在用户态,一部分运行在内核态,在内核态的这个部分是以虚拟机驱动程序的方式加载到操作系统内核当中的,那当上层的这个应用程序发出系统调用比如说要write系统调用的时候,上层的这个操作系统它可以直接去读写词盘吗?显然不可以,所以用户进程的系统调用会被虚拟机管理程序截获然后由虚拟机管理程序进行一些处理,代替他向底层的这个宿主操作系统发出right系统调用来请求底层宿主操作系统的服务,所以无论怎么看第二类的虚拟级管理程序它的性能肯定都会更差一些,这个宿主操作系统它总是要作为一个工具人作为一个中介来被使用,

image-20230805155757567

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

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

相关文章

elementui Cascader 级联选择使用心得

相信大家对于elementui并不陌生,作为适配Vue的优秀UI框架之一,一直被所有的开发者痛并快乐着。今天要记录的就是里边的主角之一Cascader。 首先先介绍一下Cascader ---> 当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择…

IDEA超强XSD文件编辑插件-XSD / WSDL Visualizer

前言 XSD / WSDL Visualizer可以简化XML架构定义(XSD)和WSDL文件编辑过程; 通过使用与IntelliJ无缝集成的可视化编辑器,转换处理XSD和WSDL文件的方式。告别导航复杂和难以阅读的代码的挫败感,迎接流线型和直观的体验。 插件安装 在线安装 IntelliJ IDE…

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用,用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary,Count,Mutex; Mutex包…

【面试题】位图

文章目录 位图如何添加数据如何删除数据代码实现给100亿个整数,如何找到只出现一次的数字代码实现给两个文件,分别有100亿个整数,但只有1g内存,如何找到文件的交集?1个文件有100亿个int,1G内存,…

EventBus 开源库学习(一)

一、概念 EventBus是一款在 Android 开发中使用的发布-订阅事件总线框架,基于观察者模式,将事件的接收者和发送者解耦,简化了组件之间的通信,使用简单、效率高、体积小。 一句话:用于Android组件间通信的。 二、原理…

插入排序讲解

插入排序(Insertion-Sort)一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表…

【Linux命令详解 | pwd命令】Linux系统中用于显示当前工作目录的命令

文章标题 简介一,参数列表二,使用介绍1. pwd命令的基本使用2. pwd命令中的参数3. pwd命令的工作机制4. pwd命令的实际应用 总结 简介 pwd命令是Linux中的基础命令之一,使用该命令可以快速查看当前工作目录。在掌握Linux命令时,pw…

golang函数传参——值传递理解

做了五年的go开发,却并没有什么成长,都停留在了业务层面了。一直以为golang中函数传参,如果传的是引用类型,则是以引用传递,造成这样的误解,实在也不能怪我。我们来看一个例子,众所周知&#xf…

单例模式(C++)

定义 保证一个类仅有一个实例,并提供一个该实例的全局访问点。 应用场景 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种…

微信小程序iconfont真机渲染失败

解决方法: 1.将下载的.woff文件在transfonter转为base64, 2.打开网站,导入文件,开启base64按钮,下载转换后的文件 3. 在下载解压后的文件夹中找到stylesheet.css,并复制其中的base64 4. 修改index.wxss文…

Netty:当Channel将数据发送成功以后,存放发送数据的ByteBuf会被自动释放

说明 使用Netty框架编程,当Channel将数据发送成功以后,存放发送数据的ByteBuf会被自动释放。 为了进行验证,我们可以在发送数据前,通过io.netty.buffer.ByteBuf的refCnt()函数看看引用计数,通过Channel发送成功以后再…

(数据库系统概论|王珊)第一章绪论-第一节:数据库系统概论

目录 一:四大基本概念 (1)数据(Data) (2)数据库(DataBase,DB) (3)数据库管理系统(DataBase Management System,DBMS) (4)数据库系统(Database System,DBS…

Laravel 框架路由参数.重定向.视图回退.当前路由.单行为 ②

作者 : SYFStrive 博客首页 : HomePage 📜: THINK PHP 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f44…

Nios初体验之——Hello world!

文章目录 前言一、系统设计1、系统模块框图2、系统涉及到的模块1、时钟2、nios2_qsys3、片内存储(onchip_rom、onchip_ram)4、串行通信(jtag_uart)5、System ID(sysid_qsys) 二、硬件设计1、创建Qsys2、重命…

VGGNet剪枝实战:使用VGGNet训练、稀疏训练、剪枝、微调等,剪枝出只有3M的模型

摘要 本文讲解如何实现VGGNet的剪枝操作。剪枝的原理:在BN层网络中加入稀疏因子,训练使得BN层稀疏化,对稀疏训练的后的模型中所有BN层权重进行统计排序,获取指定保留BN层数量即取得排序后权重阈值thres。遍历模型中的BN层权重&am…

MySQL事务管理

MySQL事务管理 MySQL增删查改时的问题一.什么是事务?二.为什么会出现事务?三.事务的其他属性1. 事务的版本支持2. 事务的提交方式 四.事务的准备工作五.事务的操作1. 事务的正常操作2. 事务的异常验证与产出结论 六.事务的隔离级别1. 事务隔离级别概念2.…

CentOS 安装 Jenkins

本文目录 1. 安装 JDK2. 获取 Jenkins 安装包3. 将安装包上传到服务器4. 修改 Jenkins 配置5. 启动 Jenkins6. 打开浏览器访问7. 获取并输入 admin 账户密码8. 跳过插件安装9. 添加管理员账户 1. 安装 JDK Jenkins 需要依赖 JDK,所以先安装 JDK1.8。输入以下命令&a…

如何打造属于自己的个人IP?

在当今信息爆炸的时代,个人 IP 已经成为人们在网络世界中的独特标签。无论是在职场上、创业中,还是在社交生活中,拥有个人 IP 的人都能脱颖而出,吸引更多的关注和机会。那么,如何打造属于自己的个人 IP 呢?…

PowerShell 中,你可以使用以下命令来获取磁盘、内存、CPU、GPU、网卡和声卡的硬件信息

在 PowerShell 中,你可以使用以下命令来获取磁盘、内存、CPU、GPU、网卡和声卡的硬件信息: 获取磁盘信息: Get-PhysicalDisk | Select-Object DeviceID, MediaType, Model, Size获取内存信息: Get-CimInstance Win32_PhysicalM…