Linux内核——Linux内核体系模式(二)

1 Linux系统的中断机制

Linux内核将中断分为两类:硬件中断和软件中断(异常)。每个中断是由0-255之间的一个数字进行标识。

  • 中断int0-int31(0x00-0x1f)作为异常
  • int32-int255由用户自己设定
    在这里插入图片描述
  • int32-int47对应与8259A中断控制芯片发出的硬件中断请求信号IRQ0-IRQ15,并把程序编程发出的系统调用中断设置为intl28(0x80)。系统调用中断是用户程序使用操作系统资源的唯一界面接口。
    在这里插入图片描述在这里插入图片描述
    1. 系统如何进行中断初始化
  • 内核在head.s程序中使用一个哑中断向量(中断描述符)对中断描述符表IDT中所有256个描述符进行了默认设置(boot/head.s,78)。哑中断向量指向一个默认的“无中断”处理过程(boot/head.s,150)
  • 当发生了一个中断而又没有重新设置过该中断向量就会显示信息“未知中断(Unknown Interrupt)”
  • 可以对所有256项都进行设置可以有效防止出现一般保护性错误(异常13)。否则当设置的IDT少于256项,那么在一个要求的中断所指定的描述符项大于设置的最大描述符项时,CPU就产生一个一般保护出错(异常13)
  • 如果硬件出问题没有吧设备的向量放到数据总线上,此时CPU会从数据总线上读入全1作为向量,将会造成一般保护出错。
  • 异常中断处理过程(int0-int31)都在traps.c的初始化函数中进行了重新设置(kernel/traps.c,181),系统调用中断int128在调度程序初始化函数中进行了重新设置(kernel/sched.c,385)。
  1. 中断和陷阱门的使用:

    • Linux内核使用中断门和陷阱门两种描述符来处理中断,区别在于对EFLAGS寄存器中的IF(中断允许)标志的影响。
    • 中断门会复位IF标志,避免其他中断干扰;陷阱门则不影响IF标志。
  2. 标志寄存器的中断标志管理:

    • Linux内核使用cli和sti指令来控制CPU的中断响应。
    • cli指令清除中断标志,禁止中断;sti指令设置中断标志,允许中断。
    • 这种方法用于保护临界代码区免受中断干扰,避免数据竞争和系统崩溃。

2 Linux的系统调用

系统调用
系统调用是用户程序与操作系统内核之间的接口,用于请求操作系统提供的服务。通常使用函数形式进行调用,可以带有参数,并通过返回值表示执行结果。

1 )系统调用号和错误处理:
每个系统调用都有一个唯一的功能号,这些功能号定义在include/unistd.h文件中。错误的系统调用会返回负值,并把错误类型码存储在全局变量errno中。

2)系统调用的实现机制:
系统调用通过中断0x80进入内核,eax寄存器存放系统调用号,ebx、ecx和edx寄存器用于传递参数。Linux内核中的系统调用处理函数以’sys_'为前缀,例如write系统调用的处理程序是sys_write。

系统调用处理过程

  • 当发出中断调用int 0x80后,system_call程序开始执行,它检查系统调用号的有效性,并从sys_call_table[]数组中调用相应的处理程序。
  • sys_call_table[]数组中的索引对应系统调用的功能号,每个索引处的函数指针指向相应的内核服务程序。
  • 库函数与直接系统调用:
    • 用户程序通常通过库函数间接调用系统调用,但也可以跳过库函数直接执行系统调用。
    • 直接执行系统调用可以使用宏syscalln(),其中n代表参数个数,例如syscall3表示三个参数。
    • 系统调用接口是内核与应用程序交互的唯一途径,它允许应用程序利用内核提供的服务来访问系统硬件资源。

(八股回答)

在Linux系统中,系统调用的处理过程是一个复杂的机制,涉及用户空间和内核空间之间的交互。

1. 触发系统调用 当用户程序需要操作系统提供的服务时,它会通过库函数(如C标准库中的函数)或直接通过内嵌汇编语句来触发一个系统调用。这通常涉及执行一个特殊的汇编指令(如int$0x80),该指令会产生一个异常,使得控制权转移到内核空间。

2. 传递系统调用号和参数 在执行系统调用指令之前,程序会将系统调用号存储在eax寄存器中,将任何需要的参数存储在ebxecxedx寄存器中。这些参数是系统调用可能需要的输入数据。

3. 进入内核空间 当CPU执行int $0x80指令时,它会切换到内核模式并跳转到异常处理程序的地址。在Linux中,这个处理程序是system_call函数,它位于kernel/system_calls文件中。

4. 系统调用分发 system_call函数首先检查eax寄存器中的系统调用号是否有效。然后,它使用系统调用号作为索引,从sys_call_table数组中查找相应的内核函数指针,并间接调用该函数。sys_call_table是一个包含所有系统调用处理函数指针的数组。

