初始操作系统篇(2)—— 操作系统的运行环境与体系结构

news2024/11/24 11:11:44

找往期文章包括但不限于本期文章中不懂的知识点:

个人主页:我要学编程(ಥ_ಥ)-CSDN博客

所属专栏: 操作系统

目录

操作系统的运行环境

操作系统的运行机制

中断

系统调用

操作系统的体系结构

大内核

微内核

优点

缺点


操作系统的运行环境

操作系统的运行机制

计算机系统中,通常CPU会执行两种不同性质的程序:一种是操作系统内核程序;另一种是
用户自编程序(即系统外层的应用程序,或简称“应用程序”)。对操作系统而言,这两种程序的
作用不同,前者是后者的管理者,因此又叫“管理程序”(即内核程序)要执行一些特权指令,而“被
管理程序”(即用户自编程序)出于安全考虑不能执行这些指令。所谓特权指令,是指计算机中
不允许用户直接使用的指令,如I/O指令、置中断指令,存取用于内存保护的寄存器、送程序状
态字到程序状态字寄存器等的指令。在具体实现上,将CPU的状态划分为用户态(目态)和核心
态(又称管态、内核态)
。可以理解为CPU内部有一个小开关,当小开关为1时,CPU处于核心
态,此时CPU可以执行特权指令;当小开关为0时,CPU处于用户态,此时CPU只能执行非特
权指令。用户自编程序运行在用户态,操作系统内核程序运行在核心态。

注意:CPU处于核心态时,也是可以执行非特权指令的。所以当CPU处于用户态一定是在执行非特权指令,而CPU处于核心态时,不一定是在执行特权指令。 

操作系统的各项功能分别被设置在不同的层次上。一些与硬件关联较紧密的模块,如时钟管
理、中断处理、设备驱动等处于最低层。其次是运行频率较高的程序,如进程管理、存储器管理
和设备管理等。这两部分内容构成了操作系统的内核。这部分内容的指令操作工作在核心态。
内核是计算机上配置的底层软件,是计算机功能的延伸。

不同系统对内核的定义稍有区别,大多数操作系统的内核包括4方面的内容。

1、时钟管理

在计算机的各种部件中,时钟是最关键的设备。时钟的第一功能是计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。另外,通过时钟中断的管理,可以实现进程的切换。例如,在分时操作系统中采用时间片轮转调度,在实时系统中按截止时间控制运行,在批处理系统中通过时钟管理来衡量一个作业的运行程度等。因此,系统管理的方方面面无不依赖于时钟。

这里我们开始涉及了一个概念,进程。简单理解就是,一个程序运行起来后,就叫做进程。后面我们会进一步的学习。

上述说的进程切换,我们在上一篇文章中,学习了分时操作系统:各个程序之间来回利用时间片,来达到并发的效果。这里是把程序之间的来回切换,变成了一个更精确的概念,进程之间来回切换。这就是通过时钟管理来完成的。

2、中断机制

引入中断技术的初衷是提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来逐步得到发展,形成了多种类型,成为操作系统各项操作的基础。例如,键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制。可以说,现代操作系统是靠中断驱动的软件。
中断机制中,只有一小部分功能属于内核,它们负责保护和恢复中断现场的信息(例如,时钟中断,会切换进程,但是为了下次还是该进程的运行,因此会保存运行环境),转移控制权到相关的处理程序(中断可以理解为Java中的异常,必须被处理,而不同原因引起的中断需要不同的中断处理程序去进行处理)。这样可以减少中断的处理时间,提高系统的并行处理能力(多核心CPU的前提)。

3、原语

按层次结构设计的操作系统,底层必然是一些可被调用的公用小程序,它们各自完成一个规
定的操作。它们的特点如下:
1)处于操作系统的最低层,是最接近硬件的部分。
2)这些程序的运行具有原子性(和我们在mysql数据库中学习的原子性一样),其操作只能一气呵成(主要从系统安全性和便于管理考虑)。
3)这些程序的运行时间都较短,而且调用频繁。

通常把具有这些特点的程序称为原语(AtomicOperation)。定义原语的直接方法是关闭中断,让其所有动作不可分割地完成后再打开中断。关闭中断意味着即使程序在运行过程中出现了问题,也不会被处理,这也就意味着程序运行的连贯性。后面再打开中断,这样即使出了问题,操作系统就会去处理,那么前面执行的结果就会有回滚之类的操作。

