当前位置: 首页 > article >正文

2、操作系统之软件基础

一、硬件支持系统 ,系统管理硬件

  • 操作系统核心功能可以分为:
    • 守护者:对硬件和软件资源的管理
    • 协调者:通过机制,将各种各样的硬件资源适配给软件使用。
  • 所以为了更好的管理硬件,操作系统引进了软件。其中3大核心部分是:
    • 文件【我们需要知道怎么用文件来访问磁盘和I/O设备】
    • 虚拟内存【虚拟内存是虚拟的,为应用程序提供远大于物理内存限制的虚拟地址空间。】
    • 进程【真正用来访问资源的部分】
      在这里插入图片描述

二、进程(process)

1、理解

进程就是一个正在执行的程序实例

进程的结构

  • 每个进程里都有一个独立的地址空间
    • 这个空间一开始是0 ,不断的运行,就成了连续的存储空间。在这个空间,不仅程序能运行起来,还能调用各种数据,等等。
  • 每个进程都有相关的资源
    • 这些资源有PS , PC寄存器等等。

简而言之:进程就是一个被封装的容器,它有运行资源的一切信息。

  • 如果 我开了QQ,又开了微信。那我的进程就有2个,它要如何合理地获得CPU资源

    • 操作系统通过时间片轮转等调度策略周期性地挂起一个进程并启动另一个,确保所有进程都能公平地获得CPU资源。
    • 当进程被暂时挂起,就必须保存状态了。以便未来某个时候可以继续使用。状态下的信息【比如寄存器,地址空间,上下文等等】都会被存储在进程表中。
      • 进程表用于跟踪系统中所有进程的状态信息
  • shell和进程

    • 用户可以使用shell来控制进程。让一个进程产生更多进程(这些由进程产生的进程就是子进程)【可能有些抽象,可以这样理解,如下:】。
      • 在这里插入图片描述
      • 我在shell使用ls 命令,这个命令展现了当前路径有的文件件。我本来是在运行shell的linux环境虚拟机【当前一个主进程】,我想看文件夹,我为了看文件夹,使用了ls命令,在执行这个ls命令的过程就是子进程
    • 所以进程就有树的样子了-----进程树
    • 在这里插入图片描述
  • 进程该如何通信

    • 当进程间协同工作完后,使用机制来交换信息,也就是进程间通信(IPC) 机制。
    • 除了进程间通信(IPC)外,操作系统还使用一系列的系统调用来管理进程资源。
  • 进程接收信息,如果信息经常不能准时到达

    • 为了确保可靠传输,进程会采用定时器。【这种行为也就是异步】
      • 比如:进程在外部信息发送出去的第4秒还没有接收到。就发一个通知提醒,就可能重新发送了。

异步行为【分为软件异步、硬件异步】:
异步行为是指任务可以并发执行,不需要等待前一个任务完成。异步操作不会阻塞当前线程,任务完成后通过回调、Promise 或事件通知。

在这里插入图片描述

  • 那么事件1发生什么事情?
    • 事件1作用:保护现场
    • 保护的内容有
      • PC值----由CPU保护
      • PSW寄存器—操作系统软件保护
      • 基础寄存器—操作系统软件保护
      • 不过在现代有可以都用CPU保护的了。CortexM芯片等等。
  • 事件2发生什么事情?
    • 事件2作用:确定中断入口在哪里
    • 硬件CPU来准备—操作系统OS和CPU都能来提供中断向量表【中断处理函数的数组空间】
  • 事件3发生什么事情?
    • 事件3作用:中断处理函数
    • 操作系统来准备。
  • 事件4发生什么事情?
    • 事件4作用:中断返回【普通函数返回】
    • 软件实现,编译器来实现。
    • 特定的汇编写,不能c语言。
      • 普通函数
        • PC值—>硬件保护
        • PSW寄存器—>不需要保护。
        • 基础寄存器—>编译器保护

同步行为
同步行为是指任务按顺序执行,前一个任务完成后,才能开始下一个任务。同步操作会阻塞当前线程,直到任务完成。

三、虚拟内存

在这里插入图片描述
从下往上看,分为进程代码和数据区、堆数据区、共享库区、堆栈区、内核内存区。

