系统架构设计师②:操作系统

系统架构设计师②:操作系统

操作系统作用
①管理系统的硬件、软件、数据资源
②控制程序运行
③人机之间的接口
④应用软件与硬件之间的接口

进程管理

进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。它由程序块、进程控制块(PCB)和数据块三部分组成。

PCB:PCB是进程存在的唯一标志。内容包含进程标识符、状态、位置信控制信息、队列指针(链接同一状态的进程)、优先级、现场保护区等。

注意:进程与程序的区别-进程是程序的一次执行过程,没有程序就没有进程。

程序是一个静态的概念,而进程是一个动态的概念,它由创建而产生,完成任务后因撤销而消亡;进程是系统进行资源分配和调度的独立单位,而程序不是。

进程的2个基本属性:
①可拥有资源的独立单位
②可独立调度和分配资源的基本单位

进程和线程共享资源情况如下图所示:
在这里插入图片描述

进程的状态

进程状态转移图:
在这里插入图片描述

信号量与PV操作

临界资源:诸进程间需要互斥方式对其进行共享的资源,如打印机、
磁带机、缓冲区等
临界区:每个进程中访问临界资源的那段代码称为临界区
信号量:是一种特殊的变量

注:P是荷兰语的Passeren,V是荷兰语的Verhoog。
在这里插入图片描述

前驱图

操作系统中的前驱图(Precedence Graph),又称为有向无环图(Directed Acyclic Graph,简称DAG),是一种用来描述程序(或进程)之间先后执行顺序的数据结构。

以下是对前驱图的详细解析:

一、前驱图的定义与性质

定义:前驱图是一种有向无环图,用于表示进程或任务之间的优先级或执行顺序。它通过节点和边的组合,清晰地展示了进程间的依赖关系。
性质:
有向性:图中的边具有方向,表示进程间的执行顺序。
无环性:图中不存在环路,即不存在一个进程直接或间接地依赖于自己,这避免了死锁的产生。
连通性:虽然前驱图是无环的,但它可能是一个连通图,即任意两个节点之间都存在一条路径相连。

二、前驱图的组成元素

节点:代表一个进程或任务。这些进程可能是并发执行的,也可能是串行执行的,具体取决于它们之间的依赖关系。
边:表示两个进程之间的依赖关系。如果存在从进程A到进程B的边,那么进程A是进程B的前驱,意味着进程B必须等待进程A完成后才能开始执行。

三、前驱图的作用

进程调度:通过前驱图,操作系统可以清晰地看到各个进程之间的依赖关系,从而进行合理的进程调度。例如,对于那些没有任何前驱的进程,操作系统可以选择它们作为首先执行的候选者;而对于那些还有未完成前驱的进程,则需要等待其所有前驱都完成后才能被考虑执行。

死锁检测:前驱图也是检测死锁的一种工具。在操作系统中,如果存在一组进程,它们之间的依赖关系形成了一个环路,则可能会发生死锁。

优先级分配:在某些情况下,操作系统需要根据进程的依赖关系来分配优先级。利用前驱图,我们可以确定每个进程的优先级。例如,如果一个进程有很多后继,那么这个进程就应该被赋予高优先级,因为它的完成会影响到很多其他进程;反之,如果一个进程没有任何后继,那么这个进程就可以被赋予低优先级。

死锁及银行家算法

死锁是在并发环境下,两个或多个进程(线程)互相等待对方持有的资源而无法继续执行的状态。
死锁的形成条件主要包括以下四个:

互斥条件(Mutual Exclusion)
定义:指一个资源每次只能被一个进程(线程)所使用,即资源具有排他性。
说明:这是由资源本身的属性决定的,即资源不能被多个进程同时共享。

请求与保持条件(Hold and Wait)
定义:也称为占有且等待条件,指进程在请求新的资源的同时不会释放已经占有的资源。
说明:这意味着进程在持有至少一个资源的同时,还在等待其他资源。

不可抢占条件(No Preemption)
定义:指资源只能由持有者主动释放,其他进程无法强制剥夺持有者资源。
说明:资源一旦被进程占用,在其使用完之前,不能被其他进程强行抢占。

循环等待条件(Circular Wait)
定义:指一组进程互相等待对方所持有的资源,形成一个循环等待的链式结构。
说明:在系统中存在一个由若干进程形成的环形请求链,其中的每一个进程均占有若干种资源中的某一种,同时每一个进程还要求链上下一个进程所占有的资源。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立。反之,只要上述条件之一不满足,就不会发生死锁。