系统中的设备驱动、CPU切换、进程通信等功能中的部分操作都可定义为原语,使它们成为内核的组成部分。

4、系统控制的数据结构及处理

系统中用来登记状态信息的数据结构很多,如作业控制块、进程控制块(PCB)、设备控制
块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效的管理,系统
需要一些基本的操作,常见的操作有以下3种:
1)进程管理。进程状态管理、进程调度和分派、创建与撤销进程控制块等。
2)存储器管理。存储器的空间分配和回收、内存信息保护程序、代码对换程序等。
3)设备管理。缓冲区管理、设备分配和回收等。

从上述内容可以知道,核心态指令包括系统调用类指令和一些针对时钟、中断和原语的操作指令。

注意:

1、核心态指令包含了特权指令。核心态指令只能在核心态执行,包括了特权指令和部分非特权指令。

2、CPU有核心态与用户态,操作系统同样也有内核区与用户区,操作系统的两个区域是和CPU的两种状态相互对应的。内核区对应着CPU的核心态,在这一状态下,操作系统可以执行特权指令,访问所有的内存空间和硬件资源等。用户区对应着CPU的用户态,在这一状态下,普通程序只能执行非特权指令,对内存空间和硬件资源的访问受到限制。即操作系统的区域与CPU的状态是相互依存的。操作系统的内核区,运行在CPU的内核态,用户区运行在CPU的用户态。

中断

在操作系统中引入核心态和用户态这两种工作状态后,就需要考虑这两种状态之间如何切换。操作系统内核工作在核心态,而用户程序工作在用户态。系统不允许用户程序实现核心态的功能,而它们又必须使用这些功能。因此,需要在核心态建立一些“门”,以便实现从用户态进入核心态。在实际操作系统中,CPU运行上层程序时唯一能进入这些“门”的途径就是通过中断或异常。发生中断或异常时,运行用户态的CPU会立即进入核心态,这是通过硬件实现的(例如,用一个特殊寄存器的一位来表示CPU所处的工作状态,0表示核心态,1表示用户态。若要进入核心态,则只需将该位置0即可)。中断是操作系统中非常重要的一个概念,对一个运行在计算机上的实用操作系统而言,缺少了中断机制,将是不可想象的。原因是,操作系统的发展过程大体上就是一个想方设法不断提高资源利用率的过程,而提高资源利用率就需要在程序并未使用某种资源时,把它对那种资源的占有权释放,而这一行为就需要通过中断实现。

上述体现了一个过程:当有中断发生时,CPU 会从用户态切换到核心态来处理中断。同时,中断机制是操作系统夺回 CPU 控制权的唯一途径。

中断分为两种,一种是内中断,也被称为异常;还有一种是外中断。我们主要是站在程序的角度上去看待中断的。如果程序内部出了问题(例如,除零错误、访问非法内存地址等),这些就是内中断;如果是程序本身可以正常运行,但是外部运行环境出了问题(例如,所需的打印机等硬件资源不足、时钟中断),这就叫外中断。

系统调用

系统调用是操作系统提供给应用程序的一种接口,它允许应用程序请求操作系统内核执行特定的服务。简单理解就是系统调用是操作系统提供的一组API。

注意和库函数区分。库函数是编程语言所提供的一组API,其底层可能就使用了系统调用。

系统调用,按照功能可以分为以下几类:

1、设备管理:完成设备的请求或释放,以及设备启动等功能。

2、文件管理:完成文件的读、写、创建及删除等功能。

3、进程控制:完成进程的创建、撤销、阻塞及唤醒等功能。

4、进程通信:完成进程之间的消息传递或信号传递等功能。

5、内存管理:完成内存的分配、回收以及获取作业占用内存区大小及始址等功能。

其实就是分为对硬件的管理(设备、内存)、数据的管理(文件)、软件的管理(进程)

注意:

1、CPU在执行系统调用时,会发生由用户态转变为内核态的过程。但是触发系统调用时,是处于用户态,而执行时,是处于内核态。

2、访管指令是指可以使CPU从用户态进入核心态的指令。这个指令是在用户态下触发,并在用户态执行完毕,最终使CPU进入了内核态。由访管指令引起的中断,被称作 访管中断。

3、只有操作系统才可以执行特权指令。

4、进行输入输出操作会触发中断,致使CPU从用户态转变为内核态。因为输入输出涉及到数据的安全性,肯定是要在内核态执行的。

