《操作系统》基本课程实验指导书Word文档格式.docx

上传人:b****6 文档编号:21783208 上传时间:2023-02-01 格式:DOCX 页数:64 大小:115.04KB
下载 相关 举报
《操作系统》基本课程实验指导书Word文档格式.docx_第1页
第1页 / 共64页
《操作系统》基本课程实验指导书Word文档格式.docx_第2页
第2页 / 共64页
《操作系统》基本课程实验指导书Word文档格式.docx_第3页
第3页 / 共64页
《操作系统》基本课程实验指导书Word文档格式.docx_第4页
第4页 / 共64页
《操作系统》基本课程实验指导书Word文档格式.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

《操作系统》基本课程实验指导书Word文档格式.docx

《《操作系统》基本课程实验指导书Word文档格式.docx》由会员分享,可在线阅读,更多相关《《操作系统》基本课程实验指导书Word文档格式.docx(64页珍藏版)》请在冰豆网上搜索。

《操作系统》基本课程实验指导书Word文档格式.docx

4、实验步骤23

3.4实验2.4系统调用25

1、实验目的25

2、实验内容与步骤26

4进程管理实验27

4.1实验3.1进程行为观察27

1、实验目的27

2、实验内容28

4.2实验3.2代码分析28

1、实验目的28

4.3实验3.3Shell编程28

2、实验内容128

3、实验内容230

5.存储管理实验32

5.1实验4.1观察实验32

1、实验目的32

2、实验内容32

5.2实验4.2存储管理代码分析33

1、实验目的33

2、实验内容33

3、示例—缺页中断处理程序分析33

5.3实验4.3虚拟存储器管理35

1、实验目的35

2、实验内容35

3、实验原理35

4、试验步骤36

5、源程序代码清单(参考)36

6.进程通信39

6.1实验5.1观察实验39

1、实验目的与内容39

2、实验原理39

6.2实验5.2代码分析39

1、实验目的39

2、实验内容40

3、实验结果示例40

6.3实验5.3进程同步实验42

1、实验目的42

2、实验内容42

3、实验原理42

4、实验步骤及部分代码清单(参考)43

7I/O设备管理实验46

7.1实验6.1.观察实验46

1、实验目的46

2、实验内容46

3、实验结果示例46

7.2实验6.2代码分析47

7.3实验6.3编程实验47

1、实验目的47

2、实验原理47

3、程序源代码清单(参考)47

7.4实验6.4设备驱动程序48

1、实验目的48

2、实验内容48

8.文件系统管理实验49

8.1实验7.1代码分析49

1、实验目的49

2、实验内容49

3、分析报告示例49

8.2实验7.2编程实验151

1、实验目的与内容51

2、程序源代码清单(参考)51

8.3实验7.3编程实验252

1、实验目的与内容52

2、程序源代码清单(参考)53

1.实验大纲

1.1实验目的

在学习《操作系统》课程内容同时,以开放式源代码操作系统Linux为实验平台,同步完成Linux操作系统内核的代码分析和修改等7组基本课程实验。

通过实验,熟悉Linux系统使用方法,掌握Linux内核系统结构,了解Linux进程管理、存储管理、设备管理、文件系统等资源管理功能的实现机理和典型算法。

初步掌握运用内核开发环境对内核进行修改完善的能力。

通过本课程实验,使得学生熟悉Linux操作系统相关技术,并进一步巩固课堂所学有关操作系统人机界面和资源管理得相关知识;

并通过Linux源代码分析和简单编程,培养学生对实际操作系统的基本系统分析能力。

1.2实验内容说明

Linux基本实验由以下7组实验组成。

1.2.1第1组系统安装实验

实验1.1Linux系统安装

从CD-ROM安装RedHatLinux操作系统,如RedHatLinux7.2,建立后续各个实验的运行环境。

实验1.2虚拟机安装

在配备Windows操作系统Host机上,安装虚拟机软件VirtualPCforWindows或VMwareForWindows,进行BIOS设定,对硬盘进行分区和格式化,安装Linux操作系统,以便在一台机器上模拟出多种操作系统运行环境。

实验1.3Shell编程

编制简单的Shell程序,该程序在用户登录时自动执行,显示某些提示信息,如“WelcometoLinux”,并在命令提示符中包含当前时间、当前目录和当前用户名等基本信息。

1.2.2第2组Linux内核实验

实验2.1观察Linux行为

学习linux内核、进程、存储和其他资源的一些重要特性。