在这里插入图片描述

存储管理

页式存储

页式存储:将程序与内存均划分为同样大小的块,以页为单位将程序调入内存。
在这里插入图片描述
优点:利用率高,碎片小,分配及管理简单
缺点:①增加了系统开销;②可能产生抖动现象

段氏存储

段式存储:按用户作业中的自然段来划分逻辑空间,然后调入内存,段的长度可以不一样。
在这里插入图片描述
优点:多道程序共享内存,各段程序修改互不影响
缺点:内存利用率低,内存碎片浪费大

段页式存储

段页式存储:段式与页式的综合体。先分段,再分页。1个程序有若干个段,每段中可以有若干页,每个页的大小相同,但每个段的大小不同。
在这里插入图片描述
优点:空间浪费小、存储共享容易、存储保护容易、能动态连接
缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内存也有所增加,使得执行速度大大下降

页面置换算法

页面置换算法(Page Replacement Algorithm),也称为页面替换策略或页面调度算法,主要用于管理计算机内存中页面的置换,以确保有效的内存使用和较低的页面错误率。当操作系统需要为新的页面分配内存空间,但所有内存空间都已满时,就会根据页面置换算法选择一个页面将其移出内存,以便为新的页面腾出空间。

以下是一些常见的页面置换算法:

最优页面置换算法(Optimal Page Replacement Algorithm)
在页面置换时,选择将来最长时间不会被访问的页面进行置换。这是一个理论上的算法,实际上无法实现,因为它需要知道未来的页面访问顺序。

先进先出页面置换算法(First-In, First-Out Page Replacement Algorithm, FIFO)
最简单的页面置换算法,总是移除最早进入内存的页面。可能会导致“Belady异常”,即分配的物理块数增加,页面错误率反而提高。

最近最少使用页面置换算法(Least Recently Used Page Replacement Algorithm, LRU)
移除最长时间未被访问的页面。通常需要维护一个记录所有页面使用情况的列表。

时钟页面置换算法(Clock Page Replacement Algorithm)
是LRU的近似实现,使用更少的资源。维护一个循环列表,类似于时钟的指针移动,选择置换页面。

第二次机会算法(Second Chance Algorithm)
是时钟算法的变种,给予要被置换的页面第二次留在内存中的机会。如果页面的引用位为0,则置换该页面;如果为1,则清除引用位,并给予该页面第二次机会。

工作集页面置换算法(Working Set Page Replacement Algorithm)
基于“工作集”理论,即进程在一段时间内会频繁访问特定的页面集合。置换不在当前工作集中的页面。

最不常用页面置换算法(Least Frequently Used Page Replacement Algorithm, LFU)
移除访问次数最少的页面。需要记录每个页面的访问频率。

选择哪种页面置换算法取决于特定的系统需求和目标,例如,对页面错误率的容忍度、算法实现的复杂度和开销等。

文件管理

索引文件

文件索引是一种用于快速定位和访问文件中特定记录的数据结构或机制。它类似于书籍的目录,可以帮助用户快速找到所需的信息。

一、定义与作用

文件索引是一种特殊的文件或数据结构,用于存储关于主文件中记录的关键信息(如关键字、记录的物理地址等),以便快速检索和访问这些记录。索引的主要作用是加快数据检索速度,提高数据处理效率。

二、类型与结构

文件索引根据其结构和用途可以分为多种类型,
主要包括:
顺序索引:索引项按关键字顺序排列,适用于主文件也是按关键字顺序排列的情况。这种索引结构简单,但只适用于顺序存取。

非顺序索引(稠密索引):为每个记录建立一个索引项,索引项按关键字顺序排列,适用于主文件记录无序的情况。这种索引结构占用空间较大,但支持随机存取。

稀疏索引:只为记录集中的某些记录建立索引项,适用于记录集较大且分布均匀的情况。这种索引结构占用空间较小,但检索效率可能略低于稠密索引。

此外,根据索引的层次结构,还可以分为单级索引和多级索引。多级索引通过为索引表建立索引表的方式,进一步提高了检索效率。
文件在逻辑上是连续的,但是在物理存储上可以是分散的。

在这里插入图片描述

位示图

位示图(Bitmap),又称位图,是一种非常重要的数据结构,特别是在文件系统和数据管理中有着广泛的应用。

定义:位示图是利用二进制的一位来表示磁盘(或其他存储介质)中的一个盘块(或存储块)的使用情况。

