《linux考试复习-10页文档资料.doc》由会员分享,可在线阅读,更多相关《linux考试复习-10页文档资料.doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流linux考试复习【精品文档】第 10 页一、关于Bochs软件:1、Bochs软件的特点 Bochs是kevin Lawton于1994年用C+语言开发的软件系统,无论运行Bochs的主机采用何种硬件平台,Bochs都能完全仿真模拟Intel x86 CPU的微机硬件平台,这种完全仿真的方法使得我们能在Bochs下不加修改地运行大量的软件系统。Bochs开源,易移植,适合开发一些低层系统软件。2、在Bochs中运行一个OS,需要哪些资源 Bochs执行文件、BIOS映像文件、VGA BIOS映像文件、至少一个引导启动磁盘映像文件(软盘、硬盘或者CDRO
2、M的映像文件)。3、Bochs配置文件常用参数及其设置 1)megs:被模拟系统所含内存容量(默认值时32MB),例如:megs:128。2)floppya(floppyb):软驱号(floppya表示第一个软驱,floppyb表示第二个软驱),如果需要从一个软盘上来引导系统,那么floppya就需要指向一个可引导的磁盘;如果想使用磁盘映像文件,那么就在该选项后面写上磁盘映像文件名,例如: floppya:1_44=a:,status=inserted。3)ata0/ata1/ata2/ata3:启动模拟系统中最多4个ATA通道,对于每个启用的通道必须指明两个IO基地址和一个中断请求号。4)a
3、ta0-master(ata0-slave):ata0-master指明模拟系统中第一个ATA通道(0通道)上连接的第1个ATA设备(硬盘或者CDROM);ata0-slave指明模拟系统中第一个ATA通道(1通道)上连接的第2个ATA设备,例如:ata0-master:type=disk,path=hd.img, mod=flat,Cylinders=306,heads=4, spt=17, traslation=none。5)boot:定义模拟机器中用于引导启动的驱动器 ,可以知道软盘,硬盘或者CDROM和驱动器号“c”,“a”。6)cpu:定义模拟系统中仿真CPU的参数。7)log:Bo
4、chs记录执行的日志信息。4、Bochs配置文件源代码分析megs: 16 *被模拟系统的内存大小是16MB*romimage: file=$BXSHARE/BIOS-bochs-latest *所模拟的 程序*vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest *所模拟的VGA程序*floppya: 1_44=bootimage-0.12-fd, status=inserted*参数floppya指定模拟pc的软盘驱动器A:,使用1.44 MB 类型,并且设置成使用bootimage-0.12-fd软盘映像文件,状态为插入*floppyb: 1_44
5、=diska.img, status=insertedboot: a*指定启动的驱动器,这里是从A盘启动*log: bochsout.txt*Bochs记录执行的一些日志信息写在bochsout.txt中,如果Bochs中运行的系统不能正常运行就可以参考其中的信息找出基本原由*vga_update_interval: 300000panic:action=ask二、Make程序与Makefile文件1、make工具的作用自动编译所有内核代码文件,自动地决定一个含有很多源程序文件的大型程序中哪个文件需要被重新编译。2、Makefile文件中的规则1)规则含有下列形式:target(目标) : p
6、rerequisites(先决条件)command(命令) 目标通常是程序生成的一个文件的名称;先决条件是一个或多个文件名,是用作产生目标的输入条件。通常一个目标依赖几个文件。命令是make需要执行的操作。注意:每个命令之前键入一个制表符(Tab键) 2)根据目标文件的命名形式使用”cc -c”命令根据相应的.c文件更新对应的.o文件。 3、Linux/Makefile文件源代码分析ROOT_DEV=/dev/hd6第二个硬盘的第一个分区ARCHIVES=kernel/kernel.o mm/mm.o fs/fs.o为方便引用进行归档MATH=kernel/math/math.a 数学运算库文
7、件LIBS=lib/lib.a 由lib/目录中的文件所编译生成的通用库文件disk Image dd bs=8192 if=Image of=/dev/PS0 表示disk这个目标要由Image产生,dd为复制一个文件,根据选项进行转换和格式化。bs=表示一次读/写的字节数。if表示输入的文件,of表示输出的文件。/dev/PS0表示第一个软盘驱动器(设备文件)。三、Linux0.12内核体系结构1、内核源代码目录结构 2、内核编译链接结构 3、内核的编译 1)bochsrc-0.12-hd.bxrc进入以硬盘Image文件作为根文件系统的linux0.12系统。2)在/usr/src/li
8、nux目录下键入“make”命令编译linux0.12内核代码。3)生成引导启动映像文件Image4)存入硬盘映像:dd bs=8192 if=Image of=/dev/fdp5)存入软盘映像:mcopy Image bmcopy System.map b4、常用shell命令及其参数,如 dd: 用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换make: 编译所有内核代码文件mkfs: 建立一个文件系统mkdir: 创建一个目录mount: 挂载文件系统umount:卸除文件系统ll:显示文件/目录详细信息四、集成盘原理与制作1、集成盘的结构 内核引导启动盘和一个基本的根文件系统盘
9、的内容合成制作在一张盘中。该盘内核代码需要开启内存虚拟盘RAMDISK的功能,从而使得系统上的两个软盘驱动器能腾出用于加载其他文件系统盘。2、制作过程 1)重要参数的设置 在/usr/src/linux/Makefile中修改:RAMDISK=-DRAMDISK=2048ROOT_DEV=FLOPPY2)内核的编译 A)先Make clean,再Make;B)制作临时根文件系统(1)制作一张大小为1024KB的空Image文件:dd bs=1024 if=/dev/zero of=rootram.img count=1024;(2)在bochs中运行linux-0.12-devel系统,在bo
10、chs主窗口上把驱动盘分别配置成:A盘为rootimage-0.11-orign,B盘为rootram.img;(3)mkfs /dev/fd1 1024 mkdir /mnt1 mount /dev/fd0 /mntmount /dev/fd1 /mnt1(4)将rootimage-0.11-orign精简后(1024KB)拷入rootram.imgcd /mnt1for i in bin dev etc usr tmpdo cp +recursive +verbose /mnt/$i $idonesync(5)umount /dev/fd0 umount /dev/fd1;将/dev/fd
11、1中的文件系统复制到linux-0.11-devel系统中,建立一个名称为rootram-0.11的根文件系统Image文件:dd bs=1024 if=/dev/fd1 of=rootram-0.11 count=1024(C)建立集成盘:修改bochs主窗口的A盘为bootroot-0.11dd bs=8192 if=/usr/src/linux/Image(内核引导启动文件) of=/dev/fd0dd bs=1024 if=rootram-0.11(文件系统映像) of=/dev/fd0 seek=256sync;sync;sync;3)根文件系统的裁剪 保留/mnt/bin mkfs
12、,mknod,mount,sh,umount,vi/mnt/usr/bin cat,chmod,chown,cp,dd,df,ls,mkdir,mv,rm,rmdir3、集成盘的引导过程描述 若RAMDISK没有设置(即长度为0),内核会根据ROOT_DEV所设置的根文件系统所在设备号,从软盘或硬盘上加载根文件系统,执行无虚拟盘时的一般启动过程。若其已定义,引导时会检测启动盘的第256磁盘块(每个磁盘块为1KB,即2个扇区)开始处是否存在一个根文件系统。即:判断第257磁盘块中是否存在一个有效的文件系统超级块信息。如果有,就加载到RAMDISK区域,并作为根系统使用。如果没有,则内核提示插入根
13、文件系统盘;然后内核把独立盘上的根文件系统整个读入到内存的虚拟盘区域中去执行。五、内核引导启动+根文件系统1、bootsect.S程序引导过程 1)磁盘引导块程序bootsect.s驻留在磁盘第一个扇区中。 2)PC加电、ROM BIOS自检后,BIOS会把bootsect加载到内存0x7C00并执行,执行期间,再将自己移到0x90000处并执行。 3)把从磁盘第二个扇区开始的4个扇区的setup模块加载到内存紧接着bootsect处(0x90200) 4)利用BIOS中断0x13取磁盘参数表中当前启动引导盘的参数,在屏幕上显示“Loading system” 5)6)把磁盘上system模块
14、加载到内存0x10000处,确定根文件系统的设备号 7)长跳到setup程序开始处0x90200执行setup程序 2、启动引导时内核在内存中的位置 3、setup.S程序1)利用BIOS中断读取机器系统数据,并将这些数据保存到0x90000开始的位置(覆盖掉bootsect程序所在地方)2)然后将system模块整体下移到内存绝对地址0x00000处 3)加载中断描述符表寄存器idtr和全局描述符表寄存器gdtr,开启A20地址线,重设两个中断控制芯片8259A,将硬件中断号重设为0x20-0x2f4)设置CPU控制寄存器CR0,进入32位保护模式运行,并跳转到位于system模块最前面部分
15、的head.s程序4、head.s程序1)在编译生成目标文件后会与内核其他程序一起被连接成system模块,位于system模块的最前面 2)从这里开始,内核完全在保护模式下运行 3)采用AT&T汇编语言格式,使用GNU的gas和gld编译链接 六、系统调用1、应用程序、库函数和内核系统调用之间的关系 系统调用是为了方便应用使用操作系统的接口,而库函数是为了方便人们编写应用程序而引出的,系统调用可以理解为内核提供给我们在用户态用的接口函数2、创建系统调用过程 1)涉及到的文件 /usr/src/linux/kernel/sys.c /usr/src/linux/dev/unistd.h /us
16、r/src/linux/include/linux/sys.h /usr/src/linux/kernel/sys_call.s /usr/src/linux/lib2)关键代码的修改 添加系统调用功能号和原型定义在/usr/src/linux/dev/unistd.h(unix standard header)#define _NR_sethostname2 87 /添加系统调用功能号int sethostname2(char *name,int len); 新系统函数原型定义添加外部函数声明在usr/src/linux/include/linux/sys.hextern int sys_s
17、ethostname2();fn_ptr sys_call_table=,sys_sethostname2修改系统调用汇编程序修改/usr/src/linux/kernel/sys_call.s程序63行,nr_system_calls增1由82变成83增加新系统调用库函数/usr/src/linux/lib中新建文件sethostname2.c,#define _library_#include_syscall2(int,sethostname2,char*,hostname,int,len)修改/usr/src/linux/lib/Makefile在最后添加sethostname2.o七、
18、Minix文件系统1、建有Minix文件系统的360KB软盘文件系统分布图,解释说明以下概念及其数据结构 引导块 1)超级块 :用于存放盘设备上文件系统结构的信息,并说明其大小。Linux0.12中,被加载的文件系统超级块保存在超级块数组super_block中,共8项,所以最多加载8个文件系统。 2)i节点位图 a)用于说明i节点是否被使用; b)每个位代表一个i节点; c)对于1KB的盘块,可以表示8192个i节点的使用状况; d)当所有i节点都被使用时查找空闲i节点的函数会返回0值,故i节点位图第1个字节的位0和对应的i节点0都闲置不用; e)在创建文件系统时预先将i节点0对应位图中的位
19、置为1,因此第一个i节点位图块中只能表示8191个i节点的状况。 3)逻辑块位图 a)用于描述盘上每个数据盘块的使用情况。 b)除第1个位(为0)外,逻辑块位图中每个位依次代表盘上数据区中的一个逻辑块。 c)逻辑块位图最多8个缓冲块,每块1024字节,因此一个缓冲块可代表8192个盘块,8个则可表示65536个盘块。因此,MINIX文件系统1.0所支持的最大块设备容量是64MB。 4)i节点 每个文件或目录名都有一个i节点。每个i节点结构中存放着对应文件的相关信息,如文件宿主id,组id、文件长度、访问修改时间等等。 图中,命令显示的第一个字节表示所列文件的类型。“-”表示该文件是一个正规(一
20、般)文件。正规文件(“-”)是一类文件系统对其不作解释的文件,包含有任何长度的字节流。例如源程序文件、二进制执行文件,文档以及脚本文件。目录(“d”)在UNIX文件系统中也是一种文件,但文件系统管理会对其内容进行解释,以使人们可以看到有哪些文件包含在一个目录中,以及它们是如何组织在一起构成一个分层次的文件系统。3、解释ls la命令所列出的文件或目录属性代表的意思3、解释hexdump命令所显示的具体内容 执行“hexdump”命令后列出了1号i节点数据块中包含的所有目录项。每一行对应一个目录项,每行开始两字节是i节点号,随后的14字节是文件名或目录名字符串。若一个目录项中i节点号是0,则表示
21、该目录项没有被使用,或对应的文件已经被删除或者移走。其中头两个目录项(“.”和“.”)的i节点号均是1号。这是文件系统根目录结构的特殊之处,与其余子目录结构不同。八、头文件、库文件等等1、头文件的概念 1)可以看作是对内核及其函数库所提供服务的一个概要说明,是内核及其相关程序专用的头文件。主要描述内核所用到的所有数据结构、初始化数据、常数和宏定义,也包含少量的程序代码。2)Linux/include目录3)编译linux内核时无需使用开发环境提供的位于/usr/include/目录下的任何头文件(tools/build.c除外,因为这个程序虽然被包含在内核源代码树种,但它只是一个用于组合创建内
22、核映像文件的工具程序或应用程序,不会被链接到内核代码中)。2、库文件的概念 1)编译时专门供内核使用的一些内核常用函数的组合。基本都是直接调用系统中断调用实现其功能。2)编译内核阶段,Makefile中相关指令会把这些程序编译成.o模块,然后组建成lib.a库文件形式并链接到内核模块中。3、内核库文件与C标准库文件 1)两者组成原理基本一样。Linux内核中使用的函数库文件仅是一个包含足够供内核中用户级进程使用的函数的集合,而开发环境中携带的库则是一个完整的库文件。2)头文件有的是内核提供,有的是标准(库)环境提供。与内核有密切关系的(例如进程数据结构、文件系统数据结构等)肯定由内核提供,而已
23、经定为标准的信息则通常由标准库提供。4、静态链接库与动态链接库的区别 1)静态库:程序在编译时加载库文件,即静态库代码在编译时就拷贝到了程序的代码段,程序的体积会膨胀。 “以空间换时间”。2)动态库:程序在运行时加载目标代码,即程序中只保留库文件的名字和函数名,在运行时去查找库文件和函数体,程序的体积基本变化不大。 “以时间换空间”。5、Build工具的用法 Tools/build boot/bootsect boot/setup tools/system $(ROOT_DEV)Imagebuild程序使用4个参数,分别是bootsect文件名,setup文件名,system文件名和可选的根文
24、件系统设备文件名。bootsect和setup是由as86和ld86编译连接产生,它们具有MINIX执行文件格式(参见程序列表后的说明),而system模块是由源代码各个子目录中编译产生的模块链接而成,具有GNU a.out执行文件格式,build程序的主要工作就是去掉bootsect和setup的MINIX执行文件头结构信息,去掉system文件的a.out头结构信息,只保留它们的代码和数据部分,然后把它们顺序组合在一起写入名为Image的文件中。6、数学协处理器的概念1)与硬件结构关系密切,需要具有较丰富的有关Intel CPU和协处理器指令代码结构的知识。2)与内核实现关系不大。九、待定十、操作系统发展1、云计算操作系统 2、虚拟机系统 3、Android系统