版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 一.xenomai 资源管理简要 二.优先级倒置 1. 什么是优先级倒置 2. 优先级反转解决办法 一.xenomai 资源管理简要 同步:任务间的直接制约关系,A要继续执行需要B完成某一个操作操作才能继续进行. 互斥:任务间的间接制约关系,A访问了资源B就不能去访问,必须等A访问完了才行. 操作系统提供了任务间的同步互斥机制,如信号量信号量(…
1. 概述 上篇文章xenomai内核解析--同步互斥机制(一)--优先级倒置讲到,对于所有内核对象: xnregistry:保存内核对象,提供内核对象存储和快速检索. xnsynch:资源抽象,提供线程与资源的同步互斥管理机制. 举个应用例子,有两个xenoami任务,使用semaphore做互斥,任务1创建一个名为/test-sem的semaphore,任务2打开这个semaphore,以这个过程为例,带你了解xnregistry. /*任务1*/ sem_t *dome_sem; ....…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 1.概述 上篇文章xenomai内核解析--实时IPC概述中介绍了RTIPC,从这篇文章开始开始深入xenomai内核,解析RTIPC的具体实现. XDDP.IDDP和BUFP由于应用场景不一样,所以底层不一样,但也区别不大.XDDP用于xenomai任务与普通Linux任务通讯,提供两种方式,一种是每次读写作为一个数据报来操作,对应实时任务间的通讯…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 1.概述 上篇文章介绍了实时端socket创建和配置的流程,本篇文章来看bind操作,实时端与非实时端是如何关联起来的? XDDP通讯的底层设备为xnpipe,是linux任务与xenomai任务通讯的核心,在linux看来是一个字符设备,xnpipe在xenomai内核初始化过程初始化,并完成linux端xnipipe字符设备注册. bind的主要…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正. 1. 引出问题 上一篇文章xenomai内核解析--双核系统调用(一)以X86处理器为例,分析了xenomai内核调用的流程,读了以后可能会觉得缺了点什么,你可能会有以下疑问: 系统中的两个内核都是POSIX接口实现系统调用,那么我写一个POSIX接口的应用程序,怎样知道它调用的内核,或者说怎样成为运行在cobalt内核的RT应用,而不是普通linux应用? 对于同一个POSIX接口,可能我的程序中,既需要xenomai内…
xenomai内核解析 本博客为本人学习linux实时操作系统框架xenomai的一些记录,主要剖析xenomai内核实现,以及与linux相关的知识.方便读者定位具体文章,现列出本博客大纲,后续会陆续将大纲中缺少部分填充完整,感兴趣的读者敬请关注! 版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 第一章 认识xenomai 1. 嵌入式实时linux概述 2. xenomai的组成结构 第二章…
操作系统中,对共享资源的访问需要有同步互斥机制来保证其逻辑的正确性,而这一切的基础便是原子操作. | 原子操作(Atomic Operations):    原子操作从定义上理解,应当是类似原子的,不可再分的操作:然而实际上稍有不同,较为准确的定义应当是:不可被打断的一个或一系列操作. 在单处理器系统中,能够在单条指令中完成的操作都可以认为是“原子操作”,因为中断只发生在指令边缘.在多处理器结构中就不同了,由于系统中有多个处理器独立运行,即使能在单条指令中完成的操作也有可能受到干扰.在X86平台…
xenomai信号 上篇文章讲了linux的信号在内核的发送与处理流程,现在加入了cobalt核,Cobalt内核为xenomai线程提供了信号机制.下面一一解析xenomai内核的信号处理机制. 1 双核下的信号分类 我们已经知道,每个用户空间的xenomai线程在内核空间都有两个调度实体,一是在linux内核中的task_struct,另一个是称为linux空间的一个影子(shadow)的xnthread.它们表示的是同一个线程,linux调度的是task_struct,实时核cobalt调…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 1.概述 1.概述 [原创]实时IPC概述 [原创]xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程 [原创]xenomai与普通linux进程之间通讯XDDP(二)--实时与非实时关联(bind流程) 前面两篇文章我们看了xddp在xenomai内核里涉及的数据结构.RTDM对于协议类实时设备的管理方式,…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 1.概述 2.Real-time IPC 2.内核配置 3.应用编程接口 socket() close() setsockopt() bind() sendto()与recvfrom() recvmsg()与sendmsg() 4.实时与非实时间通讯XDDP示例 XDDP应用示例: 1.概述 Linux系统中常见的进程间通讯方式有管道.FIFO…
目录 一. xenomai内存池管理 1.xnheap 2. xnpagemap 3. xnbucket 4. xnheap初始化 5. 内存块分配 5.1 小内存分配流程(<= 2*PAGE_ZISE) 1.分配1Byte 2.分配50Byte 3.分配1000 Byte 4. 分配5000字节 5.2 大内存分配(> 2*PAGE_ZISE) 1. 分配10000字节 6. 内存释放 页内块释放 页连续的块释放 7. 总结 一. xenomai内存池管理 本文讲述的xenomai内核内存管…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 xenomai 内核系统调用 一.32位Linux系统调用 二.32位实时系统调用 三. 64位系统调用 五. 实时系统调用表cobalt_syscalls 六.实时系统调用权限控制cobalt_sysmodes 参考 xenomai 内核系统调用 解析系统调用是了解内核架构最有力的一把钥匙,在这之前先搞懂xenomai与linux两个内核共存…
@ 目录 一.xenomai 3 二.xenomai3 结构 这是第二篇笔记. 一.xenomai 3 从xenomai3开始支持两种方式构建linux实时系统,分别是cobalt 和 mercury. cobalt :添加一个实时核,双核结构,具有实时内核cobalt.实时驱动模型RTDM.实时应用POSIX接口库libcobalt,基于libcobalt的其他API skins,如Alchemy API.VxWorks® emulator.pSOS® emulator等. mercury :…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 1. Linux信号 1.1注册信号处理函数 1.2 信号的发送 1.3 信号的处理 2 linux 多线程信号 1. Linux信号 涉及硬件底层,本文以X86平台讲解. 信号是事件发生时对进程的通知机制,是操作系统提供的一种软件中断.信号提供了一种异步处理事件的方法,信号与硬件中断的相似之处在于打断了程序执行的正常流程,例如,中断用户键入中…
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正. @ 目录 一.添加系统调用 二.Cobalt库添加接口 三.应用使用 一.添加系统调用 下面给xenomai添加一个系统调用get_timer_hits(),用于获取应用程序运行CPU的定时器中断产生的次数,类似于VxWorks里的tickGet().需要说明一下VxWorks是采用周期tick的方式来驱动系统运作,tickGet()获取的也就是tick定时器中断的次数,但xenomai使用的tickless,即定时器不是…
Linux系统作为一个GPOS(通用操作系统)发展至今已经非常成熟可靠了,并且由于遵循GPL协议,开放所有系统源代码,非常易于裁剪.更重要的是,与其他开源的GPOS或RTOS相比,Linux系统支持多种处理器.开发板,提供多种软件开发工具,同时Linux系统对网络和图形界面的支持非常出色.显然,选择Linux操作系统在产品的开发周期和成本控制方面都有巨大优势. 虽然Linux系统功能强大.实用性强.易于软件的二次开发,并且提供编程人员熟悉的标准API.但是由于Linux系统一开始就被设计成GPO…
管程的设计实在是精妙,初看的时候觉得非常奇怪,这混乱的进程切换怎么能保证同一时刻只有一个进程访问管程?理清之后大为赞叹,函数中途把前一个进程唤醒后立刻把自己挂起,完美切换.后一个进程又在巧妙的时机将自己唤醒,同时让后一个挂起.看似松散的跳转背后竟然是无比严丝合缝的逻辑,真的就滴水不漏. 等待状态 在proc.h中又增加了等待定时器和等待内核信号量的宏供本节使用 #define WT_INTERRUPTED // the wait state could be interrupted #defin…
源码获取 https://github.com/icoty/nachos-3.4-Lab 内容一:总体概述 本实习希望通过修改Nachos系统平台的底层源代码,达到"扩展同步机制,实现同步互斥实例"的目标. 内容二:任务完成情况 任务完成列表(Y/N) Exercise1 Exercise2 Exercise3 Exercise4 Challenge1 Challenge2 Challenge3 第一部分 Y Y Y Y Y Y N 具体Exercise的完成情况 Exercise1…
1. ucore lab7介绍 ucore在前面的实验中实现了进程/线程机制,并在lab6中实现了抢占式的线程调度机制.基于中断的抢占式线程调度机制使得线程在执行的过程中随时可能被操作系统打断,被阻塞挂起而令其它的线程获得CPU.多个线程并发的执行,大大提升了非cpu密集型应用程序的cpu吞吐量,使得计算机系统中宝贵的cpu硬件资源得到了充分利用. 操作系统提供的内核线程并发机制的优点是明显的,但同时也带来了一些问题,其中首当其冲的便是线程安全问题. 并发带来的线程安全问题 线程安全指的是在拥有…
文章对应视频的第12课,第5.6.7.8节. 在这之前还有查询方式的驱动编写,中断方式的驱动编写,这篇文章中暂时没有这些类容.但这篇文章是以这些为基础写的,前面的内容有空补上. 按键驱动——按下按键,打印键值: 目录 概要 poll机制 异步通知 同步互斥阻塞 定时器防抖 概要: 查询方式: 12-3 缺点:占用CPU99%的资源.中断方式:12-4 缺点:调用read函数后如果没有按键按下,该函数永远不会结束,一直在等待按键按下. 优点:使用到了休眠机制,占用cpu资源极少.poll机制: 1…
在面试中关于多线程同步,你必须要思考的问题 一文中,我们知道glibc的pthread_cond_timedwait底层是用linux futex机制实现的. 理想的同步机制应该是没有锁冲突时在用户态利用原子指令就解决问题,而需要挂起等待时再使用内核提供的系统调用进行睡眠与唤醒.换句话说,在用户态的自旋失败时,能不能让进程挂起,由持有锁的线程释放锁时将其唤醒?如果你没有较深入地考虑过这个问题,很可能想当然的认为类似于这样就行了(伪代码): void lock(int lockval) { //t…
深入解析Java锁机制 https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw%3D%3D&mid=2247485524&idx=1&sn=2807a248ab60ce21b22dc07ec1b0ee0c&chksm=fbb281aaccc508bc404611ee11b057bf4b3e02fbbb2916c472fe586cf9ee989eab2be1c84e49&mpshare=1&scene=23&sr…
NetworkComms网络通信框架序言 networkcomms是我遇到的写的最优美的代码,很喜欢,推荐给大家:) 基于networkcomms2.3.1开源版本( gplv3)协议,写了一些文章,希望大家喜欢,个人水平有限,不足之处难免. networkcommsc#通信框架来自于美丽的英国剑桥,由大洋彼岸的两位工程师 Marc Fletcher, Matthew Dean开发. c#网络通信框架networkcomms内核解析之一 消息传送 c#网络通信框架networkcomms内核解析…
windows多线程同步互斥--总结 我的windows多线程系列文章: windows多线程--原子操作 windows多线程同步--事件 windows多线程同步--互斥量 windows多线程同步--临界区 windows多线程同步--信号量 windows 多线程: CreateThread._beginthread._beginthreadex.AfxBeginThread 的区别 MoreWindows的多线程系列文章秒杀多线程面试题系列 一 同步互斥区别 同步:同步是指线程之间所具…
我的windows多线程系列文章: windows多线程--原子操作 windows多线程同步--事件 windows多线程同步--互斥量 windows多线程同步--临界区 windows多线程同步--信号量 windows 多线程: CreateThread._beginthread._beginthreadex.AfxBeginThread 的区别 MoreWindows的多线程系列文章秒杀多线程面试题系列 一 同步互斥区别 同步:同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另…
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官方推荐项目,现已累计 1.4k+ star),致力打造完善的后端知识体系,在技术的路上少走弯路,欢迎各位小伙伴前来交流学习   全文脉络思维导图如下: 1. 什么是进程同步 在多道批处理系统中,多个进程是可以并发执行的,但由于系统的资源有限,进程的执行不是一贯到底的, 而是走走停停,以不可预知的速度…
Windows内核开发-6-内核机制 Kernel Mechanisms 一部分Windows的内核机制对于驱动开发很有帮助,还有一部分对于内核理解和调试也很有帮助. Interrupt Request Level 中断请求级别 Deferred Procedure Calls(DPC) 延迟调用 Asynchronous Procedure Calls(APC) 异步调用 Structured Exception Handling 异常处理 System Crash 系统崩溃 Thread S…
目录 前言 11.1 任务同步 11.2 信号量概念 11.3 二值信号量 11.3.1 二值信号量概念 11.3.2 优先级翻转 11.3.3 二值信号量运作机制 11.4 计数信号量 11.4.1 计数信号量概念 11.4.2 计数信号量运作 11.5 互斥量 11.5.1 互斥量概念 11.5.2 优先级继承机制概念 11.5.3 互斥量运作 11.6 递归互斥量 11.6.1 递归互斥量概念 11.6.2 递归互斥量运作 11.7 死锁概念 11.8 创建信号量 11.8.1 创建二值信…
NetworkComms网络通信框架序言 本文基于networkcomms2.3.1开源版本  gplv3协议 我们先回顾一个 c#网络通信框架networkcomms内核解析之六 处理接收到的二进制数据 中,主程序把PacketBuilder 中的数据交给核心处理器处理的过程 //创建优先级队列项目 PriorityQueueItem item = new PriorityQueueItem(priority, this, topPacketHeader, packetBuilder.Read…
阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇一个经典的多线程同步问题> <秒杀多线程第五篇经典线程同步关键段CS> <秒杀多线程第六篇经典线程同步事件Event> 前面介绍了关键段CS.事件Event在经典线程同步问题中的使用.本篇介绍用互斥量Mutex来解决这个问题. 互斥量也是一个内核对象,它用来确保一个线程独占一个资源的访问.互斥量与关键段的行为非常相似,并且互斥量可以用于不同进程中的线程互斥访问资源.使用互斥量Mutex主要将用到四个函数.下面是这些函数…