Lesson3 - 操作系统软件视角和系统调用

文章目录

  • 硬件支持系统 系统管理硬件
  • 异步行为
    • 中断的分类
  • 同步行为
  • 虚拟地址空间
  • shell
  • 系统调用与软中断
    • 区分系统调用
    • trace 命令


硬件支持系统 系统管理硬件

计算机硬件由三样东西组成:CPU、内存、I/O设备。为了更有效地管理这些硬件资源,系统设计者引入了抽象的概念,其中最为核心的三大抽象便是进程、虚拟内存与文件

在这里插入图片描述

  • 将磁盘和I/O设备抽象成文件,统一由对应文件来访问对应设备。
  • 将内存与文件统一规划为虚拟地址空间来屏蔽了下层细节。
  • 最后将CPU资源与虚拟地址封装给进程,为进程服务。

异步行为

在这里插入图片描述

异步分为两种:软件异步和硬件异步。他们的流程都是一样的。

当程序正在执行时,发生了一个错误导致未能正常运行,这个就叫中断

  • a.1:中断来临时,第一件事就是保护现场。主要是三样东西:
    • PC指针:必须由硬件(CPU)来做,因为如果用软件做的话,PC值已经跳转到软件的地址,而非中断地址。
    • PSW寄存器:由于在跳转时PSW数据不会改变,所以由OS来做。
    • 基础寄存器:同样由OS做。
    • 现在的CPU也将PSW和基础寄存器的保护一并做了。
  • a.2:中断向量表
    • 根据不同的中断信息,查表找到对应的中断处理函数的入口。
    • 这个表由OS来制定,不同的系统有不同的表。
    • 现在的部分CPU也可以提供这个表。
  • a.3:中断处理函数
    • 由OS准备。
  • a.4:中断返回
    • 区别于普通函数的返回(例如C的return),这个返回需要我们将数据重新写回寄存器,还原现场,显然普通返回做不到,所以就有了特定的汇编语言写的返回。
    • 这个返回由OS来写。
    • 现在的部分CPU也能做。

中断的分类

中断分两类:

  • 程序主动发出的中断:异常处理
    • 由程序写死的,固定发生的情况。
    • 例如:
      • int a = 10 / 0;
      • 系统调用,访问内存缺页的情况。
  • 硬件被动发生的中断:外部中断
    • 由外部设备或系统硬件主动向CPU发出的中断信号,无法预测什么时候发生的事件。

同步行为

在这里插入图片描述
同步就是程序的顺序执行过程。

  • func1()开始执行:
    • 栈中记录下a, b的数据。
    • 保护数据(PC、PSW、普通寄存器)
  • 跳转到a1():
    • 记录x1, x2数据。
    • 执行完毕。
  • 函数返回:
    • 普通函数数据保护(共两样):
      • PC值:
        • 之前压栈保存,现在将无关数据弹栈,直到发现指令地址,将其赋给PC。
        • 同样,因为PC值会变,所以由硬件来进行保护。
      • 基础寄存器:
        • 因为是应用程序,所以由 编译器 进行保护。
      • PSW :
        • 用不到之前的状态,不需要保护。

虚拟地址空间

在这里插入图片描述

从操作系统层级上看,虚拟地址空间主要分为两个部分内核区和用户区。

  • 内核区:
    • 常驻内存,是操作系统的一部分。
  • 用户区(内存四区):
    • 代码区(.text):通常用于存放程序的执行代码(即CPU执行的机器指令),代码段一般情况下是只读的,这是对执行代码的一种保护机制。
    • 数据区(.data):存放程序中已初始化且初值不为0的全局变量和静态变量。数据段属于静态内存分配(静态存储区),可读可写。
    • 堆区(.heap):存放运行时动态申请的内存,由程序员管控。
      • 堆中内容是匿名的,不能按名字直接访问,只能通过指针间接访问。
      • 堆向高地址扩展(即“向上生长”),是不连续的内存区域。这是由于系统用链表来存储空闲内存地址,自然不连续,而链表从低地址向高地址遍历。
    • 栈区(.stack):存放局部变量,由编译器管控。
      • 跟堆区相反,内存向下生长,内存连续。

