ImageVerifierCode 换一换
格式:DOCX , 页数:59 ,大小:1,021.27KB ,
资源ID:7513477      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7513477.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux操作系统实验指导书.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Linux操作系统实验指导书.docx

1、Linux操作系统实验指导书操作系统实验指导书操作系统 1实验指导书 1目录 2实验一Linux的安装与编译 11.1 实验目的 11.2 背景知识 11.2.1 Linux简史 11.2.2 内核的功能和结构 31.2.3 内核源代码组织结构 41.2.4 内核的功能版本和发行版 61.2.5 学习Linux辅助软件介绍 61.3 实验内容 61.3.1 安装Ubuntu 61.3.2 编译Linux内核 9实验二Linux基本命令 142.1 实验目的 142.2 背景知识 142.3实验内容 14实验三 进程管理 193.1 实验目的 193.2 背景知识 193.3实验内容 193.3

2、.1进程创建 193.3.2进程控制 193.3.3参考程序 19实验四 进程通信 224.1实验目的 224.2背景知识 224.3实验内容 30实验五存储管理 385.1实验目的 385.2背景知识 385.3实验内容 38实验六文件管理 496.1实验目的 496.2背景知识 496.3实验内容 49实验一Linux的安装与编译1.1 实验目的了解Linux发展历史、功能和特点。学习和动手安装Linux操作系统。学习和动手编译Linux内核。1.2 背景知识1.2.1 Linux简史1981 年IBM 公司推出享誉全球的微型计算机IBM PC。在1981-1991 年间,MS-DOS 操

3、作系统一直是微型计算机上操作系统的主宰。此时计算机硬件价格虽然逐年下降,但软件价格仍然是居高不下。当时Apple 的MACs 操作系统可以说是性能最好的,但是其天价没人能够轻易靠近。当时的另一个计算机技术阵营是Unix 世界。但是Unix 操作系统就不仅是价格贵的问题了。为了寻求高利率,Unix 经销商将价格抬得极高,PC 小用户就根本不能靠近它。曾经一度受到Bell Labs 的许可而可以在大学中用于教学的UNIX 源代码一直被小心地守卫着不许公开。对于广大的PC 用户,软件行业的大型供应商都始终没有给出有效的解决该问题的手段。正在此时,出现了MINIX 操作系统,并有一本详细的书本描述它的

4、设计实现原理。由于AST 的书写的非常详细,并且叙述有条有理,几乎全世界的计算机爱好者都在看这本书以理解操作系统的工作原理。其中也包括Linux 系统的创始者Linus Benedict Torvalds。当时(1991 年),Linus Benedict Torvalds 是赫尔辛基大学计算机科学系的二年级学生,这个21 岁的芬兰年轻人喜欢鼓捣计算机,测试计算机的能力和限制。但当时缺乏的是一个专业级的操作系统。MINIX 虽然很好,但只是一个用于教学目的简单操作系统,而不是一个强有力的实用操作系统。GNU 计划和自由软件基金会(the Free Software Foundation FSF

5、)是由Richard M. Stallman 于1984 年一手创办的。旨在开发一个类似 Unix、并且是自由软件的完整操作系统:GNU 系统。(GNU 是GNUs NotUnix的递归缩写,它的发音为guh-NEW。)到1991 年,GNU 计划已经开发出了许多工具软件。最受期盼的Gnu C 编译器已经出现,但还没有开发出免费的GNU 操作系统。即使是MINIX 也开始有了版权,需要购买才能得到源代码。而GNU 的操作系统HURD 一直在开发之中,但并不能在几年内完成。对于Linus 来说,已经不能等待了。从1991 年4 月份起,他开始酝酿并着手编制自己的操作系统。刚开始,他的目的很简单,

6、只是为了学习Intel 386 体系结构保护模式运行方式下的编程技术。但后来Linux的发展却完全改变了初衷。1991 年初,Linux 开始在一台386sx 兼容微机上学习minix 操作系统。通过学习,他逐渐不能满足minix系统的现有性能,并开始酝酿开发一个新的免费操作系统。根据Linus 在comp.os.minix 新闻组上发布的消息,我们可以知道他逐步从学习minix 系统到开发自己的Linux 的过程。Linus 第1 次向comp.os.minix 投递消息是在1991 年3 月29 日。题目是“gcc on minix-386 doesn optimize”,是有关gcc 编

