Linux操作系统 第2章 预备知识.pptVIP

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux操作系统 第2章 预备知识

第2章 预备知识 本章主要内容 Linux内核源码中的C语言 Intel X86 CPU的寄存器结构 Intel X86 CPU系列的寻址方式 Linux内核源码中的汇编语言 2.1 Linux内核源码中的C语言 Linux内核的主体是以GNU的C语言编写的,GNU为此提供了编译工具gcc。 GNU对C语言(在ANSI C基础上)作了很多扩充。 gcc从C++语言中吸收了inline和const。 gcc允许在作为保留字使用的inline前后都加上_ _,因而_ _inline_ _等价于保留字inline;同样,_ _asm_ _等价于asm。 内核中的宏操作定义 例:fs/proc/kcore.c中的宏操作定义 内核中的宏操作定义 (续) (1) 能定义成如下形式吗? 内核中的宏操作定义 (续) (2) 加上{ },问题解决了吗? 内核中的队列操作 内核中大量地使用着队列和队列操作。 如果有一种数据结构foo,并且需要维持一个这种数据结构的双链队列,最简单的、也是最常用的办法就是在这个数据结构的类型定义中加入两个指针,例如: 内核中的队列操作 (续) 然后为这种数据结构写一套用于各种队列操作的子程序。由于用来维持队列的这两个指针的类型是固定的(都指向foo数据结构),这些子程序不能用于其他数据结构的队列操作。换言之,需要维持多少种数据结构的队列,就得有多少套的队列操作子程序。 对于使用队列较少的应用程序或许不是个大问题,但对于使用大量队列的内核就成问题了。 内核中的队列操作 (续) 所以,Linux内核中采用了一套通用的、可以用到各种不同数据结构的队列操作。 为此,代码作者们把指针prev和next从具体的“宿主” 数据结构中抽象出来成为一种数据结构list_head,这种数据结构既可以“寄宿”在具体的宿主数据结构内部,成为该数据结构的一个“连接件”;也可以独立存在而成为一个队列的头。 内核中的队列操作 (续) list_head数据结构类型的申明在include/linux/list.h中。 内核中的队列操作 (续) 例如:用于内存页面管理的page数据结构,其定义(见include/linux/mm.h)为: 2.2 Intel X86 CPU的寄存器结构 寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。 由于寄存器的存取速度比内存快,所以在用汇编语言编程时,要尽可能充分利用寄存器的存储功能。 X86 CPU的内部寄存器结构 X86 CPU的内部寄存器结构 (续) 1. 数据寄存器 数据寄存器包括EAX、EBX、ECX和EDX四个,它们除了可以作为一船数据寄存器用来存放和传递操作数信息或结果外,还各有一些专门的用途。 EAX(累加器):它既可以作为32位寄存器EAX,也可作为16位寄存器AX或作为8位寄存器AH和AL来使用。对于乘、除和调整指令来讲,累加器是专用寄存器。如:16位AX用于字乘法、字除法和字I/O。 EBX(基址寄存器):它可以作为32位的EBX,也可作为16位的BX或8位的BH和BL来引用,它通常用做在存储器寻址中,作基址指针来使用。 数据寄存器 ECX(计数器):它也可以看作是32位的ECX,16位的CX或8位的CH和CL。ECX和CX通常用做循环指令中的循环次数或隐含计数器。CL通常在移位指令中用来存放移位次数。CX还可作为重复串操作指令中的计数器。 EDX(数据寄存器):可被看作是32位的EDX,16位的DX或8位的DH和DL。EDX和DX常用于在乘法或除法指令和间接I/O操作中作为专用寄存器保存操作数。如在字乘法中,规定乘积的高16位存放在DX中。 通用寄存器的专门用途 2. 指针寄存器 栈顶指针寄存器ESP和基址指针寄存器EBP合称指针寄存器。 ESP是指向堆栈区的栈项指针,用来存放栈顶的偏移地址。ESP可以作为16位的SP和32位的ESP来使用。 EBP是基址指针寄存器,用于存放堆栈段中某一存储单元的偏移地址指向堆栈段的基地址,它同样也有16位和32位之分。 3. 变址寄存器 ESI和EDI均为变址寄存器,只能作为16位和32位的寄存器来使用。 ESI或SI常用于在串操作指令中对源串进行寻址。EDI或DI常用于对目的串进行寻址。 在16位串操作指令中,SI是源变址寄存器,DI是目的变址寄存器;一般是SI和DS联用、DI和ES联用,分别寻址数据段和附加段;同时,在串指令中,SI和DI都具有自加和自减的功能。 4. 指令指针寄存器和状态标志寄存器 1) 指令指针寄存器EIP 现代计算机采用“存储程序”的模式,将程序以指令的形式顺序存入存储器,然后由CPU进行取指和执行指令操作,EIP的初始值通常指向程序的第一条指令,随后每取一条指令,指令指针

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档