更多详细内容:文件描述符 - 1.2 分区


shell

在这里插入图片描述
shell是封装在OS之上的一种软件,提供了一系列指令给操作者来对OS进行操作。


系统调用与软中断

在这里插入图片描述
程序在执行时,会有对硬件进行操作的需求,但是程序在用户空间执行,不能直接对内核区的硬件进行操作,所以就需要系统调用帮忙。

  • 系统调用是用汇编语言写的指令,封装成接口供程序使用。
  • 调用系统调用时,进行了模式的切换
    • 主动放弃用户模式,转而进入内核模式执行某些特权操作。
  • 软中断
    • 软中断是由用户程序主动触发的,与硬件中断不同。
    • 在调用系统调用时,程序通常会触发一个软中断(如使用INT指令),这会中断当前的程序执行,将控制权转移到操作系统的内核。

区分系统调用

那么多系统调用,如何分辨要执行哪一个呢?

  • 在软中断信号中,含有号码,这个号码CPU不进行解析,CPU只读取到这是软中断,然后交由OS解析,OS根据号码执行对应的系统调用。

trace 命令

trace ./a,out

追踪执行程序时使用的系统调用。

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

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

相关文章

使用bert模型进行命名实体识别任务

一、实验内容 本实验使用预训练的 BERT 模型进行命名实体识别(NER)任务,并且使用 Hugging Face 的 Transformers 库完成模型的训练、验证和测试。最后,使用测试集评估模型性能,计算NER指标。 二、算法介绍 Bert是一种…

Observability:使用 OpenTelemetry 自动检测 Go 应用程序

作者:来自 Elastic Damien Mathieu 使用 OpenTelemetry 检测 Go 应用程序可以深入了解应用程序的性能、依赖项和错误。我们将向你展示如何使用 Docker 自动检测 Go 应用程序,而无需更改应用程序代码。 在快节奏的软件开发领域,尤其是在云原生…

分治算法(3)_快速选择_数组中的第K个最大元素

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 分治算法(3)_快速排序_数组中的第K个最大元素 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论&#…

【原创】Anaconda+VScode+PySide6 完美配置Python开发环境,亲测!

准备工作 下载安装 Anaconda 下载安装Visual Studio Code 配置系统环境变量 配置Anaconda环境变量 将Anaconda安装目录及Scripts 、Library\bin 两个子目录添加到用户变量或系统变量的Path变量中。 Anaconda自带最新版Python,如果已经安装Python,建议…

Mybatis测试案例

1.创建springboot工程 创建实体类user和接口 user类 注意:java和mysql的对象的属性数据类型要一致 mapper接口 2.配置mybatis(连接数据库信息) # spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #地址url spring.datasource.urljdbc:mysql://localho…

【Python】Mistune:高效的 Python Markdown 解析器

Mistune 是一个轻量且强大的 Python Markdown 解析器。它的设计目标是兼顾速度和扩展性,同时兼容 CommonMark 标准。Mistune 支持多种渲染器(Renderers)和插件,能够根据需求将 Markdown 转换为 HTML、LaTeX 或自定义格式。此外&am…

Java中数组的应用

Java中数组的应用 数组数组的使用使用方式1-动态初始化数组的定义:数组的引用(使用/访问/获取数组元素):快速入门案例 使用方式2-动态初始化**先声明**数组**再创建**数组使用方式1和2的比较 使用方式3-静态初始化初始化数组快速入…

[嵌入式Linux]—STM32MP1启动流程

