如果系统允许的最大任务数为64,现有优先级为2、6、13、18、21 、23的用户任务处在就绪状态,那么 OSRdyGrp=( )、OSRdyTbl[0]=( ) 、OSRdyTbl[1]=( ) 、OSRdyTbl[2]= ( )。(采用16进制表 示,如0x55)解题过程
时间: 2024-05-18 19:13:07 浏览: 9
根据题意可知,有6个就绪任务,优先级分别为2、6、13、18、21、23。最大任务数为64,因此OSRdyGrp需要占用64/8=8个字节,即0x00~0x07。那么我们可以根据任务的优先级,计算出它们在OSRdyGrp和OSRdyTbl中的位置。
首先,OSRdyGrp表示当前就绪的任务组,每一位代表一组任务,从高位到低位,优先级递减。因此,我们需要将任务的优先级转换为对应的位数。对于优先级为x的任务,它在OSRdyGrp中的位置为x/8,具体到字节上就是第x/8个字节,从左往右数第x%8位(从0开始数)。例如,优先级为13的任务在OSRdyGrp中的位置为13/8=1,具体位置为第1个字节的第5位(从左往右数第4位)。
按照上述方法,可以得到每个任务在OSRdyGrp中的位置:
- 优先级为2的任务:第0个字节的第2位
- 优先级为6的任务:第0个字节的第6位
- 优先级为13的任务:第1个字节的第5位
- 优先级为18的任务:第2个字节的第2位
- 优先级为21的任务:第2个字节的第5位
- 优先级为23的任务:第2个字节的第7位
因此,OSRdyGrp的值为0x44 28 00 00 00 00 00 00。
接下来,我们需要计算OSRdyTbl。OSRdyTbl是一个长度为3的数组,每个元素都是一个32位无符号整数,表示一组任务的状态。具体来说,每个元素的第i位表示优先级为i+32*k的任务是否就绪,其中k为数组下标。因此,我们需要将每个任务的优先级转换为对应的数组下标和位数。
对于优先级为x的任务,它在OSRdyTbl中的位置为x/32,具体到数组元素上就是第x/32个元素,从左往右数第x%32位(从0开始数)。例如,优先级为23的任务在OSRdyTbl中的位置为23/32=0,具体位置为第0个元素的第23位(从左往右数第22位)。
按照上述方法,可以得到每个任务在OSRdyTbl中的位置:
- 优先级为2的任务:第0个元素的第2位
- 优先级为6的任务:第0个元素的第6位
- 优先级为13的任务:第0个元素的第13位
- 优先级为18的任务:第0个元素的第18位
- 优先级为21的任务:第0个元素的第21位
- 优先级为23的任务:第0个元素的第23位
因此,OSRdyTbl的值为0x00000084 00002000 00000000。注意,由于我们使用的是小端字节序,因此每个32位整数的字节顺序是反的。