《操作系统实验指导-黄.doc》由会员分享,可在线阅读,更多相关《操作系统实验指导-黄.doc(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程名称:操作系统实验 课程编号:a系部信息科学与技术教师黄俊英课时2班级10级计科本1、2、3、12计科接本1、2网络工程1、2班地点嵌入式系统实验室人数20-30人课题实验一 LINUX系统安装及初级命令课型讲授课、演示课。教学媒体实物、投影、幻灯、CAI(计算机辅助教学) 教学方法讲授法、演示法、案例法教学重点安装LINUX操作系统,熟悉LINUX命令的格式,掌握一些常用的命令及如何使用帮助教学难点安装LINUX操作系统,熟悉LINUX命令的格式,掌握一些常用的命令及如何使用帮助教学目标知识掌握、理解技能能力掌握教学内容及进程进程教学内容备注教学内容讲解安装LINUX操作系统,熟悉LIN
2、UX命令的格式,掌握一些常用的命令及如何使用帮助。1.安装LINUX系统(或使用虚拟机安装)及修改密码。2.基本命令GEDIT、SU、WHOAMI、SHUTDOWN、PWD、LS、CD、TOUCH、CAT、CP、MV、GZIP、TAR、RM|、CHMOD等的使用。3.LINUX下的帮助命令MAN、HELP。4.LINXU下文本编辑器。用时20分钟操作步骤一、启动Linux系统 屏幕会显示: rootlocalhost /root # 注意超级用户的提示符是“#”,其他用户的提示符是“$”。二、退出系统 命令格式: shutdown 选项 时间 警告Linux系统对文件和目录的操作命令 命令格式
3、: ls 选项 目录或是文件 cp 选项 源文件或目录 目标文件或目录 $cp file1.txt file2.txt $cp i /usr/file3.txt /home/xh/file4.txt mv 选项 源文件或目录 目标文件或目录 $mv file1 file2 $mv file . rm 选项 文件名|目录名 $rm file1.txt $rm i* $rm rf xh mkdir 选项 dir-name $mkdir xh $mkdir p newdir/subdir $mkdir m744 dir rmdir 选项 dir-name $rmdir dir cd 路径 $cd .
4、 $cd subdir pwd $pwd cat 选项 文件列表 $cat b linuxbook.txt $cat testfile.txt $cat file1 file2 file3 find目录列表 选项grep 选项 字符串 文件列表more 选项 文件名Linux与用户有关的命令 passwd 修改用户口令 命令格式: passed 用户名 su 使用者账号 更改当前用户 df (Disk Filesystem) 检查文件系统的磁盘空间占用情况 命令格式: df 选项 who 查看当前在线上的用户情况 who ps 进程查看命令 ps 选项 $ps u $ps l $ps al $
5、ps aux cal 显示日历 cal 选项 月份 年 $cal $cal -y date 显示和设置系统日期和时间 date 选项 +显示时间格式 $date $date 70课程名称:操作系统实验 课程编号:a系部信息科学与技术教师黄俊英课时2班级10级计科本1、2、3、12计科接本1、2网络工程1、2班地点嵌入式系统实验室人数20-30人课题实验二 SHELL初步课型讲授课、演示课。教学媒体实物、投影、幻灯、CAI(计算机辅助教学) 教学方法讲授法、演示法、案例法教学重点熟悉SHELL基本操作,并使学生有机会使用LINUX中最常用的数据处理命令教学难点熟悉SHELL基本操作,并使学生有机
6、会使用LINUX中最常用的数据处理命令教学目标知识掌握、理解技能能力掌握教学内容及进程进程教学内容备注教学内容讲解熟悉SHELL的基本操作,并使学生有机会使用LINUX中最常用的数据处理命令1、使用通配符来进行文件名的查找。2、重定向标准输入、标准输出、标准错误输出。3、使用管道操作,将一个进程的输出作为别一个里程的输入。4、使用FIND 、GREP 命令在目录中,对满足条件文件名进行递归查找。5、了解VI编辑器的基本用法。6、在文本文件中,查找符合指定模式的文本行。7、显示一个文本文件的前几行或者后几行。用时20分钟Shell的基本操作 I/O重定向 commandfile 二管道pipe
7、command1| command2| command3. who | sort user_list 通配符 ls*.c ls a* ls file? ls abc ls /bin/a-d * find目录列表 选项 grep 选项 字符串 文件列表 $grep text file examplevi 的使用一、进入vi $vi myfile二、退出vi:q! 离开vi,并放弃刚才编辑的内容。:wq 存盘并退出:ZZ 存盘并退出:x 同wq:w 存盘但并不退出 :q 退出vi,若文件被修改过,则会被要求确认是否放弃修改的内容。此指令可与w 配合使用。命令模式的常用命令命令说明功能键h向左移一个
8、字符 I向右移一个字符 J向上移一个字符 k向下移一个字符 0移至该行之首 Home $移至该行之末 End 插入模式的常用命令命令命令说明 a 从光标所在位置后面开始新增文本 A 从光标所在行最后面的地方开始新增文本 i 从光标所在位置前面开始插入文本 I 从光标所在列的第一个非空白字元前面开始插入文本 o 在光标所在列下新增一行并进入输入模式 O 在光标所在列上方新增一行并进入输入模式 末行命令模式的常用命令命令 说明 :q 结束编辑 :q! 强制离开vi,放弃存盘 :w 存盘 :w filename 将编辑内容保存为名为filename的文件 :wq 存盘并退出 80课程名称:操作系统实
9、验 课程编号:a系部信息科学与技术教师黄俊英课时2班级10级计科本1、2、3、12计科接本1、2网络工程1、2班地点嵌入式系统实验室人数20-30人课题实验三 C编程与调试课型讲授课、演示课。教学媒体实物、投影、幻灯、CAI(计算机辅助教学) 教学方法讲授法、演示法、案例法教学重点熟悉C编程工具GCC、GDB、MAKE并为后续项目作准备教学难点熟悉C编程工具GCC、GDB、MAKE并为后续项目作准备教学目标知识掌握、理解技能能力掌握教学内容及进程进程教学内容备注教学内容讲解熟悉C编程工具GCC、GDB、MAKE并为后续项目作准备。1、使用VI编辑一个C文件HELLO.C,并使用GCC编译。2、
10、使用GDB对程序进行调试。3、使用MAKE进行项目文件管理。用时20分钟实验内容Linux的编译器gcc 命令格式: gcc 选项 源文件 目标文件 例:$gcc hello.c o hello1. gcc的主要选项-x language filename设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C+的后缀名是.C或者.cpp-x language filename设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C+的后缀名是.C或者.cpp-S只激活预处理和编译,就是指把文件编译成为汇编代码
11、-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面-o制定目标名称,缺省的时候,gcc 编译出来的文件是a.out2. gdb调试gdb中有关调试过程中显示数据的命令gdb中有关文件的命令gdb中有关程序运行的命令3. 用gcc编译运行一个c程序4. 用gdb进行调试5. make命令的应用无论是C、C+、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即ObjectFile,这个动作叫做编译(compile)。然后再把大量的ObjectFile合成执行文件,这个动作叫作链接(link)。make命令执行时,需要一个M
12、akefile文件,以告诉make命令需要怎么样的去编译和链接程序要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是: 1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。 2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。 3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。只要我们的Makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。M
13、akefile的规则Target:prerequisites. commandtarget也就是一个目标文件,可以是ObjectFile,也可以是执行文件prerequisites就是,要生成那个target所需要的文件或是目标。command也就是make需要执行的命令。这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile
14、中最核心的内容。因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的
15、make,VisualC+的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。一个示例 正如前面所说的,如果一个工程有3个头文件,和8个C文件,我们为了完成前面所述的那三个规则,我们的Makefile应该是下面的这个样子的。 edit:main.okbd.ocommand.odisplay.o insert.osearch.ofiles.outils.o cc-oeditmain.okbd.ocommand.odisplay.o insert.osearch.ofiles.outils.o main.o:main.cdefs.h cc-cmain
16、.c kbd.o:kbd.cdefs.hcommand.h cc-ckbd.c command.o:command.cdefs.hcommand.h cc-ccommand.c display.o:display.cdefs.hbuffer.h cc-cdisplay.c insert.o:insert.cdefs.hbuffer.h cc-cinsert.c search.o:search.cdefs.hbuffer.h cc-csearch.c files.o:files.cdefs.hbuffer.hcommand.h cc-cfiles.c utils.o:utils.cdefs.h
17、cc-cutils.c clean: rmeditmain.okbd.ocommand.odisplay.o insert.osearch.ofiles.outils.o 反斜杠()是换行符的意思。这样比较便于Makefile的易读。我们可以把这个内容保存在文件为“Makefile”或“makefile”的文件中,然后在该目录下直接输入命令“make”就可以生成执行文件edit。如果要删除执行文件和所有的中间目标文件,那么,只要简单地执行一下“makeclean”就可以了。1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 2、如果找到,它会找文件中的第一个目
18、标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。 3、如果edit文件不存在,或是edit所依赖的后面的.o文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。 4、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程) 5、当然,你的C文件和H文件是存在的啦,于是make会生成.o文件,然后再用.o文件生命make的终极任务,也就是执行文件edit了。 这就是整个make的依赖性,make会一层
19、又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。 关于程序的编译和链接 一般来说,无论是C、C+、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即ObjectFile,这个动作叫做编译(compile)。然后再把大量的ObjectFile合成执行文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C+文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于
20、一个中间目标文件(O文件或是OBJ文件)。链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(ObjectFile),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(LibraryFile),也就是.lib文件,在UNIX下,是ArchiveFile,也就是.a文件。总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。在编
21、译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成ObjectFile。而在链接程序时,链接器会在所有的ObjectFile中找寻函数的实现,如果找不到,那到就会报链接错误码(LinkerError),在VC下,这种错误一般是:Link2001错误,意思说是说,链接器未能找到函数的实现。你需要指定函数的ObjectFile. 用时80分课程名称:操作系统实验 课程编号:a系部信息科学与技术教师黄俊英课时2班级10级计科本1、2、3、12计科接本1、2网络工程1、2班地点嵌入式系统实验室人数20-30人课题实验四 进程调度算法的设计课型讲授课、
22、演示课。教学媒体实物、投影、幻灯、CAI(计算机辅助教学) 教学方法讲授法、演示法、案例法教学重点通过对进程调度算法的设计,深入理解进程调度的原理教学难点通过对进程调度算法的设计,深入理解进程调度的原理教学目标知识掌握、理解技能能力掌握教学内容及进程进程教学内容备注教学内容讲解通过对进程调度算法的设计,深入理解进程调度的原理。1、实现短进程优先调度算法。2、时间片轮转调度算法。3、基于优先级调度算法4.响应比高优先调度算法(相关原理参考教材)用时20分钟课堂小结#includeusing namespace std;#define MAX 10struct task_struct char n
23、ame10; /*进程名称*/ int number; /*进程编号*/ float come_time; /*到达时间*/ float run_begin_time; /*开始运行时间*/ float run_time; /*运行时间*/ float run_end_time; /*运行结束时间*/ int priority; /*优先级*/ int order; /*运行次序*/ int run_flag; / *调度标志*/ tasksMAX;int counter; /*实际进程个数*/int fcfs(); /*先来先服务*/int ps(); /*优先级调度*/int sjf();
24、 /*短作业优先*/int hrrn(); /*响应比高优先*/int pinput(); /*进程参数输入*/int poutput(); / *调度结果输出*/void main() int option;pinput();printf(请选择调度算法(04):n);printf(1.先来先服务n);printf(2.优先级调度n);printf(3.短作业优先n);printf(4.响应比高优先n);printf(0.退出n);scanf(%d,&option);switch (option) case 0: printf(运行结束。n); break; case 1: printf(对
25、进程按先来先服务调度。nn); fcfs(); poutput(); break;case 2: printf(对进程按优先级调度。nn); ps(); poutput(); break;case 3: printf(对进程按短作业优先调度。nn); sjf(); poutput(); break;case 4: printf(对进程按响应比高优先调度。nn); hrrn(); poutput(); break;int fcfs() /*先来先服务*/float time_temp=0;int i;int number_schedul;time_temp=e_time;for(i=0;icou
26、nter;i+) tasksi.run_begin_time=time_temp; tasksi.run_end_time=tasksi.run_begin_time+tasksi.run_time; tasksi.run_flag=1; time_temp=tasksi.run_end_time; number_schedul=i; tasksnumber_schedul.order=i+1;return 0;int ps() /*优先级调度*/float temp_time=0;int i=0,j;int number_schedul,temp_counter;int max_priori
27、ty;max_priority=tasksi.priority;j=1;while (jtasksi.priority) max_priority=tasksj.priority; i=j; j+; /*查找第一个被调度的进程*/*对第一个被调度的进程求相应的参数*/number_schedul=i;tasksnumber_schedul.run_begin_time=tasksnumber_e_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_tim
28、e;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;tasksnumber_schedul.order=1;temp_counter=1;while (temp_countercounter) max_priority=0; for(j=0;jcounter;j+) if(e_timemax_priority) max_priority=tasksj.priority; number_schedul=j; /*查找下一个被调度的进程*/ /*对找到的下一个被调度的进程求相应的参数*/ tasks
29、number_schedul.run_begin_time=temp_time; tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;temp_counter+;tasksnumber_schedul.order=temp_counter; return 0;int sjf() /*短作业优先*/float
30、temp_time=0;int i=0,j;int number_schedul,temp_counter;float run_time;run_time=tasksi.run_time;j=1;while (jcounter)&(e_time=e_time) if (tasksj.run_timetasksi.run_time) run_time=tasksj.run_time; i=j; j+; /*查找第一个被调度的进程*/*对第一个被调度的进程求相应的参数*/number_schedul=i;tasksnumber_schedul.run_begin_time=tasksnumber_
31、e_time;tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time;tasksnumber_schedul.run_flag=1;temp_time=tasksnumber_schedul.run_end_time;tasksnumber_schedul.order=1;temp_counter=1;while (temp_countercounter) for(j=0;jcounter;j+) if(e_time=temp_time)&(!tasksj.
32、run_flag) run_time=tasksj.run_time;number_schedul=j;break; for(j=0;jcounter;j+) if(e_time=temp_time)&(!tasksj.run_flag) if(tasksj.run_timerun_time) run_time=tasksj.run_time; number_schedul=j; /*查找下一个被调度的进程*/ /*对找到的下一个被调度的进程求相应的参数*/ tasksnumber_schedul.run_begin_time=temp_time; tasksnumber_schedul.ru
33、n_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time; tasksnumber_schedul.run_flag=1; temp_time=tasksnumber_schedul.run_end_time; temp_counter+; tasksnumber_schedul.order=temp_counter; return 0;int hrrn() /*响应比高优先*/ int j,number_schedul,temp_counter;float temp_time,respond_rate
34、,max_respond_rate;/*第一个进程被调度*/tasks0.run_begin_time=e_time;tasks0.run_end_time=tasks0.run_begin_time+tasks0.run_time;temp_time=tasks0.run_end_time;tasks0.run_flag=1;tasks0.order=1;temp_counter=1;/*调度其他进程*/while(temp_countercounter) max_respond_rate=0; for(j=1;jcounter;j+) if(e_timemax_respond_rate)
35、max_respond_rate=respond_rate; number_schedul=j; /*找响应比高的进程*/ tasksnumber_schedul.run_begin_time=temp_time; tasksnumber_schedul.run_end_time=tasksnumber_schedul.run_begin_time+tasksnumber_schedul.run_time; temp_time=tasksnumber_schedul.run_end_time; tasksnumber_schedul.run_flag=1; temp_counter+=1; t
36、asksnumber_schedul.order=temp_counter; return 0;int pinput() /*进程参数输入*/ int i; printf(please input the process counter:n); scanf(%d,&counter);for(i=0;icounter;i+) printf(*n); printf(please input the process of %d th :n,i+1); printf(please input the name:n); scanf(%s,tasksi.name); printf(please input the number:n); scanf(%d,&tasksi.number); printf(please input the come_time:n); scanf(%f,&e_time); printf(please input the run_time:n); scanf(%f,&tasksi.run_time); printf(please input the priority:n); scanf(%d,&tasksi.priority); tasksi.run_begin_time=0; tasksi.run_end_time=0; task