5. 执行系统调用处理程序 一旦找到并调用了相应的内核函数,它将执行所需的操作,可能会访问硬件设备、管理文件系统或执行其他内核级别的任务。

6. 返回用户空间 系统调用处理程序执行完毕后,它将返回值存储在eax寄存器中,并执行iret指令返回到用户空间。如果在系统调用过程中发生错误,一个负值会被存储在eax中,而错误号会被存储在errno全局变量中供应用程序检查。

7. 获取系统调用结果 一旦控制权返回给用户程序,它可以检查eax寄存器中的返回值以确定系统调用的结果。如果返回值是正数,表示系统调用成功;如果是负数,则表示系统调用失败,程序可以查看errno以获取错误信息。

3 Linux进程控制

  1. 进程调度
    Linux操作系统采用基于优先级的进程调度算法,常见的如完全公平队列(Completely Fair Scheduler, CFS)。CFS的目标是确保每个进程获得公平的CPU时间,同时考虑到进程的优先级。

    • 进程优先级:每个进程都有一个优先级,这个优先级决定了它在CPU上执行的时间。高优先级的进程会获得更多的CPU时间。
    • 时间片:CFS为每个进程分配一个运行的时间片,这个时间片基于进程的优先级。当一个进程的时间片用完后,它会被放到运行队列的末尾。
  2. 分时技术
    分时技术是一种操作系统管理多个进程的方法,使得每个进程都能在有限的时间内获得CPU的使用权。

    • 时间片轮转:操作系统为每个进程分配一个小的时间片(通常是几十毫秒),在这个时间片内,进程可以执行指令。时间片结束后,即使进程没有完成执行,也会被挂起,操作系统接着运行下一个进程的时间片。
    • 抢占式多任务:如果一个更高优先级的进程需要CPU,当前运行的低优先级进程会被抢占,即被中断并移动到运行队列的末尾,而高优先级进程将获得CPU
  3. 多级反馈队列(MLFQ)
    Linux还采用了多级反馈队列(Multi-Level Feedback Queue, MLFQ)来进一步优化进程调度。

    • 多级队列:进程根据其行为和优先级被分类到不同的队列中。例如,交互式进程可能被放在一个更高的优先级队列,而批处理进程则可能被放在一个较低的优先级队列。
    • 反馈机制:进程的行为(如CPU使用时间、阻塞频率等)会影响其在队列中的优先级。例如,经常使用CPU的进程可能会被降低优先级,而不经常使用的进程则可能被提升优先级。
  4. 用户控制与系统配置
    系统管理员可以调整系统的各种参数来控制进程调度的行为,以适应特定的工作负载和性能要求。

    • 调整优先级:可以通过nice值来调整进程的优先级,影响其在CPU上的运行时间。
    • 配置调度器:Linux允许管理员选择不同的进程调度器,或者调整现有调度器的参数,以优化特定类型的应用程序或工作负载。
  5. 任务数据结构
    进程表项是一个task_struct任务结构指针。
    在这里插入图片描述
    在这里插入图片描述

  6. 进程运行状态
    在这里插入图片描述

  7. 进程初始化与创建进程
    【Linux】Linux进程的创建与管理
    Linux系统初始化进程及文件(带命令)

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

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

相关文章

PCL 基于点云RGB颜色的区域生长算法

RGB颜色的区域生长算法 一、概述1.1 算法定义1.2 算法特点1.3 算法实现二、代码示例三、运行结果🙋 结果预览 一、概述 1.1 算法定义 点云RGB区域生长算法: 是一个基于RGB颜色信息的区域生长算法,用于点云分割。该算法利用了点云中相邻点之间的颜色相似性来将点云分割成…

志愿者管理系统带讲解,保运行

技术栈 后端: SpringBoot Mysql MybatisPlus 前端: Vue Element 分为 管理员端 用户端 功能描述 用户端 管理员端 观看地址: B站 : 【毕设者】志愿者管理系统(安装讲解源码)

进程,线程,虚拟内存,交换技术

参考资料: 参考视频1https://www.bilibili.com/video/BV1Hs421M78w/?spm_id_from333.999.0.0&vd_source97411b9a8288d7869f5363f72b0d7613 参考视频2https://www.bilibili.com/video/BV1jE411W7e8/?spm_id_from333.337.search-card.all.click&vd_source…

Redis基础教程(六):redis 哈希(Hash)

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

3D开发工具HOOPS助力3D制造业仿真应用实现工厂环境规划和模拟!

HOOPS SDK是全球领先的3D领域开发工具提供商Tech Soft 3D 打造的控件产品,HOOPS SDK包括4款3D软件开发工具,其中HOOPS Exchange是一款CAD数据转换工具,可读取和导入30多种CAD文件格式;HOOPS Communicator是一款专注于Web端工程图形…

昇思25天学习打卡营第13天|基于MobileNetV2的垃圾分类

