计算机操作系统-第七天

news2025/2/21 7:29:44

1、计算机操作系统的结构(续集)

分层结构

特性:最底层是硬件,最高层是用户接口,每层只可使用更低的相邻层所提供的功能接口(只有第一层可以直接操作硬件,第二次只能使用第一层提供的功能接口......) 

优点:

1、便于调试和验证,自底层向上逐层调试验证

        因为每一层都只会使用相邻的低层所提供的功能,第一层只会使用底层的硬件各种特性而硬件的各种特性在出厂时就一定没问题,所以第一层只需要用代码去调试验证一下硬件的各种特性,如果没有问题则第一层的调试完成,第二层只会使用第一层提供的功能,而第一层的功能和代码已经调试验证过没有问题所以第二层就可以直接基于第一层来进行的各种"特性"的验证(可以将每一层的相邻下一层视为该层的硬件,如果硬件调试后没有问题我们再去调试该层的”软件“)

2、易扩充和易维护,各层之间调用接口清洗固定

        由于分层结构在设计时便已经规划好了层与层之间的调用接口(函数名,参数列表,返回值等),由于层间调用接口不变,所以想要在两层之间新加一层只需要做到新加层想更上层提供跟原来一样的接口向更下层接口的使用

缺点:

1、尽可调用相邻底层,难以合理定义各层的边界

        比如第一层的功能是进程管理,第二层的功能是内存管理,两个子系统需要相互调用,但是由于分层结构只能调用相邻的低层,所以不能实现这种相互调用的效果

关于进程管理和内存管理的拓展:

        进程管理和内存管理是操作系统中两个独立但相互关联的子系统。它们在某些方面有交互,但并不直接依赖于对方。

        进程管理主要关注进程的创建、调度和终止等操作,以及进程间的通信和同步。它负责管理进程的执行和资源分配,但并不直接处理内存的分配和回收。

        内存管理则专注于物理内存的分配、回收和保护。它负责管理系统的内存资源,将可用的内存分配给进程,并处理内存碎片等问题。但内存管理并不直接参与进程的创建、调度和终止。

        尽管进程管理和内存管理是独立的子系统,但它们之间存在一些交互和依赖关系。例如,在进程创建时,进程管理器可能需要向内存管理器请求分配一块适当大小的内存空间来存储新进程的代码和数据。类似地,在进程终止时,进程管理器可能会通知内存管理器释放该进程占用的内存。

        总的来说,进程管理和内存管理在操作系统中是紧密相关的,但它们是独立的子系统,各自负责不同的任务。它们之间的交互和依赖是通过接口和协议来实现的,以确保进程能够正确地使用和管理内存资源。

2、效率低,不可跨层调用,系统调用执行时间长

模块化

特性:将内核分为多个模块,各模块之间相互协作

内核 =主模块 + 可加载内核模块(锦上添花)

主模块:只负责核心功能如进程调度、内存管理等

可加载内存模块:可以动态加载新模块到内核,而无需重新编译整个内核,如设备驱动程序

        模块化是将操作系统按功能划分为若干个具有一定独立性的模块,每个模块具有某方面的管理功能,并规划好各模块间的接口,是各模块之间能通过接口进行通信,还可以进一步将各模块细分为若干个具有一定功能的子模块,同样也规定好各子模块之间的接口,把这种设计方法称为模块-接口法,下图为由模块、子模块等组成的模块化操作系统结构:

优点:

1、模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发

比如进程管理模块需要对外暴露三个功能接口,只要规定好三个接口的函数名、参数列表、返回值等信息即使该模块并未完全开发,其他模块也可以直接使用该模块提供给的功能接口

2、支持动态加载新的内核模块(如安装设备驱动程序、安装新的文件操作系统模块到内核),增强OS(操作系统)的适应性

3、任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高

类似于调用函数一样,模块之间可以直接调用其他模块提供的功能接口

缺点: 

1、模块间的接口定义未必合理、实用

2、模块间相互依赖,更难调试和验证

