Linux内核源代码导读

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Linux内核源代码导读中国科学技术大学计算机系陈香兰(0551-3606864)xlanchen@ustc.edu.cnSpring2009序一些基本概念操作系统的基本概念I386系统的基本概念Linux简介源码阅读和project环境Linux2.6.26源码简介操作系统的基本概念任何计算机系统都包含一个基本的程序集合,称为操作系统。内核(进程管理,进程调度,进程间通讯机制,内存管理,中断异常处理,文件系统,I/O系统,网络部分)其他程序(例如函数库,shell程序等等)操作系统的目的与硬件交互,管理所有的硬件资源为用户程序(应用程序)提供一个良好的执行环境I386系统的基本概念代码的运行堆栈的概念内核态与用户态中断/异常/系统调用虚拟内存代码的运行关键寄存器cs:eip:总是指向下一条的指令地址顺序执行:总是指向地址连续的下一条指令跳转/分支:执行这样的指令的时候,cs:eip的值会根据程序需要被修改call:将当前cs:eip的值压入栈顶,cs:eip指向被调用函数的入口地址ret:从栈顶弹出原来保存在这里的cs:eip的值,放入cs:eip中发生中断时???????I386系统的基本概念代码的运行堆栈的概念内核态与用户态中断/异常/系统调用虚拟内存堆栈的概念堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间函数调用框架传递参数保存返回地址提供局部变量空间等等C语言编译器对堆栈的使用有一套的规则了解堆栈存在的目的和编译器对堆栈使用的规则是理解操作系统一些关键性代码的基础以x86体系结构为例堆栈寄存器和堆栈操作堆栈相关的寄存器esp,堆栈指针(stackpointer)ebp,基址指针(basepointer)堆栈操作push栈顶地址减少4个字节(32位)pop栈顶地址增加4个字节ebp在C语言中用作记录当前函数调用基址espebp高地址低地址esp//调用者…calltarget…利用堆栈实现函数调用和返回//建立被调用者函数的堆栈框架pushl%ebpmovl%esp,%ebp//拆除被调用者函数的堆栈框架movl%ebp,%esppopl%ebpret//被调用者函数体//dosth.…call指令:1)将下一条指令的地址A保存在栈顶2)设置eip指向被调用程序代码开始处将地址A恢复到eip中函数堆栈框架的形成callxxx执行call之前执行call时,cs:eip原来的值指向call下一条指令,该值被保存到栈顶,然后cs:eip的值指向xxx的入口地址进入xxx第一条指令:pushl%ebp第二条指令:movl%esp,%ebp函数体中的常规操作,可能会压栈、出栈退出xxxmovl%ebp,%esppopl%ebpretespebp高地址低地址cs:eipespebpespebpespC语言中还使用堆栈进行参数的传递局部变量的使用一段小程序源文件:test.c这是一个很简单的C程序main函数中调用了函数p1和p2首先使用gcc生成test.c的可执行文件test然后使用objdump–S获得test的反汇编文件eipeipeipeip观察程序运行时堆栈的变化main…p1(c)…p2(x,y)…p1p2mainp2p1程序的代码段堆栈eipespmain堆栈ceipeipeipp1的堆栈espeipeipeipx,yeipp2堆栈eip另一段小程序和前一段小程序稍有不同在这个小程序中,main函数中调用了函数p2,而在p2的执行过程中又调用了函数p1观察程序运行时堆栈的变化eipeipeipeipmain…p2(x,y)…p1p2…p1(c)…mainp2p1程序的代码段堆栈eipespmain堆栈espeipeipx,yeipp2堆栈eipeipeipeipceipp1堆栈espI386系统的基本概念代码的运行堆栈的概念内核态与用户态中断/异常/系统调用虚拟内存用户态和内核态的概念Why?假定不区分用户直接修改操作系统的数据用户直接调用操作系统的内部函数用户直接操作外设用户任意读/写物理内存因此,要区分用户态和内核态:禁止用户程序和底层硬件直接打交道(最简单的例子,如果用户程序往硬件控制寄存器写入不恰当的值,可能导致硬件无法正常工作)禁止用户程序访问任意的物理内存(否则可能会破坏其他程序的正常执行,如果对核心内核所在的地址空间写入数据的话,会导致系统崩溃)什么是用户态和内核态?一般现代CPU都有几种不同的指令执行级别在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态而在相应的低级别执行状态下,代码的掌控范围会受到限制。只能在对应级别允许的范围内活动举例:intelx86CPU有四种不同的执行级别0-3,Linux只使用了其中的0级和3级分别来表示内核态和用户态如何区分一段代码是核心态还是用户态cs寄存器的最低两位表明了当前代码的特权级CPU每条指令的读取都是通过cs:eip这两个寄存器:其中cs是代码段选择寄存器,eip是偏移量寄存器。上述判断由硬件完成一般来说在Linux中,地址空间是一个显著的标志:0xc0000000以上的地址空间只能在内核态下访问,0x00000000-0xbfffffff的地址空间在两种状态下都可以访问注意:这里所说的地址空间是逻辑地址而不是物理地址I386系统的基本概念代码的运行堆栈的概念内核态与用户态中断/异常/系统调用虚拟内存中断和异常中断(广义)会改变处理器执行指令的顺序,通常与CPU芯片内部或外部硬件电路产生的电信号相对应中断——异步的:由硬件随机产生,在程序执行的任何时候可能出现异常——同步的:在(特殊的或出错的)指令执行时由CPU控制单元产生我们用“中断信号”来通称这两种类型的中断设备设备控制器中断控制器IRQCPUINTR中断信号的作用中断信号提供了一种特殊的方式,使得CPU转去运行正常程序之外的代码比如一个外设采集到一些数据,发出一个中断信号,CPU必须立刻响应这个信号,否则数据可能丢失当一个中断信号到达时,CPU必须停止它当前正在做的事,并且切换到一个新的活动为了做到这这一点,在进程的内核态堆栈保存程序计数器的当前值(即eip和cs寄存器)以便处理完中断的时候能正确返回到中断点,并把与中断信号相关的一个地址放入进程序计数器,从而进入中断的处理系统调用的意义操作系统为用户态进程与硬件设备进行交互提供了一组接口——系统调用把用户从底层的硬件编程中解放出来极大的提高了系统的安全性使用户程序具有可移植性基于I386的Linux使用int0x80进行系统调用I386系统的基本概念代码的运行堆栈的概念内核态与用户态中断/异常/系统调用虚拟内存虚拟内存物理内存有限,是一种稀缺资源局部性原理空间局部性时间局部性按需调页页框利用磁盘上的交换空间进程的虚拟地址空间独立的地址空间(32位,4GB),每个进程一个在Linux中,3G以上是内核空间,3G以下是用户空间4G的进程地址空间使用进程私有的二级页表进行地址转换(虚拟地址物理地址)页面大小:4KB页目录、页表若对应的内容在内存中,则对应的二级页表项记录相应的物理页框信息否则根据需要进行装载或者出错处理进程调度后,执行一个新的被调度的进程之前,要先进行页表切换Linux中的内核空间每个进程3G以上的空间用作内核空间从用户地址空间进入内核地址空间不经过页表切换而是通过中断/异常/系统调用入口(也只能如此)小结根据代码的执行、中断/异常/系统调用来理解操作系统操作系统提供中断/异常处理操作系统提供系统调用应用开发人员编写应用程序驱动开发人员编写驱动应用程序运行序一些基本概念操作系统的基本概念I386系统的基本概念Linux简介源码阅读和project环境Linux2.6.26源码简介Linux简介什么是Linux?“Linux”在不同的语境下的含义Linux发展简史Linux操作系统的主要内容Linux版本内核版本发行版本Linux系统的好处Linux的运行及相关基本概念什么是Linux?Linux是一个类Unix(Unix-like)的操作系统,在1991年发行了它的第一个版本在Linux内核维护网站上,“WhatisLinux?”From“”Linux的来历和目标:LinuxisacloneoftheoperatingsystemUnix,writtenfromscratchbyLinusTorvaldswithassistancefromaloosely-knitteamofhackersacrosstheNet.ItaimstowardsPOSIXandSingleUNIXSpecificationcompliance.Linux的功能Ithasallthefeaturesyouwouldexpectinamodernfully-fledgedUnix,includingtruemultitasking,virtualmemory,sharedlibraries,demandloading,sharedcopy-on-writeexecutables,propermemorymanagement,andmultistacknetworkingincludingIPv4andIPv6.PortableOperatingSystemInterfaceStandard可移植操作系统接口标准由IEEE制订,并由ISO接受为国际标准。InstituteforElectricalandElectronicEngineers电气电子工程师学会[美]InternationalOrganizationforStandardization国际标准化组织制定各行各业各种产品和服务的技术规范(国际标准)Linux支持的目标体系结构Althoughoriginallydevelopedfirstfor32-bitx86-basedPCs(386orhigher),todayLinuxalsorunson(atleast)theAlphaAXP,SunSPARC,Motorola68000,PowerPC,ARM,HitachiSuperH,IBMS/390,MIPS,HPPA-RISC,IntelIA-64,AMDx86-64,AXISCRIS,RenesasM32R,AtmelAVR32,RenesasH8/300,NECV850,TensilicaXtensa,andAnalogDevicesBlackfinarchitectures;formanyofthesearchitecturesinboth32-and64-bitvariants.在内存管理方面不得不说的Linuxiseasilyportabletomostgeneral-purpose32-or64-bitarchitecturesaslongastheyhaveapagedmemorymanagementunit(PMMU)andaportoftheGNUCcompiler(gcc)(partofTheGNUCompilerCollection,GCC).LinuxhasalsobeenportedtoanumberofarchitectureswithoutaPMMU,althoughfunctionalityisthenobviouslysomewhatlimited.SeetheµClinuxprojectformoreinfo.Linux简介什么是Linux?“Linux”在不同的语境下的含义Linux发展简史Linux操作系统的主要内容Linux版本内核版本

1 / 66
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功