这部分的基础先了解这个图片就行了。

常驻内存是指一直都在,不能删掉。

四、并发和并行

  • 并发是指多个任务在同一时间段内交替执行但在任意时刻可能只有一个任务在运行。并发通过任务切换(上下文切换)实现,给人一种多个任务同时运行的错觉。
  • 如图:同一时间段内
时间轴: |----任务A----|----任务B----|----任务A----|----任务B----|
  • 并行是指多个任务在同一时刻同时执行。并行需要多核 CPU 或多个处理器,每个任务运行在不同的核心上。
  • 如图:同一时刻内
时间轴: |----任务A----||----任务B----||----任务C----|

五、系统调用【超重点】

在这里插入图片描述

通过上图能明白,硬件不能直接让用户使用它。
所以提出了系统调用

  • 系统调用

    • 定义:系统调用是操作系统内核(Kernel)为应用程序提供的一组接口,允许用户程序(运行在用户态)请求内核(运行在内核态)代为执行特权操作(如文件读写、进程创建等)。
    • 系统调用依赖硬件和OS(操作系统)
  • 系统调用的工作原理

  • (1) 调用流程

    • 用户程序触发调用
      • 通过特定函数(如C标准库中的 printf() → 底层调用 write())或直接代码触发
    • 用户态 → 内核态切换
      • 通过软中断(如 int 0x80)或专用指令(如 syscall)进入内核态
    • 执行内核服务
      • 内核根据系统调用号(如 Linux 的 read 对应 0 号)调用对应的内核函数。
    • 返回结果
      • 内核将结果传递给用户程序,回到用户态继续执行。
  • (2) 系统调用号(syscall number)

    • 每个系统调用对应唯一编号,通过寄存器传递(如 x86-64 Linux 中,rax 存放系统调用号)。
    • 示例:Linux 的 sys_write 在 x86-64 中的调用号是 1,可通过命令 grep __NR_write /usr/include/asm/unistd_64.h 查看。
  • (3) 参数传递

    • 寄存器传递参数:参数按顺序放入 rdi, rsi, rdx, r10, r8, r9(x86-64 架构)。
      在这里插入图片描述

相关文章:

2、操作系统之软件基础

一、硬件支持系统 ,系统管理硬件 操作系统核心功能可以分为: 守护者:对硬件和软件资源的管理协调者:通过机制,将各种各样的硬件资源适配给软件使用。 所以为了更好的管理硬件,操作系统引进了软件。其中3大…...

STC89C52单片机学习——第20节: [8-2]串口向电脑发送数据电脑通过串口控制LED

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.03.15 51单片机学习——第20节: [8-2]串口向电脑发送数据&电脑通过串口控制LED 前言…...

K8S下nodelocaldns crash问题导致域名请求响应缓慢

前言 最近做项目,有业务出现偶发的部署导致响应很慢的情况,据了解,业务使用域名访问,相同的nginx代理,唯一的区别就是K8S重新部署了。那么问题大概率出现在容器平台,毕竟业务是重启几次正常,偶…...

CVPR2024 | TT3D | 物理世界中可迁移目标性 3D 对抗攻击

Towards Transferable Targeted 3D Adversarial Attack in the Physical World 速览总结摘要-Abstract引言-Introduction相关工作-Related Work方法-MethodologyPreliminray-预备知识问题表述-Problem FormulationNeRF参数空间中的双重优化-Dual Optimization in NeRF Paramete…...

全面对比分析:HDMI、DP、DVI、VGA、Type-C、SDI视频接口特点详解

在当今的多媒体时代,视频接口的选择对于设备连接和显示效果至关重要。不同的视频接口在传输质量、兼容性、带宽等方面各有优劣。本文将全面对比分析常用的视频接口HDMI、DP、DVI、VGA、Type-C、SDI,帮助读者更好地理解它们的特点和适用场景。 一、HDMI&…...

传输层自学

传输实体:完成传输层任务的硬件或软件 可能位于: 操作系统内核独立的用户进程绑定在网络应用中的链接库网络接口卡 1.功能: 网络层与传输层作用范围比较? 网络层负责把数据从源机送达到目的机 传输层负责把数据送达到具体的应…...