a模块调用b模块提供的功能接口,b模块调用a模块提供的功能接口,如果产生问题,那么该问题产生的情况是多样的:有可能是模块自身的问题,有可能是调用其他模块提供的功能接口后产生的问题,甚至是两个模块互相调用各自的功能接口后导致的问题,相比而言分层结构中的每一层看起来也是一种模块但是分层结构的模块之间有一个明确的单向依赖的规定即高层依赖底层(高层只能调用相邻的低层提供的功能接口)

宏内核(大内核)

特性:所有系统功能都放在内核里(大内核结构的OS通常也采用了“模块化”的设计思想)

优点:性能高,内核内部各种功能都可以直接相互调用

缺点:

1、内核庞大功能复杂、难以维护

2、大内核中某个功能模块出错,就可能导致整个系统崩溃(由于各模块间依赖程度高)

微内核

特性:只把中断、原语、进程通信等最核心的功能放入内核、进程管理、文件管理、设备管理等功能以用户进程的形式运行在用户态

昨天的微内核图中将进程管理划分到了用户态中现已纠正

优点:

1、内核小功能少、易于维护、内核可靠性高

2、内核外的某个功能模块出错不会导致整个系统崩溃

缺点:

1、性能低,需要在用户态与核心态之间频繁的切换,用户态下的各功能模块不可以直接相互调用,只能通过内核的消息传递来间接通信

2、用户态下的各功能模块不可以直接相互调用,只能通过内核的“消息传递”来间接通信

外核(极其少见的操作系统,感觉有点抽象先跳过吧)

特性:外核负责为用户进程分配未经抽象的硬件资源,且由外核负责保证资源使用安全

优点:1、外核可直接给用户进程分配“不虚拟、不抽象”的硬件资源,使用户进程可以更灵活的使用硬件资源

2、减少了虚拟硬件资源的“映射层”,提升效率

缺点:

1、降低了系统的一致性

2、使系统变得更复杂

关于外核的拓展:

外核操作系统(Exokernel)是一种操作系统设计范例,它与传统的宏内核(Monolithic Kernel)和微内核(Microkernel)有所不同。在外核操作系统中,内核的功能被限制到最小,只提供了硬件抽象和保护机制,而应用程序可以直接访问底层硬件资源。

外核操作系统的设计目标是提供最大的灵活性和性能,允许应用程序直接控制硬件资源,而不需要经过内核的中介。这种设计使得应用程序可以根据自身的需求进行优化和定制,从而获得更高的性能。

然而,外核操作系统并不是常见的操作系统设计范例。传统的宏内核和微内核仍然是主流的操作系统设计方式,因为它们在实现和管理上相对简单,并且具有广泛的应用和支持。

尽管如此,外核操作系统仍然是一个有趣和活跃的研究领域,吸引了一些学术界和研究机构的关注。一些研究项目和实验性操作系统采用了外核操作系统的设计思想,以探索新的操作系统架构和性能优化的可能性。

总而言之,虽然外核操作系统不太常见,但它是一个有趣的操作系统设计范例,用于探索更高级别的应用程序控制和性能优化。在实际应用中,传统的宏内核和微内核仍然是主流。

关于各类结构的使用拓展(建议了解):

        计算机操作系统的结构可以分为多种类型,包括单体内核结构、分层结构、微内核结构、外核结构等。每种结构都有其独特的设计和特点,适用于不同的应用场景和需求。

在实际情况中,不同计算机系统可能采用不同的操作系统结构取决于计算机的类型、用途和设计目标。以下是一些常见的情况:

  1. 个人计算机(如台式机、笔记本电脑):大多数个人计算机通常使用单体内核结构。这种结构将所有操作系统功能集中在一个单一的内核中,包括进程管理、文件系统、设备驱动程序等。

  2. 服务器和大型机:在服务器和大型机环境中,常见的操作系统结构是分层结构或微内核结构。分层结构将操作系统功能划分为多个层次,每个层次负责不同的功能。微内核结构将操作系统的核心功能放在一个精简的内核中,而将其他功能作为独立的服务运行在用户空间。

  3. 嵌入式系统:嵌入式系统通常具有有限的资源和特定的应用需求。在这种情况下,可能会使用一种更精简的操作系统结构,如微内核结构或外核结构。这些结构可以根据系统的需求进行裁剪和优化,以满足资源限制和实时性要求。

        需要注意的是,操作系统结构的选择是根据具体的需求和约束来确定的。不同的计算机系统可能会选择适合其需求的结构,而不是一定要使用所有结构。因此,每台计算机中使用的操作系统结构可能会有所不同。

