版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统对于初学者来说是一个很“高深”的内容,里面很多原理摸不清楚,导致还没入门就放弃了。本文就从底层开始,讲述抢占式操作系统(大多数RTOS)的抢占原理。包含:线程基础原理线程之间抢占中断抢占线程中断抢占中断运行多个线程1.单核“单线程”严格来说,单核处理器一次只能执行一条指令,也就是说只能“单线程”。(当然,多核处理器就不一样)为了在单核处理器上运行多个线程,我们实际上需要定期在线程之间进行快速切换,以便用户感觉多个线程在并行运行。比如处理器执行两个线程,处理器实际在两个线程之间来回切换,如下图:2.处理器在线程之间切换,它是如何做到的?我们说的单核处理器是“单线程”的,它有一组寄存器,我们就叫这组寄存器属于一个“线程”。例如,计算两个数字的总和时://假设我们有两个整数:a和bintc=a+b;实际发生的情况如下所示(当然,它取决于的MCU类型,但总体思路是相同):#MIPS反汇编:LWV0,-32744(GP)#"a"的值从RAM加载到寄存器V0LWV1,-32740(GP)#值"b"从RAM加载到寄存器V1ADDUV0,V1,V0#a、b值相加,结果保存到寄存器V0中SWV0,-32496(GP)#寄存器V0的值存储在RAM中(变量c所在的位置)你会发现上面执行了4个动作,但是抢占式操作系统可以在任何时候抢占另一个线程,包括在这4个动作之间。假如在这过程中有其他线程抢占了,其他线程同样抢占了当前线程V0、V1,如果不对V0、V1进行保存,那么下次回来执行当前线程,结果就会出错。所以,针对当前这种问题,我们就需要在切换线程之前,对V0、V1的数值进行保存,当下次切换到当前线程,再恢复V0、V1的数值,大致流程如下:大概意思就是:当我们需要从一个线程切换到另一个线程时,内核获得控制权,执行必要的内务处理(至少要保存和恢复寄存器值),然后将控制权转移到下一个线程以运行。线程的堆栈上面说的抢占位置,到底在哪里,每个线程保存在哪个寄存器值中?这就是线程的堆栈的内容。在有MMU的操作系统中,(用户的)线程堆栈可以按需动态增长:线程需要的堆栈空间越多,线程堆栈就越多(如果内核允许)。但是,我们一般的MCU却没有MMU这个“高端”的东西,所有RAM都静态映射到地址空间。因此,每个线程都会有用于堆栈的RAM空间,如果线程使用的RAM超过堆栈的数量,则会导致内存溢出或细微的错误。(实际上,每个线程的堆栈空间只是一连续数组空间)。因此,当我们决定为每个线程分配多少堆栈时,我们只是估计可能需要多少堆栈,但是具体多少可能不是很清楚。比如,如果这是一个具有多层嵌套调用的GUI线程,则可能需要数个千字节,但如果它是一个流水灯的小线程,则可能几十字节就足够了。假设我们有三个线程,它们的堆栈消耗如下:如上面所述,每个线程的寄存器值都保存在线程的堆栈中。线程的寄存器值集称为线程的“上下文”。如下图所示(线程A为在正在执行的“活动线程”):请注意,在正在执行的线程A的上下文没有保存在堆栈中,堆栈指针指向线程A用户数据的顶部,并且当前处理器的寄存器专用于线程A。当内核决定将控制权切换到线程B时,它将执行以下操作:将所有寄存器值保存到堆栈中(保存到线程A堆栈的顶部);将堆栈指针切换到线程B的堆栈顶部;从堆栈(从线程B的堆栈顶部)恢复所有寄存器值;此时,你会看到:中断(ISR)抢占上面在执行过程中,或进行上下文切换时,还可能会涉及到一个非常重要的内容:中断。MCU通常具有外设:TIM、UART、SPI、CAN等,它们随时都能发生重要事件以触发中断。中断条件是当当前正在执行的线程暂停时,处理器在一段时间内执行其他操作(HandlesInterrupt),然后返回。中断可能随时触发,我们应该做好处理的准备。中断处理程序称为ISR(中断服务程序):中断可能具有不同的优先级,例如,如果触发了一些低优先级的中断,则当前正在执行的线程将暂停,并且ISR会获得控制权。然后,如果触发了某个高优先级中断,则当前正在执行的ISR将再次暂停,并为该高优先级中断运行一个新的ISR。这样一来,完成后,控制权将返回到第一个ISR,并且在完成时,也会恢复被中断的线程。重要的关键代码:在线程活跃过程中,如果有重要的事情“关键的代码”,在这过程中如果中断发生,很容易导致意想不到的结果。这部分关键的代码,我们需要要保护起来,通常我们的做法就是:在之前“关键代码”之前禁用全局中断,执行完之后,开始全局中断。有点需要注意:关闭全局中断,此时就不会相应中断,所以,“关键代码”不能太长。中断堆栈在上面说到一点,高优先级中断抢占低优先中断,就会出现一个问题:低优先级的代码需要和线程一样,用于保存数据的堆栈。一般有两种方法:使用被中断的线程堆栈;为中断使用单独的堆栈空间;1.使用被中断的线程堆栈如果使用被中断的线程堆栈,就类似如下图:这种情况存在你一个严重的问题,你知道是什么吗?频繁中断,或者中断较多,线程自身的堆栈空间就会很快被使用完。每个线程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮阴师范学院《区域分析与区域规划》2023-2024学年第一学期期末试卷
- 淮阴师范学院《秘书理论与实务》2021-2022学年第一学期期末试卷
- 淮阴师范学院《中国民族民间音乐》2022-2023学年第一学期期末试卷
- 淮阴师范学院《移动开发技术》2023-2024学年期末试卷
- 淮阴师范学院《小型乐队编配》2021-2022学年第一学期期末试卷
- 淮阴师范学院《工程电磁场》2023-2024学年期末试卷
- 淮阴工学院《食品添加剂》2022-2023学年第一学期期末试卷
- 淮阴师范学院《地理信息系统概论》2022-2023学年第一学期期末试卷
- 淮阴师范学院《JAVA+Web项目综合实训》2021-2022学年期末试卷
- DB3711-T 155-2024生态茶园土壤培肥技术规程
- 四川公安基础知识模拟5
- 吉林省松原市长岭县长岭镇2023-2024学年四年级上学期期中道德与法治试卷
- 中国建设银行招聘(全国)笔试真题2023
- 健康管理专业职业生涯规划书
- 上期开特下期必开特规律
- 设备管理系统概要设计说明书.doc
- 青霉素V钾提取工艺与研究进展
- 肠内营养支持健康教育
- 村级财务清理报告
- 石油加工基础知识
- 总经理责权利(制定版)
评论
0/150
提交评论