执行在具有不同指令集架构的处理器上的操作系统的制作方法_3

文档序号:9355163阅读:来源:国知局
据共享的系统对应用程序开发者更有吸引力。
[0041]图2为说明可存储在图1的操作系统数据结构118中且大体标明为200的函数表的特定实施例的图。如参照图1的操作系统数据结构118所描述,图2的表可用以识别在多个指令集中可用的函数的“正确”版本(即,匹配用于试图执行函数的处理器的指令集的函数的版本)。
[0042]在运行具有共享数据结构的共同操作系统时的一个困难可为处理含有函数的地址的数据结构。例如,当具有第一指令集的第一处理器与具有第二指令集的第二处理器具有共同操作系统时,在第一指令集和第二指令集两者中实施的函数可能需要可用。然而,所述函数可出现在不同地址。因此,存储函数的地址(例如,“函数指针”)的数据结构需要能够参考用于特定处理器/指令集(其地址可取决于处理器的指令集而不同)的“正确”函数。
[0043]根据描述的技术,处理这些数据结构时的困难可因使用间接层级而减小。例如,存储器可存储可为具有不同指令集架构的多个处理器存取的共享数据结构。数据结构可包含经编译以在第一指令集架构上执行的第一函数的第一位置识别符和经编译以在第二指令集架构上执行的第二函数的第二位置识别符。位置识别符可为指令、偏移、虚拟地址等,如本文进一步描述。此外,第一函数与第二函数可为同一操作系统函数的不同版本。通过引入间接层级,所描述的技术可有利地实现在多个架构上的同一高阶(例如,应用程序级)代码的执行。例如,代码可包含对操作系统函数“X”的调用。当在与第一架构相关联的第一处理器上执行时,可将对“X”的调用映射到“X”的第一实施方案,其特定针对第一架构且位于存储器中的第一物理地址处。当在与第二架构相关联的第二处理器上执行时,可将对“X”的同一调用映射到“X”的第二实施方案,其特定针对第二架构且位于存储器中的第二物理地址处。
[0044]本文中描述了实施此“架构独立”代码执行的三个实施例。在图2中,展示了三个操作系统函数一一 “OS调度”函数,和“OS读取”函数,和“OS写入”函数。所述函数中的每一者的第一版本(“procl”)和所述函数中的每一者的第二版本(“pr0C2”)是在存储器202中的不同位置处可用。
[0045]在第一实施例(在图2中标明为“选项I”)中,表210、212可包含将执行重定向至IJ“正确”函数的短(例如,恒定长度)指令序列。可将第一表210映射到第一处理器上的特定虚拟地址,且可将第二表212映射到第二处理器上的同一虚拟地址。然而,取决于处理器架构,表210、212可导致(例如,分支或跳到)不同物理地址。对于每一处理器的虚拟地址到物理地址转译可使“正确”表在同一虚拟地址处映射。对函数的间接参考指向表项,而非实际函数。
[0046]例如,如图2中所展示,处理器I可支持“分支”指令,且处理器2可支持“跳转”指令。用于处理器I的表210可包含用于“OS调度”函数、“OS读取”函数和“OS写入”函数的第一版本的分支指令序列。用于处理器2的表212可包含用于“OS调度”函数、“OS读取”函数和“OS写入”函数的第二版本的跳转指令序列。对在高级代码中的函数“OS调度”的调用可指向存储在特定虚拟地址处的表的第一项。从高级代码的角度看来,将同一虚拟地址用于函数映射表,而不管哪一处理器正执行高级代码。当在处理器I上执行高级代码时,可存取表210,且可执行到“OS调度”函数的“procl”版本的分支。即,当在处理器I上执行高级代码时,可“选择”表210,而非表212,这是因为对于处理器1,在高级代码中的用于函数映射表的虚拟地址映射(例如,经由特定针对处理器I的虚拟到物理地址映射表)到表210的物理地址。当在处理器2上执行高级代码时,可存取表212且可执行到“OS调度”函数的“proc2”版本的跳转。即,当在处理器2上执行高级代码时,可“选择”表212,而非表210,这是因为对于处理器2,在高级代码中的用于函数映射表的虚拟地址映射(例如,经由特定针对处理器2的虚拟到物理地址映射表)到表212的物理地址。因此,第一实施例可类似于用于位置独立代码的“程序连接表”。
[0047]在第二实施例(在图2中标明为“选项2”)中,表220、222可包含用于每一函数的地址。替代将地址直接存储到函数,数据结构(例如,由高级代码所使用)可含有表220、222中的地址或索引。表220、222可分别含有用于第一和第二处理器架构的函数的地址。对于每一处理器的虚拟地址到物理地址转译可使“正确”表220、222在同一虚拟地址处映射。
[0048]例如,如图2中所展示,用于处理器I的函数表可包含用于“OS调度”函数、“OS读取”函数和“OS写入”函数的第一版本的地址(例如,虚拟地址)。用于处理器2的函数表可包含用于“OS调度”函数、“OS读取”函数和“OS写入”函数的第二版本的地址(例如,虚拟地址)。对在高级代码中的函数“OS调度”的调用可指向存储在特定虚拟地址处的表的第一项。如以上参照第一实施例所描述,从高级代码的角度看来,将同一虚拟地址用于函数映射表,而不管哪一处理器正执行高级代码。当在处理器I上执行高级代码时,可存取表220,且可使用来自表220的第一项的“OS调度”的“procl”版本的所得地址。S卩,当在处理器I上执行高级代码时,可“选择”表220,而非表222,这是因为对于处理器I,在高级代码中的用于函数映射表的虚拟地址映射(例如,经由特定针对处理器I的虚拟到物理地址映射表)到表220的物理地址。当在处理器2上执行高级代码时,可存取表222,且可使用来自表220的第一项的“OS调度”函数的“pr0C2”版本的所得地址。。S卩,当在处理器2上执行高级代码时,可“选择”表222,而非表220,这是因为对于处理器2,在高级代码中的用于函数映射表的虚拟地址映射(例如,经由特定针对处理器2的虚拟到物理地址映射表)到表222的物理地址。因此,第二实施例类似于用于位置独立代码的“全域偏移表”。
[0049]在第三实施例(在图2中标明为“选项3”)中,单一表230可包含在第一和第二处理器指令集两者中实施的函数的地址。替代直接将地址存储到函数,数据结构(例如,由高级代码所使用)可含有表230中的地址或索引。因为使用单一表230替代两个不同表,所以表230可进一步由处理器指令集架构来索引。因此,表230中的查询可指定函数/表索引/偏移以及架构(例如,“procl”或“pr0C2”)两者。表230可含有用于第一和第二处理器架构两者的函数的地址,如所展示。应了解,不同于以上所描述的第一和第二实施例,因为使用单一表230,所以在第三实施例中,虚拟地址到物理地址映射可跨处理器保持相同。
[0050]例如,如图2中所展示,函数表可包含用于在处理器I的架构以及处理器2的架构两者中的“OS调度”函数、“OS读取”函数和“OS写入”的版本的地址。对高级代码中的函数“OS调度”的调用可指向存储在特定虚拟地址处的表的第一项。当在处理器I上执行高级代码时,可执行在表230上的查找,其中查找指定对于“OS调度”函数和“procl”架构的偏移,且可使用“OS调度”的“procl”版本的所得地址。当在处理器2上执行高级代码时,可执行在表230上的查找,其中查找指定对于“OS调度”函数和“proc2”架构的偏移,且可使用“OS调度”的“pr0C2”版本的所得地址。
[0051]应注意,在第二和第三实施例中,从不存储到函数的指针,而取而代之,存储表项指示,且每当在调用会场时查找函数的地址。
[0052]在操作期间,数据结构中到函数的指针可替代地指对应的表项。在选项I中,表中的项为指令/指令序列,因此可以与在无由图2的表介绍的间接层级的情况下所进行相同的方式调用指针。对于选项2和选项3,表可读取,且接着用于特定处理器的“正确”函数地址可为可用的(例如,用于在随后分支或跳转中使用)。
[0053]应注意,可组合参看图2描述的选项。例如,可在系统(例如,图1的系统100)中同时实施图2中说明的多个实施例。为了说明,参照表210和212描述的“程序连接表”实施例可结合参照表220和222描述的“全域偏移表”实施例使用。当第一次在处理器I上在高级代码中调用函数时,所述调用可解析到表210中的代码的区段,其中代码的区段分支到函数的恰当版本,并且还将分支的目的地添加到表220。将表220中的地址用作目的地,对函数的随后高级调用导致表210的分支指令。另外,应注意,可使用起到将数据结构中的函数指示转译到用于给定指令集的正确函数的地址的作用的其它结构或程序。
[0054]图3为说明执行在具有不同架构的多个处理器上的操作系统的单一实例的方法300的特定实施例的流程图。在说明性实施例中,方法300可由图1的系统100执行,且可参照图2的函数和表来描述。
[0055]方法300可包含在302执行第一处理器上的第一代码。在特定实施例中,第一处理器可为多线程DSP。例如,图1的第一处理器110可执行对应于第一任务(例如,图2的“OS调度”、“OS读取”或“OS写入”函数)的第一代码。
[0056]方法300还可包含在304,在执行第一代码时执行使执行的流程从用户模式转变到核心模式的操作系统事件。操作系统事件可为页面故障、陷阱、系统故障、系统请求、硬件错误、地址错误、权限违反等。例如,在执行第一代码时,图1的第一处理器110可执行操作系统事件。
[0057]方法300可进一步包含在306,在执行操作
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1