
操作系统
文章平均质量分 79
以分享操作系统相关知识为主
EmbSW_Guru_Wx
免费不代表廉价,分享所遇。自我总结,有感兴趣的或者想了解的技术点或想解决的问题,可以私信作者哦。
展开
-
操作系统:SMP内核接口
在初始化次级CPU的过程中,每个CPU需要使能各自的tick定时器,并注册相应的tick中断处理器函数。通过将就绪任务放入到某个CPU局部就绪任务列表中,RT-Thread允许将任务与CPU绑定,即该任务只能够在指定的CPU上。除此之外,CPU0还通过tick计数来更新系统时间,并提供系统定时器的功能,次级CPU不需要提供这些功能。当单个CPU上运行的任务改变了系统状态,或者触发了某个事件,需要通过处理器间中断通知其他CPU,其他CPU在收到该信号后,调用注册的相应例程进行处理。原创 2025-04-28 16:36:39 · 231 阅读 · 0 评论 -
操作系统:多核调度(RT-Thread)
1)如果他不是CPU绑定的任务,则把它挂入全局就绪表,并向其它的所有CPU发送IP(Intel-Processor Interrupt处理期间中断)中断,通知它们检查是否需要切换任务,因为其它CPU的当前任务的优先级可能低于此就绪态任务,因而会发生优先级抢占。当CPU需要切换任务执行时,任务调度器查找系统中优先级最高的就绪任务执行,即全局就绪任务表和当前CPU的局部就绪任务表中任务优先级最高的任务。2)CPU局部就绪任务表,每个CPU对应一个表,包含绑定到对应CPU的就绪任务。任务正在某个CPU上执行。原创 2025-04-28 15:46:17 · 192 阅读 · 0 评论 -
操作系统:原子操作简介及API
在应用层面,原子操作可以用于实现一些高级的同步和并发控制机制。通常,在操作系统中,可以采取开关全局中断、调度器上锁等方式对临界区资源进行保护,其他OS也会提供类似的操作,若采用原子操作后可以提供临界区代码的执行效率,大幅度提升系统的运行效率,同时也会在一定程度上降低编程的复杂度。可以看到对于编码的工程师,执行一个i++的操作仅需一行代码,在编译后i++就会被翻译成三条指令,所以在这三条指令之间是可能会被系统调用、中断等事件打断的,因而我们在一些场景就需要一气呵成完成上述操作,原子操作就具备这样的能力。原创 2025-04-28 11:12:22 · 323 阅读 · 0 评论 -
中断与轮询
对于低速设备来说,运用这种模式是非常有效的,因为在串口外设把FIFO中的数据发送出去前,处理器可以运行其他线程这样就提高了系统的整体运行效率(甚至对于分时系统来说,这样的设计也是非常必要的)。这个也是大家普遍认为实时操作系统中数据吞吐量不足的缘故,系统开销消耗在了切换线程上(有些实时系统甚至会如之前所说的一样,采用底半处理,分级的中断处理方式,相当于又拉长中断到发送线程的时间开销,效率会更进一步下降)。通过上述的计算过程,可以看出其中的一些关键因素:发送数据量越小,发送速度越快,对于数据吞吐量的影响越大。原创 2025-04-27 11:06:35 · 343 阅读 · 0 评论 -
操作系统:中断工作机制
在进行中断处理时(实质是调用用户的中断服务程序函数),中断处理函数很可能会有自己的局部变量,这些都需要相应的栈空间来保存,所以中断响应依然需要一个栈空间来做上下文,运行中断处理函数。在Cortex-M内核上,所有中断都采用中断向量的方式进行处理,即当一个中断触发时,处理器将直接判定是哪个中断源,然后直接跳转到相应的固定位置进行处理,每个中断服务程序必须排列在一起放在统一的地址上(这个地址必须要设置到NVIC的中断向量偏偏移寄存器中)。当中断向量对应中断发生的时候,被挂起的用户中断服务程序就会被调用执行。原创 2025-04-27 10:29:48 · 652 阅读 · 0 评论 -
Cortex-M CPU架构基础(中断相关)
Cortex-M系列CPU的寄存器组里有R0-R15共16个通用寄存器组和若干特殊公布你寄存器,如下图所示:通用寄存器组:R13作为堆栈指针寄存器(Stack Pointer,SP);R14作为连接寄存器(Link Register,LR),用于在调用子程序时,存储返回地址;R15作为程序计数器(Program Counter,PC);其中堆栈指针寄存器可以是主堆栈指针(MSP),也可以是进程堆栈指针(PSP)。原创 2025-04-25 10:54:48 · 720 阅读 · 0 评论 -
中断管理的意义
简单的解释就是系统正处于处理某一个正常的时间时,忽然被另外一个需要马上处理的紧急事件打断,系统转而处理这个紧急事件,待这个紧急事件处理完毕后,再恢复刚才被打断的时间。原创 2025-04-25 09:19:41 · 263 阅读 · 0 评论 -
内存管理:内存堆管理
内存堆管理用于管理一段连续的内存空间,如下图所示:内存堆可以在当前资源满足的情况下,根据用户的需求分配任意大小的内存块。而当用户不需要使用这些内存块时,又可以释放回堆中供其他应用分配使用。通常,操作系统为了满足不同的需求,以RT-Thread为例,它提供了不同的内存管理算法,分别是之前所说的小内存管理算法、Slab内存管理算法和memheap内存管理算法。小内存管理算法主要针对系统资源比较少,一般用于小于2MB内存空间的系统;原创 2025-04-24 16:50:02 · 1504 阅读 · 0 评论 -
内存管理:计算系统中的核心环节
在计算机系统中,存储空间主要分为内部存储空间和外部存储空间。内部存储空间,即我们常说的RAM(随机存储器),具有快速访问、按变量地址随机访问的特点,相当于电脑的内存。而外部存储空间,如ROM(只读存储器),则保存相对固定的内容,即使掉电后数据也不会丢失,类似电脑的硬盘。原创 2025-04-24 15:24:13 · 324 阅读 · 0 评论 -
操作系统:线程间通信之信号
信号在操作系统中用作异步通信,POSIX 标准定义了“sigset_t” 类型来定义一个信号集,然后“sigset_t”类型在不同的系统可能有不同的定义方式,在RT-Thread中,将“sigset_t”定义为unsigned long类型。在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改动全局变量的值,另一个功能对此全局变量进行读取,根据读取的全局变量值执行相应的动作,达到通信协作的目的。信号的本质是软中断,用来通知线程发生了异步事件,用做线程之间的异常通知、应急处理。原创 2025-04-22 10:43:08 · 524 阅读 · 0 评论 -
操作系统:线程间通信之消息队列
在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改动全局变量的值,另一个功能对此全局变量进行读取,根据读取的全局变量值执行相应的动作,达到通信协作的目的。下面会分享一些如何将邮箱、消息队列、信号用于线程间的通信。原创 2025-04-21 08:45:00 · 660 阅读 · 0 评论 -
操作系统:线程间通信之邮箱
在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改动全局变量的值,另一个功能对此全局变量进行读取,根据读取的全局变量值执行相应的动作,达到通信协作的目的。下面会分享一些如何将邮箱、消息队列、信号用于线程间的通信。原创 2025-04-10 08:45:00 · 444 阅读 · 0 评论 -
操作系统:线程间同步之事件集
事件集是线程间同步的机制之一,一个事件集可以包含多个事件,利用事件集可以完成一对多、多对多的线程间同步。原创 2025-04-09 15:32:08 · 313 阅读 · 0 评论 -
优先级继承协议(Priority Inheritance Protocols)
本篇文章主要以分享为主,想深入了解Linux的可以访问()自行理解学习。在单个CPU上,许多进程可以在支持多任务的操作系统下同时运行。同步策略用于组织对共享资源的访问。另一方面,当高优先级活动被持有共享资源的低优先级进程阻塞时,就会发生优先级翻转。下面将介绍一种用于解决优先级翻转问题的同步方法——优先级继承协议(PIP)。使用优先级继承协议(PIP),解决了优先级翻转问题。PIP为拥有共享资源的任务赋予等待该资源的其他作业中最高优先级。原创 2025-04-08 08:45:00 · 661 阅读 · 0 评论 -
从零认识操作系统任务应用及原理
如:A/B/C三个任务均会调用函数Func()优先级由高到低,且为抢占式调度,当B任务在运行时调用函数Func(),正在函数Func中,此时A任务为就绪态,那么A任务会获取到CPU控制权,并允许函数Func(),此时是有可能破坏原任务的数据的,因为两任务有可能共用一套数据。解:在单一CPU情况下,不存在真正的多任务机制,存在的只有各个任务轮流获取CPU控制权的占用,所以其本质还是单任务或者说裸机运行,区别是在于有一个大管家管理各个任务在各个任务需要时做出最优判断,并将CPU控制权给到其任务。原创 2024-10-14 09:43:06 · 1052 阅读 · 0 评论 -
操作系统:线程间同步之互斥量
互斥量又叫相互排斥的信号量,是一种特殊的二值信号量。互斥量类似于只有一个车位的停车场:当有一辆车进入时,将停车场大门锁住,其他车辆在外面等候。当里面的车出来时,将停车场大门打开,下一辆车才可以进入。同时互斥量也是为了解决由于使用信号量不当导致的优先级翻转问题。原创 2025-04-07 15:46:32 · 646 阅读 · 0 评论