首页 > 其他分享 >支持优先级继承的RT-mutex子系统

支持优先级继承的RT-mutex子系统

时间:2023-12-10 11:45:01浏览次数:29  
标签:RT rt 优先级 mutex 等待 所有者

RT-mutex子系统支持PI

RT-mutexes与优先级继承一起使用,以支持PI-futexes,从而使pthread_mutex_t支持优先级继承属性(PTHREAD_PRIO_INHERIT)。[有关PI-futexes的更多详细信息,请参见轻量级PI-futexes。]

这项技术是在-rt树中开发的,并针对pthread_mutex支持进行了优化。

基本原则:

RT-mutexes通过优先级继承协议扩展了简单互斥锁的语义。

RT-mutex的低优先级所有者在释放RT-mutex之前会继承较高优先级等待者的优先级。如果临时提升的所有者在RT-mutex上阻塞,它会将优先级提升传播给其所阻塞的另一个RT-mutex的所有者。一旦RT-mutex被解锁,优先级提升立即被移除。

这种方法使得我们能够缩短对保护共享资源的互斥锁上的高优先级任务的阻塞时间。优先级继承并非是对设计不佳的应用程序的灵丹妙药,但它允许设计良好的应用程序在高优先级线程的关键部分使用用户空间锁,而不会失去确定性。

等待者被排队进入rtmutex等待者树时按优先级顺序进行。对于相同的优先级,选择FIFO顺序。对于每个rtmutex,只有顶部优先级的等待者被排队进入所有者的优先级等待者树。这棵树也按优先级顺序排队。每当任务的顶部优先级等待者发生变化(例如超时或收到信号),所有者任务的优先级就会被重新调整。优先级排队由"pi_waiters"处理。

RT-mutexes针对快速路径操作进行了优化,在锁定无等待者的互斥锁或解锁互斥锁时没有内部锁定开销。优化的快速路径操作需要cmpxchg支持。[如果不可用,则使用rt-mutex内部自旋锁]

通过rt-mutex结构的owner字段跟踪rt-mutex的状态:

lock->owner保存所有者的task_struct指针。位0用于跟踪"锁有等待者"状态:

image

只有当lock->owner的位0为0时,才能进行快速原子比较交换式获取和释放。

[1] 当持有->wait_lock时,它也可以是一个过渡状态。为了防止对锁的任何快速路径cmpxchg,我们需要在查看锁之前设置位0,并且在这段时间内所有者可能为NULL,因此这可以是一个过渡状态。

[2] 当在慢路径中获取锁时,有一小段时间位0被设置但没有等待者。为了防止所有者释放锁的cmpxchg,我们需要在查看锁之前设置这个位。

顺便说一句,从技术上讲仍然存在"待定所有者",只是不再这样称呼了。待定所有者恰好是一个没有所有者并已被唤醒以获取锁的顶部等待者。

标签:RT,rt,优先级,mutex,等待,所有者
From: https://www.cnblogs.com/pengdonglin137/p/17892324.html

相关文章

  • RT-mutex 实现设计【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/rt-mutex-design.htmlRT-mutex实现设计版权所有(c)2006StevenRostedt根据GNU自由文档许可证第1.2版许可本文档试图描述rtmutex.c实现的设计。它并不描述rtmutex.c存在的原因。有关此内容,请参阅带PI支持的RT-m......
  • 一些神奇的运算优先级
    首先来看这个代码intf(int*p){ inty=(*p)*2; (*p)++; returny;}intmain(){ intx=10; cout<<x+f(&x); return0;}这个代码输出的是31,感觉似乎f加了一个括号?那再看看这个代码intf(int*p){ inty=(*p)*2; (*p)++; returny;}intmain(){ intx=10......
  • 网络优先级cgroup 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/net_prio.html网络优先级cgroup网络优先级cgroup提供了一个接口,允许管理员动态设置由各种应用程序生成的网络流量的优先级。通常情况下,应用程序会通过SO_PRIORITY套接字选项设置其流量的优先级。然而,这并不总是......
  • pycharm中三种解释器:virtual Enviroment、conda Enviroment、system interpreter
    1、systeminterpreter不推荐使用2、VirtualEnvironment—Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpreter,而不用与其他Python程序共享统一个library和interpreter。虚拟环境的好处是避免了不同Python程序间的互相影响(共同使用globallibrary和i......
  • 【Cpp 基础】泛型算法 stable_sort() 的应用
    最近在刷牛客的题。经常遇到排序问题,经常有一个附加的规则:相同的数值的,按照录入的顺序排序。可是C++的sort()的底层是快速排序,并不能保证相同数值的顺序不改变。所以最后我不得不自己写冒泡排序。(冒泡排序不改变相同数值的录入顺序)写了那么多的排序,但是其实C++里封装有排序函数......
  • ApplicationContext is unlikely to start due to a @ComponentScan of the default p
    springboot警告:ApplicationContextisunlikelytostartduetoa@ComponentScanofthedefaultpackage解决办法:1、一般发出这个警告的原因是你把启动类直接放在的src目录下面。2、你需要在src目录下面再建一个包,然后把启动类放到下面。3、或者你错将启动类放到java文件中了......
  • 第五章 栈与队列part01
    第五章栈与队列part01  232.用栈实现队列  基础逻辑(用于理解,直接运行的话会报错,C++STLstack定义的不太一样):注://C++STLStack的pop还不管弹数,得用top()拿 逻辑Code:classMyQueue{public:  stack<int>stack_Simulate......
  • Java集合操作:UnsupportedOpertionExcepion产生的原因以及解决办法
    Java集合操作:UnsupportedOpertionExcepion产生的原因以及解决办法  问题产生:java.lang.UnsupportedOperationException  问题定位:在通过mybatis获取分页列表的时候写了下面这段代码 1//分页获取列表2PageResult<InsuranceBeneficiaryDO>pageList=this.insuranc......
  • linux的sort排序功能
    环境centos7.9sort介绍Linux中的sort功能是一个非常实用的工具,它可以对文本文件进行排序。sort命令可以根据用户指定的规则对文本文件中的行进行排序,并将结果输出到标准输出或指定的文件中简单使用语法sort[选项][文件名]其中,选项可以是以下之一:-r:逆序排序(默认为升序)-n......
  • 谷歌地球引擎浏览器Google Earth Engine Explorer对栅格图像加以监督分类
      本文对谷歌地球引擎(GoogleEarthEngine,GEE)的网页界面式应用程序接口GoogleEarthEngineExplorer加以详细介绍,并基于其进行地物监督分类这一具体应用。本文是谷歌地球引擎(GoogleEarthEngine,GEE)系列教学文章的第一篇。  GoogleEarthEngineExplorer,简单来说就是将Googl......