嵌入式操作系统_第1页
嵌入式操作系统_第2页
嵌入式操作系统_第3页
嵌入式操作系统_第4页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式操作系统嵌入式操作系统陈香兰http:/ 2006中国科学技术大学计算机系xlanchen2006.6.7Embedded Operating Systems2上周三上周三l嵌入式Linux开发技术l嵌入式Linux开发综述lLinux的配置和编译l根文件系统及其制作xlanchen2006.6.7Embedded Operating Systems3上周四上周四l基于i386体系结构的Linux启动代码分析llinux/arch/i386/boot/bootsect.Sllinux/arch/i386/boot/setup.Sllinux/arch/i386/boot/compress

2、ed/head.Sllinux/arch/i386/kernel/head.Sllinux/arch/init/main.cxlanchen2006.6.7Embedded Operating Systems4本次课本次课l课程第二部分:Linux操作系统内核分析l一些基本概念l内存寻址Linux内核分析:内核分析:一些预备知识一些预备知识xlanchen2006.6.7xlanchen2006.6.7Embedded Operating Systems6操作系统的基本概念操作系统的基本概念l任何计算机系统都包含一个基本的程序集合,称为操作系统。l内核(进程管理,进程调度,进程间通讯机制,内存

3、管理,中断异常处理,文件系统,I/O系统,网络部分)l其他程序(例如函数库,shell程序等等)l操作系统的目的l与硬件交互,管理所有的硬件资源l为用户程序(应用程序)提供一个良好的执行环境xlanchen2006.6.7Embedded Operating Systems7一个典型的一个典型的Linux操作系统的结构操作系统的结构 (the users) Shells and commands Compilers and interpreters System libraries System-call interface to the kernel Signals terminal han

4、dling character I/O system terminal drivers File system swapping block I/O system disk and tape driver CPU scheduling page replacement demand paging virtual memoryr Kernel interface to the hardware Terminal controllers terminals Device controllers disks and tapes Memory controllers physical memory 用

5、户应用程序用户应用程序System call对硬件资对硬件资源的管理源的管理Shell,libKernel implementationxlanchen2006.6.7Embedded Operating Systems8最简单也是最复杂的操作最简单也是最复杂的操作在控制台下输入在控制台下输入ls命令命令Shell程序分析输入参程序分析输入参数,确定这是数,确定这是ls命令命令调用系统调用调用系统调用fork生成生成一个一个shell本身的拷贝本身的拷贝什么是系统调用?为什么我们敲击键盘就会在终端上显示?fork是什么?为什么要调用fork?中断的概念,终端控制台设备驱动的概念保护模式和实模式

6、,内存保护,内核态用户态相关问题进程的描述,进程的创建。COW技术系统调用是怎么实现的?软中断、异常的概念。陷阱门,系统门调用调用exec系统调用将系统调用将ls的可执行文件装入内存的可执行文件装入内存内存管理模块,进程的地址空间,分页机制,文件系统从系统调用返回从系统调用返回如何做到正确的返回?堆栈的维护,寄存器的保存与恢复Shell和和ls都得以执行都得以执行进程的调度,运行队列等待队列的维护xlanchen2006.6.7Embedded Operating Systems9一些基本但很重要的概念一些基本但很重要的概念l堆栈l内核态 vs 用户态xlanchen2006.6.7Embed

7、ded Operating Systems10堆栈堆栈l堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间l函数调用框架l传递参数l保存返回地址l提供局部变量空间l等等lC语言编译器对堆栈的使用有一套的规则l了解堆栈存在的目的和编译器对堆栈使用的规则是理解操作系统一些关键性代码的基础xlanchen2006.6.7Embedded Operating Systems11/ 调用者call target函数调用和返回函数调用和返回/建立函数框架pushl %ebpmovl %esp, %ebp/拆除函数框架movl %ebp,%esppopl %ebp ret/被调用者函数体/do sth

8、.保存返回地址设置eip指向被调用程序将返回地址恢复到eip中xlanchen2006.6.7Embedded Operating Systems12l堆栈相关的寄存器lesp,堆栈指针(stack pointer)lebp,基址指针(base pointer)lebp在C语言中用作记录当前函数调用基址l举例说明l参数的传递l局部变量的使用l函数调用框架的形成xlanchen2006.6.7Embedded Operating Systems13一段小程序一段小程序这是一个很简单的C程序的结构main函数中调用了函数p1和p2源文件:test.c首先使用gcc获得test.c的可执行文件tes

9、t然后使用objdump S获得test的反汇编文件xlanchen2006.6.7Embedded Operating Systems14观察观察p2的函数调用框架的函数调用框架l从test的反汇编文件中找到p2的反汇编代码int p2(int x,int y)push %ebpmov %esp,%ebpreturn x+y;mov 0 xc(%ebp),%eaxadd 0 x8(%ebp),%eaxpop %ebpret建立框架拆除框架ebpespebp调用者函数框架espebpyxxlanchen2006.6.7Embedded Operating Systems15观察观察main函数

10、是如何传递参数给函数是如何传递参数给p2的的z=p2(x,y); pushl 0 xfffffff8(%ebp) pushl 0 xfffffff4(%ebp) call 804839b add $0 x8,%esp mov %eax,0 xfffffffc(%ebp)printf(%d=%d+%dn,z,x,y); pushl 0 xfffffff8(%ebp) pushl 0 xfffffff4(%ebp) pushl 0 xfffffffc(%ebp) push $0 x8048510 call 80482b0 p2的返回值是如何返回给main的?xlanchen2006.6.7Embe

