RT-Preempt笔记

2023-05-16

基于Zynq平台的Linux实时性研究及在数据采集中的应用_马啸

嵌入式实时系统研究现状

实时操作系统专门用于在时间约束条件下运行时间关键的应用程序。用于操作处理实时任务所需的最坏情况执行时间(Worst Case Execution Time,WCET)是实时系统最为关心的。从二十世纪90年代开始,实时操作系统在嵌入式系统领域里逐渐占据主导地位。越来越多的用户选择使用实时操作系统。因为中国有最大的电信市场,所以中国也是世界上最大的实时操作系统的市场之一。随着计算机技术和芯片制造工艺的发展,越来越多的应用环境中使用到了嵌入式系统。从民用的电视、智能电话到军用的飞机、坦克,随处可见嵌入式系统的身影。实时嵌入式系统也得到了广泛的应用,因此市场需求是分巨大。有很多系统设计企业和开发组织相继推出了实时操作系统。这些实时操作系统由于需求不同,设计不同,因此有不同的特征。常见的嵌入式实时操作系统有:FreeRTOS,RTLinux,RT-Thread,μClinux,μC/OS-II、eCos和VxWorks等。在此将逐一介绍。

FreeRTOS相较于国内,还是在欧美使用的更加普遍,但依然有不错的发展趋势。FreeRTOS是一个轻量级的开源实时内核。其内核本身只包含3个C文件,故它主要由C语言编写,只在需要的地方包含了一些汇编函数,1因此相较而言易于移植和维护。不同于Linux或者Microsoft Windows等操作系统中拥有高级功能,例如设备驱动程序,高级内存管理,用户账户和网络,FreeRTOS更加紧凑和轻便,开销很低,FreeRTOS通过优先级调度策略来调度任务。2

RTLinux是一个硬实时操作系统(RTOS)微内核,它将整个Linux操作系统作为一个完全抢占的进程来运行,核心代码由C语言编写3。硬实时属性可以让RTLinux应用于机器人控制、数据采集系统、工业制造和其他对时间敏感的仪器和机器。关键的RTLinux设计目标是使系统成为透明的,模块化的和可扩展的。透明度意味着没有不可打开的黑匣子,任何操作都应该是可以确定的。模块化意味着如果不需要,可以省略功能和该功能的费用。可扩展性意味着程序员应该能够添加模块并根据他们的要求定制系统。它具有简单的优先级调度器,也可以很容易地替换为更适合某些特定应用程序需求的调度器。

RT-Thread是一种用于嵌入式设备的开源实时操作系统。RT-Thread由位于中国的RT-Thread开发团队经过十年的全面集中开发。旨在改变中国目前的情况,即微控制器领域没有很好的开源实时操作系统。RT-Thread有8,32或256个优先级调度多线程调度,使用循环策略(RR)可确保具有相同优先级的所有线程将被平等调度4

μClinux是一种优秀的嵌入式Linux版本。虽然同标准的Linux相比,它的内核非常小,因为它是针对没有内存管理单元(MMU)的微控制器而设计。但它依然继承了Linux操作系统的特性,例如稳定性强、可移植、网络功能强、文件系统出色等5

μC/OS-II内核专为在有大量CPU架构上使用而设计6,μC/OS内核的功能包括:具有可选循环调度(RR)的抢先式多任务实时内核,高度可扩展,资源高效,拥有6K到24K字节的代码空间,1K字节数据空间,中断禁止时间非常短。

eCos是一个免费的开源实时操作系统,适用于只需要一个具有多个线程的进程的嵌入式系统和应用程序7。它旨在根据运行时性能和硬件需求的精确应用要求进行定制。它以C/C++实现,并具有POSIX和μITRON的兼容层和应用程序编程接口。它受到流行的SSL/TLS库的支持,因此符合嵌入式安全的所有标准。