7、译器在minix-386 上运行的优化问题,由此可知,Linus 在1991 年的初期已经开始深入研究了minix 系统,并在这段时间有了改进minix 操作系统的思想,而且在进一步学习minix 系统中,逐步演变为想自己重新设计一个基于Intel 80386 体系结构的新操作系统。他在回答有人提出minix 上的一个问题时,所说的第一句话是“阅读源代码”。他认为答案就在源程序中。这也说明了对于学习系统软件来说,你不光需要懂得系统的工作基本原理,还需要结合实际系统,学习实际系统的实现方法。因为理论毕竟是理论,其中省略了许多枝节,而这些枝节问题虽然没有太多的理论含量,但却是一个系统必要的组成部分

8、,就象麻雀身上的一根羽毛。从1991 年的4 月份开始,Linus 几乎花了全部时间研究386-minix 系统(hack the kernel),并且尝试着移植GNU 的软件到该系统上(GNU gcc、bash、gdb 等)。并于4 月13 日在comp.os.minix 上发布说自己已经成功地将bash 移植到了minix 上,而且已经爱不释手、不能离开这个shell 软件了。1.2.2 内核的功能和结构Linux 内核主要由5 个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。进程调度模块用来负责控制进程对CPU 资源的使用。所采取的调度策略

9、是各进程能够公平合理地访问CPU,同时保证内核能及时地执行硬件操作。内存管理模块用于确保所有进程能够安全地共享机器主内存区,同时,内存管理模块还支持虚拟内存管理方式,使得Linux 支持进程使用比实际内存空间更多大的内存容量。并可以利用文件系统把暂时不用的内存数据块会被交换到外部存储设备上去,当需要时再交换回来。文件系统模块用于支持对外部设备的驱动和存储。虚拟文件系统模块通过向所有的外部存储设备提供一个通用的文件接口,隐藏了各种硬件设备的不同细节。从而提供并支持与其它操作系统兼容的多种文件系统格式。进程间通信模块子系统用于支持多种进程间的信息交换方式。网络接口模块提供对多种网络通信标准的访问并

10、支持许多网络硬件。这几个模块之间的依赖关系见图1.2.3 内核源代码组织结构Linux内核作为一个特殊的程序,同样需要经过编译、链接之后才能运行,仅仅是它执行时拥有特殊的权限,位于特定的空间,并且不会也不可能信赖其他的软件罢了。Linux发展至今,其内核的组织结构日渐清晰,层次日渐分明。一旦基本系统安装完毕,具有系统管理员权限的用户即可编译内核。一般来说,Linux系统内核的源码放置在/usr/src/linux目录下,它将依赖于体系结构的代码和独立于体系结构的代码分离开来(前者仅占5%,通常是一些汇编代码和局部的、针对于不同体系结构的局部处理细节,如时钟定时器频率)。为了更好地理清内核结构,

11、下面列出了几个重要的源码目录: arch目录 该目录的存放具体地依赖于体系结构实现的代码。在这个目录下,针对不同体系结构所移植的版本都有三个子目录:kernel、lib和mm。kernel子目录包含依赖于体系结构实现的一般内核功能,例如信号处理、时钟处理等。lib子目录包含库函数的本地实现,如果从依赖于体系结构的源码编译,则运行得更快。mm子目录包含存储管理实现的代码。 drivers目录 这个目录拥有50%以上的内核源码,所有的驱动程序源码均位于该目录之下。fs目录 该目录存放所有的系统支持的文件系统的实现代码。include目录 一些重要的头文件。ipc目录 处理进程间通信的全部所需的代码