通过使用/proc文件系统接口,编写一个程序检查反映机器平衡负载、进程资源利用率方面的各种内核值,学会使用/proc文件系统这种内核状态检查机制。

实验2.2内核定时器

学习掌握内核定时器的实现原理和方法,建立一种用户空间机制来测量多线程程序的执行时间。

实验2.3内核模块

模块是Linux系统的的一种特有机制,可用于动态扩展操作系统内核功能。

编写实现某些特定功能的模块,将其作为内核的一部分在管态下运行。

例如,通过内核模块编程在/porc文件系统中实现系统时钟的读操作接口。

实验2.4系统调用

向现有Linux内核加入一个新的系统调用从而在内核空间中实现对用户空间的读写。

例如,设计并实现一个新的内核函数mycall(),此函数通过一个引用参数的调用返回当前系统时间,功能上基本与gettimeofday()相同。

1.2.3第3组进程管理

实验3.1进程行为观察

1.在Linux下,分别用snice、skill、top等命令和/proc中的有关目录、文件观察系统中进程运行情况和CPU工作情况。

2.在Linux下,用ptrace()、gdb跟踪一个进程的运行情况,用strace工具跟踪fork()过程,用ltrace工具跟踪execl()过程。

观察并分析跟踪信息。

实验3.2代码分析

阅读分析Linux中的进程建立模块、进程撤销模块、进程调度模块、系统调用总入口模块,了解进程的创建、执行、等待、退出等过程。

实验3.3Shell编程

1.以超级用户身份编程,计算某一时段中所有程序平均运行时间。

2.通过编写shell程序,了解子进程的创建和父进程与子进程间的协同,获得多进程程序的编程经验。

1.2.4第4组存储管理

实验4.1观察实验

1.在Linux下,使用gdb程序观察一个程序文件的内容和结构。

启动该程序执行,再用GDB观察其内存映象的内容和结构。

2.在Linux下,用free和vmstat命令观察内存使用情况。

3.在Linux下,查看/proc与内存管理相关的文件,并解释显示结果。

4.在Linux下,用malloc()函数实现cat或copy命令。

实验4.2代码分析

阅读Linux/Minix中以下模块的调用主线,并写出分析报告

●exec系统调用的内部实现模块调用主线

●malloc函数的内部实现模块调用主线

●缺页中断处理程序

实验4.3虚拟存储器管理

学习Linux虚拟存储实现机制;

编写代码,测试虚拟存储系统的缺页错误(缺页中断)发生频率。

1.2.5第5组进程通信

实验5.1观察实验

在Linux下,用ipcs()命令观察进程通信情况。

实验5.2代码分析

阅读Linux/Minix中以下模块的调用主线,并写出分析报告。

(1)kill系统调用内部实现模块调用主线。

(2)pipe系统调用内部实现模块调用主线。

实验5.3进程同步实验

在学习linux内核的同步机制基础上,深入分析各种同步机制的实现方案,设计和编写一套同步原语。

1.2.6第6组I/O设备管理

实验6.1.观察实验

1.stat命令查看机器上硬盘特别文件的I节点内容。

2.在Linux下,查看/proc与内存管理相关的文件,解释显示结果。

实验6.2代码分析

阅读Linux/Minix中以下模块的调用主线

(1)print函数内部实现模块调用主线。

(2)scan函数内部实现模块调用主线。

写出分析报告。

实验6.3编程实验

编写一个daemon进程,该进程定时执行ps命令,然后将该命令的输出写至文件F1尾部。

实验6.4设备驱动程序

了解Linux的设备驱动程序的组织结构和设备管理机制,编写简单的字符设备和块设备驱动程序。

1.2.7第7组文件系统管理

实验7.1代码分析

阅读Linux/Minix中有关文件模块的调用主线,并写出分析报告,包括

●文件建立模块,即系统调用create()

●文件删除模块,即系统调用rm()

●读/写模块,即read/write

实验7.2编程实验1

在Linux环境下,编写Shell程序,计算磁盘上所有目录下平均文件个数、所有目录平均深度、所有文件名平均长度

实验7.3编程实验2

在Linux环境下,编写一个利用Linux系统调用删除文件的程序,加深对文件系统和文件操作的理解。

1.3实验要求

●学生以小组为单位,每组人数不超过2人。

●以上7组实验中,每组至少完成1个实验,完成的实验总数不少于8个,其中编程实验不少于4。

●“实验1.2虚拟机VM软件安装”“实验2.3内核模块”、“实验2.4系统调用”、为必做实验。

●实验完成后提交课程实验报告文档,并验收程序代码和上机演示。