本节没有思维导图~:

特性、思想有点缺点
分层结构内核分多层、每层可单向调用更低一层提供的功能接口1、便于调试和验证,自底层向上逐层调试验证1、仅可调用相邻低层,难以合理定义各层的边界
2、易扩充和易维护,各层之间调用接口清晰固定2、效率低,不可跨层调用,系统调用执行时间长
模块化

将内核划分为多个模块,各模块之间相互协作,

内核 = 主模块 + 可加载内核模块

主模块:只负责核心功能,如进程调度内存管理

可加载内存模块:可以动态加载新模块到内核,而无需重新编译整个内核

1、模块间逻辑清晰易于维护,确定模块间接口后即可多模块同时开发1、模块间的接口定义未必合理、实用

2、支持动态加载新的内核模块(如安装设备驱动程序、安装新的文件系统模块到内核),增强OS适应性

3、任何模块都可以直接调用其他模块,无需采用消息传递进行通信,效率高2、模块间相互依赖、更难调试和验证
大内核所有的系统功能都放在内核中(大内核结构的OS通常也采用了“模块化”的设计思想)1、性能高,内核内部各种功能都可以直接相互调用1、内核庞大功能复杂、难以维护
2、大内核中某个功能模块出错,就可以导致整个系统崩溃
微内核只把中断、原语、进程通信、进程管理等最核心的功能放入内核。文件管理、设备管理等功能以用户进程的形式在用户态1、内核小功能少、易于维护、内核可靠性高1、性能低,需要频繁的在用户态和核心态之间切换
2、内核外的某个功能模块出错不会导致整个系统崩溃2、用户态下的各功能模块不可以直接相互调用,只能通过内核的“消息传递”来间接通信
外核内核负责进程调度、进程通信等功能,外核负责为用户进程提供分配未经抽象的硬件资源,且由外核负责保证资源使用安全1、外核可直接给用户进程分配“不虚拟、不抽象”的硬件资源,使用户进程可以更灵活的使用硬件资源1、降低了系统的一致性
2、减少了虚拟硬件资源的“映射层”,提高效率2、使系统变得更复杂

~over~

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

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

相关文章

英语——语法——从句——状语从句——笔记