使用爬虫获取自定义API操作API接口

1. 引言 在现代Web开发中,API(应用程序接口)是前后端通信的桥梁。通过API,前端可以从后端获取数据,进行各种操作。而爬虫是一种自动化工具,用于从网站上提取数据。本文将详细介绍如何使用爬虫获取自定义AP…...

微服务架构下前端如何配置 OpenAPI 接口

在微服务架构中,后端通常由多个独立的服务组成,每个服务可能提供自己的 API 接口。为了在前端项目中高效地调用这些 API,可以使用 OpenAPI 规范生成客户端代码。以下是详细的配置步骤和最佳实践: 1. 理解 OpenAPI 规范 OpenAPI 是…...

Kotlin知识体系(二) : Kotlin的七个关键特性

前言 在Android开发中,Kotlin以其简洁的语法和强大的特性显著提升了开发效率。本文将解析Kotlin中7个关键特性,通过代码示例展示它们在实际开发中的应用。 一、构造函数:主次分明 主构造函数 class User constructor(_name: String) { //…...

FreeRTOS源码概述

FreeRTOS源码概述 1 FreeRTOS目录结构 使用 STM32CubeMX 创建的 FreeRTOS 工程中,FreeRTOS 相关的源码如下: 主要涉及2个目录: Core Inc 目录下的 FreeRTOSConfig.h 是配置文件Src 目录下的 freertos.c 是 STM32CubeMX 创建的默认任务 Mi…...

日志统计(C++,模拟,双指针)

题目要我们求在某个时间段中,帖子点赞数达到K的帖子数 遍历方式一 我们可以先对所有帖子根据时间,升序排序 枚举每一条帖子,枚举后续每一条帖子,如果id相同且时间差小于d,那么就记录起来,如果记录数量cn…...

加固脱壳技术:DEX动态加载对抗

1. 加固技术原理剖析 1.1 DEX保护演进路线 加固方案发展历程: graph LR A[2015 代码混淆] --> B[2017 DEX动态加载] B --> C[2019 VMP指令虚拟化] C --> D[2022 全链路加密] 1.1.1 主流加固方案对比 厂商核心防护技术弱点分析梆梆加固DEX文件分片…...

C++之list类(超详细)

在上一节中我们学习了STL中的vector这个容器,这节我们来学习一下另外一个常用的容器——list。 文章目录 前言 一、list的介绍 二、list的使用及相关接口 1.list的使用 2.list的迭代器使用 3.list的相关接口 3.1 list capacity 3.2 list element access 3.3…...

强化学习的一些概念

目录 强化学习 打个比方 核心要素 State Action Reward 几个代码demo 学习目标 强化学习 强化学习(Reinforcement Learning, RL)是机器学习的一个分支,旨在让智能体(Agent)通过与环境的交互学习最优策略,以…...

MambaTab:表格数据处理的新利器

——基于结构化状态空间模型的特征增量学习框架 摘要 本文提出MambaTab,一种基于结构化状态空间模型(SSM)的表格数据处理框架。通过创新的嵌入稳定化设计与轻量化SSM架构,MambaTab在普通监督学习和特征增量学习场景中均表现优异&…...

Kafka的流量控制机制

Kafka的流量控制机制 Kafka 作为一款高吞吐量的消息队列系统,能够在海量数据场景下提供稳定的消息生产和消费能力,其背后的流量控制机制功不可没。我们需要认识到,Kafka 的流量控制并非仅仅是为了防止系统过载或崩溃,它的目标是实…...

RabbitMQ支持的复杂的消息交换模式

RabbitMQ支持多种复杂的消息交换模式,这些模式通过不同的交换机类型和队列特性实现,能够满足多样化的业务需求。以下是RabbitMQ支持的主要复杂消息交换模式: 1. Direct Exchange(直连交换机) 直连交换机根据消息的路由…...

CSSHTML新特性

HTML5 新特性探秘 在 Web 开发的不断演进中,HTML5 带来了一系列令人振奋的新特性,极大地提升了网页的功能和用户体验。今天,我们就来深入探究一下这些新特性。 语义化标签:让网页结构更清晰 语义化标签是 HTML5 的一大亮点。在…...

51单片机的工作方式

目录 一、51 单片机的时钟电路及时钟信号 (一)时钟电路 (二)时钟信号 二、51 单片机的CPU 时序 (一)时钟周期​ (二)机器周期​ (三)指令周期​ 三、…...

Java算法OJ(12)

目录 1.前言 2.正文 2.1Fib数列 2.2单词搜索 2.3杨辉三角 3.小结 1.前言 哈喽大家好吖,今天来分享几道的练习题,欢迎大家在评论区多多交流,废话不多说让我们直接开始吧。 2.正文 2.1Fib数列 题目:斐波那契数列_牛客题霸…...

MrRobot靶机详细解答

一、主机发现 arp-scan -l二、端口扫描、目录枚举、指纹识别 2.1端口扫描 nmap -p- 192.168.55.147发现22端口关闭,且无其它特殊端口,只能去网页中寻找信息 2.2目录枚举 dirb http://192.168.55.1472.3指纹识别 nmap 192.168.55.147 -sV -sC -O --…...

java线性表(单向链表)

对于链表我们有很多种,有带头和不带头,双向和单项,循环和不循环。 我们实现的单向链表是不带头单向不循环链表。 链表不比顺序表,它可以连续也可以不连续,是链子型的每条链子两边都有节点(除首尾)。 单向…...

QT:动态属性和对象树

动态对象 1.添加Q_PROPERTY对象 #ifndef MYPROPERTYCLASS_H #define MYPROPERTYCLASS_H#include <QObject>class MyPropertyClass : public QObject {Q_OBJECTQ_PROPERTY(QString mask READ mask WRITE setMask NOTIFY maskChanged) public:explicit MyPropertyClass(Q…...

编程语言的几种常见的分类方法

一、 按照编程范式分类 命令式编程语言 强调通过语句来改变程序状态&#xff0c;如 C、Pascal、Fortran 等。 面向对象编程语言 基于对象和类的概念&#xff0c;支持封装、继承和多态&#xff0c;如 Java、C、Python、Ruby 等。 函数式编程语言 注重不可变性和纯函数&#xf…...

算法——层序遍历和中序遍历构造二叉树

晴问 #include <iostream> #include <vector> #include <queue> #include <unordered_map>using namespace std;struct TreeNode {int data;TreeNode *left;TreeNode *right;TreeNode(int data) : data(data), left(nullptr), right(nullptr) {} };//…...

中考英语之06语态(动词语态-简单)

1 主动语态和被动语态 在初中英语中&#xff0c;语态是动词的一种形式&#xff0c;用于说明主语与谓语动词之间的关系&#xff0c;主要有主动语态和被动语态两种。 1.1 主动语态 定义&#xff1a;表示主语是动作的执行者。结构&#xff1a;主语 谓语&#xff08;及物动词&a…...

linux常用基础命令_最新

常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…...

PH热榜 | 2025-03-16

1. BrowserAgent 标语&#xff1a;基于浏览器的人工智能代理 - 无限使用&#xff0c;固定费用 介绍&#xff1a;在您的浏览器中直接创建和运行AI工作流程&#xff0c;无需支付API费用。我们的可视化编辑器不需要编写代码&#xff0c;同时我们的浏览器本地技术支持以固定价格进…...

《论语别裁》第01章 学而(27) 无所适从的礼俗

下面讲做学问的态度。 有子曰&#xff1a;礼之用&#xff0c;和为贵&#xff0c;先王之道&#xff0c;斯为美&#xff0c;小大由之&#xff1b;有所不行&#xff0c;知和而和&#xff0c;不以礼节之&#xff0c;亦不可行也。 为什么讲学问讲到礼&#xff1f;这个礼&#xff0c…...

关于进程的实验(子进程和父进程相关的)

文章目录 1.第一个问题2.第二个问题3.第三个问题 1.第一个问题 编写一段程序&#xff0c;利用系统调用fork( )创建两个进程。当此程序运行时&#xff0c;在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符&#xff1a;父进程显示字符“a”;子进程分别显…...