基本原理:每个bit(二进制位)对应一个盘块,通过该bit的取值(0或1)来表示对应盘块的空闲或已分配状态。有的系统中,0表示空闲,1表示已分配;而有的系统则相反,但本质上是相同的,都是用一位的两种状态来标志空闲和已分配两种情况。

在这里插入图片描述

树形目录结构

文件属性
①R只读文件属性
②A存档属性
③S系统文件
④H隐藏文件

文件名组成
①驱动器号
②路径
③主文件名
④扩展名

①绝对路径:从盘符开始的路径
②相对路径:从当前目录开始的路径
若当前目录为:D1,要求F2路径,则:绝对路径:/D1/W2/F2,相对路径:W2/F2
在这里插入图片描述

微内核操作系统

现代操作系统大多拥有两种工作状态,分别是核心态和用户态。一般应用程序工作在用户态,而内核模块和最基本的操作系统核心工作在核心态。
将传统的操作系统代码放置到更高层,从操作系统中去掉尽可能多的东西,而只留下最小的核心,称之为微内核。(C/S结构)

在这里插入图片描述

操作系统的内核服务:异常和中断、计时器、I/O管理等

单体内核和微内核的对比

在这里插入图片描述

嵌入式操作系统

嵌入式系统主要由嵌入式硬件平台、相关支撑硬件、嵌入式操作系统、支撑软件和应用软件组成。
其中,嵌入性专用性计算机系统是嵌入式系统的三个核心要素。

典型的嵌入式系统具有以下特点:
① 系统专用性强
② 系统实时性强
③ 软硬件依赖性强
④ 处理器专用
⑤多种技术紧密结合
⑥系统透明性
⑦ 系统资源受限

嵌入式操作系统特点:

①微型化、② 代码质量高、③ 专业化、④ 实时性强、⑤ 可裁减、可配置。

针对不同的硬件平台,操作系统通常建立在一个硬件抽象层(HAL)上,该层位于底层硬件和内核之间,为内核提供各种方便移植的宏定义
接口,在不同的平台间移植时,只需要修改宏定义即可。

与硬件相关,与操作系统相关。

嵌入式系统开发设计之交叉编译

交叉编译(Cross-compilation)是一种编译技术,它允许你在一个平台上编译出适用于另一个平台的可执行代码。这种技术非常有用,特别是在嵌入式系统、移动设备和游戏开发等领域,因为开发者可能无法直接在目标硬件上运行编译工具和编译过程。

交叉编译的基本步骤
①准备交叉编译工具链
交叉编译工具链是一组工具(如编译器、链接器、调试器等),它们被配置为在宿主机上运行,但生成针对目标平台的代码。这通常包括GCC(GNU Compiler Collection)的变体,以及可能的其他工具,如binutils(一组二进制工具)。

②安装交叉编译工具链
可以从源代码编译工具链,或者从许多Linux发行版的包管理器中安装预编译的工具链。例如,在Ubuntu上,你可以使用apt-get安装针对ARM架构的交叉编译工具链。

③配置编译环境
确保环境变量(如PATH)包含了交叉编译工具链的路径。调用gcc或g++时,系统会使用交叉编译版本的工具。

④编写或准备源代码
确保源代码是可移植的,并且没有依赖于宿主机特有的特性。

⑤修改Makefile或CMakeLists.txt(如果适用)
如果项目使用Makefile或CMake,需要修改它以使用交叉编译工具链。这通常涉及到设置CC(C编译器)、CXX(C++编译器)等变量。
例如,在Makefile中:

makefile
CC=arm-linux-gnueabihf-gcc  
CXX=arm-linux-gnueabihf-g++

在CMake中,你可以使用toolchain文件来指定交叉编译工具链。

⑥编译源代码
使用交叉编译工具链编译你的源代码。涉及到在命令行中运行make或cmake命令。

注意:
依赖库:如果你的程序依赖于第三方库,这些库也需要被交叉编译或已经存在适用于目标平台的版本。
系统调用和API:确保你的代码不依赖于宿主机特有的系统调用或API。
调试:交叉编译的程序可能难以在宿主机上调试。使用目标平台上的调试工具(如GDB)可能更为有效。

在这里插入图片描述

基于硬件的低功耗设计
板级电路低功耗设计;选择低功耗处理器;总线的低功耗设计:接口驱动电路的设计;分区分时供电技术。

基于软件的低功耗设计
编译优化技术(指令开销);软件与硬件的协同设计(硬件功能交由软件完成);算法优化(低时间复杂度)。