VxWorks是由美国TPG Capital的全资子公司Wind River Systems开发的专有软件实时操作系统(RTOS),VxWorks于1987年首次发布,专为需要实时,确定性能的嵌入式系统而设计,在许多情况下还用于安全和安全认证,在航空航天和国防,医疗设备,工业设备,机器人,能源等行业广泛应用8。VxWorks的优先级调度策略包含固定优先级调度、FIFO调度策略和RR循环调度策略。

Preempt-RT发展历程

根据实时性系统要求,再结合Linux内核的特点,让Linux实时化有很多种方法,Preempt-RT就是让Linux内核实时化方法的其中一种。

从1995年到2004年,进行的是早期的将Linux实时化的工作。实时研究人员着手将Linux转换为实时操作系统。将Linux实时化的方法可分为两种:第一种是双核方案,利用Nano或Micro-Kernel作为RTOS内核,在其空闲任务中运行Linux内核。实例有:RT/Linux,RTAI,DROPS以及后来的Xenomai;第二种是在内核中实现实时,也就是修改内核代码本身以获得实时操作系统属性,实例有:KURT和Linux/RK。这些项目都没有真正合并到主线内核中。从2004年到2009年,Preempt-RT项目开始启动并逐步发展起来,2004年秋季,不同的相关方发布了各种补丁系列,提供了将Linux内核转换为实时操作系统的基本技术。

Ingo Molnar作为当时内核调度程序的维护者,他选择了一些补丁从头开始重写它们并将它们组合成一组一致的补丁,旨在实现完整的内核实时。很快就形成了一个由核心开发人员组成的小团队。在相对较短的时间内创建了第一个可用的Preempt-RT版本。

2005年的Linux内核峰会中讨论了将Preempt-RT集成到上游内核的一般方法,并且获得大多数开发人员的一致同意。前提是它不会破坏现有的工作,也不会为未来的开发造成障碍。这期间,Preempt-RT工作的大部分内容都进入了Linux内核,包括:通用计时,高分辨率计时器,互斥基础结构,通用中断处理基础结构,用户空间互斥锁的优先级继承,可抢占和分层的RCU,线程化中断处理程序等。
从2009年至2013年,在RedHat公司的资助下,Preempt-RT依然保持活力。

在2014年,RedHat彻底削减了Preempt-RT资金后,Preempt-RT成为业余爱好者项目。随后不久,OSADL提供全职资金,以便在2015年能够保持Preempt-RT的维护。在2015年,Linux基金会开始在Kate Stewart的领导下创建一个名为Real-Time Linux Collaborative Project的项目。该项目资金允许五名工程师全职工作,其明确的目标是将Preempt-RT补丁合并到主线内核中。

从2016年到2018年:Preempt-RT成为实时Linux协作项目。在这两年,Thomas Gleixner的Preempt-RT团队生成的数百个补丁被集成到Linux内核中。这项工作大部分是重构现有的上游代码,以便更轻松地集成Preempt-RT。主要成就是:重写CPU热插拔基础架构,重构高分辨率计时器等。虽然这项工作使Preempt-RT的集成和维护更容易,但它不仅仅是特定于Preempt-RT,它本身对Linux内核的质量和性能而言也很有价值。虽然这种努力减少了Preempt-RT补丁集的大小。在2017年底和2018年初发生Meltdown/Spectre安全灾难,使得Preempt-RT团队负责人Thomas Gleixner参与到Linux内核的针对这场灾难的缓解措施的开发当中,因此将Preempt-RT的开发速度降低了约两个月,现在已恢复正常。到目前为止,RT-Preempt实时抢占补丁成功地将对主线Linux内核的影响保持在最低限度9

RT_preempt补丁原理:

与实时相关的一个概念就是“抢占”,即系统有能在许多“抢占点”中断任务的能力。不可中断的程序单元越长,优先级较高的任务在启动或恢复之前的等待时间(“延迟”)就越长。GNU/Linux是“用户空间可抢占的":它允许用户任务在任何时候被中断。但是这种抢占程度依然不能保证系统是实时的。Preempt-RT的目标是提高实时性能。但Preempt-RT并不能提高吞吐量和整体性能,相反,它是降低整体性能。Preempt-RT也并不是减少了延时,而是将最大延时减小。因此,Preempt-RT重要目标是使系统的可预测性和可确定性增强。Preempt-RT用可抢占的构造取代不可抢占的构造,使操作系统尽可能地抢占。使中断线程化,这样中断处理程序也可以被调度10,自旋锁转换为互斥锁(换句话时说,睡眠自旋锁)不禁用中断并允许抢占适用于线程中断。

实时抢占补丁采用中断线程化、临界区可抢占、高精度时钟、优先级继承等方法提高Linux内核实时性。

1、临界区可抢占

实时最重要的方面,就是通过内核在任何地方都可以通过抢占来控制延迟。Preempt-RT通过重新实现实时互斥锁(rt mutex)使内核里的自旋锁(spinlocks)可被抢占1112。如下图所示,在一段不重要的代码之后产生了一个紧急的中断。由于紧接着不重要代码之后的是一段关键的代码部分,所以中断处理函数并不能得到马上运行,需要在关键代码执行完之后才能运行中断处理函数并唤醒另外一个进程。如图所示:

在这里插入图片描述

如果是实时内核,则内核增加了抢占点,则如下图所示,在关键代码部分依然有很多可以抢占的位置,而非重要代码结束后系统产生的紧急中断则可以在这些抢占点处得到运行。通过这种增加抢占点的方式,使高优先级任务以及中断处理能够得到及时的响应。

在这里插入图片描述

2、中断线程化

线程化中断也是Preempt-RT使Linux实时化的的主要工作10。使用中断处理线程来处理中断,使得中断处理程序可以在普通内核线程中运行,因此可以为其配置优先级。中断处理函数可分为上半部和下半部。在中断线程化后,其上半部依然做最小的工作,即回应中断,表示已经接收到了该中断,而中断下半部,则转化为内核线程用来处理中断。

在这里插入图片描述

如上图所示,TASK1是一个高优先级的任务。在普通内核中,高优先级任务TASK1就会因为被中断而被挂起,直到中断处理程序结束,TASK1才能得以继续运行。而在中断线程化后的内核中,发生中断后中断上半部依然正常执行,但由于其所做工作十分少,所以并不占用太多时间,中断下半部的工作由内核线程来执行,由于其优先级比TASK1的优先级低,故中断上半部结束后调度器选择TASK1继续执行,TASK1结束之后,中断处理程序才得以执行。通过这种方法,高优先级任务受中断延迟的影响便会减少。在实现中断线程化之后,几乎所有内核空间变为可抢占。其中,中断可以发生在任何时刻;被中断唤醒的进程也会得到立刻执行。

3、高精度时钟

Preempt-RT使Linux支持高精度时钟。Linux系统可以在体系架构和配置支持的情况下,将时钟频率从100HZ升级为1000HZ13相应的,定时器能够以1us的精度运行。从Linux v2.6.24-rc1开始,高分辨率定时器补丁被完全合并14,合并之后会出现一些问题,高优先级任务会抢占计时器中断线程,使其延迟很长时间。Preempt-RT实时抢占补丁包含针对这个问题的解决方案,根据信号需要被传递到的任务优先级来动态调整软中断优先级15

4、优先级继承

在这里插入图片描述