12、都放在ipc目录下。init目录 该目录存放所有系统的初始化代码,许多重要的文件,例如main.c就位于该目录下。该文件还包含了许多核心代码比如实现fork()的代码和最常执行的代码cpuidle()循环。lib目录 该目录放置内核其他部分经常所需要的代码。例如,inflate.c就放在这里,它能够在引导时解压内核并装入内存,它也知道如何解压标准PKZIP 8位压缩算法。kernel目录 许多最常调用的内核函数放在该目录下。调度器fork()和timer.c就放在这里。你还能在这个目录下找到printk.c。mm目录 该目录包含所有Linux实现虚拟内存管理的源码。net目录 所有提供网络支持

13、的代码都放在这个目录下。Document目录 该目录存放了大量的内核代码相关文档,以及用户开发和维护手册。1.2.4 内核的功能版本和发行版内核版本一般地,可以从Linux内核版本号来区分系统是否是Linux稳定版还是测试版。以版本2.4.0为例,2代表主版本号,4代表次版本号,0代表改动较小的末版本号。在版本号中,序号的第二位为偶数的版本表明这是一个可以使用的稳定版本,如2.2.5,而序号的第二位为奇数的版本一般有一些新的东西加入,是个不一定很稳定的测试版本,如2.3.1。这样稳定版本来源于上一个测试版升级版本号,而一个稳定版本发展到完全成熟后就不再发展。发行版本90年代初期Linux开始出

14、现的时候,仅仅是以源代码形式出现,用户需要在其他操作系统下进行编译才能使用。后来出现了一些正式版本。目前最流行的几个正式版本有:SUSE、RedHat、Fedora、Ubuntu1.2.5 学习Linux辅助软件介绍虚拟机 Vmware,VirtualPC和Bochs等。Linux源代码阅读工具 Source Insight1.3 实验内容1.3.1 安装UbuntuUbuntu在图形界面下安装十分方便,通过个步骤完成对安装参数的配置。选择语言选择时区,设置时间选择使用键盘键盘布局进行分区设置账号确认配置1.3.2 编译Linux内核1. 下载内核源代码http:/www.kernel.org

15、/下载The latest stable version of the Linux kernel is: 2.6.25.7 ,点后面的“F” 按钮下载http:/www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.7.tar.bz2 文件。2. 在终端 su root命令切换到root权限,然后把linux-2.6.25.7.tar.bz2 文件复制到/usr/src/ 目录下。在ubuntu中不能以root身份登录界面,很奇怪3. cd 到/usr/src/ 目录下, 执行 tar -jxvf linux-2.6.25.7.tar.bz2 命令

16、解压源代码包。就会解压到/usr/src/ linux-2.6.25.7,我又把它复制到 /usr/src/ linux-2.6.25.7-widebrihgt 目录下了,/usr/src/linux-2.6.25.7-widebrihgt 挂载了一个 8G的盘。4.root用户,cd到/usr/src/ linux-2.6.25.7-widebright 目录下# make mrproper (该命令可确保源代码目录下没有不正确的.o文件,.config文件等)内核配置工具(1) make config (纯字符提示模式) (2)# make menuconfig (配置内核各选项,居于nc

17、urse 的菜单选择模式) 需要ncurse 库的支持, ubuntu中默认没有安装 需要安装一下# apt-get install libncurses5-dev(3)# make xconfig (X窗口的图形界面,配置内核各选项) xconfig基于X11, 使用qt库, 在Ubuntu中先安装qt库: # apt-get install libqt3-headers libqt3-mt-dev我是安装libncurses5-dev 之后用 menuconfig 来配置的, 都是用他默认配置,除了General setup -() Local version - append to ke

18、rnel release ()这个可以在内核版本后面加上个性字符串,我输入了widebrighgt然后选最后一条,保存配置文件就行了,他会在 /usr/src/ linux-2.6.25.7-widebright 生成 .config 文件5.编译内核只需要运行 make就行了#make执行之前可以先运行make clean 清空生成的内核文件,或者编译中间有问题了,想重新编译,可以用这个先清空已经生成的内核文件我在VirtualBox虚拟机的ubuntu8.04 系统里面执行make 命令, 结果make一次花的编译时间应该在两个小时以上。注意 /usr/src/ linux-2.6.25.

