操作系统结构

操作系统结构

    • 分层法
    • 模块化
    • 宏内核
    • 微内核
      • 微内核的基本概念
      • 微内核的基本功能
    • 内核

分层法

分层法是将操作系统分为若干层,最底层为硬件,最高层为用户接口,每层只能调用紧邻它的底层的功能和服务(单向依赖)

分层法的优点:
1:便于系统的调试和验证。简化了系统的设计和实现。第一层可以调试而无需考虑其他部分,因为它只使用了基本硬件。第一层调试完且验证正确之后,就可以调试第二层,如此向上。如果调试某层出现问题 那么错误应就在这一层上,因为它的底层都调试好了,
2:易扩充和易维护。在系统汇总增加、修改或者替换一层中的模块或整层时,只要不改变相应层间的接口,就不会影响其它层

分层法的问题:
1:合理定义各层比较困难,因为依赖关系固定后,往往就显得不够灵活、
2:效率较差。操作系统每执行一个功能,通常要自上而下穿越多层,各层之间都有相应的层间通信机制,这无疑增加了额外的开销

模块化

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

在划分模块时,如果将模块划分的很小,虽然能降低模块本身的复杂性,但会使得模块之间的联系过多,造成系统比较混乱;如果模块划分的过大,又会增加模块内部的复杂性,显然应在两者之间权衡。此外,在划分模块时,要充分考虑模块的独立性问题,因为模块独立性越高,各模块之间的交互越少,系统的结构也就清晰,衡量模块的独立性主要有两个标准:

 内聚性,模块内部各部分间联系的紧密程度。内聚性越高,独立模块性越好耦合度,模块间相互联系和相互影响的程度。耦合度越低,模块独立性越好

模块化的优点:
1:提高了操作系统设计的正确性,可理解性和可维护性
2:增强了操作系统的可适应性,
3:加速了操作系统的开发过程

模块化的缺点:
1:模块化的借口规定很难满足各接口的实际需求
2:各模块设计者起头并进,每个决定无法建立在一个已验证的正确决定的基础上,因此无法找到一个可靠的决定顺序

宏内核

从操作系统是哪个的内核架构来划分,可分为宏内核和微内核
宏内核,也称单内核或大内核,是指将系统的主要功能模块都作为一个紧密联系的整体运行在核心态,从而为用户程序提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,所以具有无可比拟的性能优势

微内核

微内核的基本概念

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

微内核结构将操作系统划分为两大部分:微内核和多个服务器。微内核是指将精心设计的、能实现操作系统最基本核心功能的小型内核,通常包含:1) 与硬件处理紧密相关的部分 2)一些较基本的功能 3)客户和服务器之间的通信。 这些部分只是为构建通用操作系统提供一个重要基础,这样就可以确保将内核做的很小

微内核的基本功能

微内核结构通常利用“机制与策略分离”的原理来构造os结构,将机制部分以及硬件紧密相关的部分放入微内核。微内核通常具有如下功能:
1:进程(线程)管理。进程(线程)之间的通信功能是微内核os最基本的功能,此外还有进程的切换。进程的调度以及需要处理机之间的同步功能

2:低级存储器管理。在微内核中,只配置最基本的低级存储器管理机制,如用于实现将逻辑地址转换为物理地址等的页表机制和地址变换机制,这一部分依赖于硬件的,因此放入微内核。

3:中断和陷入处理。

微内核的特点
1:扩展性和灵活性
2:可靠性和安全性
3:可移植性
4:分布式计算

微内核结构的主要问题是性能问题,因为需要频繁地在核心态和用户态之间进行切换,操作系统的执行开销较大。为了改善运行效率,可以将那些频繁使用的系统服务移回内核,从而保证系统性能

内核

不同于虚拟机克隆真实机器,另一种策略是对机器分区,给每个用户整个资源的一个子集。在底层中,一种称为外核的程序在内核态中运行。它的任务是为虚拟机分配资源。

外核机制的优点是减少了映射层

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

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

相关文章

如何通过CSS选择器选择一个元素的子元素?如何选择第一个子元素和最后一个子元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 选择一个元素的子元素⭐ 选择第一个子元素和最后一个子元素⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

线程池,以及线程池的实现以及面试常问的问题,工厂模式,常见的锁策略(面试常考,要了解,不行就背)

一、💛 线程池的基本介绍 内存池,进程池,连接池,常量池,这些池子概念上都是一样的~~ 如果我们需要频繁的创建销毁线程,此时创建销毁的成本就不能忽视了,因此就可以使用线…

Java中使用instanceof判断对象类型

记录&#xff1a;470 场景&#xff1a;Java中使用instanceof判断对象类型。例如在解析JSON字符串转换为指定类型时&#xff0c;先判断类型&#xff0c;再定向转换。在List<Object>中遍历Object时&#xff0c;先判断类型&#xff0c;再定向转换。 版本&#xff1a;JDK 1…

Redis系列(一):深入了解Redis数据类型和底层数据结构

Redis有以下几种常用的数据类型&#xff1a; redis数据是如何组织的 为了实现从键到值的快速访问&#xff0c;Redis 使用了一个哈希表来保存所有键值对。 Redis全局哈希表&#xff08;Global Hash Table&#xff09;是指在Redis数据库内部用于存储所有键值对的主要数据结构。…

安卓13不再支持PPTP怎么办?新的连接解决方案分享

随着Android 13的发布&#xff0c;我们迎来了一个令人兴奋的新品时刻。然而&#xff0c;对于一些用户而言&#xff0c;这也意味着必须面对一个重要的问题&#xff1a;Android 13不再支持PPTP协议。如果你是一个习惯使用PPTP协议来连接换地址的用户&#xff0c;那么你可能需要重…

