第5章ARMLinux内核-医学资料

上传人:杰猫 文档编号:119398627 上传时间:2020-01-14 格式:PPT 页数:60 大小:550.01KB
返回 下载 相关 举报
第5章ARMLinux内核-医学资料_第1页
第1页 / 共60页
第5章ARMLinux内核-医学资料_第2页
第2页 / 共60页
第5章ARMLinux内核-医学资料_第3页
第3页 / 共60页
第5章ARMLinux内核-医学资料_第4页
第4页 / 共60页
第5章ARMLinux内核-医学资料_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《第5章ARMLinux内核-医学资料》由会员分享,可在线阅读,更多相关《第5章ARMLinux内核-医学资料(60页珍藏版)》请在金锄头文库上搜索。

1、1 ARMLinux内核 陈文智wzchen 浙江大学计算机学院2005年5月 2 提纲 1 ARM系统结构简介2 ARM Linux内存管理3 ARM Linux的中断响应和处理4 ARM Linux系统调用5 系统的启动和初始化6 ARM Linux进程管理和调度7 Linux的模块机制 3 1 ARM系统结构简介 ARM有7种运行状态 用户状态 User 中断状态 IRQ ImterruptRequest 快中断状态 FIQ FastImterruptRequest 监管状态 Supervisor 终止状态 Abort 无定义状态 Undefined 系统状态 System 4 ARM系

2、统结构中各个寄存器的使用方式 5 2ARM Linux内存管理 存储管理是一个很大的范畴存储管理机制的实现和具体的CPU以及MMU的结构关系非常紧密操作系统内核的复杂性相当程度上来自内存管理 对整个系统的结构有着根本性的深远影响 6 2 1内存管理和MMU MMU 也就是 内存管理单元 其主要作用是两个方面 地址映射对地址访问的保护和限制MMU可以做在芯片中 也可以作为协处理器 7 2 2冯 诺依曼结构和哈佛结构 冯 诺依曼结构 程序只是一种数据 对程序也可以像对数据一样加以处理 并且可以和数据存储在同一个存储器中嵌入式系统中往往采用程序和数据两个存储器 两条总线的系统结构 称为 哈佛结构 8

3、 2 3ARM存储管理机制 ARM系统结构中 地址映射可以是单层的按 段 section 映射 也可以是二层的页面映射采用单层的段映射的时候 内存中有个 段映射表 当CPU访问内存的时候 其32位虚地址的高12位用作访问段映射表的下标 从表中找到相应的表项每个表项提供一个12位的物理段地址 以及对这个段的访问许可标志 将这12位物理段地址和虚拟地址中的低20位拼接在一起 就得到了32位的物理地址 9 如果采用页面映射 段映射表 就成了 首层页面映射表 映射的过程如下 以32位虚地址的高12位 bit20 bit31 作为访问首层映射表的下标 从表中找到相应的表项 每个表项指向一个二层映射表 以

4、虚拟地址中的次8位 bit12 bit19 作为访问所得二层映射表的下标 进一步从相应表项中取得20位的物理页面地址 最后 将20位的物理页面地址和虚拟地址中的最低12位拼接在一起 就得到了32位的物理地址 10 凡是支持虚存的CPU必须为有关的映射表提供高速缓存 使地址映射的过程在不访问内存的前提下完成 用于这个目的高速缓存称为TLB高速缓存ARM系统结构中配备了两个地址映射TLB和两个高速缓存 11 ARM处理器中 MMU是作为协处理器CP15的一部分实现的MMU相关的最主要的寄存器有三个 控制寄存器 控制MMU的开关 高速缓存的开关 写缓冲区的开关等地址转换表基地址寄存器域访问控制寄存器