●课程实验报告要求

对于编程实验,报告应包括:

题目,实验目的、实验内容、实验设计原理、实验步骤、实验结果及分析和人员任务分配等。

2.系统安装实验

2.1实验1.1Linux系统安装

1、实验目的

从CD-ROM安装RedHatLinux操作系统,如RedHatLinux7.2,建立后续各个实验的运行环境。

2、实验内容(以RedHatLinux7.2为例)

RedHatLinux7.2安装光盘共有两张,第一张可直接从光盘启动,包含大部分的软件包和一些安装工具。

第二张光盘包含许多附加软件包。

以下为安装过程和注意事项。

(1)启动安装程序。

用Linux的第一张光盘,从光驱引导启动程序,进入启动界面,显示提示符”boot:

”,选择图形模式进行安装。

(2)选择安装界面的使用语言

(3)选择默认的键盘设置

(4)选择默认的鼠标设置

(5)选择安装类型。

RedHatLinux提供了个人桌面、工作站、服务器和定制等多种安装类型。

本实验选择个人桌面或定制方式。

(6)进行硬盘分区。

RedHatLinux采用了“装载”的处理方式,将1个分区和1个目录联系起来,每个分区都是整个文件系统的一部分。

Linux最少需要2个分区:

Linuxnative(文件)分区、LinuxSwap(交换)分区。

前者用于存放Linux系统文件,只能用EXT2分区类型,在分区时应将载入点设置为“/”目录;

后者用作交换空间,将主存内暂时不用的数据缓存起来。

建议采用如下分区方案

●SWAP分区

SWAP分区大小至少等于实际系统内存容量,一般可取为内存的2倍。

●/boot分区

包含操作系统内核和启动时所用文件。

建立单独的/boot分区后,即使主要根分区出了问题,系统仍然能够启动。

此分区大小约在50MB-100MB之间

●/分区

根目录挂载位置。

系统运行所需要的其它文件都在该分区,大小约在1.7GB到5GB之间

初次安装系统时,最好选择自动安装方式。

如果安装者对系统比较熟悉,可以用系统配置的营盘管理工具DiskDruid来订制所需分区。

(7)将文件系统设置为EXT2

(8)配置引导装载程序。

选择LILO作为引导安装程序。

LILO可以安装在第一硬盘的主引导区(MBR)或Linux分区的引导扇区。

如果使用LILO来做双启动,须选择前者;

如果用Linux启动软盘或其它系统引导器引导Linux,选择后者,即将LILO安装在Linux分区的引导扇区。

(9)网络和防火墙配置

(10)选择默认的语言及其他语言支持

(11)时区配置

(12)设置root配置

(13)选择软件包组

(14)筹建引导盘

(15)配置显卡

(16)进行安装

2.2实验1.2虚拟机VM软件安装

在配备Windows操作系统Host机上,安装虚拟机软件VirtualPCforWindows或VMwareForWindows,进行BIOS设定,对硬盘进行分区和格式化,安装Linux操作系统,以便在一台机器上模拟出多种操作系统运行环境。

通过本实验,进一步掌握课堂上所讲的虚拟机的概念。

2、实验内容

实验前的准备:

1、获取安装介质

2、熟悉虚拟机的操作

安装步骤(以Vmware为例):

1、虚拟机软件的安装及设置

(1)、安装VMware,输入虚拟机序列号

(2)、创建一个新的虚拟机。

 

第一步:

“File”->

“NewVirtualMachine”->

“Custom”->

“Next”->

操作系统那栏选Linux->

“Next”。

第二步:

设置虚拟机名以及配置文件->

第三步:

设置虚拟机的内存大小。

第四步:

网络连接,使用默认设置->

第五步:

磁盘设定,如果你不是想让红旗Linux桌面4.0终生运行在虚拟机里,请选“Useaphysicaldisk”,让虚拟机与当前系统共用同一硬盘,而不是虚拟出一个硬盘。

有一定风险,但是只要不胡乱操作,风险不大->

第六步:

指定要使用的硬盘->

“Next”,设置配置文件的位置->

“Finish”,忽略那个风险提示。

(3)、光驱软驱默认情况下也是和当前系统共用的,使用iso文件引导虚拟机,则“Editvirtualmachinesettings”,在左侧列表中选“DVD/CD-ROM”那项,再在右侧选“UseISOimage:

”,指定安装红旗Linux桌面4.1的iso文件。

(4)、虚拟机默认不是从光盘引导的,要在它的BIOS里改,得先“Startthisvirtualmachine”。

