移动笔记本 https://bbs.21ic.com/?179679 [收藏] [复制] [RSS]

日志

2410 个基于MMU的操作系统的实现(zt)

已有 1128 次阅读2007-10-23 17:06 |个人分类:技术-单片机|系统分类:ARM

  具有MMU功能的ARM CPU,使用虚拟地址寻址公式为:


       if VA < 32m then


       MVA = VA


       else


       MVA = PID*32M + VA


ARM94G虚拟地址可分成128进程空间,每个32M。虽然它们的地址都是0-(32M-1),但是对应的MVA不一样,设置MVA指向不同物理地址就可以很方便地让各进程运行空间相互隔开。开发本系统的开发板含64M SDRAM0-1M用于内核及任务01M-63M供用户使用,可建立62进程,每个进程1M63M-64M用于放置中断向量表,IRQ模式下运行时的堆栈也放在此处。本系统虚拟地址的划分为:


1、        SDRAM物理地址0x30000000-0x30100000的虚拟地址也是0x30000000-0x34000000。这是内核与进程0的空间


2、        本系统中断向量影射到虚拟地址0xffff0000,对应的物理地址为SDRAM最后1M


3、        s3c2410 SFR的物理地址范围0x48000000-0x60000000,为了方便,我让其虚拟地址也是0x48000000-0x60000000


4、        每个用户进程使用1M内存,物理地址为0x30000000+PID*0x1000000x30000000+(PID+1)*0x100000,虚拟地址都是0-1MMVA由上面公式计算,按照PID大小向上分配


5、        由于每个进程只有1M的空间,为了访问其它进程,把中断向量虚拟地址下面的64M空间,影射到物理地址0x30000000-0x34000000。这个在从进程0创建用户进程时很有用。


       本系统参考linux0.11UCOS-II写成,进程状态分为用户态、内核态。用户进程使用的空间划分如下:


10-(1M-1K):代码存放地址从0开始,用户态堆栈从(1M-1K)向下扩展;


2(1M-1K)-1M:运行参数


3、内核态堆栈位与本进程任务数据结构末端


       当开始调度之后,整个系统运行状态可分为3(对应ARM的三种模式)


1、IRQ模式:时间中断发生时就运行于此模式,每此进入中断处理程序时,IRQ模式堆栈都一样,退出中断不用保存任何东西。时间中断处理do_timer再此判断是否进行任务切换


2、用户模式——进程用户态:


3、管理模式——进程内核态:在用户态使用swi n指令进入此状态,内核根据n值提供各种服务。现在实现了exitsleepwrite三种系统调用。




进程的切换发生在:IRQdo_timer函数,swi n中的exitsleep。在IRQ模式发生时,保存的是被中断时用户态的状态(进程上下文),在管理模式发生时,保存的是本模式下当前的运行状态。


本系统使用优先级进行时间片轮转


代码很少,几乎行行有注释,如果想了解ARM体系结构,我想,看这些代码是有帮助的。希望各位喜欢。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)