C++ 泛型编程:函数模板

文章目录 前言一、什么是泛型编程二、函数模板三、函数模板的使用四、多参数函数模板五&#xff0c;示例代码&#xff1a;总结 前言 当需要编写通用的代码以处理不同类型的数据时&#xff0c;C 中的函数模板是一个很有用的工具。函数模板允许我们编写一个通用的函数定义&#…

Vue day02 Computed和Watch

1.事件绑定 可以用 v-on 指令监听DOM 事件&#xff0c;并在触发时运行一些 JavaScript 代码。v-on 还可以接收一个需要调用的方法名称。 <button v-on:click"handler">good</button> methods: { handler: function (event) { if (event) { alert(event.t…

接口测试之Jmeter+Ant+Jenkins接口自动化测试平台

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行&#xff0c;自动生成测试报告&#xff0c;以及持续集成。Jmeter支持接口的测试&#xff0c;Ant支持自动构建&#xff0c;而Jenkins支持持续集成&#xff0c;所以三者组合在一起可以构成一个功能完善的接口自动化…

BOLT- 识别和优化热门的基本块

在BOLT中&#xff0c;识别和优化热门的基本块之所以关键&#xff0c;是因为BOLT的主要目标是优化程序以更好地利用硬件特性&#xff0c;特别是指令缓存&#xff08;ICache&#xff09;。以下是BOLT如何识别和优化热门基本块的流程&#xff1a; 收集性能数据: BOLT开始的时候并不…

idea - 刷新 Git 分支数据 / 命令刷新 Git 分支数据

一、idea - 刷新 Git 分支数据 idea 找到 fetch 选项&#xff0c;重新获取分支数据 二、命令刷新 Git 分支数据 git fetch参考链接 1. 远程Gitlab新建的分支在IDEA里不显示

jxls导出问题

![请添加图片描述](https://img-blog.csdnimg.cn/bc74c4207818491c93b75e19b3333451.png 为什么最后导出的文件还是按原样导出啊&#xff0c;没有填充数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d4500b9a98c042f6b64a5d0650071303.png

qt多线程使用方式

有5个方式&#xff1a;可以参考这个博客&#xff1a;Qt 中开启线程的五种方式_qt 线程_lucky-billy的博客-CSDN博客 注&#xff1a;为了实现更加灵活的线程管理&#xff08;因为这5种都有一些不方便之处&#xff1a;QThread需要子类化且不能传参&#xff0c;moveToThread不能传…

【leetcode】459. 重复的子字符串(easy)

给定一个非空的字符串 s &#xff0c;检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。 示例 2: 输入: s “aba” 输出: false 示例 3: 输入: s “abcabcabcabc” 输出: true 解释: 可由子串 “ab…

ChatGPT等人工智能编写文章的内容今后将成为常态

BuzzFeed股价上涨200%可能标志着“转向人工智能”媒体趋势的开始。 周四&#xff0c;一份内部备忘录被华尔街日报透露BuzzFeed正计划使用ChatGPT聊天机器人-风格文本合成技术来自OpenAI&#xff0c;用于创建个性化盘问和将来可能的其他内容。消息传出后&#xff0c;BuzzFeed的…

ubuntu 20.04 RK3568网络的优先级设置

1、背景 硬件使用RK3568 CPU&#xff0c;操作系统采用ubuntu 20.04 Lxqt桌面的版本。硬件上具有一个有线以太网卡&#xff0c;一个wifi网卡&#xff0c;一个5G网卡。由于操作系统默认的网络优先级为有线网卡的最高&#xff0c;5G网卡次之。在一个业务应用中需要5G网卡的连接外…

文本三剑客之grep命令和awk命令 1.0 版本

grep awk 1.grep命令1.1 基本格式1.2 常用选项 2.awk命令2.1 awk工作原理2.2 awk命令格式2.3 awk常用内置变量 1.grep命令 1.1 基本格式 grep [选项]… 查找条件 目标文件1.2 常用选项 选项功能 -m [ x ]匹配x次 后停止,x为具体数字-v取反 -i忽略字符大小写 -n显示匹配的 …

Dynamic CRM开发 - 实体介绍

实体简介 在CRM中,实体(Entity)是数据的基本载体,也是构建业务逻辑网络的基础节点。 实体可以理解为数据库中的一张表(实体中的字段对应数据库表的字段),比如创建一个实体存储客户信息,创建一个实体存储产品信息,产品实体里可以创建一个查找类型的字段(类似表的外键)…

【Express.js】集成RabbitMQ

集成RabbitMQ 本节我们介绍在 express.js 中集成 rabbitmq. RabbitMQ 是一个消息队列中间件&#xff0c;常用于请求削峰&#xff0c;事务的队列处理&#xff0c;事件订阅机制的实现等。 准备工作 创建一个 express.js 项目&#xff08;本文基于evp-express-cli&#xff09;…

【三维编辑】Seal-3D:基于NeRF的交互式像素级编辑

文章目录 摘要一、引言二、方法2.1.基于nerf的编辑问题概述2.2.编辑指导生成2.3.即时预览的两阶段学生训练 三、实验四、代码总结 项目主页: https://windingwind.github.io/seal-3d/ 代码&#xff1a;https://github.com/windingwind/seal-3d/ 论文: https://arxiv.org/pdf/23…

创建一个Spring Boot项目

安装所需软件&#xff1a;首先确保你的计算机上已经安装了Java JDK和Maven构建工具。你可以从官方网站下载并按照说明进行安装。 创建一个新的Spring Boot项目&#xff1a;在命令行或终端中使用Maven命令创建一个新的Spring Boot项目。执行以下命令&#xff1a;mvn archetype:…