如果出现“Donotforgetto...”的提示框,直接点“OK”。

待VMware窗口中一大块变黑的时候,赶快用鼠标点那块黑,那块黑是虚拟机的屏幕。

现在你的鼠标和键盘就转为控制虚拟机了。

注意虚拟机屏幕下方的进度条,在走完之前,按“F2”键进行BIOSs设定。

(5)、用键盘的左右箭头键选中“Boot”标签,用上下箭头键选中“CD-ROM”。

同时用“Shift”键和“+”键,把“CD-ROM”拎到顶上。

用键盘的左右箭头键选中“Exit”标签,用上下箭头键选中“ExitSavingChanges”,回车->

“YES”,等待虚拟机重新启动。

同时按“Ctrl”和“Alt”键,鼠标和键盘就从虚拟机中解脱出来了。

看到进度条的时候按VMware窗口左上方的红方块,停掉虚拟机。

2.3实验1.3Shell编程

1、实验目的与内容

通过本实验,了解Linux系统的shell机制,掌握简单的shell编程技巧。

编制简单的Shell程序,该程序在用户登录时自动执行,显示某些提示信息,如“WelcometoLinux”,并在命令提示符中包含当前时间、当前目录和当前用户名等基本信息。

2、程序源代码清单(参考)

#include<

stdio.h>

sys/wait.h>

intmain(){

printf("

HelloLinux\n"

);

intpid;

intstate;

intpfd[2];

pipe(pfd);

if(fork()==0){

printf("

Inthegrepprogress\n"

dup2(pfd[0],0);

close(pfd[0]);

close(pfd[1]);

execlp("

grep"

"

sh"

0);

perror("

exelpgreperror"

}

esleif(fork()==0){

Inthepsprogress\n"

dup2(pfd[1],1);

ps"

-ef"

execlpps-ef"

close(pfd[1]);

close(pfd[0]);

wait(&

state);

}

3.Linux内核实验

3.1实验2.1观察Linux行为

学习linux内核、进程、存储和其他资源的一些重要特性。

编写一个默认版本的程序通过检查内核状态报告Linux内核行为。

程序应该在stdout上打印以下值:

1,CPU类型和型号;

2,所使用的Linux内核版本;

3,从系统最后一次启动以来已经经历了多长时间(天,小时和分钟);

4,总共有多少CPU时间执行在用户态,系统态,空闲态;

5,配置内存数量;

当前可用内存数,磁盘读写请求数;

6,内核上下文转换数;

7,系统启动到目前创建了多少进程。

设计思路:

首先得到命令行,再解释命令行,然后到/proc查找文件,最后执行命令。

3、程序源代码清单(参考)

#include<

sys/time.h>

intmain(intargc,char*argv[])

{

charrepTypeName[16];

charc1,c2,ch;

intinterval,duration;

char*lineBuf;

intLB_SIZE;

FILE*thisProcFile;

char*now;

intiteration;

//决定报告类型

strcpy(repTypeName,"

Standard"

if(argc<

1)

{

sscanf(argv[1],"

%c%c"

&

c1,&

c2);

if(c1!

='

-'

fprintf(stderr,"

usage:

ksamp[-s][-1intdur]\n"

exit

(1);

if(c2=='

s'

Short"

}

if(c2=="

1"

Long"

interval=atoi(argv[2]);

duration=atoi(argv[3]);

//得到当前时间

/*gettimeofday(&

now,NULL);

*/

Statusreporttype%sat%s\n"

repTypeName,ctime(&

(now)));

thisProcFile=fopen("

/proc/sys/kernel/hostname"

r"

//打开文件

fgets(lineBuf,LB_SIZE+1,thisProcFile);

//读取文件

Machinehostname:

%s"

lineBuf);

//打印文件

fclose(thisProcFile);

//关闭文件

//内核版本

/proc/version"

fgets(lineBuf,LB_SIZE+1,thisProcFile);

TheVersion:

%s\n"

//CPU类型和型号

/proc/cpuinfo"

TheCPU:

//当前时间

/proc/uptime"

TheRunningTime:

//内存情况

\bTheMemInfo:

\n"

/proc/meminfo"

while(!

feof(thisProcFile)){

putchar(fgetc(thisProcFile));

//当前状态

\bTheStatus:

/proc/stat"

iteration=0;

interval=2;

duration=60;

while(iteration<

duration)

sleep(interval);

/proc/loadavg"

iteration+=interval;

return(0);

3.2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

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

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