Preempt-RT解决了优先级反转问题。优先级反转问题如图所示16。一个低优先级任务获得了一个互斥锁,然后一个高优先级任务抢占了低优先级任务。但高优先级任务在执行了一段时间后也需要之前的互斥锁,此时高优先级任务便被锁住,只能等待低优先级任务释放互斥锁。低优先级任务在继续执行时,被一个中等优先级任务抢占,该中等优先级任务不需要互斥锁,因此可以持续运行。这相当于中等优先级任务即抢占了第优先级任务,也抢占了高优先级任务,于是发生了优先级反转问题。该问题造成了高优先级任务得到响应的延时增加。为提高系统实时性,必须解决该优先级反转问题。优先级反转问题可由优先级继承来解决,即获得互斥锁的进程会继承等待锁的更高优先级的进程的优先级[^17]。如下图所示,高优先级抢占低优先级任务之后,由于无法获得互斥资源便进入等待状态。原本的低优先级进程继承了此时高优先级进程的优先级后继续执行,当该进程释放了锁之后,就被高优先级进程抢占。通过这种方式,解决了高优先级进程被中等优先级进程抢占的问题。

在这里插入图片描述


参考文献:


  1. Barry R. Using the FreeRTOS Real Time Kernel - a Practical Guide[J]. 2010. ↩︎

  2. RandalE.Bryant,DavidR.O’Hallaron.深入理解计算机系统:a programmer’s perspective[M].机械工业出版社,2011. ↩︎

  3. 何挺有关RTLINUX的原理和应用浅析[J].中国科技纵横,2015(18):29-29. ↩︎

  4. 曹成嵌入式实时操作系统RT-Thread原理分析与应用[D].山东科技大学,2011. ↩︎

  5. 丁丁,汤晓斌,陈立德,殷树根基于 Clinux的FPGA远程更新系统的实现[J].电子技术应用,2014,40(03):6-8 ↩︎

  6. 俞佳敏,王成群,徐伟强实时操作系统1C/OS-1I最大优先级数扩展实现[J].无线电通信技术,2018,44(06):550-553. ↩︎

  7. 陆家珍.eCos的优化、移植及在UPS监控系统中的应用研究[D].武汉理工大学,2005. ↩︎

  8. Yue-Peng L I, Kang J J, Zhang J, et al. Abnormal Analysis and Processing Method in VxWorks Application Development [J]. Computer Knowledge & Technology, 2017. ↩︎

  9. RT-Preempt[EB/OL].https://wiki.linuxfoundation.org/realtime/tl/blog#preempt-rt-history. ↩︎

  10. 王帅华,杨东升,王允森,等,基于ARM的Linux实时抢占补丁的研究与实现[J].组合机床与自动化加工技术,2015(9):1-4. ↩︎ ↩︎

  11. 李玉奇,基于Linux的实时嵌入式操作系统内核的改进研究[D].沈阳理工大学,2011. ↩︎

  12. Spin locks [EB/OL] https//www.kernel.org/doc/Document ation/locking/spinlocks.txt ↩︎

  13. Hrtimers-subsystem for high-resolution kernel timers [EB/OL] https://www.kernel.org/doc/Documentation/timers/hrtimers.txt. ↩︎

  14. High resolution timerEB/OL] https://wiki.linuxfoundation.org/realtime/documentation/technical_details/hr_timers. ↩︎

  15. 万海龙linux嵌入式开发基本研究[J.西部皮革,2017,39(6):16-16. ↩︎

  16. 赵奇,索晓冉实时系统优先级反转研究[J].计算机应用研究,2008(06):1728-1730. ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RT-Preempt笔记 的相关文章

  • C语言简单链表详细步骤详解

    43 链表 gt 小阿豪带你写链表 xff01 xff01 xff01 xff01 进入正文 span class token number 1 span 首先 xff0c 先想好自己要创建的链表格式以及最后的的显示界面 xff01 xff
  • 滚球控制系统详解 —— (附核心代码)

    最近练习了17年的国赛题 滚球控制系统 这里展示一下画圆 xff1a 观看完整视频点这里 接下来 xff0c 我来分享一下从搭整体结构到调试完的过程 这是我搭完的整体结构 xff08 缩小版 xff09 不管什么题 xff0c 结构部分还是
  • 【Linux网络编程】你了解TIME_WAIT状态吗?

    在Linux网络编程中 xff0c 我相信大多数人觉得最难理解的就是TCP中的TIME WAIT状态了吧 xff0c 那么TIME WAIT的概念到底是什么 xff0c 有几个类型呢 xff0c 以及在面试中经常会问到的TIME WAIT状
  • 【图解】八幅图带你轻松掌握八大排序(上):冒泡排序、选择排序、插入排序、快速排序

    在算法中 xff0c 八大排序算是最简单的也是重中之重 xff0c 所以掌握好八大排序的思想是非常重要的 xff0c 很多人学排序的时候会觉得似懂非懂 xff0c 本篇文章作者耗时两小时绘制了八大排序的详细图解 xff0c 让大家快速理解八
  • 最详细整理STL之vector基础

    前言 xff1a Vector是一种可以存储任意类型的动态数组 xff0c 属于序列式容器 xff0c 可以用sort对其进行排序 xff0c 底层数据结构是数组 xff0c 可以随机访问元素 Vectors 包含着一系列连续存储的元素 其
  • STL之vector扩容机制

    前言 大家好 xff0c 我是萝卜 上期结尾说到vector的push back操作一般情况下时间复杂度为O 1 xff0c 是否存在特殊情况 那么本期就讲讲vector在容器空间不足时进行push back操作会发生什么 vector作为
  • 求职嵌入式软件开发linux kernel/BSP leader/工程师职位

    个人工作说明 xff1a 目前从事linux系统网络设备的开发工作 xff0c 负责bootloader linux kernel文件系统 xff0c driver移植 xff0c 以及开源app移植 主要技能和过去的经验 xff1a 1
  • 【2023最新】计算机网络面试题【收藏持续更新】

    你好 xff0c 我是萝卜 xff0c 我会在本篇文章持续更新关于计算机网络的面试题 最新内容更新日期 xff1a 2023 04 11 基础 说一下计算机网络体系结构 网络体系结构一般有三种 xff1a ISO七层模型 xff0c TCP
  • UDP协议详解

    概述 xff1a UDP只在IP的数据报服务之上增加了两个最基本的服务 xff1a 复用和分用以及差错检测 UDP不保证可靠交付 xff0c 但是不意味着应用对数据的要求是不可靠的 xff0c 只是所有维护可靠性的工作可由用户在应用层完成
  • TCP传输可靠性保证机制之重传机制

    TCP重传机制 tcp重传机制包括超时重传 快速重传 带选择确认的重传 SACK 重复SACK 四种 超时重传 xff1a 超时重传是tcp协议保证数据可靠性的一个重要机制 原理是在发送某一个数据以后开启一个计时器 xff0c 在一定时间内
  • VSCode:终端控制台常用指令

    常用的指令 以下是一些在 Visual Studio Code 终端控制台中常用的指令 xff1a 1 清除终端 xff1a clear 2 列出当前目录中的文件和文件夹 xff1a ls 3 切换到指定目录 xff1a xff1a cd
  • Ubuntu18.04安装ROS时rosdep update报错解决办法

    在安装ros进行rosdep update时经常会报错 xff0c 有时候可以通过换网解决 xff0c 但从我安装那么多次的经验来看 xff0c 仅有一次换手机热点后更新成功了 xff0c 其他都是失败 xff0c 成功率太低 从网上搜到了
  • 【STM32】STM32F103C8T6串口通信,实现3个串口收发数据

    串口通信 xff08 Serial Communications xff09 实现单片机与电脑或者其它外设进行通信 xff0c 通信时只需两根线 xff08 TX xff0c RX xff09 就可以实现数据传输 STM32f103有三个串
  • C语言学习笔记——(2)数组

    数组 1 什么是是数组2 数组的定义2 1数组的表达2 2数组的含义2 3数组的大小 xff1a 3 字符数组4 字符串操作5 二维数组 1 什么是是数组 数组是指有序的元素序列 如果将有限个类型相同的变量的集合命名 xff0c 那么这个名
  • 多线程编程实验

    xff08 一 xff09 查看下列程序并运行 xff0c 掌握如何通过扩展Thread类创建线程 span class token keyword package span span class token namespace case1
  • 实验一:基于Ubuntu系统实现无人机自主飞行

    ps xff1a 为避免出现错误 xff0c 在进行新的一步时 xff0c 需要关闭由于上一步操作打开的终端 xff0c 并开启一个新的终端 例如 xff1a 在开始第5步 安装MAVROS 之前 xff0c 关闭由于第3步 安装ROS 打
  • 5000字学习C语言错误处理的四种方式。

    C错误处理 在C语言中 xff0c 错误处理是一个非常重要的主题 通常情况下 xff0c 程序员需要在代码中处理错误 xff0c 以保证程序能够在出现错误时正确地处理这些情况 C语言中常见的错误类型包括 xff1a 语法错误 逻辑错误 运行
  • yum 源制作

    YUM介绍 YUM主要用于自动升级 安装 移除 rpm 软件包 xff0c 它能自动查找并解决 rpm 包之间的依赖关系 xff0c 要成功的使用 YUM 工具更新系统和软件 xff0c 需要有一个包含各种 rpm 软件包的 reposit

随机推荐

  • MATLAB021b与VS2022混编

    MATLAB2021b与VS2022混编 前言 目前在做一个大创项目 xff0c 其中用到关于Matlab与C的混合编程 xff0c 特此记录 Matlab2021b 如图所示 xff0c 红线划出的是即将使用的 c函数 xff0c 在左侧
  • 香橙派5使用NPU加速yolov5的实时视频推理(一)

    前言 xff1a 寒假里 xff0c 博主完成了树莓派4B搭载yolofastest V2的ncnn加速 xff0c 效果挺不错的 xff0c 但总感觉还是稍微差点意思 xff0c 于是就购买了一块香橙派5 xff0c 想要用RK3588芯
  • 香橙派5使用NPU加速yolov5的实时视频推理(二)

    三 将best onnx转为RKNN格式 这一步就需要我们进入到Ubuntu20 04系统中了 xff0c 我的Ubuntu系统中已经下载好了anaconda xff0c 使用anaconda的好处就是可以方便的安装一些库 xff0c 而且
  • 【STM32学习】——串口通信协议&STM32-USART外设&数据帧/输入数据策略/波特率发生器&串口发送/接受实操

    文章目录 前言一 串口通信1 通信接口2 串口通信 xff08 1 xff09 串口简介 xff08 2 xff09 串口硬件电路 xff08 3 xff09 串口软件部分 二 STM32的USART外设1 USART简介2 图示详解 三
  • 【STM32学习】——USART串口数据包&HEX/文本数据包&收发流程&串口收发HEX/文本数据包实操

    文章目录 前言一 数据包格式 xff08 江科大规定 xff09 1 HEX数据包2 文本数据包3 两者对比 二 数据包收发流程1 HEX数据包接收 xff08 只演示固定包长 xff09 2 文本数据包接收 xff08 只演示可变包长 x
  • buuctf simplerev 中的小头位序

    33条消息 BUUCTF SimpleRev xff08 涉及大小端序存储的问题 xff09 Ireb9z的博客 CSDN博客 buuctfsimplerev https blog csdn net afanzcf article deta
  • 简要分析网络编程——UDP编程

    计算机网络是指两台或更多的计算机组成的网络 xff0c 在同一个网络中 xff0c 任意两台计算机都可以直接通信 xff0c 因为所有计算机都需要遵循同一种网络协议 网络编程中有很多协议 xff0c 如 xff0c TCP协议 UDP协议
  • 数据结构之二叉树 Python实现

    树 树是一种非线性的数据结构 树 xff0c 它是若干结点的集合 xff0c 是由唯一的根和若个棵互不相交的子树组成的 其中 xff0c 每一棵子树又是一棵树 xff0c 也是由唯一的根结点和若干棵互不相交的子树组成的 由此可知 xff0c
  • 《奔跑吧Linux内核(第二版)》第四章笔记

    内核配置 内核配置工具常见的有 xff1a make config make oldconfig make menuconfig 内核配置工具最终会在Linux内核源码的根目录下生成一个隐藏文件 config文件 xff0c 这个文件包含了
  • GDB+QEMU调试Linux内核

    1 使用qemu创建虚拟机 使用qemu创建ARM64架构虚拟机可以参考我的另一篇博客 xff1a Ubuntu18 04使用qemu搭建ARM64架构虚拟机 xff08 二 xff09 2 安装gdb multiarch工具包 span
  • centos7 HA

    本文以两台机器实现双集热备高可用集群 xff0c 主机名node1的IP为192 168 122 168 xff0c 主机名node2的IP为192 168 122 169 一 安装集群软件 必须软件pcs xff0c pacemaker
  • 《奔跑吧Linux内核(第二版)》第五章笔记

    Linux内核采用宏内核架构 xff0c 即操作系统的大部分功能都在内核中实现 xff0c 比如进程管理 内存管理 进程调度 设备管理等 xff0c 并且都在特权模式下 xff08 内核空间 xff09 运行 而与之相反的另一种流行的架构是
  • 交叉编译内核模块

    本实验在x86环境中交叉编译ARM64架构模块 xff0c 然后qemu启动ARM64架构虚拟机 xff0c 加载该模块运行 1 创建ARM64虚拟机 详见 xff1a Ubuntu18 04使用qemu搭建ARM64架构虚拟机 xff08
  • Linux内核模块相互调用

    编写一个内核模块A xff0c 通过导出模块符号的方式来实现接口函数 编写另一个内核模块B xff0c 调用内核模块A暴露出来的接口函数 1 源文件 内核模块A xff08 test A c xff09 span class token m
  • RTOS论文笔记(二)

    李在林 韩宏克 嵌入式Linux实时性分析及改造 2010 Linux 的实时性测试 中断延迟测试 在Linux中 xff0c 内核或驱动程序显式地关 开中断 xff0c 一般是通过调用 cli sti 来进行操作的 在调用 cli 时 x
  • LXC容器相关论文笔记

    段赫 基于LXC容器资源优化的研究与实现 2016 一 绪论 容器虚拟化技术 传统虚拟化技术 xff0c 实现一个虚拟机就意味着需要消耗了硬件资源来在底层系统上虚拟一个新的操作系统 xff0c 所以除了传统模拟硬件的虚拟化技术 xff0c
  • fork和clone系统调用小实验

    实验一 xff1a 使用fork 函数创建一个子进程 xff0c 然后在父进程和子进程中分别使用printf语句来判断谁是父进程和子进程 fork 函数被调用后会立即创建一个子进程 xff0c 子进程和父进程同时独立运行互不干扰 返回值 x
  • 【RTOS论文笔记】A Comparative Analysis of RTOS and Linux Scalability on an Embedded Many-core Processor

    背景 以往对多核实时操作系统的研究主要集中在多核处理器上任务集的可调度性和响应时间分析 同时 xff0c 许多研究人员声称 xff0c 在不久的将来 xff0c 高端嵌入式系统还将包括高性能并行应用程序 xff0c 以支持复杂的任务 xff
  • 树莓派4B内核打RT-preempt实时补丁的实现

    硬件环境 xff1a 树莓派4B 操作系统 xff1a 树莓派版Ubuntu server 20 04 LTS xff08 64bit xff09 1 依赖环境的安装 运行如下命令 xff1a span class token functi
  • RT-Preempt笔记

    基于Zynq平台的Linux实时性研究及在数据采集中的应用 马啸 嵌入式实时系统研究现状 实时操作系统专门用于在时间约束条件下运行时间关键的应用程序 用于操作处理实时任务所需的最坏情况执行时间 xff08 Worst Case Execut