5、 12 控制寄存器中有S位 表示System 和R位 表示ROM 用于决定了CPU在当前运行状态下对目标段或者页面的访问权限 13 2 4ARM Linux存储机制的建立 ARM Linux内核也将这4GB虚拟地址空间分为两个部分 系统空间和用户空间ARM将I O也放在内存地址空间中 所以系统空间的一部分虚拟地址不是映射到物理内存 而是映射到一些I O设备的地址 14 ARM处理器上的实现和x86的既相似又有很多不同 在ARM处理器上 如果整个段 1MB 并且和1MB边界对齐 都有映射 就采用单层映射 而在x86上总是采用二层映射ARM处理器上所谓的 段 section 是固定长度的 实质上就

6、是超大型的页面 而x86上的 段 segment 则是不定长的Linux在启动初始化的时候依次调用 start kernel setup arch pageing init memtable init create mapping 15 Xsbase255开发系统存储管理的描述数据结构 16 2 5ARM Linux进程的虚存空间 Linux虚拟内存的实现需要6种机制的支持 地址映射机制内存分配回收机制缓存和刷新机制请求页机制交换机制内存共享机制 17 系统中的每个进程都各有自己的首层映射表 这就是它的空间 没有独立的空间的就只是线程而不是进程Linux内核需要管理所有的虚拟内存地址 每个进程

7、虚拟内存中的内容在其task struct结构中指向的vm area struct结构中描叙 18 task struct结构分析图 19 由于那些虚拟内存区域来源各不相同 Linux使用vm area struct中指向一组虚拟内存处理过程的指针来抽象此接口为进程创建新的虚拟内存区域或处理页面不在物理内存中的情况下 Linux内核重复使用进程的vm area struct数据结构集合当进程请求分配虚拟内存时 Linux并不直接分配物理内存 20 3ARM Linux的中断响应和处理 中断是一个流程 一般来说要经过三个环节 中断响应中断处理中断返回中断响应是第一个环节 主要是确定中断源 在整个

8、中断机制中起着枢纽的作用 21 使CPU在响应中断的时候能迅速的确定中断源 辅助手段主要有下列几种 中断源通过数据总线提供一个代表具体设备的数值 称为 中断向量 在外部提供一个 集线器 称为 中断控制器 将中断控制器集成在CPU芯片中 但是设法 挪用 或 复制 原有的若干引线 而并不实际增加引线的数量 22 ARM是将中断控制器集成在CPU内部的 由外设产生的中断请求都由芯片上的中断控制器汇总成一个IRQ中断请求中断控制器还向CPU提供一个中断请求寄存器和一个中断控制寄存器GPIO是一个通用的可编程的I O接口 其接口寄存器中的每一位都可以分别在程序的控制下设置用于输入或者输出 23 ARML

9、inux将中断源分为三组 第一组是针对外部中断源 第二组中是针对内部中断源 它们都来自集成在芯片内部的外围设备和控制器 比如LCD控制器 串行口 DMA控制器等等 第三组中断源使用的是一个两层结构 24 在Linux中 每一个中断控制器都由strcuthw interrut type数据结构表示 25 每一个中断请求线都有一个structirqdesc数据结构表示 26 具体中断处理程序则在数据结构structirqaction三个数据结构的相互关系如图 irq desc NR IRQS 27 在进入中断响应之前 CPU自动完成下列操作 将进入中断响应前的内容装入r14 irq 即中断模式的l

10、r 使其指向中断点 将cpsr原来的内容装入spsr irq 即中断模式的spsr 同时改变cpsr的内容使CPU运行于中断模式 并关闭中断 将堆栈指针sp切换成中断模式的sp irq 将pc指向0 x18 28 中断流程图 29 4ARM Linux系统调用 arm处理器有自陷指令SWIcpu遇到自陷指令后 跳转到内核态操作系统首先保存当前运行的信息 然后根据系统调用号查找相应的函数去执行执行完了以后恢复原先保存的运行信息返回 30 实验一创建和使用一个新的系统调用 在arch arm kernel 目录下创建一个新的文件mysyscall c在arch arm kernel call S中

