中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn.

Slides:



Advertisements
Similar presentations
Linux管理与应用 Linux 诞生历史 主讲教师:张美平. 主要内容 Linux诞生的几个要素及背景 GNU项目 Linux系统诞生与发展过程.
Advertisements

高校教师、高级项目经理 任铄 QQ : 第一章 操作系统引论 1.1 操作系统的目标和作用 1.2 操作系统的发展过程 1.3 操作系统的基本特性 1.4 操作系统的主要功能 1.5 OS 结构设计.
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Linux 安裝入門與基本管理 課程目標: 學習Linux平台下的安裝設定 與 建置一個基本的Linux伺服器
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
第四章 電腦軟體 課前指引 實體的電腦裝置,我們稱之為「硬體」(Hardware),至於軟體則是個抽象的概念,軟體是經由人類以各種不同的程式語言撰寫而成,以達到控制硬體、進行各種工作的抽象化(例如文書處理)等動作。有些讀者經常迫不及買了一台新電腦,就以為可以開始使用!事實不然,一部配備齊全的電腦,如果沒有合適的軟體來控制與搭配,絕對也是英雄無用武之地。一般來說,我們將軟體分「系統軟體」(System.
孟宁 电话: 主页:
计算机体系结构 应用程序 软件 操作系统 编译器 固件 指令集 输入输出 CPU 硬件 内存 (I/O) 集成电路 元件,逻辑门.
第1章 Linux概述 马丽洁.
操作系统结构.
实用操作系统概念 张惠娟 副教授 1.
第1讲 实验环境.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
在PHP和MYSQL中实现完美的中文显示
資策會 南區資訊處 教育訓練中心 吳建興 個人電腦組裝 PC DIY 資策會 南區資訊處 教育訓練中心 吳建興
Linux的認識與使用 2013/01/05.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Windows 8 more simple more powerful more free.
Android 课程讲义 智能手机开发
計算機結構 – 概論 陳鍾誠 於金門大學.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
桌面環境簡介及IDE開發工具 Outline (一)什麼是Linux? (二)桌面環境系統簡介 (三)IDE開發工具.
SVN服务器的搭建(Windows) 柳峰
SQL Injection.
辅导课程六.
伺服器探索營 Day 1 指導老師: 張啟中 (JohnAxer) 教學助理:
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
线程(Thread).
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
作業系統 (Operating System)
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
逆向工程-汇编语言
中国科学技术大学计算机系 陈香兰(0512- ) 助教:孟宁 Fall 2009
第二章 Linux简介 Linux概述 Linux系统的特点 Linux中使用的应用程序 Linux的组成 Linux版本介绍
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
嵌入式操作系统 陈香兰 Spring 2008 中国科学技术大学计算机系.
Unit 11.Operating System 11.1 What’s OS 11.2 Related Courses
Tour of PDA 電機四 b 莊惠涵.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
中国科学技术大学计算机系 陈香兰 Fall 2013 第三讲 线程 中国科学技术大学计算机系 陈香兰 Fall 2013.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
信号量(Semaphore).
iSIGHT 基本培训 使用 Excel的栅栏问题
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
第12章 Linux與 嵌入式uClinux系統
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
课程介绍 1、嵌入式系统开发先序课程; 2、共32+8课时: 3、本期采用混合式教学成绩计算方式:
Presentation transcript:

中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn Linux操作系统分析 中国科学技术大学计算机系 陈香兰(0512-87161312) xlanchen@ustc.edu.cn

xlanchen:Linux OS Analysis 第一章、绪论 主要内容 Linux简介 一些预备知识 操作系统基本概念 堆栈 内核态 vs 用户态 虚拟内存 分析和实验验证环境 VMware 、QEMU、VirtualBox SourceInsight 相关工具介绍:GNU Tools等 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 第一章、绪论 主要内容 Linux简介 一些预备知识 操作系统基本概念 堆栈 内核态 vs 用户态 虚拟内存 分析和实验验证环境 VMware、QEMU、VirtualBox SourceInsight 相关工具介绍:GNU Tools等 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis Linux是一个类Unix(Unix-like)的操作系统,在1991年发行了它的第一个版本 在Linux内核维护网站上,“What is Linux?” 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis From “www.kernel.org” Linux的来历和目标: Linux is a clone of the operating system Unix, written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX and Single UNIX Specification compliance. Linux的功能 It has all the features you would expect in a modern fully-fledged Unix, including true multitasking, virtual memory, shared libraries, demand loading, shared copy-on-write executables, proper memory management, and multistack networking including IPv4 and IPv6. Portable Operating System Interface Standard 可移植操作系统接口标准 由IEEE制订,并由ISO接受为国际标准。 Institute for Electrical and Electronic Engineers 电气电子工程师学会[美] International Organization for Standardization 国际标准化组织 制定各行各业各种产品和服务的技术规范(国际标准) 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis Although originally developed first for 32-bit x86-based PCs (386 or higher), today Linux also runs on (at least) the Alpha AXP, Sun SPARC, Motorola 68000, PowerPC, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, AMD x86-64, AXIS CRIS, Renesas M32R, Atmel AVR32, Renesas H8/300, NEC V850, Tensilica Xtensa, and Analog Devices Blackfin architectures; for many of these architectures in both 32- and 64-bit variants. 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 在内存管理方面不得不说的 Linux is easily portable to most general-purpose 32- or 64-bit architectures as long as they have a paged memory management unit (PMMU) and a port of the GNU C compiler (gcc) (part of The GNU Compiler Collection, GCC). Linux has also been ported to a number of architectures without a PMMU, although functionality is then obviously somewhat limited. See the µClinux project for more info. 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis Linux内核、Linux系统或Linux开发套件等术语。 严格来说,Linux指的是Linux Torvalds维护的(及通过主要和镜像网站发布的)内核。 GNU/Linux GNU/Linux的拥护者们认为,Linux仅仅是指Linux内核,而整个Linux系统的大部分都建立在GNU软件之上。 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis GNU,“g-noo”,“GNU's Not Unix” 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis http://www.kernel.org/ The Linux Kernel Archives Mirror System 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 1991年11月,芬兰赫尔辛基大学的学生 Linus Torvalds写了个小程序,后来取名为Linux,放在互联网上。他表达了一个愿望,希望借此搞出一个操作系统的“内核”来,这完全是一个偶然事件 1993,在一批高水平黑客的参与下,诞生了Linux 1.0 版 1994年,Linux 的第一个商业发行版 Slackware 问世 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 1996年,美国国家标准技术局的计算机系统实验室确认 Linux 版本 1.2.13(由 Open Linux 公司打包)符合 POSIX 标准 2001年,Linux2.4版内核发布 2003年,Linux2.6版内核发布 …… 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis Linux是免费的、源代码开放的、符合POSIX标准规范的操作系统 拥有现代操作系统具有的所有内容,例如 抢占式多任务处理,支持多用户 内存保护, 支持SMP,支持TCP/IP, 支持绝大多数的32位和64位CPU 等 还有一些其他操作系统没有的特色,比如 NFS,VFS,高效的EXT系列文件系统等 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis Linux内核版本是由Linus Torvalds作为总体协调人的Linux开发小组(分布在各个国家的近百位高手)开发出的系统内核的版本号 Linux内核采用的是双树系统 一棵是稳定树,主要用于发行 另一棵是非稳定树或称为开发树,用于产品开发和改进 Linux内核版本号由3位数字组成 r.x.y 第3位数字y为修改号,表示 错误修补的次数 第1位数 字r为主 版本号 第2位数字x为说明版本类型的次版本号,如果 x为偶数,则表示为产品化版本,为奇数时表 示为实验版本 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 支持多种CPU X86, ARM, MIPS, SH, i960, PPC, etc. 开放源代码(Open source) 强大的网络功能 可移植性 使用GNU tools 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 一个新潮,非常稳定,多用户,多任务的环境 标准的平台 无法超越的计算能力,可移动性和适应性 先进的图形用户界面 几十个异常出色而且免费的桌面应用程序 成千上万个免费的工具和应用小程序 几百上千个专业程序由全世界的无数研究人员编制,覆盖了天文,信息技术,化学,物理,工程,语言,生物等各个学科领域 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 一个真正杰出的学习系统 很多顶级的系统开发平台,友好的编程语言及编程工具都免费包含在操作系统里面 病毒入侵,计算机的“后门”,软件提供商的“特别要求”,强迫性的软件升级,专有的文件格式,软件使用许可证和市场策略,产品注册登记,高得惊人的软件价格,等等 -------Linux都没有 Linux操作系统平台保证它的“永久性” 一个技术快速更新的平台 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 第一章、绪论 主要内容 Linux简介 一些预备知识 操作系统基本概念 堆栈 内核态 vs 用户态 虚拟内存 分析和实验验证环境 VMware 、QEMU、VirtualBox SourceInsight 相关工具介绍:GNU Tools等 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 操作系统的基本概念 任何计算机系统都包含一个基本的程序集合,称为操作系统。 内核(进程管理,进程调度,进程间通讯机制,内存管理,中断异常处理,文件系统,I/O系统,网络部分) 其他程序(例如函数库,shell程序等等) 操作系统的目的 与硬件交互,管理所有的硬件资源 为用户程序(应用程序)提供一个良好的执行环境 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 用户应用程序 Shell,lib System call Kernel implementation 对硬件资源的管理 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 最简单也是最复杂的操作 在控制台下输入ls命令 为什么我们敲击键盘就会在终端上显示? 中断的概念,终端控制台设备驱动的概念 Shell程序分析输入参数,确定这是ls命令 终端解释程序 什么是shell? 保护模式和实模式,内存保护,内核态用户态相关问题 什么是系统调用? 调用系统调用fork生成一个shell本身的拷贝 软中断、异常的概念。陷阱门,系统门 系统调用是怎么实现的? 进程的描述,进程的创建。COW技术 fork是什么? 为什么要调用fork? 调用exec系统调用将ls的可执行文件装入内存 内存管理模块,进程的地址空间,分页机制,文件系统 堆栈的维护,寄存器的保存与恢复 从系统调用返回 如何做到正确的返回? 进程的调度,运行队列等待队列的维护 Shell和ls都得以执行 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 一些基本但很重要的概念 堆栈 内核态 vs 用户态 虚拟内存 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 堆栈 堆栈是C语言程序运行时必须的一个记录调用路径和参数的空间 函数调用框架 传递参数 保存返回地址 提供局部变量空间 等等 C语言编译器对堆栈的使用有一套的规则 了解堆栈存在的目的和编译器对堆栈使用的规则是理解操作系统一些关键性代码的基础 以x86体系结构为例 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 堆栈寄存器和堆栈操作 堆栈相关的寄存器 esp,堆栈指针(stack pointer) ebp,基址指针(base pointer) 堆栈操作 push 栈顶地址减少4个字节(32位) pop 栈顶地址增加4个字节 ebp在C语言中用作记录当前函数调用基址 低地址 esp esp ebp 高地址 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 利用堆栈实现函数调用和返回 其他关键寄存器 cs : eip:总是指向下一条的指令地址 顺序执行:总是指向地址连续的下一条指令 跳转/分支:执行这样的指令的时候,cs : eip的值会根据程序需要被修改 call:将当前cs : eip的值压入栈顶,cs : eip指向被调用函数的入口地址 ret:从栈顶弹出原来保存在这里的cs : eip的值,放入cs : eip中 发生中断时??? ???? 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 补充知识 AT&T汇编语言和Intel汇编语言 AT&T汇编语言中指令的操作数顺序与Intel相反 AT&T opcode[b+w+l] src, dest 寄存器:%reg 访存大小:[b+w+l] - 8, 16, 32 bits 引用内存地址:section:disp(base, index, scale) 实际偏移:base + index*scale + disp 缺省为0 取值可以是1,2,4,8 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis //建立被调用者函数的堆栈框架 pushl %ebp movl %esp, %ebp //拆除被调用者函数的堆栈框架 movl %ebp,%esp popl %ebp ret // 调用者 … call target //被调用者函数体 //do sth. … call指令: 1)将下一条指令的地址A保存在栈顶 2)设置eip指向被调用程序代码开始处 将地址A恢复到eip中 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 函数堆栈框架的形成 call xxx 执行call之前 执行call时,cs : eip原来的值 指向call下一条指令,该值被 保存到栈顶,然后cs : eip的值 指向xxx的入口地址 进入xxx 第一条指令: pushl %ebp 第二条指令: movl %esp, %ebp 函数体中的常规操作,可能会压栈、出栈 退出xxx movl %ebp,%esp popl %ebp ret esp ebp 低地址 esp ebp esp cs : eip esp ebp 高地址 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 参数的传递 局部变量的使用 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 一段小程序 源文件:test.c 这是一个很简单的C程序 main函数中调用了函数p1和p2 首先使用gcc –g 生成test.c的可执行文件test 然后使用objdump –S获得test的反汇编文件 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 观察p2的堆栈框架 从test的反汇编文件中找到p2的反汇编代码 int p2(int x,int y) { push %ebp mov %esp,%ebp return x+y; mov 0xc(%ebp),%eax add 0x8(%ebp),%eax } pop %ebp ret 建立框架 低地址 ebp esp ebp esp 调用者 堆栈 框架 x 拆除框架 y ebp 高地址 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 观察main函数是如何传递参数给p2的 esp … z=p2(x,y); pushl 0xfffffff8(%ebp) pushl 0xfffffff4(%ebp) call 804839b <p2> add $0x8,%esp mov %eax,0xfffffffc(%ebp) printf("%d=%d+%d\n",z,x,y); pushl 0xfffffffc(%ebp) push $0x8048510 call 80482b0 <printf@plt> 被调用者 堆栈 框架 ebp ebp 低地址 cs:eip esp x的值 esp y的值 esp 调用者 堆栈 框架 ebp 高地址 p2的返回值是如何返回给main的? 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 观察main中的局部变量 int main(void) { push %ebp mov %esp,%ebp sub $0x18,%esp … char c='a'; movb $0x61,0xfffffff3(%ebp) int x,y,z; x=1; movl $0x1,0xfffffff4(%ebp) y=2; movl $0x2,0xfffffff8(%ebp) 低地址 esp c=‘a’ x=1 y=2 ebp esp ebp esp 调用者 ebp 高地址 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 观察程序运行时堆栈的变化 eip p1 p1 eip p2 p2 esp p1的堆栈 p2堆栈 eip main … p1(c) p2(x,y) eip eip eip eip eip main c x,y esp eip main堆栈 eip eip eip eip 堆栈 程序的代码段 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 另一段小程序 和前一段小程序稍有不同 在这个小程序中,main函数中调用了函数p2,而在p2的执行过程中又调用了函数p1 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 观察程序运行时堆栈的变化 eip p1 p1 esp p1堆栈 eip p2 … p1(c) eip eip eip p2 eip c esp eip p2堆栈 eip eip main … p2(x,y) eip x,y esp eip eip main main堆栈 eip 堆栈 程序的代码段 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 观察堆栈在内核中的使用 在内核代码中经常有这样的函数,它的参数是struct pt_regs *regs 可以往回一层层的寻找这个参数是怎么传递过来的,最后我们可以发现最源头的函数使用了这样的参数struct pt_regs regs 比如void do_IRQ(struct pt_regs regs) 如果再进一步寻找是谁调用了这个do_IRQ,我们会发现只是一条简单的汇编语句 call do_IRQ 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 为什么要有pt_regs结构 用户态 vs 内核态 寄存器上下文 从用户态切换到内核态时 必须保存用户态的寄存器上下文 要保存哪些? 保存在哪里? 中断/int指令会在堆栈上保存一些寄存器的值 如:用户态栈顶地址、当时的状态字、当时的cs:eip的值 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis pt_regs结构 2019/1/14 xlanchen:Linux OS Analysis

SAVE_ALL和RESTORE_ALL 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis do_IRQ的调用方式 仔细阅读一下与之相连的汇编码 pushl $n-256 SAVE_ALL call do_IRQ jmp ret_from_intr 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis do_IRQ的函数定义方式 因此,do_IRQ将栈顶的内容看成pt_regs 结构的参数,在必要时可以通过访问这里 的内容获得信息 regparm(x) x!=0:告诉gcc不通过堆栈而通过寄存器传。 x是参数个数,寄存器依此使用EAX,EDX,ECX… 而asmlinkage则使得编译器不通过寄存器(x=0)而 使用堆栈传递参数 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 用户态和内核态的概念 Why? 假定不区分 用户直接修改操作系统的数据 用户直接调用操作系统的内部函数 用户直接操作外设 用户任意读/写物理内存 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 因此,要区分用户态和内核态: 禁止用户程序和底层硬件直接打交道 (最简单的例子,如果用户程序往硬件控制寄存器写入不恰当的值,可能导致硬件无法正常工作) 禁止用户程序访问任意的物理内存 (否则可能会破坏其他程序的正常执行,如果对核心内核所在的地址空间写入数据的话,会导致系统崩溃) 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 什么是用户态和内核态? 一般现代CPU都有几种不同的指令执行级别 在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态 而在相应的低级别执行状态下,代码的掌控范围会受到限制。只能在对应级别允许的范围内活动 举例: intel x86 CPU有四种不同的执行级别0-3,Linux只使用了其中的0级和3级分别来表示内核态和用户态 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 如何区分一段代码是核心态还是用户态 cs寄存器的最低两位表明了当前代码的特权级 CPU每条指令的读取都是通过cs:eip这两个寄存器: 其中cs是代码段选择寄存器,eip是偏移量寄存器。 上述判断由硬件完成 一般来说在Linux中,地址空间是一个显著的标志:0xc0000000以上的地址空间只能在内核态下访问,0x00000000-0xbfffffff的地址空间在两种状态下都可以访问 注意:这里所说的地址空间是逻辑地址而不是物理地址 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 虚拟内存 物理内存有限,是一种稀缺资源 局部性原理 空间局部性 时间局部性 按需调页 页框 利用磁盘上的交换空间 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 进程的虚拟地址空间 独立的地址空间(32位,4GB),每个进程一个 在Linux中,3G以上是内核空间,3G以下是用户空间 4G的进程地址空间使用进程私有的二级页表进行地址转换(虚拟地址物理地址) 页面大小:4KB 页目录、页表 若对应的内容在内存中,则对应的二级页表项记录相应的物理页框信息 否则根据需要进行装载或者出错处理 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 进程调度后,执行一个新的被调度的进程之前,要先进行页表切换 Linux中的内核空间 每个进程3G以上的空间用作内核空间 从用户地址空间进入内核地址空间不经过页表切换 而是通过中断/异常/系统调用入口(也只能如此) 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 站在CPU执行指令的角度 idle wait keyborad queue 进程x 系统调用处理 eip esp cs ds等等 进程管理 CPU Wakeup progress 中断处理 内核其他模块 esp esp 0xc0000000 idtr eip intr some action 8259 c=gets() … esp main keyboard 进程x 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 从内存的角度来看 0xffffffff 0xe0000000 在Linux中,物理内存 总是被映射在3G以上 的空间中, 若物理内存过大,需 使用其他的映射技术 0x20000000 (512M) 0xc0000000 (3G) 用户代码或数据 0x00400000 内核代码 内核静态数据 0x00000000 0x00000000 物理内存 虚拟空间 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 第一章、绪论 主要内容 Linux简介 一些预备知识 操作系统基本概念 堆栈 内核态 vs 用户态 虚拟内存 分析和实验验证环境 VMware、QEMU、VirtualBox SourceInsight 相关工具介绍:GNU Tools等 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis VMware 模拟x86硬件平台 可以在Windows、Linux等平台上运行 VMWare模拟出来的硬件包括: 主板、内存、硬盘(IDE和SCSI)、DVD/CD-ROM、软驱、网卡、声卡、串口、并口和USB口。 上述硬件是固定型号的,与Host OS的实际硬件无关 可以直接从ISO文件上安装 在一个VMware上安装的的操作系统形成的虚拟机,可以拷贝到其他装有VMware的机器上 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis QEMU http://wiki.qemu.org/Main_Page QEMU is a generic and open source machine emulator and virtualizer. When used as a machine emulator, QEMU can run OSes and programs made for one machine (e.g. an ARM board) on a different machine (e.g. your own PC). By using dynamic translation, it achieves very good performance. When used as a virtualizer, QEMU achieves near native performances by executing the guest code directly on the host CPU. QEMU supports virtualization when executing under the Xen hypervisor or using the KVM kernel module in Linux. When using KVM, QEMU can virtualize x86, server and embedded PowerPC, and S390 guests. 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis VirtualBox http://www.virtualbox.org/ VirtualBox is a powerful x86 and AMD64/Intel64 virtualization product for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers, it is also the only professional solution that is freely available as Open Source Software under the terms of the GNU General Public License (GPL). Presently, VirtualBox runs on Windows, Linux, Macintosh and OpenSolaris hosts and supports a large number of guest operating systems including but not limited to Windows (NT 4.0, 2000, XP, Server 2003, Vista, Windows 7), DOS/Windows 3.x, Linux (2.4 and 2.6), Solaris and OpenSolaris, and OpenBSD. 安装:sudo apt-get install virtualbox 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis SourceInsight 源代码阅读和编辑工具 拥有内置的对C/C++, C#和Java等程序的分析。 能分析源代码并动态维护符号数据库,能自动显示有用的上下文信息。 到http://www.sourceinsight.com/上可以下载到它的试用版,试用期估计在30天左右 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 当前源码文件 当前文件的 符号表 Project相关信息 符号类型分类 文件类型配置信息 按目录,文件列表 所有文件列表 符号表 当前所看的符号上下文 当前所看符号的调用关系 2019/1/14 xlanchen:Linux OS Analysis

xlanchen:Linux OS Analysis 作业1: C语言中堆栈的作用是什么?请使用一个实例说明C语言中堆栈的某一个作用。 为什么要有内核态与用户态的区别?请结合32位x86说明在Linux中,用户态与内核态有哪些区别?在什么情况下,系统会进入内核态执行? 2019/1/14 xlanchen:Linux OS Analysis