实时操作系统

实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。

其主要特点包括:

①及时响应:RTOS通过实时任务调度器,能够保证高优先级任务在有限的时间内得到响应和处理,这对于需要快速反应的系统至关重要。
②高可靠性:RTOS的设计注重于系统的稳定性和可靠性,通常包含错误检测和恢复机制,以确保系统即使在出现问题时也能保持运行。
③优化资源管理:RTOS能够有效地管理和分配系统资源,如CPU时间、内存和I/O设备,确保关键任务能够获得必要的资源以按时完成。
④支持多任务处理:RTOS允许多个任务并发执行,每个任务可以独立运行,互不干扰,这样可以提高系统的效率和性能。
⑤减少延迟:RTOS通过减少粗粒度的锁和长期关中断的使用,降低了系统的延迟,提高了响应速度。

实时系统的性能指标:

①任务切换时间
②中断处理相关的时间指标
-中断延迟时间
-中断响应时间
③系统响应时间(对用户的输入或请求做出反应的时间)
④信号量混洗时间(指从一个任务释放信号量到另一个等待该信号量的任务被激活的时间延迟)

实时系统存在多种调度算法

①优先级调度算法:分配一个相对固定的优先顺序,然后调度程序根据优先级的高低排序按时间顺序进行高优先级任务优先调度。(非抢占式)

②抢占式优先级调度算法:是在优先级调度算法基础上,允许高优先级任务抢占低优先级任务而运行。

③时间轮转调度算法:调度程序会依次调度每个任务运行一个小的时间片,然后再调度另一个任务。每个任务运行完一个时间片,无论是否结束都会释放CPU让下一个任务运行。(纯粹的时间轮转调度无法满足实时系统的要求,取而代之的是基于优先级的抢占式时间轮转调度)

④最晚截止期调度算法:指调度程序按每个任务的最接近其截止期末端的时间进行调度

⑤最早截止期调度算法:指调度程序按每个任务的截止期时间,选择最早到截止期头端时间的任务进行调度。

在RTOS中,大多数的RTOS调度算法都是抢占式的

常见的实时操作系统

常见的嵌入式RTOS(实时操作系统,Real-TimeOperatingSystem)VxWorks、RT-Linux、QNX、pSOS.
在这里插入图片描述

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

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

相关文章

qt表格模型视图

Qt 提供了一套强大的模型/视图框架,允许你以一种非常灵活和高效的方式显示和处理数据。在 Qt 中,表格视图(TableView)和模型(TableModel)是这种框架的一部分,常用于显示和编辑表格数据。 以下是…

【初阶数据结构】8.二叉树(3)

文章目录 4.实现链式结构二叉树4.1 前中后序遍历4.1.1 遍历规则4.1.2 代码实现 4.2 结点个数以及高度等4.3 层序遍历4.4 判断是否为完全二叉树4.5层序遍历和判断是否为完全二叉树完整代码 4.实现链式结构二叉树 用链表来表示一棵二叉树,即用链来指示元素的逻辑关系…

space desk设备屏幕拓展软件

在正常开发的时候一般采用多个屏幕的方式来提高效率,这时就采用hdmi和vga拓展的形式,前提是屏幕但往往有电源以及续航不够的问题,不太方便出门在外的话 这时我就推荐大家使用软件无线连接的形式 进行软件下载下图为投影端可以在pc端下载 我…

如何保护您的 WordPress 不被黑?

明月可以说是见到过太多 WordPress 网站被黑的示例了,加上平时明月也会接一些 WordPress 疑难杂症的解决服务订单,所以这方面绝对是专业对口了。作为一个资深 WordPress 博客站长,谁都有被黑过的经历,都是一步步走过来的&#xff…

【数据结构】搜索二叉树

二叉搜索树 二叉树的博客 在之前的数据结构的文章中已经基本对二叉树有一定的了解,二叉搜索树也是一种数据结构,下面将对二叉搜索树进行讲解。 二叉搜索树的概念 二叉搜索树又称为二叉排序树,它或者是一棵空树,或者是具有下面性…

外贸SOHO如何选择企业邮箱

外贸SOHO(Small Office Home Office)企业正以前所未有的速度崛起,然而,要在这片竞争激烈的蓝海中立足,高效的全球通信能力、坚实的安全防线、成本效益的考量以及专业的品牌形象塑造,缺一不可。本文旨在为外…

webStorm 实时模板笔记