11、dded Operating Systems16ebp观察观察main中的局部变量中的局部变量int main(void)push %ebpmov %esp,%ebpsub $0 x18,%esp char c=a; movb $0 x61,0 xfffffff3(%ebp)int x,y,z;x=1; movl $0 x1,0 xfffffff4(%ebp)y=2; movl $0 x2,0 xfffffff8(%ebp)调用者ebpespebpespespcxyxlanchen2006.6.7Embedded Operating Systems17eipeipeipeip观察程序运行时堆栈

12、的变化观察程序运行时堆栈的变化mainp1(c)p2(x,y)p1p2mainp2p1程序的代码段堆栈eipespmain堆栈ceipeipeipp1的堆栈espeipeipeipx,yeipp2堆栈eipxlanchen2006.6.7Embedded Operating Systems18另一段小程序另一段小程序和前一段小程序稍有不同和前一段小程序稍有不同在这个小程序中,在这个小程序中,main函数中调用了函数函数中调用了函数p2,而在,而在p2的执行过程中又调用了函数的执行过程中又调用了函数p1xlanchen2006.6.7Embedded Operating Systems19观察程

13、序运行时堆栈的变化观察程序运行时堆栈的变化eipeipeipeipmainp2(x,y)p1p2p1(c)mainp2p1程序的代码段堆栈eipespmain堆栈espeipeipx,yeipp2堆栈eipeipeipeipceipp1堆栈espxlanchen2006.6.7Embedded Operating Systems20观察堆栈在内核中的使用观察堆栈在内核中的使用l在内核代码中经常有这样的函数,它的参数是struct pt_regs *regs可以往回一层层的寻找这个参数是怎么传递过来的,最后我们可以发现最源头的函数使用了这样的参数struct pt_regs regs比如void

14、 do_IRQ(struct pt_regs regs)如果再进一步寻找是谁调用了这个do_IRQ,我们会发现只是一条简单的汇编语句call do_IRQxlanchen2006.6.7Embedded Operating Systems21pt_regs结构结构 struct pt_regs long ebx; long ecx; long edx; long esi; long edi; long ebp; long eax; int xds; int xes; long orig_eax; long eip; int xcs; long eflags; long esp; int xss

15、; ; 1 SAVE_ALL 和 RESTORE_ALL 保存和恢复的寄存器 2 异常处理函数中的 Error_code为保持一致而保存的数 CPU在进入中断或者异常前自动保存的寄存器 1. 中断(狭)和系统调用保存的中断号和系统调用号 2. 或者,CPU 为产生硬件错误码的异常保存的硬件错误码 3. 或者,为保持一致,在异常处理函数中,随便保存的一个无效的数 xlanchen2006.6.7Embedded Operating Systems22SAVE_ALL和和RESTORE_ALLxlanchen2006.6.7Embedded Operating Systems23do_IRQ的调用

16、方式的调用方式l仔细阅读一下与之相连的汇编码pushl $n-256SAVE_ALLcall do_IRQjmp ret_from_intrxlanchen2006.6.7Embedded Operating Systems24do_IRQ的函数定义方式的函数定义方式regparm(x) x!=0:告诉gcc不通过堆栈而通过寄存器传。x是参数个数,寄存器依此使用EAX,EDX,ECX而asmlinkage则使得编译器不通过寄存器(x=0)而使用堆栈传递参数xlanchen2006.6.7Embedded Operating Systems25用户态和内核态的概念用户态和内核态的概念l什么是用户

17、态和内核态?l一般现代CPU都有几种不同的指令执行级别l在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态l而在相应的低级别执行状态下,代码的掌控范围会受到限制。只能在对应级别允许的范围内活动l举例:intel x86 CPU有四种不同的执行级别0-3,Linux只使用了其中的0级和3级分别来表示内核态和用户态xlanchen2006.6.7Embedded Operating Systems26l为什么要区分用户态和内核态?l禁止用户程序和底层硬件直接打交道(最简单的例子,如果用户程序往硬件控制寄存器写入不恰当的值,可能导致硬件无法正常工作)l禁止用户

18、程序访问任意的物理内存(否则可能会破坏其他程序的正常执行,如果对核心内核所在的地址空间写入数据的话,会导致系统崩溃)xlanchen2006.6.7Embedded Operating Systems27l如何区分一段代码是核心态还是用户态lcs寄存器的最低两位表明了当前代码的特权级lCPU每条指令的读取都是通过cs:eip这两个寄存器:其中cs是代码段选择寄存器,eip是偏移量寄存器。l上述判断由硬件完成l一般来说在Linux中,地址空间是一个显著的标志:0 xc0000000以上的地址空间只能在内核态下访问,0 x000000000 xbfffffff的地址空间在两种状态下都可以访问注意:这里所说的地址空间是逻辑地址而不是物理地址xlanchen2006.6.7Embedded Operating Systems28站在站在CPU执行指令的角度执行指令的角度CPUeipesp0 xc0000000c=gets()mainsome action进程管理wait keyboradqueue进程进程x进程进程xidleintr8259keyboard中断处理Wakeup

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论