首页 > 文章中心 > 正文

汽车操作系统存储保护机制的设计

汽车操作系统存储保护机制的设计

OS-Application的实现

OS-Application的资源管理

作为资源统一管理的单元,OS-Application需要记录其所管理的所有资源信息。在这里将各种类型资源的数量和标识号都以表的方式保存在OS-Application的配置结构中。由于在操作某一资源时,需要通过该资源访问其所隶属的OS-Application,因此在对应的资源的配置结构中也需要记录其所隶属的OS-Application的标识号。

OS-Application与底层的映射

OS-Application作为域在逻辑层面上将系统划分开来需要底层的支持。在存储保护中,域主要体现了系统存储空间的隔离。为了实现域与存储空间之间的映射,需要在源程序中将若干个域划分为各自的输入段,然后通过链接脚本将域定位到程序可执行印象的指定存储空间中[6]。由于MPC5634中的存储管理单元(MMU)是基于分页的机制来实现存储管理的,所以必须将物理存储空间中的系统的各个部分根据各自的属性划分成相应的页。页的大小以4的倍数递增,从4k到4G不等。每一个页具有读、写和可执行的访问属性,以及表示其特权模式的属性和标识其所隶属的进程ID的PID属性。通过PID属性可以标识该页所属的域。通过将存储空间分页把系统的不同部分划分开来。

TLB的管理实现

每当程序进行访存时,MMU会将访存地址、PID和当前的特权模式与TLB中的项目相比较,若命中并且满足权限要求则会将有效地址转换为物理地址,否则产生异常。基于硬件的存储保护机制就是通过TLB来对访存加以权限检查从而达到保护的功能。TLB共有16项,为了有效地支持存储保护,根据系统的运行特点这里将TLB的前8项作为固定项用以保存经常被访问的系统页面,比如内核代码和数据。而剩下的8项用来动态地维护应用使用的页面。通常应用的页的数量会超过TLB中的项数。

页表的设计

页表分为两种,系统页表和应用页表。系统页表中对应的是系统初始化及内核相关的数据和代码。这些页面信息是长驻TLB中的,其特权模式是内核态,并且其所对应的程序是作为共享资源来访问的。应用页表中对应的是应用的数据和代码。这些页面信息不是长驻TLB中的,当发生缺页异常的时候TLB中某些应用的页面信息会被替换掉。为了有效地维护页,这里以散列表的方式来记录页起始地址与页在页表中位置的关系。页的起始地址作为散列表的关键码,通过散列函数将其转换为对应的散列表中的位置。散列表该位置处的元素记录了页在页表中的位置。

页的替换算法

因为应用的页的数量通常可能会超过可用的TLB的项数,所以在运行过程中可能会发生TLB未命中的情况。在TLB未命中异常处理函数中需要对TLB中的项进行替换,将需要访问的应用的页置入TLB中。这里以先进先出的方式实现替换。在发生未命中异常的时候,我们能得到的信息有有效地址以及当前的PID,我们必须通过有效地址来找到需要置换进TLB的页面,以及再找到需要置换出TLB的页面。前者我们通过一个散列表表来查找需要置换进来的页面,而后者我们维护一个先进先出的链表来决定需要置换出去的页面。

系统调用的实现

系统调用的实现系统调用由两部分构成,接口函数和系统调用异常处理函数。

接口函数的实现

每个接口函数都对应一个系统服务。在接口函数中以函数指针的方式来建立与系统服务的关联。当用户调用接口函数时,需要判断当前的特权模式。如果当前是特权态则直接调用系统服务。否则需要保存系统服务函数的地址到寄存器,然后再通过汇编指令SC触发系统调用异常处理函数来实现特权模式的切换。

系统调用异常处理函数的实现

进入到异常处理函数中后,系统进入特权态。其后需要根据当前任务分配系统栈,并使程序跳转到保存在寄存器中的系统服务函数的入口地址处。

任务的管理

任务管理的核心在于当任务发生切换的时候,需要完成任务之间上下文环境的切换。与此同时任务执行过程中所代表的域的保护信息也需要进行切换,从而保证域与域之间正确的转换。这些信息包括:1)OS-Application的ID号;2)任务所隶属的OS-Application的特权模式;3)任务的系统栈。若切换至的任务是第一次运行,则需要通过接口函数来实现到任务入口函数的跳转。在接口函数中根据任务所属OS-Application的特权模式来进行不同的处理。若是特权态则直接进行跳转,否则需要将当前特权模式更改为用户态再进行跳转。

本文作者:燕立明罗蕾作者单位:电子科技大学计算机学院嵌入式实验室