一、概念 状语从句(Adverbial Clause)是指句子用作状语时,起副词作用的句子。状语从句中的从句可以修饰谓语。 状语从句根据其作用可分为时间、地点、原因、条件、目的、结果、让步、方式和比较等九 种状语从句。状语从句一般由连词(从属连词…

01_51单片机软件安装和使用

step1:keil软件安装 安装keil5:安装keil5 新用户进入官网下载需要先注册 官网:官网 嵌入式51开发资源百度网盘:江协科技 网盘地址:网盘地址 提取码:gdzf 桌面上出现该图标表示安装完成 双击图标打开对软件进行破…

向量空间概述

向量空间 向量空间与子空间 当存在这样的一组向量集合 V V V,其中 v , u , w v,u,w v,u,w分别为集合 V V V中的元素,以及存在标量c,d u v ∈ V uv \in V uv∈V u v …

【算法练习Day21】组合剪枝

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 组合剪枝总结: …

c语言练习88::移除链表元素

移除链表元素 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 代码: /*** Definition for sing…

基于Springboot宠物医院管理系统

项目环境: mysql5.7 jdk1.8

CSS之实现线性渐变背景

1. background: linear-gradient() background: linear-gradient是CSS中用于创建线性渐变背景的属性,这个属性允许你定义一个在元素的背景中进行渐变的效果,可以从一个颜色过渡到另一个颜色。 基本语法 background: linear-gradient(direction, color-…

Vue中this.$set()解决页面不更新问题

Vue中的this.$set()用于解决数据更新后页面没有更新的问题,因为Vue2中的双向数据绑定是通过object.defineproperty()实现的。通过get和set方法,获取时触发get,更改时触发set。但是对于对象属性的删除和添加与根据数组的下标去修改数据的时候是…

香港高才通通过后要做什么?

网上说现在香港高才通审核要一个月,所以最近没有每天关注,以为还要很久,结果今天打开邮箱,发现昨天就已经收到了我们一家人都审核通过的邮件,哈哈,开心… 今天整理了一下后续要做得事情: 缴费…

【LeetCode刷题(数据结构与算法)】:二叉树的中序遍历

给定一个二叉树的根节点root 返回它的中序遍历 示例1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] 输出:[1] 这里…

常见的噪声:高斯、泊松和椒盐噪声

一、什么是图像噪声? 噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块。一般噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息。通俗的说就是噪声让图像不清楚。 二、噪声来源—两个方面 &#xf…

数据结构 二叉树OJ题

数据结构 二叉树OJ题 文章目录 数据结构 二叉树OJ题1. 检查两颗二叉树是否相同2. 判断树是否为另一个树的子树3. 翻转二叉树4. 平衡二叉树5. 对称二叉树6. 二叉树遍历7. 二叉树层序遍历8. 最近公共祖先9. 二叉树创建字符串10. 非递归方式实现前序遍历11. 非递归方式实现中序遍历…

动态内存管理+柔性数组+经典笔试题

💓博客主页:江池俊的博客⏩收录专栏:C语言进阶之路👉专栏推荐:✅C语言初阶之路 ✅数据结构探索💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…

springboot 使用RocketMQ客户端生产消费消息DEMO

创建springboot项目省略 项目依赖 注意&#xff1a;当前客户端版本是 5.1.3 &#xff0c;安装的rocketmq服务的版本要与其对应 <properties><java.version>11</java.version><rocketmq-client-java-version>5.1.3</rocketmq-client-java-version&…

EasyX趣味化编程note6,图片操作及文字

大家好这里是Dark FlameMaster 如果说前边所学的内容会给我们带来一定的乐趣&#xff0c;那么今天这篇可以说是最好玩的了&#xff0c;我们可以进一步改进写出小程序的好玩度&#xff0c;你甚至可以把身边的人或事写进一个小程序&#xff0c;制作一个小游戏&#xff0c;恶搞身边…

工业级Netty网关,京东是如何架构的?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《高并发网关项目》&#xff0c;此项目帮这个小伙拿到 字节/阿里/…

掌握Golang匿名函数

一个全面的指南&#xff0c;以理解和使用Golang中的匿名函数 Golang以其简单和高效而闻名&#xff0c;赋予开发人员各种编程范式。其中一项增强代码模块化和灵活性的功能就是匿名函数。在这篇正式的博客文章中&#xff0c;我们将踏上探索Golang匿名函数深度的旅程。通过真实世…

机器学习之Sigmoid函数

文章目录 Sigmoid函数是一种常用的数学函数&#xff0c;通常用于将实数映射到一个特定的区间。它的形状类似于"S"形状曲线&#xff0c;因此得名。Sigmoid函数在机器学习、神经网络和统计学中经常被使用&#xff0c;主要用于二元分类和处理概率值。 Sigmoid函数的一般…

【蓝桥】契合匹配

一、题目 1、题目描述 小蓝有很多齿轮&#xff0c;每个齿轮的凸起和凹陷分别用一个字符表示&#xff0c;一个字符串表示一个齿轮。 如果这两个齿轮的对应位分别是同一个字母的大小写&#xff0c;我们称这个两个齿轮是契合的。 例如&#xff1a;AbCDeFgh 和 aBcdEfGH 就是契合…

基于html+js编写的生命游戏

前言 本文将介绍一个基于htmljs的生命游戏&#xff0c;该项目只有一个html代码&#xff0c;无任何其他以来&#xff0c;UI方面采用了vueelement-plus进行渲染&#xff0c;游戏的界面基于canvas进行渲染&#xff0c;先来看一下成果。 我不知道游戏规则有没有写错&#xff0c;感…