19、7-widebright的剩余空间要在2.5G以上,我一开始mount到一个2G的盘,结果编译时候提示没有空间。后来重试了几次,花了很多时间,最后mount了一个8G的盘,终于编译成功了。 看他完成后,占用的控件大概在1.8G左右。这个make相当于,手工执行了一下两步:# make bzImage # make modules (编译可加载模块)其中make bzImage 将在 /usr/src/ linux-2.6.25.7-widebrihgt/arch/i386/boot 目录下生成一个名字为bzImage的内核镜像文件。 make zImage 命令其实可以生成内核镜像的,bzIm

20、age 的区别就是它是压缩的。make modules 则是生产大量的 *.ko 内核文件,就是模块化的内核驱动等等吧,你不把它编译进去bzImage里面去的都会另外单独生成的一个ko文件了,以后需要的时候再由内核加载这个ko模块。6.安装内核(1)执行 make install 命令 运行了这一步后,提示需要在GRUB menu.lst 配置文件中把 入口 点指向 /boot/vmlinuz-2.6.25.7widebright 文件。 应该是已经把上面一步生成的bzImage复制到系统的 /boot 目录去了, ls-l看一下 /boot 目录,可以已经把vmlinuz 文件链接到 vml

21、inuz-2.6.25.7widebright 文件 System.map文件链接到 System.map-2.6.25.7widebright 文件,config 文件链接到 config-2.6.25.7widebright 文件。(2)没有看到模块的配置信息输出,所以我又执行了一下 make modules_install 命令,这个是安装模块的。这个会安装很多 ko文件,最后输出 DEPMOD 2.6.25.7widebright。不懂这个流程是什么样子的。不过在/lib/modules/ 目录下面生成了一个 2.6.25.7widebright的目录,下面 目录就是上面make mo

22、dules生成的那些ko内核模块文件。(3) 我上面的编译过程好像没有生成initrd镜像文件,不知道怎么回事,只好手工来了。什么是initrd镜像请看最后附的那篇文章生成initrd镜像文件,redhat系统下面用new-kernel-pkg 命令应该就可以了,后面那篇文章说的mkinitrd命令不知道是什么系统。 ubuntu系统下面在网上搜索了一下,应该是用 mkinittramfs 命令来生成的。运行一下 mkinitramfs -o initrd.img-2.6.25.7widebrihgt 2.6.25.7widebrihgt ,将在当前目录下生成一个名字为 initrd.img-

23、2.6.25.7widebrihgt大小7.1M左右的initrd 镜像文件。最后我把它移到 /boot/ 目录里面去。 注意:最后那个参数“2.6.25.7widebrihgt” 是version,指定 内核版本,就是/lib/modules/ 目录下相应的文件夹名字。这个一定要指定的,不然他默认使用的是正在运行的系统的版本,最后系统就不能引导成功。(4)检查一下 grub的配置文件cat /boot/grub/menu.lst , 看来make install 命令没有自动把新编译的内核的配置写到grub的配置文件里面。修改 timeout 属性 为 10,让等待的时间长一点,然后仿造原有

24、的配置新建一项放在最前面,因为一开始的default 的值设置为0的,默认是第一项。增加的内容如下title Ubuntu 8.04, kernel 2.6.25-7-widebrightroot (hd0,0)kernel /boot/vmlinuz-2.6.25.7widebright root=UUID=a082d103-894e-443a-bf58-8b128c7e5dd1 ro quiet splash locale=zh_CNinitrd /boot/initrd.img-2.6.25.7widebrightquiet注意其中的 kernel 和initrd 都指向自己的镜像文件。

25、 root的 UUID可能没个人都不一样的,可以参考GRUB的配置文件说明。做完上面步骤之后,重启系统,等到系统提示按 ESC 键的时候,可以选择和进入GRUB的菜单。可以看到自己的内核版本已经显示出来了。选择进入之后,一切正常。使用uname -a 命令查看,可以看到当前内核已经被更新了实验二Linux基本命令2.1 实验目的1 熟悉在Linux操作系统下的基本操作,对Linux操作系统有一个感性认识。 2 学会使用vi编辑器编辑简单的C语言程序,并能对其编译和调试2.2 背景知识1 参阅相关Linux的命令参考手册,熟悉Linux下的操作命令。2 C语言源程序的调试和编译知识。2.3实验内