操作系统的体系结构

主要就是知道两种:一个是大内核 ;另一个微内核。

大内核

大内核系统将操作系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势。

但随着体系结构和应用需求的不断发展,需要操作系统提供的服务越来越多,而且接口形式越来越复杂,操作系统的设计规模急剧增长,操作系统也面临着“软件危机”困境。为此,操作系统设计人员试图按照复杂性、时间常数、抽象级别等因素,将操作系统内核分成基本进程管理、虚存、I/O与设备管理、IPC、文件系统等几个层次,继而定义层次之间的服务结构,提高操作系统内核设计上的模块化。但是,由于层次之间的交互关系错综复杂,定义清晰的层次间接口非常困难,复杂的交互关系也使得层次之间的界限极其模糊。为解决操作系统的内核代码难以维护的问题,提出了微内核的体系结构。

微内核

它将内核中最基本的功能(如进程管理等)保留在内核,而将那些不需要在核心态执行的功能移到用户态执行,从而降低了内核的设计复杂性。那些移出内核的操作系统代码根据分层的原则被划分成若干服务程序,它们的执行相互独立,交互则都借助于微内核进行通信。

上面两种设计方式,各有各的优点与缺点。

优点

大内核的设计方式,是将主要的功能都设计在核心区,这样在进行进程切换时,只需要切换一次CPU的状态,即性能高。

微内核的设计方式,是将最基本的功能保留在内核区,内核区的功能也变少了,这样维护的成本也低了不少。

缺点

大内核由于大量的结构,使其维护的成本变得特别高。微内核由于内核区只有基本的功能,致使进行进程切换时,会导致CPU的状态转换次数变多,性能低。两者可以说是互补的。 

好啦!本期 初始操作系统篇(2)—— 操作系统的运行环境与体系结构 的学习之旅就到此结束啦!我们下一期再一起学习吧!

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

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

相关文章

PostgreSql的备份和升级

目录 版本概述: 跨大版本数据迁移 QProcess 调用相关进程进行备份和恢复 版本概述: 该数据库版本主要分为主要版本和次要版本,大版本基本每年发布一次,小版本则每几个月即发布,更新较快。在10.0之前所使用的数据库版…

YOLOv11全网最新创新点改进系列:一文读懂YOLOv11算法!!!

YOLOv11全网最新创新点改进系列:免费送!!!改进且跑通的源码!!融入CBAM注意力,将通道注意力和空间注意力相结合,嘎嘎提升V11算法,叫叫首,改进速度遥遥领先&…

字符串拼接方法性能对比和分析

对字符串进行拼接主要有三种方法: 1.加号 2.concat方法 3.StringBuilder或者StringBuffer的append方法 下面看下性能对比,测试方法为各循环十万次,对比耗费时间。 测试性能 1.”"拼接 long start System.currentTimeMillis();String …

如何通过钢筋计来优化施工安全

在现代建筑工程中,施工安全一直是首要关注的问题。特别是在高层建筑、桥梁和地下工程等复杂结构中,确保钢筋的正确安装和稳定性能,直接关系到工程的整体安全性和耐久性。钢筋计作为一种专门用于测量和监测钢筋应力和应变的设备,其…

信号完整性分析概论

随着时钟频率的提高,发现并解决信号完整性问题成为产品开发的关键。成功的秘诀是精通信号完整性分析技术,并能采取高效设计过程以消除这些问题。只有熟地运用新的设计规则、新的技术和新的分析工具,才能实现高性能设计,并日益缩短…

第二份代码:PointNet++

参考的依然是Pytorch的实现,PointNet里面的主要实现部分都在utils.py里,里面从微小模块逐渐的,搭建出网络中的几个主要模块结构,包括sampling&group等,所以我们主要分析的就是这个utils.py里面的内容 这份Pytorch实…

PE结构之绑定导入表

打印绑定导入表 //打印 绑定导入表 BOOL PrintBoundImport(__in char* m_fileName) {char* Filebuffer NULL;if (!GetFileBuffer(m_fileName, &Filebuffer)) return FALSE;PIMAGE_DOS_HEADER LPdosHeader NULL;PIMAGE_NT_HEADERS LPntHeader NULL;LPdosHeader (PIMAGE…

LLM | Tokenization 从原理与代码了解GPT的分词器

