python环境设置及简单程序实验报告_【操作系统学习】⼀、
熟悉实验环境实验报告...
本门课的基本流程
实验的基本流程是根据实验要求编写应⽤程序、修改Linux 0.11的源代码,⽤gcc编译后,在Bochs的虚拟环境中运⾏、调试⽬标代码。
实验的基本⼯具及介绍(部分⾕歌)
X86模拟器Bochs:
Bochs是⼀个免费且开放源代码的IA-32(x86)架构PC机模拟器,注意是PC机模拟器,故他可以模拟硬件配置,同时可以模拟整个pc的I/O 设备、内存和BIOS。不光可以运⾏linux,还可以模拟运⾏DOS和各种版本的Windows等多种操作系统。
特点 :
*很⾼的可移植性:所以本门课选⽤它
*运⾏效率低于虚拟机:由其原理决定,但在本实验不会太明显。
*相⽐于虚拟机:有着强⼤的⽆法⽐拟的调试操作系统的能⼒
【注】本实验的hit-oslab已经内置了bochs
GCC编译器
编译器:
是⼀种计算机程序,它会将⽤某种编程语⾔写成的源代码(原始语⾔),转换成另⼀种编程语⾔(⽬标语⾔) ⼀个现代编译器的主要⼯作流程如下: 源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ ⽬标代码(object code)→ 链接器(Linker)→ 可执⾏⽂件(executables), 最后打包好的⽂件就可以给电脑去判读运⾏了。
本门课程采⽤的GCC编译器,GCC是和Linux⼀起成长起来的编译器。Linux最初的版本就是由GCC编译的。现在GCC也是在⾃由软件领域应⽤最⼴泛的编译器。所以,我们也选择GCC做为本书实验的指定编译器。
DB调试器
调试器的基本功能
1、控制软件运⾏
调试器的最基本功能就是将⼀个飞速运⾏的程序中断下来,并且使其按照⽤户的意愿执⾏。调试器是靠迫使⽬标程序触发⼀个精⼼构造的异常来完成这些⼯作的。
2、查看软件运⾏中信息
查看软件的当前信息,这些信息包含但不限于当前线程的寄存器信息,堆栈信息、内存信息、当前EIP附近的反汇编信息等。
3、修改软件执⾏流程
修改内存信息、反汇编信息、堆栈信息、寄存器信息等等。
中秋节简短文案GDB调试器是GCC编译器的兄弟。做为⾃由软件领域⼏乎是唯⼀的调试器,它秉承了*nix类操作系统的⼀贯风格,采⽤纯命令⾏操作,有点⼉类似dos下的debug。关于它的使⽤⽅法请看GDB使⽤⼿册。
Ubuntu (GNU/Linux)
Ubuntu(友帮拓、优般图、乌班图)是⼀个以桌⾯应⽤为主的开源GNU/Linux操作系统,Ubuntu 是基于Debian GNU/Linux,⽀持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的
主要特点是易⽤,⾮常的易⽤。
实验室的⼯作模式
hit-oslab实验环境简称oslab,是⼀个压缩⽂件()。
⾸先到压缩⽂件 并在终端转换⾄该⽂件夹 ⽤tar zxvf
命令解压即可⼯作
解压的⽬录如图:
oslab的⼯作原理
oslab⼯作在⼀个宿主操作系统之上,在这个宿主系统之上完成对Linux的开发、编译、修改之后,会在linux-0.11⽂件夹下⽣成⼀个名为Image的⽂件。(参照上图理解)这个就是编译后的⽬标⽂件。
班级德育工作计划
这个⽂件包含引导和所有内核的⼆进制代码。如果拿来⼀张软盘,从他的0磁道0扇区开始,逐字节写⼊Image的⽂件,它就可以⽤这张软盘启动⼀台真正的计算机!
oslab采⽤的是bochs模拟器来加载这个Image⽂件,模拟执⾏Linux 0.11,这样就省却了重新启动计算机的⿇烦!
解压⽂件后我们看到bochs⽬录,此⽬录就是与bochs相关的执⾏⽂件、数据⽂件和配置⽂件。使⽤run命令运⾏bochs后,会创建两个,⼀个是虚拟硬盘,⼀个是虚拟软驱A,在软驱软驱关在的是刚才说的Image⽂件,⽽在硬盘上挂载的是hdc-0.11.img。因为是从软驱A启动,所以Linux0.11会被⾃动加载,
⽽Linux 0.11会驱动硬盘,并mount硬盘上的⽂件系统,也就是将hdc-0.11.img内镜像的⽂件系统挂载到0.11系统内的根⽬录——“/”。在0.11下访问⽂件系统,访问的就是hdc-0.11.img⽂件内虚拟的⽂件系统。
hdc-0.11.img⽂件的格式是Minix⽂件系统的镜像。Linux所有版本都⽀持这种格式的⽂件系统,所以可以直接在宿主Linux上通过mount 命令访问此⽂件内的⽂件,达到宿主系统和bochs内运⾏的Linux 0.11之间交换⽂件的效果。Windows下⽬前没有(或者是还没发现)直接访问Minix⽂件系统的办法,所以要借助于fdb.img,这是⼀个1.44M软盘的镜像⽂件,内部是FAT12⽂件系统。将它挂载到bochs的
软驱B,就可以在0.11中访问它。⽽通过filedisk或者WinImage,可以在Windows下访问它内部的⽂件。
hdc-0.11.img内包含有:
Bash shell
⼀些基本的Linux命令、⼯具,⽐如cp、rm、mv、tar。
vi编辑器
gcc 1.4编译器,可⽤来编译标准C程序
as86和ld86
Linux 0.11的源代码,可在0.11下编译,然后覆盖现有的⼆进制内核
使⽤⽅法
准备活动
cd ~/oslab判断上下联的口诀
粮的组词有哪些把当前⽬录切换到oslab下,⽤pwd命令确认,⽤“ls -l”列⽬录内容。本实验的所有内容都在本⽬录或其下级⽬录内完成。
编译内核
“编译内核”⽐“编写内核”要简单得多。⾸先要进⼊linux-0.11⽬录,然后执⾏:
$ make all
因为“all”是最常⽤的参数,所以可以省略,只⽤“make”,效果⼀样。
在多处理器的系统上,可以⽤-j参数进⾏并⾏编译,加快速度。例如双CPU的系统可以:
$ make -j 2
make命令会显⽰很多很多很多的信息,你可以尽量去看懂,也可以装作没看见。只要最后⼏⾏中没有“error”就说明编译成功。最后⽣成的⽬标⽂件是⼀个软盘镜像⽂件——linux-0.11/Image。如果将此镜像⽂件写到⼀张1.44MB的软盘上,就可以启动⼀台真正的计算机。
linux-0.11⽬录下是全部的源代码,很多实验内容都是要靠修改这些代码来完成。修改后需要重新编译内核,还是执⾏命令:
$ make all
make命令会⾃动跳过未被修改的⽂件,链接时直接使⽤上次编译⽣成的⽬标⽂件,从⽽节约编译时间。但如果重新编译后,你的修改貌似没有⽣效,可以试试先“make clean”,再“make all”。“make clean”是删除上⼀次编译⽣成的所有中间⽂件和⽬标⽂件,确保是在全新的状态下编译整个⼯程。
运⾏和调试
在Bochs中运⾏最新编译好的内核很简单,在oslab⽬录下执⾏:
$ ./run
如果出现Bochs的窗⼝,⾥⾯显⽰linux的引导过程,最后停⽌在“[/usr/root/]#”,表⽰运⾏成功。
内核调试分为两种模式:汇编级调试和C语⾔级调试。
汇编级调试需要执⾏命令:
$ ./dbg-asm
可以⽤命令help来查看调试系统⽤的基本命令。更详细的信息请查阅Bochs使⽤⼿册。
C语⾔级调试稍微复杂⼀些。⾸先执⾏如下命令:
$ ./dbg-c
然后再打开⼀个终端窗⼝,进⼊oslab⽬录后,执⾏:
$ ./rungdb
新终端窗⼝中运⾏的是GDB调试器。关于gdb调试器请查阅GDB使⽤⼿册。
Ubuntu和Linux 0.11之间的⽂件交换姚笛结婚了没有
oslab下的hdc-0.11-new.img是0.11内核启动后的根⽂件系统镜像⽂件,相当于在bochs虚拟机⾥装载的硬盘。在Ubuntu上访问其内容的⽅法是(⼤家使⽤sudo时,password是shiyanlou):
1.使⽤$ sudo ./mount-hdc,将linux 0.11⽂件系统挂载到hdc⽬录下
2.hdc⽬录就是和linux 0.11内核⼀模⼀样的⽂件
周紫馨3.然后就可以直接在hdc⽬录下操作了, ⽐如可以在hdc⽬录下新建⼀个hello.c
$ sudo umount hdc
经过sudo ./mount-hdc这样处理以后,我们可以在Ubuntu的hdc⽬录下创建⼀个xxx.c⽂件,然后利⽤Ubuntu上的编辑⼯具(如gedit等)实现对xxx.c⽂件的编辑⼯作,在编辑保存以后。执⾏sudo umount hdc后,再进⼊Linux 0.11(即run启动bochs以后)就会看到这个xxx.c(即如下图所⽰),这样就避免了在Linux 0.11上进⾏编辑xxx.c的⿇烦,因为Linux 0.11作为⼀个很⼩的操作系统,其上的编辑⼯具只有vi,使⽤起来⾮常不便。
另外在Linux 0.11上产⽣的⽂件,如后⾯实验中产⽣的process.log⽂件,可以按这种⽅式”拿到“Ubuntu下⽤python程序进⾏处理,当然这个python程序在Linux 0.11上显然是不好使的,因为Linux 0.11上搭建不了python解释环境。
【注】:不要在0.11内核运⾏的时候mount镜像⽂件,否则可能会损坏⽂件系统。同理,也不要在已经mount的时候运⾏0.11内核。
【注】:在关闭Bochs之前,需要先在0.11的命令⾏运⾏“sync”,确保所有缓存数据都存盘后,再关闭Bochs。