MobileNetv2模型原理介绍 相比于传统的卷积神经网络,MobileNet网络使用深度可分离卷积(Depthwise Separable Convolution)的思想在准确率小幅度降低的前提下,大大减小了模型参数与运算量。并引入宽度系数α和分辨率系数β使模型满…

根据后端返回的省市区重新封装树结构(省市区通过children表示)

对比图(截取部分): 注:先看分步,最后会附上完整代码(如果有用,可以给小编点个赞吗?十分感谢) 1.首先将前端返回相同的省份只展示一次 const obj {}; let keyList []r…

SpringBoot创建一个初始化项目

提示:这一篇文章,主要是为了之后可以快速的去搭建项目,当然这篇博客,作者也会根据以后学习到的东西,慢慢去整理 文章目录 前言 搭建一个SpringBoot项目,目的是为了快速开发项目 项目列表 响应枚举类 /***…

面向优秀SCI论文写作的语言大模型提示词设计

模板1:Abstract 润色 I want you to act as an SCI reviewer and evaluate the abstract of a research paper. You may check if the abstract is well-written and serves as an informative and descriptive overview of the research. You may also check if it…

Docker 部署 Nacos v2.3.2 版本

文章目录 Github官网文档Nacos 生态图Nacos Dockerdocker-compose.ymlapplication.propertiesNacos 官方示例 Github https://github.com/alibaba/nacos 官网 https://nacos.io/ 文档 https://nacos.io/docs/latest/what-is-nacos/ Nacos 生态图 Nacos Docker 镜像&…

ARM功耗管理软件之DVFSAVS

安全之安全(security)博客目录导读 思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS? 目录 一、ARM功耗管理软件之DVFS 二、ARM功耗管理软件之AVS 一、ARM功耗管理软件之DVFS 有一个实现特定…

我的技术十年

前言 十年一瞬,2014 年毕业至今,刚好十年。《异类》一书曾提到“一万小时定律”,要成为某个领域的专家,需要 10000 小时,按比例计算就是:如果你每天工作八小时,一天工作五天,那么成…

2024-07-01_外语学习

文章目录 前言1、Los Angeles至于单个los 是什么意思?我们可以逐词翻译这个西班牙语句子 2. Extraneous non-props attributes (style) were passed to component but could not be automatically inherited because component renders fragment or text root nodes…

ONLYOFFICE8.1版本桌面编辑器的测评(您的私人办公室)

ONLYOFFICE官网链接:ONLYOFFICE - 企业在线办公应用软件 | ONLYOFFICE 在线PDF查看器和转换器 | ONLYOFFICE​​​​​​在线办公套件 | ONLYOFFICE 一,引言 在数字化浪潮中,高效、便捷、安全的办公工具对现代职场至关重要。今天,…

SOC模块LoRa-STM32WLE5有哪些值得关注

SoC 是片上系统的缩写,是一种集成芯片,集成了计算机或其他电子系统的所有或大部分组件。这些组件通常包括中央处理器 (CPU)、内存、输入/输出接口和辅助存储接口。包含数字、模拟、混合信号和通常的 RF 信号处理功能,具体取决于应用。片上系统…

守护矿山安全生产:AI视频分析技术在煤矿领域的应用

随着人工智能(AI)技术的快速发展,其在煤矿行业的应用也日益广泛。AI视频智能分析技术作为其中的重要分支,为煤矿的安全生产、过程监测、效率提升和监管决策等提供了有力支持。 一、煤矿AI视频智能分析技术的概述 视频智慧煤矿AI…

6 矩阵相关案例

矩阵计算在CUDA中的应用是并行计算领域的典型场景 ; 矩阵算法题通常涉及线性代数的基础知识,以及对数据结构和算法的深入理解。解决这类问题时,掌握一些核心思想和技巧会非常有帮助。以下是一些常见的矩阵算法题解题思想: 动态规划…

嵌入式UI开发-lvgl+wsl2+vscode系列:5、事件(Events)

一、前言 这节进行事件的总结,通过事件回调方式将用户和ui的交互行为绑定组合起来。 二、事件示例 1、示例1(点击事件) #include "../lv_examples.h" #if LV_BUILD_EXAMPLES && LV_USE_SWITCHstatic void event_cb(lv_…

Chapter8 透明效果——Shader入门精要学习笔记

一、基本概念 在Unity中通常使用两种方法来实现透明效果 透明度测试(无法达到真正的半透明效果)透明度混合(关闭了深度写入) 透明度测试 基本原理:设置一个阈值,只要片元的透明度小于阈值,就…

全球AI新闻速递7.1

全球AI新闻速递 1.科大讯飞发布讯飞星火 V4.0。 2.成都人形机器人创新中心:基于视觉扩散架构的人形机器人任务生成式模型 R-DDPRM。 3.安徽省人形机器人产业创新中心获批,将打造国内首创、世界领先研究基地。 4.亳州牵手华为打造华佗中医药大模型。 …