哈弗结构和冯诺依曼结构的区别:
哈弗结构:并行结构,将程序指令和数据分开存放,每个存储器独立编址独立访问,分 为数据总线和程序总线(使得数据吞吐率提高一倍)。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步操作 冯诺依曼结构:指令和数据存放在同一存储空间,统一编址,指令和数据通过同一总线访问
单等待队列与多等待队列
单等待队列:资源对应的事件发生时,内核需要扫描整个等待队列,搜索等待该资源的任务,并按照一定策略选取任务,把任务的任务控制块放到就绪队列(阻塞后放入一个队列)
多等待队列:资源对应的事件发生时,能够在较短的时间内确立等待该资源的任务等待队列(根据阻塞原因放入不同队列)
以上两种调用均不能满足实时系统的调度要求,为什么?
因为实时系统需要对时间有极高的要求,需要及时响应,而上述算法的时间复杂度大,比如单等待队列,扫描整个队列的时间复杂度是O(n),当n越大,时间也会越长。我们希望将n变为常数,例如:O(3)、O(5)。
任务切换:
任务切换的本质其实就是 保存—>调度—>恢复 的过程
-
保存任务上下文环境
-
更新当前运行任务的TCB内容,修改其状态为就绪或等待状态
-
将任务控制块移到相应队列(就绪或等待)
-
选择另一个任务运行(调度)
-
改变需投入运行状态的任务的TCB,修改其状态为运行状态
-
恢复需投入运行任务的上下文环境
优先级反转
高优先级任务被低优先级任务阻塞,并等待低优先级任务先执行,高优先级任务等待低优先级任务执行完毕后释放资源,低优先级又在等待中优先级任务执行完毕后让出CPU,这样中优先级比高优先级的任务先执行,这样就产生了优先级反转。
其实本质就是高优先级Task3申请不到资源得让低优先级Task0先执行,低优先级Task0又申请不到CPU资源得让中优先级Task2执行
解决优先级反转的方法:优先级继承协议、优先级天花板
优先级继承协议
当一个任务阻塞了一个或多个高优先级任务时,使该任务使用被改任务所阻塞的所有任务的高优 先级作为其执行临界区的优先级
当该任务退出临界区时,优先级恢复
优先级天花板
如果任务获得信号量,则在任务执行临界区的过程中,任务的优先级将被抬升到所 获得信号量的优先级天花板。
- 对于控制临界区的信号量,设置信号量的优先级天花板为可能申请该信号量的所有任务中具有高优先级任务的优先级
- 任务执行完临界区,释放信号量后,其优先级恢复
- 如果任务不能获得所申请的信号量,任务将被阻塞
关键任务
包含关键功能的任务称之为关键任务,关键任务必须得到运行机会。关键功能需尽可能和其 他功能进行剥离,独立成为一个任务(硬实时系统+高优先级)
硬实时系统:指系统需要有确保的最坏情况下的服务时间,即对事件的响应时间的截止期限是无论如何都要得到满足的
抢占式与非抢占式
抢占式:正在运行的任务可能被其他任务所打断
非抢占式:一旦任务开始运行,该任务只有在运行完成后而主动放弃CPU资源,或是因为等待其他资源被阻塞的情况下才会停止运行
优先级位图算法
将会单独开一篇博客来写,见主页
任务创建和任务删除的原码分析
将会单独开一篇博客来写,见主页
SHELL编程
将会单独开一篇博客来写,见主页(包括信号的发送、数组进行排序、找出最大最小值、共享内存、任务创建等)
Linux指令
将会单独开一篇博客来写,见主页
博主昨天才考完试,考的大概就是这些内容,但是远比这些基本概念灵活。
希望以上内容对所有学这门课的同学能有所帮助!