您的位置 首页 资料

小型多任务操作系统miniOS的完成

关于miniOS的介绍http://blog.csdn.net/mr_raptor/article/details/7338051本实验源码包含三部分:miniOS源码:miniOS_xxxx(开发板

关于miniOS的介绍

http://blog.csdn.net/mr_raptor/article/details/7338051

本试验源码包括三部分:

miniOS源码:miniOS_xxxx(开发板名)工程目录下。

miniOS应用程序跑马灯:miniOS_app_led工程目录下。

miniOS应用程序打印程序:miniOS_app_print工程目录下。

# miniOS源码:http://download.csdn.net/detail/mr_raptor/4179593

# 程序下载:http://download.csdn.net/detail/mr_raptor/4382941

操作过程:

(1)在ADS下编译miniOS_xxxx工程,挑选Norflash发动,然后经过H-Jtag将minios_org.bin烧写到Norflash中0地址处。

(2)编译应用程序miniOS_app_led和miniOS_app_print,挑选Norflash发动,经过H-Jtag将miniOS_app_print.bin烧写到0x10000地址处,将miniOS_app_led.bin烧写0x20000地址处。

(3)发动开发板,能够看到miniOS发动信息。miniOS最多一起支撑62个进程碑文(在2440开发板64M内存上),miniOS发动结束之后,默许只要体系内核进程在碑文,能够经过按K1键,新创立进程,最多创立62个,按K2键,随机杀死一个进程,按K6键能够发动跑马灯进程。

(4)假如读者想写一个程序,让miniOS发动它,则依据编写规矩,编写程序,假如需求体系调用,还要自己完成体系调用接口。

剖析miniOS代码分为下面章节:

1. miniOS内存散布

2. 重要头文件阐明

3. 发动代码剖析

4. MMU与内存保护的完成

5. 内核定时器与中止处理

6. CPU形式切换

7. 进程调度与上下文切换技能

8. 软件中止与体系调用

9. 体系调试、优化及可改善当地

下面来看下第1节:

miniOS V2.0内存散布图:

Linux内核中内核地址空间分为:

  • 直接内存映射区(Direct Memory Region)即:低端物理内存
  • 动态内存映射区(VMalloc Region)即:高端物理内存
  • 其它映射区

miniOS里,虚拟地址空间分为两大部分:

  • 用户程序空间:0x0 ~ 0x80000000
  • 内核办理空间:0x80000000 ~ 0xC0000000

>>用户程序空间每个进程运用其间的32M虚拟地址空间,其空间地址和其PID有如下联系:

PID * 32M = PID的进程空间

其间,0~32M空间为0号进程空间,其实是当时正在运转的地址空间。

之所以这么规划,是因为ARM CPU在舱位了MMU之后,将低于32M的地址作为进程内空间,当地址高于32M时,MMU会将其进行地址转化,具体内容,请参阅:MMU与内存办理章节。

每个进程空间为32M,将来进行进程切换时,只需求依照上面界说的联系,线性偏移即可,削减进程切换时的复杂度。

每个进程的实践物理内存空间为1M,也便是说每个进程只要1M的物理地址空间,当用户程序超越1M时,程序不能运转(当然还没有超越1M的程序),它们的映射联系如下所示:

0x30000000 ~ 0x34000000 —-> 0x0 ~ 0x80000000

>>内核办理地址空间又能够细分为以下几个部分:

  • 物理内存彻底映射区:0x80000000 ~ 0x84000000
  • 外设寄存器地址映射区:0x98000000 ~ 0xB0000000
  • 发动ROM映射区:0xC0100000 ~ 0xC0000000

>>物理内存彻底映射区,首要用于办理进程实践地址空间,它其实是0x30000000 ~ 0x80000000的一个线性偏移地址(0x50000000),当咱们需求在内核空间里操作用户空间时,运用该完好映射区,十分便利操作,比方:加载程序到进程空间时,只需经过简略的核算即可知道其虚拟地址。

例如:发动5号进程时,其物理地址放在0x30000000开端的第5M空间里,那么其虚拟地址为0x30000000 + 5M + 0x50000000(偏移地址)。

>> 外设寄存器地址映射区,用来操作外设寄存器,当运用到外设寄存器时,能够经过简略的加减运算能够得到其虚拟地址。

>> 发动ROM映射区,用来映射NOR FLASH。

物理内存空间结构:

由上图可知,0号进程物理空间里(0x30000000 ~ 0x30100000),其实除了寄存os代码外,还有其它的用处。

  • 页表放到了内存地址0x30000000处
  • OS代码放到了0x300F0000,该地址是成心而为之

最开端的1MB物理内存地址0x30000000~0x30100000为0号内核进程地址空间,其实便是OS代码区和内核栈区及页表区。

我们OS代码放到了物理内存0x300F0000处,其被映射到虚拟地址0x800F0000处,所以ADS里设置的OS代码的运转地址为0x800F0000

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/264620.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部