26、容2.3.1 常用命令练习1.登录系统:login 用户名称2.注销(退出)系统:logout 3.关机命令:shutdown now4.使用man命令帮助,例如:man ls(屏幕显示关于ls命令的帮助信息)5.ls(显示目录内容)格式:ls 选项 目录或是文件其中:-a 显示指定目录下所有子目录和文件,包括隐藏文件 -l 以长格式来显示文件的详细信息。 -R 递归地显示指定目录的各个子目录中的文件例如:使用ls 查看当前目录内容: $ ls使用ls 查看指定目录内容: $ ls /etc 使用ls al 查看当前目录内容: $ls -al使用dir 查看当前目录内容: $dir6.cd (

27、改变工作目录)格式: cd 路径名称如:cd . 回到上层目录 ;cd / 回到根目录7.pwd (显示当前工作目录的绝对路径)格式: pwd 8.mkdir (创建目录)格式:mkdir 目录名称 例如: mkdir /home/s2001/newdir 9.rmdir (删除空目录)格式:rmdir 选项 目录名称10.cp (文件或目录的复制) 格式:cp 选项 源文件或目录 目标文件或目录例如: cp 文件名1 文件名211.mv (文件或目录更名或将文件由一个目录移到另一个目录中)格式:mv 选项 源文件或目录 目标文件或目录12.rm (删除文件或目录) 格式:rm 选项 文件名|

28、目录名13.cat (显示文件)格式:cat 选项 文件列表例如:cat 文件名 cat命令也可用来建立新文件:cat 文件名,ctrl+d结束输入(2)vi编辑器的使用 vi 提供二种工作模式:输入模式 (insert mode)和命令模式 (command mode)。 使用者进入 vi 后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作。要输入信息,应转换到输入模式。 (a)命令模式 在输入模式下,按 ESC 可切换到命令模式。命令模式下,可选用下列指令离开 vi:q! 离开 vi,并放弃刚在缓冲区内编辑的内容 :wq 将缓冲区内的资料写入磁盘中,并离开

29、vi :ZZ 同 wq :x 同 wq :w 将缓冲区内的资料写入磁盘中,但并不离开 vi :q 离开 vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用。 (b)输入模式在命令模式下,按i或a,进入输入模式,此时可以编辑文件内容。(3)gcc的使用gcc由GNU之父Stallman所开发的linux下的编译器,全称为GNU Compiler Collection。在linux下可以直接编译c语言源程序,可生成可执行文件。例如:gcc hello.c 编译hello.c源文件,若通过,会自动生成名称为a.out可执行文件。例如:gcc hello.c o hello

30、.exe 编译hello.c源文件,若通过,会生成hello.exe可执行文件。2.3.2使用vi编辑c语言源文件(1)进入linux的文本模式之后,在命令行键入vi filename.c 然后回车。下面作一些简单的解释:首先vi命令是打开vi编辑器。后面的filename.c是用户即将编辑的c文件名字,注意扩展名字是.c;当然,vi编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也可以直接用vi打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。(2)最基本的命令i :当进入刚打开的文件时,不能写入信息,这时按一下键盘上的I键(insert),

31、插入的意思,就可以进入编辑模式了。如下图所示:(3)a与i是相同的用法(4)当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一下键盘上的Esc 键;2)键入冒号(:),紧跟在冒号后面是wq(意思是保存并退出)。如果不想保存退出,则在第二步键入冒号之后,键入q(不带w,不保存退出)。如下图所示:(5)退出vi编辑器的编辑模式之后,要对刚才编写的程序进行编译。编译的命令是:gcc filename.c -o outputfilename,其中gcc是c的编译器。参数:filename.c 是刚才编辑的c 源文件(当然也可以是以前编写好的c文件);后面中括号里面的参数是可选的,它是一个输出文件。如果不选,默认的输出文件是a.out ,选了之后输出文件就是outputfilename.out(6)最后一步是运行程序,方法如下:./ outputfilename.out3.参考c语言

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1