STM32MP1启动流程 1.启动模式 STM32MP1等SOC支持从多种设备中启动,如EMMC、SD、NAND、NOR、USB、UART等。其中USB、UART是作为烧录进行启动的。 STM32MP1内部ROM中存储有一段出厂代码来进行判断从哪种设备中启动,上电后这段代码会被执行,这…

CPU中的寄存器是什么以及它的工作原理是什么?

在计算机科学中,寄存器是数字设备中的一个重要组成部分,它用于存储数据和指令以快速处理。寄存器充当临时存储区,信息可以在这里被快速访问和操作,以执行复杂任务。寄存器是计算机中最基础的存储类型,它们在帮助机器高…

【Unity】版本不一致且未升级资产,导致 Unity Sprite 2D 动画播放错误

自己的 Unity版本是 2022.3.45f1。目前折腾的这插件 2D Action RPG Engine: Mythril2D ,推荐使用的 Unity 版本是 2021.3.18。 倒腾了这个 unity animation 动画半天,发现这个 animation sprite resolver 在导入动画帧的时候,一直都导入的是…

allegro 替换过孔

操作步骤如下 1.选择操作对象(需要替换的过孔),右键–>Repace……–>Selected…… 2.在弹出的窗口中选择最终需要的过孔既可以

【Matlab学习日记】② 常用滤波以及噪声分析方法(上)

关注星标公众号,不错过精彩内容 作者 | 量子君 微信公众号 | 极客工作室 【Matlab学习日记】专栏目录 第一章 ① Sinmulink自动代码生成教程 第二章 ② 常用滤波以及噪声分析方法(上) 文章目录 前言一、使用滤波的目的二、常见的几种噪声和表…

算法闭关修炼百题计划(四)

仅供个人复习 1.两数相加2.寻找峰值3.寻找旋转排序数组中的最小值4.寻找旋转排序数组中的最小值II5.搜索旋转排序数组6.岛屿的最大面积7.最大数8.会议室9.最长连续序列 1.两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储…

STM32 通用同步/异步通信

一、串行通信简介 CPU与外围设备之间的信息交换称为通信。基本的通信方式有并行通信和串行通信两种。STM32单片机提供了功能强大的串行通信模块,即通用同步/异步收发器(USART)。 1.串行通信 串行通信是数据字节一位一位地依次传送的通信方式。…

毕业设计 深度学习水果识别

文章目录 1 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果 1 前言 Hi,大家好,这里是丹成学长,今天做一个 基于深度学习的水果…

毕业设计——医院信息化系统原型设计

作品详情 主要功能: 信息化系统是以患者为中心,服务于重症科室医务人员,提高工作效率及医疗服务质量。软件主要包含了重症医学临床管理系统和中央监控站,重症医学临床管理系统主要实现患者床位总览、患者护理、医嘱管理、数据字典…

JS 介绍/书写位置/输入输出语法

目录 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS 的组成 2. JS 书写位置 2.1 内部 JS 2.2 外部 JS 2.3 内联 JS 3. JS 注释和结束符 4. JS 输入输出语法 4.1 输入语法 4.2 输入语句 4.3 执行顺序 5. 字面量 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS …

GOM引擎启动后M2提示Invalid filename报错的解决办法

在架设一个GOM引擎版本的时候,启动M2就提示Invalid filename,之后的网关就没有办法再启动了,研究了半天也终于是弄好了,其实也简单,就是路径设置的不对,所以无法完成启动,很多人以为在控制台设置…

国庆节刷题

10.1 C语言 10.1 C 10.2 C语言 10.2 C 10.3 C语言 10.3 C 10.4 C语言 10.4 C 10.5 C语言 10.5 C 10.6 C语言 10.6 C

如何写出Pythonic的代码?

f-string、三元操作、各种解析式、生成器装饰器的熟练运用,“内库”引用和函数封装再加持PEP8,撰写的脚本不pythonic都难。😎 (笔记模板由python脚本于2024年10月07日 18:03:27创建,本篇笔记适合特别喜欢python的coder翻阅) 【学习…