我爱下载 发表于 2019-4-25 09:16

【RT-Thread读书笔记】第一部分 内核简单原理

RT-Thread读书笔记第一部分RT-Thread作为国产的物联网系统,改变了国人没有一款适合自己的国产物联网操作系统的现状。经过十几年的完善,我们才能看到这样一版强大的操作系统,才有我们目前读这本书的必要。本人虽然常年从事嵌入式系统的研发工作,但是一直没想过一个真正的操作系统是如何诞生的,也没有想过如果让我去写一个操作系统我要怎么做;看了《RT-Thread内核实现与应用开发实战指南》,终于了解了RT-Thread到底是如何从无到有,如何完成任务调度,如何完成任务创建等一些列问题,对于深入理解操作系统,更好的使用操作系统无疑有着深刻的帮助。1.   构建基本系统操作系统的出现是为了改变轮巡式和前后台式程序结构,更加充分利用CPU的计算和执行能力而来了,根据书中的介绍,让我知道了多任务操作系统和原有程序执行方式的差别。一个可以运行的基本系统我觉得应该包口,线程的创建,链表,堆栈管理,可运作的调度器。这里我有几个问题提出,不知道原理:1)   任务切换的基本方式是在中断中,将就绪的高优先级任务堆栈恢复到系统寄存器中,并让其运行的过程,那么哪些寄存器是应该在上下文切换过程中保存起来的,和需要恢复的;2)   中断时候,不论是什么单片机都回保护现场,将一部分寄存器压入堆栈,如何确定哪些是自动压入堆栈的,哪些是需要我们后来手动压入堆栈的;通过前9章的学习,我深刻的感悟到了对于一个操作系统,哪怕是最小的操作系统,都有些非常关键的地方:1)   如何管理就绪任务列表,rtt是通过链表来完成的,也就是说,链表管理是rtt任务调度的一个重要组成部分,也是不同操作系统管理的不同地方;2)   任务或线程切换的方式,rtt中是在PendSV_Handler异常中断中完成;3)   任务切换的真谛就是保存正在运行的任务相关寄存器到任务堆栈中,切换高优先级就绪任务的堆栈内容进入寄存器中,并恢复系统运行;4)   临界代码保护。进入临界段前通过关闭中断的方式来帮助保证临界代码的可靠性,退出临界代码时候恢复中断不是随意的,不能直接打开中断,应该根据进入临界代码前系统中断状态来决定,以防导致错误的打开中断使临界代码不能得到可靠的保证;5)   通过SysTick定时中断完成系统定时,使线程阻塞延时得以实现。2.   多任务的支持与之前的多任务不同,现在的多任务开始支持优先级了,采用的方式为线程就绪优先级组和线程优先级表。这两个概念在我的理解中应该是:1)   优先级组用来告诉系统哪些任务处于READY状态,并且可以按照一定的顺序给各个正在执行的线程状态排队;2)   优先级表和优先级组配合,获取各个正在执行的线程的具体信息。书中同时讲到了为了适合优先级机制对于软件的调整。3.   定时器的实现定时器是非常重要的内容,而多任务系统的定时器可以说是一个更加重要的存在。所有线程级别延时都离不开它。书中将原有延时的处理方式做了调整,推广到了更加广泛的方式下实现定时器。那就是:采用全局的系统定时器列表,当线程延时时,把延时线程挂起,并将线程内定时器挂在系统定时器维护的双向链表内,并按照延时时间从小到大排序,通过SystemTick中对于链表中所有定时器的扫描,判断延时时间到达的线程定时器,并执行定时器的回调函数,将对应的线程添加到任务就绪表中,完成延时到唤醒的过程。书中提到了具体的程序改动方法。4.   时间片轮转以前在使用RTOS时候经常听到这个名词,但是都不是深刻的了解时间片到底是如何轮转的,通过阅读第12章《支持时间片》后,我终于明白RTT是如何实现时间片轮转的。这里面有几个地方我觉得是关键的:1)   赋予线程时间片时间的概念;2)   在时基更新函数中,利用双向就绪线程链表剔出时间片耗尽的线程,将其添加到本优先级链表尾部,同时将本优先级下一个线程添加到就绪列表中;3)   对于没有时间片轮转的人物,执行的时间片时间不确定。


此内容由EEWORLD论坛网友我爱下载原创,如需转载或用于商业用途需征得作者同意并注明出处

wjl132 发表于 2019-4-25 09:19

挺好的帖子

倾心思梦 发表于 2019-4-26 08:45

谢谢分享!{:1_103:}

沈婷婷 发表于 2019-5-21 17:52

厉害
页: [1]
查看完整版本: 【RT-Thread读书笔记】第一部分 内核简单原理