11、添加新的系统调用 新的系统调用号0 x900000 226修改arch arm kernel 目录下的Makefile文件 在obj y后面添加mysyscall o 31 实验一创建和使用一个新的系统调用 1 一个测试程序来使用新的系统调用 32 实验一创建和使用一个新的系统调用 2 然后执行启动开发板 将应用程序test通过zmodem协议下载到开发板的文件系统目录下 在板子上运行test程序所得结果如下 33 5 系统的启动和初始化 使用bootloader将内核映像载入内核数据结构初始化 内核引导第一部分 start kernel 中调用了一系列初始化函数 以完成kernel本身的设置

12、 启动init过程 创建第一个内核线程start kernel 函数中各个主要初始化函数的功能 34 外设初始化 内核引导第二部分 init 函数作为内核线程 首先锁定内核 然后调用do basic setup 完成外设及其驱动程序的加载和初始化外设初始化的主要过程 35 init进程和inittab脚本init进程是系统所有进程的起点 它的进程号是1inittab是以行为为单位的描述性 非执行性 文本 每一个指令行都具有以下格式 36 rc启动脚本 rc sysinit中最常见的动作就是激活交换分区 检查磁盘 加载硬件模块Shell的启动 37 6ARM Linux进程管理和调度 Linux

13、进程有5种状态 分别是 TASK RUNNINGTASK INTERRUPTIBLETASK UNINTERRUPTIBLETASK ZOMBIETASK STOPPED 38 6 1Linux进程的创建 执行和消亡 1 Linux进程的创建系统的第一个真正的进程 init内核线程 或进程 的标志符为1新进程通过克隆老进程或当前进程来创建 系统调用fork或clone可以创建新任务复制完成后 Linux允许两个进程共享资源而不是复制各自的拷贝 39 2 Linux进程的执行要让若干新进程按照需要处理不同的事情 就必须通过系统调用exec函数sys execve将可执行文件的名字从用户空间取入内

14、核空间以后就调用do execve 执行具体的操作 40 do execve 执行的流程 打开可执行文件 获取该文件的file结构 获取参数区长度 将存放参数的页面清零 对linux binprm结构的其它项作初始化通过对参数和环境个数的计算来检查是否在这方面有错误调用prepare binprm 对数据结构linux binprm作进一步准备把一些参数 文件名 环境变量 文件参数 从用户空间复制到内核空间调用search binary handler 搜寻目标文件的处理模块并执行 41 3 Linux进程的消亡进程终止由可终止进程的系统调用通过调用do exit 实现do exit long

15、code 带一个参数code 用于传递终止进程的原因 42 以下情况要调用do exit 函数 具体对应的系统调用出错 不得不终止进程 如 do page fault sys sigreturn setup frame save v86 state 其他终止进程的情况 通过调用以下函数实现终止 sys exit sys reboot do signal 43 LINUX系统进程的切换包括三个层次 用户数据的保存寄存器数据的保存系统层次的保存 44 6 2ARM Linux进程的调度 Linux进程调度由函数schedule 实现的 其基本流程可以概括为五步 清理当前运行中的进程选择下一个投入运

16、行的进程设置新进程的运行环境执行进程上下文切换后期整理Linux调度的时机有两种 在内核应用中直接调用schedule 被动调用schedule 45 7 Linux的模块机制 Linux中的可加载模块 Module 是Linux内核支持的动态可加载模块InsmodrmmodLinuxmodule载入内核后 它就成为内核代码的一部分若某个module空闲 用户便可将它卸载出内核 46 与module相关的命令有 lsmod把现在kernel中已经安装的modules列出来insmod把某个module安装到kernel中rmmod把某个没在用的module从kernel中卸载depmod制造moduledependencyfile 以告诉将来的insmod要去哪儿找modules来安装 47 module相关的数据结构主要有 module的声明如下 48 symbol table的声明如下 49 和module相关的系统调用有 50 7 1Module的使用 Module的装入有两种方法 通过insmod命令手工将module载入内核根据需要载入module demandloadedm

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号