文章目录 1、单斜杠效果 2、双斜杠效果 3、控制台打印效果 1、单斜杠 /** $END$ */效果 2、双斜杠 /*** $END$* author Ikun* since $DATE$ $TIME$ */DATE date() ✔ TIME time() ✔效果 3、控制台打印 console.log("███████$EXPR_COPY$>>>>&a…

前端调试合集(包含移动端/内嵌h5)

代码内使用方法 alert/console alert和console.log作为JS最基本的调试能力,提供了简易版的断点 (只能断一下) 和输出 (只能输出字符串) 能力,可以在代码运行到预期的位置输出预期的log,通过对不同流程下写入alert,输出变量的值来…

Java笔试分享

1、设计模式(写>3种常用的设计模式) 设计模式是在软件工程中解决常见问题的经验性解决方案。以下是一些常用的设计模式: 单例模式(Singleton): 意图:确保一个类只有一个实例,并…

从0到1,AI我来了- (1)从AI手写数字识别开始

前两篇我们我们把控制台、Python环境Anaconda 搞定了,接下来,我们快速进入主题,把AI 界的“Hello World” 实现一下,有个感觉,再逐步了解一些AI的概念。 1、Pytorch 安装 1) 什么是Pytorch? 一个深度学习框架&#…

通信原理-实验六:实验测验

实验六 实验测验 一:测验内容和要求 测试需要完成以下几个步骤: 配置好以下网络图;占总分10%(缺少一个扣一分)根据下面图配置好对应的IP和网关以及路由等相关配置,保证设备之间连通正常;占总…

加速决策过程:企业级爬虫平台的实时数据分析

摘要 在当今数据驱动的商业环境中,企业如何才能在海量信息中迅速做出精准决策?本文将探讨企业级爬虫平台如何通过实时数据分析加速决策过程,实现数据到决策的无缝衔接。我们聚焦于技术如何赋能企业,提升数据处理效率,…

NSS [NSSRound#13 Basic]flask?jwt?

NSS [NSSRound#13 Basic]flask?jwt? 开题 注册一下 要admin才能拿flag 看看是如何进行身份验证的 是flask session flask-unsign --decode --cookie .eJwtzjESwyAMBMC_UKfghJCEP-MRICZp7bjK5O9xkX6L_aR9HXE-0_Y-rnik_TXTlsiXEhUXleKGGGuG1jbmogrCEmNirZ7BEB-VJbTfIi-26hQD…

跨棒距、公法线和齿厚对应关系分析

前面有一期讨论了下滚齿径向进刀量和齿厚的对应关系:《》,有小伙伴又问了,加工时是用跨棒距或者公法线去控制齿厚的,直接给齿厚是无法测量的,如果测一个值再去计算,有点麻烦,有没有他们之间的对…

多多OJ评测系统 在前端脚手架Vue-Cli中设置页面路由

目录 设置页面路由 我们把菜单上的路由改成读取路由文件 设置成export 导出路由 在刚刚的原始路由 index.ts中导入就行了 在这边引入我们的路由文件 我们之后点击菜单 我们的路由文件是这样的 但是没有跳转 写一下事件 接下来要同步路由到菜单项 自己定义监听函数 …

推荐3款不可错过的实用工具

TouchPro TouchPro是一款运行于Windows系统下的时间属性修改工具,其主要功能是允许用户批量修改文件和文件夹的创建时间、修改时间和访问时间。该软件安装后会集成到资源管理器中,不占用任何系统资源,并支持多级目录与隐藏文件的日期属性批量…

推荐几款支持AI剪辑并可使用个人视频素材的软件!

最强AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 其实现在大部分的AI视频剪辑工具都可以实现一键成片,这里给你分享6款可以使用自己的素材实现AI剪辑的工具及其操作方法! 一、剪映 剪映…

服务器重启了之后就卡在某个页面了,花屏,如何解决??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

前端开发知识(二)-css

<head> <style> div{ } </style> </head> div是布局标签&#xff0c; 一般放在head标签内&#xff0c;最下部。 若直接在在.css文件中写css,文件中&#xff0c;直接写就行&#xff0c;如下所示。 div{ }

MySQL数据库安装使用

我们都知道数据库又分为关系型数据库和非关系型数据库&#xff1b; 关系型数据库指采用了关系模型来组织数据的数据库&#xff0c;指的就是二维表格模型。可以先初步理解为Excel表格。非关系型数据库又被称为NoSQL&#xff0c;对NoSQL 最普遍的定义是“非关联型的”&#xff0…