第1章 LINUX操作系统绪论
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10
Linux操作系统的主要内容
Linux是免费的、源代码开放的、符合POSIX 标准规范的操作系统 拥有现代操作系统具有的所有内容,例如
抢占式多任务处理,支持多用户 内存保护, 支持SMP,支持TCP/IP, 支持绝大多数的32位和64位CPU 等 NFS,VFS,高效的EXT系列文件系统等
进程的描述, fork是什么? 进程的创建。 内存管理模块,进程的地址空间, 为什么要调用fork? 分页机制,文件系统 如何做到正确的返回? 进程的调度,运行队列 等待队列的维护 堆栈的维护,寄存 器的保存与恢复
Shell和ls都得以执行
21
一些基本但很重要的概念
堆栈 内核态 vs 用户态 虚拟内存
16
一个真正杰出的学习系统 很多顶级的系统开发平台,友好的编程语言及编程工 具都免费包含在操作系统里面 病毒入侵,计算机的“后门”,软件提供商的“特别 要求”,强迫性的软件升级,专有的文件格式,软件 使用许可证和市场策略,产品注册登记,高得惊人的 软件价格,等等 -------Linux都“没有” Linux操作系统平台保证它的“永久性” 一个技术快速更新的平台
源文件:test.c 这是一个很简单的C程序 main函数中调用了函数p1 和p2 首先使用gcc生成test.c的可 执行文件test 然后使用objdump –S获得 test的反汇编文件
29
观察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
用户应用程序
Shell,lib
System call Kernel implementation 对硬件资 源的管理
Kernel interface to the hardware Terminal controllers terminals Device controllers disks and tapes Memory controllers physical memory
建立框架
ebp esp esp 低地址
ebp
x y 调用者 堆栈 框架
拆除框架 ebp
30
高地址
观察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 0xfffffff8(%ebp) pushl 0xfffffff4(%ebp) pushl 0xfffffffc(%ebp) push $0x8048510 call 80482b0 <printf@plt> …
发生中断时怎么办?
25
//建立被调用者函数的堆栈框架 pushl %ebp movl %esp, %ebp
// 调用者 … call target …
//被调用者函数体 //do sth. … //拆除被调用者函数的堆栈框架 movl %ebp,%esp popl %ebp ret
将地址A恢复到eip中
22
堆栈
堆栈是C语言程序运行时必须的一个记录调用路径和 参数的空间
函数调用框架 传递参数 保存返回地址 提供局部变量空间 等等
C语言编译器对堆栈的使用有一套的规则 了解堆栈存在的目的和编译器对堆栈使用的规则是理 解操作系统一些关键性代码的基础
23
堆栈寄存器和堆栈操作
堆栈相关的寄存器
4
什么是Linux?
Linux是一个类Unix(Unix-like)的操作系统,在 1991年发行了它的第一个版本 在不同的语境下,“Linux”具有不同的内涵,例如:
Linux内核、Linux系统或Linux开发套件等术语。
严格来说,Linux指的是Linus Torvalds维护的(及通 过主要镜像网站发布的)内核。 GNU/Linux
主要内容
Linux简介 一些预备知识
操作系统基本概念 堆栈 内核态 vs 用户态 虚拟内存
2
关于自由软件
1984年1月, Richard Matthew Stallman启动 了GNU(GNU‘s Not Unix!)计划 ; 开始编写新的编译器,名为GCC(the GNU Compiler Collection)。
cs : eip:总是指向下一条的指令地址
顺序执行:总是指向地址连续的下一条指令 跳转/分支:执行这样的指令的时候,cs : eip的值会根 据程序需要被修改 call:将当前cs : eip的值压入栈顶,cs : eip指向被调用 函数的入口地址 ret:从栈顶弹出原来保存在这里的cs : eip的值,放入 cs : eip中
一棵是稳定树,主要用于发行 另一棵是非稳定树或称为开发树,用于产品开发和改进
Linux内核版本号由3位数字组成
r.x.y
第1位数 字r为主 版本号
第3位数字y为修改号,表示 错误修补的次数 第2位数字x为说明版本类型的次版本号,如果 x为偶数,则表示为产品化版本,为奇数时表 示为实验版本
13
6
7
1996年,美国国家标准技术局的计算机系统实 验室确认 Linux 版本 1.2.13(由 Open Linux 公 司打包)符合 POSIX 标准 Portable Operating System Interface Standard 2001年,Linux2.4版内核发布 可移植操作系统接口标准 由IEEE制订,并由ISO接受为国际标准。 2003年,Linux2.6版内核发布 Institute for Electrical and Electronic Engineers …… 电气电子工程师学会[美]
Linux操作系统
• 大连理工大学软件学院 邱铁
办公楼413 Tel:87571632 E_mail: qiutie@dlut.edu.cn
xlanchen@2007.9.11
Linux Operating Systems Analysis
1
第一章、 Linux操作系统绪论
(注:此部分为内核分析的前导)
11
还有一些其他操作系统没有的特色,比如
Linux版本
Linux的内核版本 几种流行的Linux发行版本
12
Linux的内核版本
Linux内核版本是由Linus Torvalds作为总体协调人的 Linux开发小组(分布在各个国家的近百位高手)开 发出的系统内核的版本号 Linux内核采用的是双树系统
26
call指令: 1)将下一条指令的地址A保 存在栈顶 2)设置eip指向被调用程序 代码开始处
函数堆栈框架的形成
call xxx
esp ebp
esp esp esp ebp cs : eip 低地址
执行call之前 执行call时,cs : eip原来的值 指向call下一条指令,该值被 保存到栈顶,然后cs : eip的值 指向xxx的入口地址
进入xxx
第一条指令: pushl %ebp 第二条指令: movl %esp, %ebp 函数体中的常规操作,可能会压栈、出栈 ebp movl %ebp,%esp popl %ebp ret
退出xxx
高地址
27
C语言中还使用堆栈进行
参数的传递 局部变量的使用
28
一段小程序
9
Linus是这样说的
“黑客们,不,程序员们,把在Linux和其它
开放源代码项目上的工作,放在比睡觉、锻炼
身体、娱乐和聚会更优先的地位。因为他们乐
于成为一个全球协作努力活动的一部分—
Linux是世界上最大的协作项目。”
“Microsoft isn't evil, they just make really crappy operating systems.”
3
1985年初字处理器GNU Emacs开发成功。任何人都 可以用150美元的价格获得全部程序 。 由此, Stallman设立了一个基金会:自由软件基金会(Free Software Foundation,FSF)。 Stallman于1989年与一群律师起草了广为使用的 GNU通用公共协议证书(GNU General Public License, GNU GPL)。 1991年芬兰大学生Linus Torvalds在GPL条例下发布 他自己创作的Linux操作系统内核,至此GNU计划正 式完成,操作系统被命名为GNU/Linux(或简称 Linux)。
GNU/Linux的拥护者们认为,Linux仅仅是指Linux内核,而 整个Linux系统的大部分都建立在GNU软件之上。
5
Linux发展简史
1991年11月,芬兰赫尔辛基大学的学生 Linus Torvalds写了个小程序,取名为Linux,放在互 联网上。他表达了一个愿望,希望借此搞出一 个操作系统的“内核”来,这完全是一个偶然 事件 1993,在一批高水平黑客的参与下,诞生了 Linux 1.0 版 1994年,Linux 的第一个商业发行版 Slackware 问世
几种流行 的Linux 发行版本
14
Linux系统的好处
支持多种CPU
X86, ARM, MIPS, SH, i960, PPC, etc.
开放源代码(Open source) 强大的网络功能 可移植性 使用GNU tools
15
一个新潮,非常稳定,多用户,多任务的环境 标准的平台 无法超越的计算能力,可移动性和适应性 先进的图形用户界面 几十个出色而且免费的桌面应用程序 成千上万个免费的工具和应用小程序 专业程序由全世界的无数研究人员、网络黑客编制, 覆盖了天文,信息技术,化学,物理,工程,语言, 生物等各个学科领域
20
最简单也是最复杂的操作
在控制台下输入ls命令 Shell程序分析输入参 数,确定这是ls命令 调用系统调用fork生成 一个shell本身的拷贝 调用exec系统调用将ls 的可执行文件装入内存
从系统调用返回 为什么我们敲击键盘 就会在终端上显示? 中断的概念,终端 控制台设备驱动的 概念 保护模式和实模式, 什么是系统调用? 内存保护,内核态用 户态相关问题 软中断、异常的概念。 系统调用是怎 陷阱门,系统门 么实现的?
17
一些预备知识
操作系统的基本概念
任何计算机系统都包含一个基本的程序集合, 称为操作系统。
内核(进程管理,进程调度,进程间通讯机制,内 存管理,中断异常处理,文件系统,I/O系统,网 络部分) 其他程序(例如函数库,shell程序等等)
操作系统的目的
与硬件交互,管理所有的硬件资源 为用户程序(应用程序)提供一个良好的执行环境
International Organization for Standardization 国际标准化组织 制定各行各业各种产品和服务的技术规范(国际标准)
8
Linus说,Linux所取得的许多成功其实可以归
结为他的缺点所致。“我很懒散,我喜欢授权 给其他人。”
就连Linux的企鹅形象标识也是Linus的妻子, 曾获芬兰空手道冠军的托芙(Tove)想到的, 因为李纳斯曾经在澳大利亚被一只企鹅咬过。
低地址 esp esp
esp,堆栈指针(stack pointer) ebp,基址指针(base pointer)
堆栈操作
wk.baidu.com
push 栈顶地址减少4个字节(32位) pop 栈顶地址增加4个字节
ebp 高地址
ebp在C语言中用作记录当前函数调用基址
24
利用堆栈实现函数调用和返回
其他关键寄存器
19
一个典型的Linux操作系统的结构
(the users) Shells and commands Compilers and interpreters System libraries System-call interface to the kernel Signals terminal handling 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
Linux操作系统的主要内容
Linux是免费的、源代码开放的、符合POSIX 标准规范的操作系统 拥有现代操作系统具有的所有内容,例如
抢占式多任务处理,支持多用户 内存保护, 支持SMP,支持TCP/IP, 支持绝大多数的32位和64位CPU 等 NFS,VFS,高效的EXT系列文件系统等
进程的描述, fork是什么? 进程的创建。 内存管理模块,进程的地址空间, 为什么要调用fork? 分页机制,文件系统 如何做到正确的返回? 进程的调度,运行队列 等待队列的维护 堆栈的维护,寄存 器的保存与恢复
Shell和ls都得以执行
21
一些基本但很重要的概念
堆栈 内核态 vs 用户态 虚拟内存
16
一个真正杰出的学习系统 很多顶级的系统开发平台,友好的编程语言及编程工 具都免费包含在操作系统里面 病毒入侵,计算机的“后门”,软件提供商的“特别 要求”,强迫性的软件升级,专有的文件格式,软件 使用许可证和市场策略,产品注册登记,高得惊人的 软件价格,等等 -------Linux都“没有” Linux操作系统平台保证它的“永久性” 一个技术快速更新的平台
源文件:test.c 这是一个很简单的C程序 main函数中调用了函数p1 和p2 首先使用gcc生成test.c的可 执行文件test 然后使用objdump –S获得 test的反汇编文件
29
观察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
用户应用程序
Shell,lib
System call Kernel implementation 对硬件资 源的管理
Kernel interface to the hardware Terminal controllers terminals Device controllers disks and tapes Memory controllers physical memory
建立框架
ebp esp esp 低地址
ebp
x y 调用者 堆栈 框架
拆除框架 ebp
30
高地址
观察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 0xfffffff8(%ebp) pushl 0xfffffff4(%ebp) pushl 0xfffffffc(%ebp) push $0x8048510 call 80482b0 <printf@plt> …
发生中断时怎么办?
25
//建立被调用者函数的堆栈框架 pushl %ebp movl %esp, %ebp
// 调用者 … call target …
//被调用者函数体 //do sth. … //拆除被调用者函数的堆栈框架 movl %ebp,%esp popl %ebp ret
将地址A恢复到eip中
22
堆栈
堆栈是C语言程序运行时必须的一个记录调用路径和 参数的空间
函数调用框架 传递参数 保存返回地址 提供局部变量空间 等等
C语言编译器对堆栈的使用有一套的规则 了解堆栈存在的目的和编译器对堆栈使用的规则是理 解操作系统一些关键性代码的基础
23
堆栈寄存器和堆栈操作
堆栈相关的寄存器
4
什么是Linux?
Linux是一个类Unix(Unix-like)的操作系统,在 1991年发行了它的第一个版本 在不同的语境下,“Linux”具有不同的内涵,例如:
Linux内核、Linux系统或Linux开发套件等术语。
严格来说,Linux指的是Linus Torvalds维护的(及通 过主要镜像网站发布的)内核。 GNU/Linux
主要内容
Linux简介 一些预备知识
操作系统基本概念 堆栈 内核态 vs 用户态 虚拟内存
2
关于自由软件
1984年1月, Richard Matthew Stallman启动 了GNU(GNU‘s Not Unix!)计划 ; 开始编写新的编译器,名为GCC(the GNU Compiler Collection)。
cs : eip:总是指向下一条的指令地址
顺序执行:总是指向地址连续的下一条指令 跳转/分支:执行这样的指令的时候,cs : eip的值会根 据程序需要被修改 call:将当前cs : eip的值压入栈顶,cs : eip指向被调用 函数的入口地址 ret:从栈顶弹出原来保存在这里的cs : eip的值,放入 cs : eip中
一棵是稳定树,主要用于发行 另一棵是非稳定树或称为开发树,用于产品开发和改进
Linux内核版本号由3位数字组成
r.x.y
第1位数 字r为主 版本号
第3位数字y为修改号,表示 错误修补的次数 第2位数字x为说明版本类型的次版本号,如果 x为偶数,则表示为产品化版本,为奇数时表 示为实验版本
13
6
7
1996年,美国国家标准技术局的计算机系统实 验室确认 Linux 版本 1.2.13(由 Open Linux 公 司打包)符合 POSIX 标准 Portable Operating System Interface Standard 2001年,Linux2.4版内核发布 可移植操作系统接口标准 由IEEE制订,并由ISO接受为国际标准。 2003年,Linux2.6版内核发布 Institute for Electrical and Electronic Engineers …… 电气电子工程师学会[美]
Linux操作系统
• 大连理工大学软件学院 邱铁
办公楼413 Tel:87571632 E_mail: qiutie@dlut.edu.cn
xlanchen@2007.9.11
Linux Operating Systems Analysis
1
第一章、 Linux操作系统绪论
(注:此部分为内核分析的前导)
11
还有一些其他操作系统没有的特色,比如
Linux版本
Linux的内核版本 几种流行的Linux发行版本
12
Linux的内核版本
Linux内核版本是由Linus Torvalds作为总体协调人的 Linux开发小组(分布在各个国家的近百位高手)开 发出的系统内核的版本号 Linux内核采用的是双树系统
26
call指令: 1)将下一条指令的地址A保 存在栈顶 2)设置eip指向被调用程序 代码开始处
函数堆栈框架的形成
call xxx
esp ebp
esp esp esp ebp cs : eip 低地址
执行call之前 执行call时,cs : eip原来的值 指向call下一条指令,该值被 保存到栈顶,然后cs : eip的值 指向xxx的入口地址
进入xxx
第一条指令: pushl %ebp 第二条指令: movl %esp, %ebp 函数体中的常规操作,可能会压栈、出栈 ebp movl %ebp,%esp popl %ebp ret
退出xxx
高地址
27
C语言中还使用堆栈进行
参数的传递 局部变量的使用
28
一段小程序
9
Linus是这样说的
“黑客们,不,程序员们,把在Linux和其它
开放源代码项目上的工作,放在比睡觉、锻炼
身体、娱乐和聚会更优先的地位。因为他们乐
于成为一个全球协作努力活动的一部分—
Linux是世界上最大的协作项目。”
“Microsoft isn't evil, they just make really crappy operating systems.”
3
1985年初字处理器GNU Emacs开发成功。任何人都 可以用150美元的价格获得全部程序 。 由此, Stallman设立了一个基金会:自由软件基金会(Free Software Foundation,FSF)。 Stallman于1989年与一群律师起草了广为使用的 GNU通用公共协议证书(GNU General Public License, GNU GPL)。 1991年芬兰大学生Linus Torvalds在GPL条例下发布 他自己创作的Linux操作系统内核,至此GNU计划正 式完成,操作系统被命名为GNU/Linux(或简称 Linux)。
GNU/Linux的拥护者们认为,Linux仅仅是指Linux内核,而 整个Linux系统的大部分都建立在GNU软件之上。
5
Linux发展简史
1991年11月,芬兰赫尔辛基大学的学生 Linus Torvalds写了个小程序,取名为Linux,放在互 联网上。他表达了一个愿望,希望借此搞出一 个操作系统的“内核”来,这完全是一个偶然 事件 1993,在一批高水平黑客的参与下,诞生了 Linux 1.0 版 1994年,Linux 的第一个商业发行版 Slackware 问世
几种流行 的Linux 发行版本
14
Linux系统的好处
支持多种CPU
X86, ARM, MIPS, SH, i960, PPC, etc.
开放源代码(Open source) 强大的网络功能 可移植性 使用GNU tools
15
一个新潮,非常稳定,多用户,多任务的环境 标准的平台 无法超越的计算能力,可移动性和适应性 先进的图形用户界面 几十个出色而且免费的桌面应用程序 成千上万个免费的工具和应用小程序 专业程序由全世界的无数研究人员、网络黑客编制, 覆盖了天文,信息技术,化学,物理,工程,语言, 生物等各个学科领域
20
最简单也是最复杂的操作
在控制台下输入ls命令 Shell程序分析输入参 数,确定这是ls命令 调用系统调用fork生成 一个shell本身的拷贝 调用exec系统调用将ls 的可执行文件装入内存
从系统调用返回 为什么我们敲击键盘 就会在终端上显示? 中断的概念,终端 控制台设备驱动的 概念 保护模式和实模式, 什么是系统调用? 内存保护,内核态用 户态相关问题 软中断、异常的概念。 系统调用是怎 陷阱门,系统门 么实现的?
17
一些预备知识
操作系统的基本概念
任何计算机系统都包含一个基本的程序集合, 称为操作系统。
内核(进程管理,进程调度,进程间通讯机制,内 存管理,中断异常处理,文件系统,I/O系统,网 络部分) 其他程序(例如函数库,shell程序等等)
操作系统的目的
与硬件交互,管理所有的硬件资源 为用户程序(应用程序)提供一个良好的执行环境
International Organization for Standardization 国际标准化组织 制定各行各业各种产品和服务的技术规范(国际标准)
8
Linus说,Linux所取得的许多成功其实可以归
结为他的缺点所致。“我很懒散,我喜欢授权 给其他人。”
就连Linux的企鹅形象标识也是Linus的妻子, 曾获芬兰空手道冠军的托芙(Tove)想到的, 因为李纳斯曾经在澳大利亚被一只企鹅咬过。
低地址 esp esp
esp,堆栈指针(stack pointer) ebp,基址指针(base pointer)
堆栈操作
wk.baidu.com
push 栈顶地址减少4个字节(32位) pop 栈顶地址增加4个字节
ebp 高地址
ebp在C语言中用作记录当前函数调用基址
24
利用堆栈实现函数调用和返回
其他关键寄存器
19
一个典型的Linux操作系统的结构
(the users) Shells and commands Compilers and interpreters System libraries System-call interface to the kernel Signals terminal handling 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