声明:以上内容全是学习Andrej Karpathy油管教学视频的总结。 --------------------------------------------------------------------------------------------------------------------------------- 大家好。在今天我们学习llm中的Tokenization,即分…

快收藏!超实用标签title属性重写,让同事对你刮目相看

原生title属性的弊端 日常开发中,我们经常会遇到hover文本,显示其全部内容的需求。但是原生的title属性有两个很大的缺点 样式丑陋,无法更改 windows下的样式 mac下的样式 不够智能,属性显影只能人为控制 只要写了title属性&a…

使用Provide和Inject设计Vue3插件

使用provide和inject的Vue依赖项注入非常适合构建Vue3插件或避免prop多层传递。 尽管不经常使用它,但是您可以仅使用两个内置方法来实现依赖项注入:provide和inject。 查看Composition API文档,在Vue 3.0中,使用Provide和Inject进…

【笔记】Day2.5.1查询运费模板列表(未完

(一)代码编写 1.阅读需求,确保理解其中的每一个要素: 获取全部运费模板:这意味着我需要从数据库中查询所有运费模板数据。按创建时间倒序排序:这意味着查询结果需要根据模板的创建时间进行排序&#xff0…

汉语言文学做大数据七年实际工作经验分享普通人快来围观

(一)没有人带你 社会上,都很现实。就是进了公司,有师傅,师傅也没空带你,最多就是有空的时候帮你解决问题。 无论是做啥工作,都要靠自己努力。努力不会成为笑话,不努力就是笑话。就…

Crypto虐狗记---”你“和小鱼(五)

前言:剧情五 提示: 一种食物? 一种食物——培根:(A B 也暗示是培根加密) cyberpeace{attackanddefenceworldisinteresting} 密码学笔记——培根密码 - ILK - 博客园 (cnblogs.com)

Windows如何手动编辑右键上下文菜单 - 注册表通用方法

通过注册表编辑右键菜单的方法 文章目录 前言文件夹空白位置右键列表文件夹选中右键列表,有两个不同的路径:单个文件选中右键列表如何手动创建新的右键快捷按键: 前言 右键菜单有三类(具体可以自己分别按下面的类型点击尝试&…

uniapp 设置 tabbar 的 midButton 按钮

效果展示&#xff1a; 中间的国际化没生效&#xff08;忽略就行&#xff09; 示例代码&#xff1a; 然后在 App.vue 中进行监听&#xff1a; <script>export default {onLaunch(e) {// #ifdef APPuni.onTabBarMidButtonTap(()>{console.log("中间按钮点击回调…

禁用微软的windos安全中心

目录 一、为什么禁用 二、WDControl_1.5.0程序禁用windows安全中心 步骤1--- 步骤2--- 三、禁用widows安全中心成功 一、为什么禁用 描述&#xff1a;下载第三方软件常常会收到病毒防护秒杀&#xff0c; 第1---直接无法下载 第2---提前下载在U盘解压会被干掉程序文件 …

SMU Autumn 2024 div2 1st

文章目录 The First Week一、前言二、算法1.逆序对<1>&#xff08;2024牛客国庆集训派对day2 I&#xff09; 2.图论<1>&#xff08;2024牛客国庆集训派对day2 F&#xff09; 3. 二分<1>&#xff08;AcWing 102. 最佳牛围栏&#xff09;<2>&#xff08;…

第17课-C++【模板进阶】

&#x1f307;前言 模板作为搭建STL的关键工具以及泛型编程思想的核心体现&#xff0c;对提高程序灵活性和推动高效迭代开发具有重要意义。除了基本的类型替换功能外&#xff0c;模板还具备如非类型模板参数、全特化、偏特化等高级操作。同时&#xff0c;模板声明与定义不能分…

聚类分析 | AP近邻传播聚类算法

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 AP近邻传播聚类算法 AP&#xff08;Affinity Propagation&#xff09;近邻传播聚类算法是一种基于数据点之间的相似度矩阵来进行聚类的算法。该算法不需要事先设定聚类簇的个数&#xff0c;而是通过在数据点之间传播…

JavaScript 第7章:字符串处理

第7章&#xff1a;字符串处理 在 JavaScript 中&#xff0c;字符串是一个非常常用的数据类型&#xff0c;用于表示文本信息。JavaScript 提供了许多内置的方法来处理字符串&#xff0c;包括操作、搜索、替换和格式化等。 一、字符串操作方法 1. charAt charAt(index) 方法返…