chap-1-Linux操作系统概述课件

上传人:文**** 文档编号:240746080 上传时间:2024-05-04 格式:PPT 页数:42 大小:805KB
返回 下载 相关 举报
chap-1-Linux操作系统概述课件_第1页
第1页 / 共42页
chap-1-Linux操作系统概述课件_第2页
第2页 / 共42页
chap-1-Linux操作系统概述课件_第3页
第3页 / 共42页
点击查看更多>>
资源描述
Linux操作系统概述操作系统概述1主要内容主要内容vLinuxLinux的基本知识的基本知识的基本知识的基本知识vLinuxLinux的内核代码结构的内核代码结构的内核代码结构的内核代码结构v堆栈基本概念堆栈基本概念堆栈基本概念堆栈基本概念vLinuxLinux的基本知识的基本知识的基本知识的基本知识vLinuxLinux的内核代码结构的内核代码结构的内核代码结构的内核代码结构v堆栈基本概念堆栈基本概念堆栈基本概念堆栈基本概念2什么是什么是LinuxvLinuxLinux是一个类是一个类是一个类是一个类UnixUnix(Unix-likeUnix-like)的操作系统,第一)的操作系统,第一)的操作系统,第一)的操作系统,第一个版本发行于个版本发行于个版本发行于个版本发行于19911991年年年年v在不同的语境下,在不同的语境下,在不同的语境下,在不同的语境下,“Linux”“Linux”具有不同的内涵,如具有不同的内涵,如具有不同的内涵,如具有不同的内涵,如LinuxLinux内核内核内核内核LinuxLinux系统系统系统系统LinuxLinux开发套件等术语开发套件等术语开发套件等术语开发套件等术语v严格来说,严格来说,严格来说,严格来说,LinuxLinux指的是指的是指的是指的是Linux TorvaldsLinux Torvalds维护的(及维护的(及维护的(及维护的(及通过主要和镜像网站发布的)内核。通过主要和镜像网站发布的)内核。通过主要和镜像网站发布的)内核。通过主要和镜像网站发布的)内核。vGNU/LinuxGNU/LinuxGNU/LinuxGNU/Linux的拥护者们认为,的拥护者们认为,的拥护者们认为,的拥护者们认为,LinuxLinux仅仅是指仅仅是指仅仅是指仅仅是指LinuxLinux内核,内核,内核,内核,而整个而整个而整个而整个LinuxLinux系统的大部分都建立在系统的大部分都建立在系统的大部分都建立在系统的大部分都建立在GNUGNU软件之上。软件之上。软件之上。软件之上。3Linux的发展史的发展史v19911991年年年年1111月,芬兰赫尔辛基大学的月,芬兰赫尔辛基大学的月,芬兰赫尔辛基大学的月,芬兰赫尔辛基大学的 Linus Torvalds Linus Torvalds写了个小程序,取名为写了个小程序,取名为写了个小程序,取名为写了个小程序,取名为LinuxLinux,放在互联网上。,放在互联网上。,放在互联网上。,放在互联网上。希望借此搞出一个操作系统的希望借此搞出一个操作系统的希望借此搞出一个操作系统的希望借此搞出一个操作系统的“内核内核内核内核”来,这完全是一个来,这完全是一个来,这完全是一个来,这完全是一个偶然事件。偶然事件。偶然事件。偶然事件。v19931993年,在一批高水平黑客参与下,诞生年,在一批高水平黑客参与下,诞生年,在一批高水平黑客参与下,诞生年,在一批高水平黑客参与下,诞生Linux 1.0 Linux 1.0 版版版版 v19941994年,年,年,年,Linux Linux 的第一个商业版的第一个商业版的第一个商业版的第一个商业版 Slackware Slackware 问世问世问世问世v19961996年,美国国家标准技术局的计算机系统实验室年,美国国家标准技术局的计算机系统实验室年,美国国家标准技术局的计算机系统实验室年,美国国家标准技术局的计算机系统实验室确认确认确认确认 Linux Linux 版本版本版本版本 1.2.13 1.2.13(由(由(由(由 Open Linux Open Linux 公司打包)公司打包)公司打包)公司打包)符合符合符合符合 POSIXPOSIX 标准标准标准标准v20012001年,年,年,年,Linux2.4Linux2.4版内核发布版内核发布版内核发布版内核发布 v20032003年,年,年,年,Linux2.6Linux2.6版内核发布版内核发布版内核发布版内核发布v4Linux的主要内容的主要内容vLinuxLinux是免费的、源代码开放的、符合是免费的、源代码开放的、符合是免费的、源代码开放的、符合是免费的、源代码开放的、符合POSIXPOSIX标准标准标准标准规范的操作系统规范的操作系统规范的操作系统规范的操作系统 v拥有现代操作系统具有的所有内容,例如拥有现代操作系统具有的所有内容,例如拥有现代操作系统具有的所有内容,例如拥有现代操作系统具有的所有内容,例如 抢占式多任务处理,支持多用户抢占式多任务处理,支持多用户抢占式多任务处理,支持多用户抢占式多任务处理,支持多用户内存保护内存保护内存保护内存保护支持支持支持支持SMPSMP支持支持支持支持TCP/IPTCP/IP支持绝大多数的支持绝大多数的支持绝大多数的支持绝大多数的3232位和位和位和位和6464位位位位CPU CPU 等等等等v还有一些其他操作系统没有的特色,比如还有一些其他操作系统没有的特色,比如还有一些其他操作系统没有的特色,比如还有一些其他操作系统没有的特色,比如 NFSNFS,VFSVFS,高效的,高效的,高效的,高效的EXTEXT系列文件系统等系列文件系统等系列文件系统等系列文件系统等5Linux的内核版本的内核版本vLinuxLinux内核版本是由内核版本是由内核版本是由内核版本是由Linus TorvaldsLinus Torvalds作为总体协调人作为总体协调人作为总体协调人作为总体协调人的的的的LinuxLinux开发小组(分布在各个国家的近百位高手)开发小组(分布在各个国家的近百位高手)开发小组(分布在各个国家的近百位高手)开发小组(分布在各个国家的近百位高手)开发出的系统内核的版本号开发出的系统内核的版本号开发出的系统内核的版本号开发出的系统内核的版本号 vLinuxLinux内核采用的是内核采用的是内核采用的是内核采用的是双树系统双树系统双树系统双树系统一棵是稳定树,主要用于发行一棵是稳定树,主要用于发行一棵是稳定树,主要用于发行一棵是稳定树,主要用于发行另一棵是非稳定树或称为开发树,用于产品开发和改进另一棵是非稳定树或称为开发树,用于产品开发和改进另一棵是非稳定树或称为开发树,用于产品开发和改进另一棵是非稳定树或称为开发树,用于产品开发和改进 vLinuxLinux内核版本号内核版本号内核版本号内核版本号由由由由3 3位数字组成位数字组成位数字组成位数字组成 r.x.y第第1位数字位数字r为主版本号为主版本号 第第2位数字位数字x为说明版本类型的次版为说明版本类型的次版本号,如果本号,如果x为偶数,则表示为产品为偶数,则表示为产品化版本,为奇数时表示为实验版本化版本,为奇数时表示为实验版本 第第3位数字位数字y为修改号,为修改号,表示错误修补的次数表示错误修补的次数 6主流的主流的Linux发行版本发行版本7Linux系统的目录结构系统的目录结构/homehomebinbinprocprocusrusrbootbootliblibdevdevetcetcvarvarzhengzheng weiYMweiYMbinbinliblibmanmantmptmploglogrunrunspoolspool名称名称名称名称 角色角色角色角色root root root root 文件系统中的内容包括:引导系统的必备文件,文件系统的挂装文件系统中的内容包括:引导系统的必备文件,文件系统的挂装文件系统中的内容包括:引导系统的必备文件,文件系统的挂装文件系统中的内容包括:引导系统的必备文件,文件系统的挂装信息以及系统修复工具和备份工具等。信息以及系统修复工具和备份工具等。信息以及系统修复工具和备份工具等。信息以及系统修复工具和备份工具等。/usr/usr/usr/usr 文件系统中包含通常操作中不需要进行修改的命令程序文件、程文件系统中包含通常操作中不需要进行修改的命令程序文件、程文件系统中包含通常操作中不需要进行修改的命令程序文件、程文件系统中包含通常操作中不需要进行修改的命令程序文件、程序库、手册和其他文档等。序库、手册和其他文档等。序库、手册和其他文档等。序库、手册和其他文档等。/var/var/var/var 文件系统中包含经常变化的文件,例如打印机、邮件、新闻等的文件系统中包含经常变化的文件,例如打印机、邮件、新闻等的文件系统中包含经常变化的文件,例如打印机、邮件、新闻等的文件系统中包含经常变化的文件,例如打印机、邮件、新闻等的假脱机目录、日志文件、格式化后的手册页以及临时文件等。假脱机目录、日志文件、格式化后的手册页以及临时文件等。假脱机目录、日志文件、格式化后的手册页以及临时文件等。假脱机目录、日志文件、格式化后的手册页以及临时文件等。/home/home home home 中包含用户的主目录,用户的数据保存在其主目录中中包含用户的主目录,用户的数据保存在其主目录中中包含用户的主目录,用户的数据保存在其主目录中中包含用户的主目录,用户的数据保存在其主目录中 /etc/etc系统内部存放配置文件的主要位置,一般与系统关系十分密切的配置系统内部存放配置文件的主要位置,一般与系统关系十分密切的配置系统内部存放配置文件的主要位置,一般与系统关系十分密切的配置系统内部存放配置文件的主要位置,一般与系统关系十分密切的配置文件都放在该目录下。大多是文本文件,如文件都放在该目录下。大多是文本文件,如文件都放在该目录下。大多是文本文件,如文件都放在该目录下。大多是文本文件,如inittab,lilo.confinittab,lilo.conf。/proc/proc/proc/proc 文件系统并不保存在磁盘上,相反,操作系统在内存中创建这一文件系统并不保存在磁盘上,相反,操作系统在内存中创建这一文件系统并不保存在磁盘上,相反,操作系统在内存中创建这一文件系统并不保存在磁盘上,相反,操作系统在内存中创建这一文件系统。文件系统。文件系统。文件系统。8典型典型Linux操作系统的结构操作系统的结构用户应用程序用户应用程序System call对硬件资对硬件资源的管理源的管理Shell,libKernel implementation9Linux内核组成内核组成vv进程调度程序负责控制进程访问进程调度程序负责控制进程访问进程调度程序负责控制进程访问进程调度程序负责控制进程访问CPUCPU。vv内核管理程序使多个进程安全地共享主存系统,并支持虚拟内存。内核管理程序使多个进程安全地共享主存系统,并支持虚拟内存。内核管理程序使多个进程安全地共享主存系统,并支持虚拟内存。内核管理程序使多个进程安全地共享主存系统,并支持虚拟内存。vv虚拟文件系统抽象了不同硬件设备的细节,提供公共文件接口。虚拟文件系统抽象了不同硬件设备的细节,提供公共文件接口。虚拟文件系统抽象了不同硬件设备的细节,提供公共文件接口。虚拟文件系统抽象了不同硬件设备的细节,提供公共文件接口。vv网络接口提供对许多建网标准和网络硬件的访问。网络接口提供对许多建网标准和网络硬件的访问。网络接口提供对许多建网标准和网络硬件的访问。网络接口提供对许多建网标准和网络硬件的访问。vv进程间通信子系统为进程与进程之间的通信提供了一些机制。进程间通信子系统为进程与进程之间的通信提供了一些机制。进程间通信子系统为进程与进程之间的通信提供了一些机制。进程间通信子系统为进程与进程之间的通信提供了一些机制。vvlinuxlinux内核是单块结构,而内核是单块结构,而内核是单块结构,而内核是单块结构,而windowswindows体系结构是微内核。体系结构是微内核。体系结构是微内核。体系结构是微内核。10Linux环境下请求处理的完成环境下请求处理的完成在控制台下输入在控制台下输入ls命令命令Shell程序分析输入参程序分析输入参数,确定这是数,确定这是ls命令命令调用系统调用调用系统调用fork生成生成一个一个shell本身的拷贝本身的拷贝什么是系统调用?什么是系统调用?为什么我们敲击键盘为什么我们敲击键盘就会在终端上显示?就会在终端上显示?forkfork是什么?是什么?为什么要调用为什么要调用forkfork?中断的概念,终端中断的概念,终端控制台设备驱动的控制台设备驱动的概念概念保护模式和实模式,保护模式和实模式,内存保护,内核态用内存保护,内核态用户态相关问题户态相关问题进程的描述,进程的描述,进程的创建。进程的创建。COWCOW技术技术系统调用是怎系统调用是怎么实现的?么实现的?软中断、异常的概念。软中断、异常的概念。陷阱门,系统门陷阱门,系统门调用调用exec系统调用将系统调用将ls的可执行文件装入内存的可执行文件装入内存内存管理模块,进程的地址空间,内存管理模块,进程的地址空间,分页机制,文件系统分页机制,文件系统从系统调用返回从系统调用返回如何做到正确的返回?如何做到正确的返回?堆栈的维护,寄存堆栈的维护,寄存器的保存与恢复器的保存与恢复Shell和和ls都得以执行都得以执行进程的调度,运行队列进程的调度,运行队列等待队列的维护等待队列的维护11主要内容主要内容vLinuxLinux的基本知识的基本知识的基本知识的基本知识vLinuxLinux的内核代码结构的内核代码结构的内核代码结构的内核代码结构v堆栈基本概念堆栈基本概念堆栈基本概念堆栈基本概念12Linux核心源码结构核心源码结构核心源码的顶层目录:核心源码的顶层目录:核心源码的顶层目录:核心源码的顶层目录:/usr/src/linux/usr/src/linux13Linux核心源码的组织核心源码的组织vvarch arch 目录:包含所有体系结构相关的核心代码。目录:包含所有体系结构相关的核心代码。目录:包含所有体系结构相关的核心代码。目录:包含所有体系结构相关的核心代码。vvinclude include 目录:包括用来重构核心的大多数目录:包括用来重构核心的大多数目录:包括用来重构核心的大多数目录:包括用来重构核心的大多数includeinclude文件。文件。文件。文件。vvinitinit目录:包含核心启动代码。目录:包含核心启动代码。目录:包含核心启动代码。目录:包含核心启动代码。vvmmmm目录:包含所有的内存管理代码。目录:包含所有的内存管理代码。目录:包含所有的内存管理代码。目录:包含所有的内存管理代码。vvdriversdrivers目录:系统中所有的设备驱动都位于该目录中。目录:系统中所有的设备驱动都位于该目录中。目录:系统中所有的设备驱动都位于该目录中。目录:系统中所有的设备驱动都位于该目录中。vvipcipc目录:包含核心的进程间通讯代码。目录:包含核心的进程间通讯代码。目录:包含核心的进程间通讯代码。目录:包含核心的进程间通讯代码。vvmodulesmodules目录:仅仅包含已建好的模块。目录:仅仅包含已建好的模块。目录:仅仅包含已建好的模块。目录:仅仅包含已建好的模块。vvfs fs目录:所有的文件系统代码。目录:所有的文件系统代码。目录:所有的文件系统代码。目录:所有的文件系统代码。vvkernelkernel目录:主要核心代码,与处理器结构相关代码都放在目录:主要核心代码,与处理器结构相关代码都放在目录:主要核心代码,与处理器结构相关代码都放在目录:主要核心代码,与处理器结构相关代码都放在arch/kernelarch/kernel目录下。目录下。目录下。目录下。vvnetnet目录:核心的网络部分代码。目录:核心的网络部分代码。目录:核心的网络部分代码。目录:核心的网络部分代码。vvlib lib 目录:包含核心的库代码。与处理器结构相关库代码被目录:包含核心的库代码。与处理器结构相关库代码被目录:包含核心的库代码。与处理器结构相关库代码被目录:包含核心的库代码。与处理器结构相关库代码被放在放在放在放在arch/lib/arch/lib/目录下。目录下。目录下。目录下。vvscriptsscripts目录:包含用于配置核心的脚本文件(如目录:包含用于配置核心的脚本文件(如目录:包含用于配置核心的脚本文件(如目录:包含用于配置核心的脚本文件(如awkawk和和和和tktk脚脚脚脚本)。本)。本)。本)。14Linux内核源码的组成内核源码的组成v系统启动与初始化系统启动与初始化系统启动与初始化系统启动与初始化在基于在基于在基于在基于intelintel的系统上,的系统上,的系统上,的系统上,LinuxLinux可以通过可以通过可以通过可以通过loadlin.exeloadlin.exe或者或者或者或者LILOLILO将核心载入内存并将控制传递给它。将核心载入内存并将控制传递给它。将核心载入内存并将控制传递给它。将核心载入内存并将控制传递给它。这部分程序这部分程序这部分程序这部分程序 位于位于位于位于arch/i386/kerneld/head.sarch/i386/kerneld/head.s。此文件完成一些处理器相关操作并跳转到此文件完成一些处理器相关操作并跳转到此文件完成一些处理器相关操作并跳转到此文件完成一些处理器相关操作并跳转到init/main.cinit/main.c中中中中的的的的main()main()例程。例程。例程。例程。v内存管理内存管理内存管理内存管理主要位于主要位于主要位于主要位于mmmm目录里,但与处理器结构相关部分在目录里,但与处理器结构相关部分在目录里,但与处理器结构相关部分在目录里,但与处理器结构相关部分在arch/mmarch/mm中。中。中。中。页面出错处理代码位于页面出错处理代码位于页面出错处理代码位于页面出错处理代码位于mmmm下的下的下的下的 memory.c memory.c文件中文件中文件中文件中内存映射与页面内存映射与页面内存映射与页面内存映射与页面cachecache代码位于中代码位于中代码位于中代码位于中buffer cachebuffer cache则在则在则在则在mm/buffer.cmm/buffer.c中实现中实现中实现中实现 s s位于位于位于位于mm/smm/s和和和和mm/smm/s中中中中15Linux内核源码的组成(续)内核源码的组成(续)v 核心核心核心核心大多数通用代码位于大多数通用代码位于大多数通用代码位于大多数通用代码位于kernelkernel目录下,而处理器相关代码被目录下,而处理器相关代码被目录下,而处理器相关代码被目录下,而处理器相关代码被放在放在放在放在arch/kernelarch/kernel中。中。中。中。调度管理程序位于调度管理程序位于调度管理程序位于调度管理程序位于kernel/sched.ckernel/sched.cforkfork代码位于代码位于代码位于代码位于kernel/fork.ckernel/fork.c底层部分处理及中断处理代码位于底层部分处理及中断处理代码位于底层部分处理及中断处理代码位于底层部分处理及中断处理代码位于include/linux/interrupt.hinclude/linux/interrupt.h里里里里在在在在/linux/sched.h/linux/sched.h中可以找到中可以找到中可以找到中可以找到task_structtask_struct的描叙的描叙的描叙的描叙vPCIPCIPCIPCI伪设备驱动位于伪设备驱动位于伪设备驱动位于伪设备驱动位于drivers/pci/pci.c,drivers/pci/pci.c,其系统通用定义放在其系统通用定义放在其系统通用定义放在其系统通用定义放在include/linux/pci.hinclude/linux/pci.h中。中。中。中。每个处理器结构具有特殊的每个处理器结构具有特殊的每个处理器结构具有特殊的每个处理器结构具有特殊的PCI BIOSPCI BIOS代码代码代码代码Alpha AXPAlpha AXP的位于的位于的位于的位于arch/alpha/kernel/bios32.carch/alpha/kernel/bios32.c中。中。中。中。16Linux内核源码的组成(续)内核源码的组成(续)v 进程间通讯进程间通讯进程间通讯进程间通讯进程间通讯所有代码都在进程间通讯所有代码都在进程间通讯所有代码都在进程间通讯所有代码都在ipcipc目录中。目录中。目录中。目录中。系统系统系统系统V IPCV IPC对象都包含一个对象都包含一个对象都包含一个对象都包含一个ipc_permipc_perm结构,它在结构,它在结构,它在结构,它在include/linux/ipc.hinclude/linux/ipc.h中描叙。中描叙。中描叙。中描叙。系统系统系统系统V V消息在消息在消息在消息在ipc/msg.cipc/msg.c中实现中实现中实现中实现共享内存在共享内存在共享内存在共享内存在ipc/shm.cipc/shm.c而信号灯位于而信号灯位于而信号灯位于而信号灯位于ipc/sem.cipc/sem.c中中中中管道在管道在管道在管道在ipc/pipe.cipc/pipe.c中实现。中实现。中实现。中实现。v中断处理中断处理中断处理中断处理核心的中断处理代码总是与微处理器结构相关。核心的中断处理代码总是与微处理器结构相关。核心的中断处理代码总是与微处理器结构相关。核心的中断处理代码总是与微处理器结构相关。IntelIntel系统的中断处理代码位于系统的中断处理代码位于系统的中断处理代码位于系统的中断处理代码位于arch/i386/kernel/irq.carch/i386/kernel/irq.c其定义位于其定义位于其定义位于其定义位于include/asm-i386/irq.hinclude/asm-i386/irq.h17Linux内核源码的组成(续)内核源码的组成(续)v文件系统文件系统文件系统文件系统EXT2EXT2文件系统的源码位于文件系统的源码位于文件系统的源码位于文件系统的源码位于fs/ext2fs/ext2中,其数据结构定义位于中,其数据结构定义位于中,其数据结构定义位于中,其数据结构定义位于include/linux/ext2_fs.h,ext2_fs_i.h include/linux/ext2_fs.h,ext2_fs_i.h 以及以及以及以及 ext2_fs_sb.h ext2_fs_sb.h中。中。中。中。虚拟文件系统数据结构在虚拟文件系统数据结构在虚拟文件系统数据结构在虚拟文件系统数据结构在include/linux/fs.hinclude/linux/fs.h中描叙且其代码在中描叙且其代码在中描叙且其代码在中描叙且其代码在fs/fs/中。中。中。中。buffer cache buffer cache 和和和和updateupdate核心后台进程在核心后台进程在核心后台进程在核心后台进程在fs/buffer.cfs/buffer.c中实现。中实现。中实现。中实现。v网络网络网络网络网络代码位于网络代码位于网络代码位于网络代码位于netnet目录而大多数包含文件位于目录而大多数包含文件位于目录而大多数包含文件位于目录而大多数包含文件位于include/netinclude/net中。中。中。中。BSDBSD套接口代码位于套接口代码位于套接口代码位于套接口代码位于net/et/socket.c中中中中IPV4IPV4的的的的 INET INET套接口代码位于套接口代码位于套接口代码位于套接口代码位于net/ipv4/af_et/ipv4/af_inet.c中中中中通用协议支撑代码(包括通用协议支撑代码(包括通用协议支撑代码(包括通用协议支撑代码(包括sk_buffsk_buff处理过程)位于处理过程)位于处理过程)位于处理过程)位于net/corenet/core中中中中TCP/IPTCP/IP网络代码位于网络代码位于网络代码位于网络代码位于net/ipv4net/ipv4中中中中网络设备驱动位于网络设备驱动位于网络设备驱动位于网络设备驱动位于drivers/netdrivers/net中中中中 18Linux内核源码的组成(续)内核源码的组成(续)v核心模块核心模块核心模块核心模块核心模块代码部分位于核心中部分位于核心模块代码部分位于核心中部分位于核心模块代码部分位于核心中部分位于核心模块代码部分位于核心中部分位于modulesmodules包中。包中。包中。包中。核心代码位于核心代码位于核心代码位于核心代码位于kernel/modules.ckernel/modules.c其数据结构与核心后台进程其数据结构与核心后台进程其数据结构与核心后台进程其数据结构与核心后台进程kerneldkerneld消息位于消息位于消息位于消息位于include/linux/module.hinclude/linux/module.h和和和和include/linux/kerneld.hinclude/linux/kerneld.h目录目录目录目录中中中中同时必要时需查阅同时必要时需查阅同时必要时需查阅同时必要时需查阅 include/linux/elf.h include/linux/elf.h中的中的中的中的ELFELF文件格文件格文件格文件格式式式式19Linux内核源码的组成内核源码的组成设备驱动设备驱动vLinuxLinux核心源码的大多数都是设备驱动核心源码的大多数都是设备驱动核心源码的大多数都是设备驱动核心源码的大多数都是设备驱动v所有所有所有所有LinuxLinux的设备驱动源码都放在的设备驱动源码都放在的设备驱动源码都放在的设备驱动源码都放在driversdrivers目录中并目录中并目录中并目录中并分成以下几类:分成以下几类:分成以下几类:分成以下几类:/block/block目录:块设备驱动包括目录:块设备驱动包括目录:块设备驱动包括目录:块设备驱动包括IDEIDE(在(在(在(在ide.cide.c中)驱动。中)驱动。中)驱动。中)驱动。如果想寻找这些可包含文件系统的设备的初始化过程如果想寻找这些可包含文件系统的设备的初始化过程如果想寻找这些可包含文件系统的设备的初始化过程如果想寻找这些可包含文件系统的设备的初始化过程 则应该在则应该在则应该在则应该在drivers/block/genhd.cdrivers/block/genhd.c中的中的中的中的device_setup()device_setup()。当安装一个当安装一个当安装一个当安装一个nfsnfs文件系统时不但要初始化文件系统时不但要初始化文件系统时不但要初始化文件系统时不但要初始化 硬盘还需初始硬盘还需初始硬盘还需初始硬盘还需初始化网络。块设备包括化网络。块设备包括化网络。块设备包括化网络。块设备包括IDEIDE与与与与SCSISCSI设备。设备。设备。设备。/char/char目录:包含字符设备的驱动,如目录:包含字符设备的驱动,如目录:包含字符设备的驱动,如目录:包含字符设备的驱动,如ttysttys,串行口以及鼠,串行口以及鼠,串行口以及鼠,串行口以及鼠标。标。标。标。/cdrom/cdrom目录:目录:目录:目录:包含所有包含所有包含所有包含所有Linux CDROMLinux CDROM代码。代码。代码。代码。IDEIDE接口的接口的接口的接口的CDCD驱动位于驱动位于驱动位于驱动位于drivers/block/ide-cd.cdrivers/block/ide-cd.c中中中中SCSI CDSCSI CD驱动位于驱动位于驱动位于驱动位于drivers/scsi/scsi.cdrivers/scsi/scsi.c中。中。中。中。20Linux内核源码的组成内核源码的组成设备驱动(续)设备驱动(续)/pci/pci目录:包含目录:包含目录:包含目录:包含PCIPCI伪设备驱动源码。伪设备驱动源码。伪设备驱动源码。伪设备驱动源码。/scsi/scsi目录:包括所有的目录:包括所有的目录:包括所有的目录:包括所有的SCSISCSI代码以及代码以及代码以及代码以及LinuxLinux支持的支持的支持的支持的SCSI SCSI 设备的设备驱动。设备的设备驱动。设备的设备驱动。设备的设备驱动。/net/net目录:目录:目录:目录:包含网络驱动源码,如包含网络驱动源码,如包含网络驱动源码,如包含网络驱动源码,如tulip.ctulip.c中的中的中的中的DECChip DECChip 21040 PCI21040 PCI以太网驱动。以太网驱动。以太网驱动。以太网驱动。/sound/sound目录:所有的声卡驱动源码。目录:所有的声卡驱动源码。目录:所有的声卡驱动源码。目录:所有的声卡驱动源码。21主要内容主要内容vLinuxLinux的基本知识的基本知识的基本知识的基本知识vLinuxLinux的内核代码结构的内核代码结构的内核代码结构的内核代码结构v堆栈基本概念堆栈基本概念堆栈基本概念堆栈基本概念22堆栈堆栈v堆栈是堆栈是堆栈是堆栈是C C语言程序运行时必须的一个记录调用路径语言程序运行时必须的一个记录调用路径语言程序运行时必须的一个记录调用路径语言程序运行时必须的一个记录调用路径和参数的空间和参数的空间和参数的空间和参数的空间函数调用框架函数调用框架函数调用框架函数调用框架传递参数传递参数传递参数传递参数保存返回地址保存返回地址保存返回地址保存返回地址提供局部变量空间提供局部变量空间提供局部变量空间提供局部变量空间vC C语言编译器对堆栈的使用有一套的规则语言编译器对堆栈的使用有一套的规则语言编译器对堆栈的使用有一套的规则语言编译器对堆栈的使用有一套的规则v了解堆栈存在的目的和编译器对堆栈使用的规则是了解堆栈存在的目的和编译器对堆栈使用的规则是了解堆栈存在的目的和编译器对堆栈使用的规则是了解堆栈存在的目的和编译器对堆栈使用的规则是理解操作系统一些关键性代码的基础理解操作系统一些关键性代码的基础理解操作系统一些关键性代码的基础理解操作系统一些关键性代码的基础23堆栈相关寄存器堆栈相关寄存器vespesp:堆栈指针(:堆栈指针(:堆栈指针(:堆栈指针(stack pointerstack pointer),指向系统栈最),指向系统栈最),指向系统栈最),指向系统栈最上面一个栈帧的栈顶上面一个栈帧的栈顶上面一个栈帧的栈顶上面一个栈帧的栈顶 vebp:ebp:基址指针(基址指针(基址指针(基址指针(base pointerbase pointer),指向系统栈最上),指向系统栈最上),指向系统栈最上),指向系统栈最上面一个栈帧的底部面一个栈帧的底部面一个栈帧的底部面一个栈帧的底部 vcs:eipcs:eip:指令寄存器:指令寄存器:指令寄存器:指令寄存器(extended instruction pointer)(extended instruction pointer),指向下一条等待执行的指令地址,指向下一条等待执行的指令地址,指向下一条等待执行的指令地址,指向下一条等待执行的指令地址vebpebp在在在在C C语言中用作记录当前函数调用基址语言中用作记录当前函数调用基址语言中用作记录当前函数调用基址语言中用作记录当前函数调用基址24堆栈操作堆栈操作vvpushpush:以字节为单位将数据(:以字节为单位将数据(:以字节为单位将数据(:以字节为单位将数据(4 4个个个个字节)压入栈,从高到低按字节依字节)压入栈,从高到低按字节依字节)压入栈,从高到低按字节依字节)压入栈,从高到低按字节依次将数据存入次将数据存入次将数据存入次将数据存入ESP-1ESP-1、ESP-2ESP-2、ESP-ESP-3 3、ESP-4ESP-4的地址单元。的地址单元。的地址单元。的地址单元。vvpoppop:过程与:过程与:过程与:过程与PUSHPUSH相反。相反。相反。相反。vvcallcall:用来调用一个函数或过程,此:用来调用一个函数或过程,此:用来调用一个函数或过程,此:用来调用一个函数或过程,此时,下一条指令地址会被压入堆栈,时,下一条指令地址会被压入堆栈,时,下一条指令地址会被压入堆栈,时,下一条指令地址会被压入堆栈,以备返回时能恢复执行下条指令。以备返回时能恢复执行下条指令。以备返回时能恢复执行下条指令。以备返回时能恢复执行下条指令。vvretret:从一个函数或过程返回,之前:从一个函数或过程返回,之前:从一个函数或过程返回,之前:从一个函数或过程返回,之前callcall保存的下条指令地址会从栈内弹保存的下条指令地址会从栈内弹保存的下条指令地址会从栈内弹保存的下条指令地址会从栈内弹出到出到出到出到EIPEIP寄存器中,程序转到寄存器中,程序转到寄存器中,程序转到寄存器中,程序转到CALLCALL之前下条指令处执行之前下条指令处执行之前下条指令处执行之前下条指令处执行 。espebp高地址高地址低地址低地址esp25利用堆栈实现函数调用和返回利用堆栈实现函数调用和返回/调用者调用者call target/建立被调用者函数的堆栈框架建立被调用者函数的堆栈框架pushl%ebpmovl%esp,%ebp/拆除被调用者函数的堆栈框架拆除被调用者函数的堆栈框架movl%ebp,%esppopl%ebp ret/被调用者函数体被调用者函数体/do sth.call指令:指令:1)将下一条指令的地址)将下一条指令的地址A保存保存在栈顶在栈顶2)设置)设置eip指向被调用程序代指向被调用程序代码开始处码开始处将地址将地址A恢复到恢复到eip中中26函数堆栈框架的形成函数堆栈框架的形成vv执行执行执行执行call XXXcall XXX之前之前之前之前cs:eipcs:eip原来的值指向原来的值指向原来的值指向原来的值指向callcall下一条指令,下一条指令,下一条指令,下一条指令,该值被保存到栈顶该值被保存到栈顶该值被保存到栈顶该值被保存到栈顶然后然后然后然后cs:eipcs:eip的值指向的值指向的值指向的值指向xxxxxx的入口地址的入口地址的入口地址的入口地址vv进入进入进入进入 XXX XXX第一条指令:第一条指令:第一条指令:第一条指令:pushl%ebp pushl%ebp 保存调用者的栈帧地址保存调用者的栈帧地址保存调用者的栈帧地址保存调用者的栈帧地址 第二条指令:第二条指令:第二条指令:第二条指令:movl%esp,%ebp movl%esp,%ebp初始化初始化初始化初始化XXXXXX的栈帧地址的栈帧地址的栈帧地址的栈帧地址 函数体中的常规操作,可能会压栈、出栈函数体中的常规操作,可能会压栈、出栈函数体中的常规操作,可能会压栈、出栈函数体中的常规操作,可能会压栈、出栈vv退出退出退出退出XXXXXXmovl%ebp,%espmovl%ebp,%esppopl%ebppopl%ebpretretespebp高地址高地址低地址低地址cs:eipespebpespebpesp27堆栈其他作用堆栈其他作用vC C语言中还使用堆栈进行语言中还使用堆栈进行语言中还使用堆栈进行语言中还使用堆栈进行参数的传递参数的传递参数的传递参数的传递局部变量的使用局部变量的使用局部变量的使用局部变量的使用编译方法编译方法编译方法编译方法1 1)首先使用)首先使用)首先使用)首先使用gccgcc生成生成生成生成test.ctest.c的可的可的可的可执行文件执行文件执行文件执行文件testtest;2 2)然后使用)然后使用)然后使用)然后使用objdump Sobjdump S获得获得获得获得testtest的反汇编文件;的反汇编文件;的反汇编文件;的反汇编文件;28建立框架建立框架拆除框架拆除框架v从从从从testtest的反汇编文件中找到的反汇编文件中找到的反汇编文件中找到的反汇编文件中找到p2p2的反汇编代码的反汇编代码的反汇编代码的反汇编代码int p2(int x,int y)int p2(int x,int y)push%ebppush%ebpmov%esp,%ebpmov%esp,%ebpreturn x+y;return x+y;mov 0 xc(%ebp),%eaxmov 0 xc(%ebp),%eaxadd 0 x8(%ebp),%eaxadd 0 x8(%ebp),%eax pop%ebppop%ebpretretebpespebp调用者调用者堆栈堆栈框架框架espebpyx高地址高地址低地址低地址观察观察p2的堆栈框架的堆栈框架GNUGNU规则规定:规则规定:规则规定:规则规定:%eax%eax、%ecx%ecx和和和和%edx%edx是由调用者负责存储的;是由调用者负责存储的;是由调用者负责存储的;是由调用者负责存储的;%ebx%ebx、%ebi%ebi和和和和%esi%esi则由被调用者保护。则由被调用者保护。则由被调用者保护。则由被调用者保护。29观察观察main函数是如何传递参数给函数是如何传递参数给p2的的z=p2(x,y);z=p2(x,y);pushl 0 xfffffff8(%ebp)pushl 0 xfffffff8(%ebp)pushl 0 xfffffff4(%ebp)pushl 0 xfffffff4(%ebp)call 804839b call 804839b mov%eax,0 xfffffffc(%ebp)mov%eax,0 xfffffffc(%ebp)printf(%d=%d+%dn,z,x,y);printf(%d=%d+%dn,z,x,y);pushl 0 xfffffff8(%ebp)pushl 0 xfffffff8(%ebp)pushl 0 xfffffff4(%ebp)pushl 0 xfffffff4(%ebp)pushl 0 xfffffffc(%ebp)pushl 0 xfffffffc(%ebp)push$0 x8048510 push$0 x8048510 call 80482b0 call 80482b0 p2p2的返回值是如何返回给的返回值是如何返回给的返回值是如何返回给的返回值是如何返回给mainmain的?的?的?的?调用者调用者堆栈堆栈框架框架espebpy的值的值x的值的值高地址高地址低地址低地址被调用者被调用者堆栈堆栈框架框架ebpcs:eipespebpespesp30观察程序运行时堆栈的变化观察程序运行时堆栈的变化ebpint main(void)int main(void)push%ebppush%ebpmov%esp,%ebpmov%esp,%ebpsub$0 x18,%esp sub$0 x18,%esp char c=a;char c=a;movb$0 x61,0 xfffffff3(%ebp)movb$0 x61,0 xfffffff3(%ebp)int x,y,z;int x,y,z;x=1;x=1;movl$0 x1,0 xfffffff4(%ebp)movl$0 x1,0 xfffffff4(%ebp)y=2;y=2;movl$0 x2,0 xfffffff8(%ebp)movl$0 x2,0 xfffffff8(%ebp)调用者调用者ebpespebpespespc=ax=1y=2高地址高地址低地址低地址31程序改进程序改进在这个小程序中,在这个小程序中,main函数函数中调用了函数中调用了函数p2,而在,而在p2的的执行过程中又调用了函数执行过程中又调用了函数p132观察程序运行时堆栈的变化观察程序运行时堆栈的变化eipeipeipeipmainp2(x,y)p1p2p1(c)mainp2p1程序的代码段程序的代码段堆栈堆栈eipespmain堆栈espeipeipx,yeipp2堆栈eipeipeipeipceipp1堆栈esp33观察堆栈在内核中的使用观察堆栈在内核中的使用v在内核代码中经常有这样的函数,其参数为在内核代码中经常有这样的函数,其参数为在内核代码中经常有这样的函数,其参数为在内核代码中经常有这样的函数,其参数为struct pt_regs *regsstruct pt_regs *regs可以往回一层层的寻找这个参数是怎么传递过来的可以往回一层层的寻找这个参数是怎么传递过来的可以往回一层层的寻找这个参数是怎么传递过来的可以往回一层层的寻找这个参数是怎么传递过来的最后可以发现最源头的函数使用参数最后可以发现最源头的函数使用参数最后可以发现最源头的函数使用参数最后可以发现最源头的函数使用参数struct pt_regs regsstruct pt_regs regs,如如如如如如如如void do_IRQ(struct pt_regs regs)void do_IRQ(struct pt_regs regs)如果再进一步寻找是谁调用了这个如果再进一步寻找是谁调用了这个如果再进一步寻找是谁调用了这个如果再进一步寻找是谁调用了这个do_IRQdo_IRQ,会发现只是,会发现只是,会发现只是,会发现只是一条简单的汇编语句一条简单的汇编语句一条简单的汇编语句一条简单的汇编语句call do_IRQcall do_IRQ34pt_regs作用作用v用户态用户态用户态用户态 vs.vs.内核态内核态内核态内核态v寄存器上下文寄存器上下文寄存器上下文寄存器上下文从用户态切换到内核态时从用户态切换到内核态时从用户态切换到内核态时从用户态切换到内核态时必须保存用户态的寄存器上下文必须保存用户态的寄存器上下文必须保存用户态的寄存器上下文必须保存用户态的寄存器上下文要保存哪些?要保存哪些?要保存哪些?要保存哪些?保存在哪里?保存在哪里?保存在哪里?保存在哪里?v中断中断中断中断/int/int指令会在堆栈上保存一些寄存器的值指令会在堆栈上保存一些寄存器的值指令会在堆栈上保存一些寄存器的值指令会在堆栈上保存一些寄存器的值如:用户态栈顶地址、当时的状态字、当时的如:用户态栈顶地址、当时的状态字、当时的如:用户态栈顶地址、当时的状态字、当时的如:用户态栈顶地址、当时的状态字、当时的cs:eipcs:eip的值的值的值的值35pt_regs结构定义结构定义36SAVE_ALL和和RESTORE_ALL37站在站在CPU执行指令的角度执行指令的角度CPUeipesp0 xc0000000c=gets()mainsome action进程管理wait keyboradqueue进程进程x进程进程xidleintr8259keyboard中断处理Wakeup progress内核其他模块espeipespcsds等等esp系统调用处理idtr38作业作业v编写一个编写一个编写一个编写一个C C语言程序(至少包含两个函数调用及若语言程序(至少包含两个函数调用及若语言程序(至少包含两个函数调用及若语言程序(至少包含两个函数调用及若干个局部变量)干个局部变量)干个局部变量)干个局部变量)编译并生成汇编指令编译并生成汇编指令编译并生成汇编指令编译并生成汇编指令分析程序运行过程中堆栈变化情况分析程序运行过程中堆栈变化情况分析程序运行过程中堆栈变化情况分析程序运行过程中堆栈变化情况39复习提要复习提要v了解了解了解了解LinuxLinux的内核版本的命名规则的内核版本的命名规则的内核版本的命名规则的内核版本的命名规则v了解了解了解了解LinuxLinux系统的目录结构及系统的目录结构及系统的目录结构及系统的目录结构及LinuxLinux核心源码的组织核心源码的组织核心源码的组织核心源码的组织v了解堆栈相关寄存器的功能了解堆栈相关寄存器的功能了解堆栈相关寄存器的功能了解堆栈相关寄存器的功能v理解程序运行时的堆栈变化理解程序运行时的堆栈变化理解程序运行时的堆栈变化理解程序运行时的堆栈变化40结束语当你尽了自己的最大努力时,失败也是伟大的,所以不要放弃,坚持就是正确的。When You Do Your Best,Failure Is Great,So DonT Give Up,Stick To The End感谢聆听不足之处请大家批评指导Please Criticize And Guide The Shortcomings演讲人:XXXXXX 时 间:XX年XX月XX日
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!