版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《
操作系统》课程实验指导书一.实验总学时(课外学时/课内学时):4/8总学分:8/44 必开实验个数:4选开实验个数:0二.适用专业:网络工程、计算机科学与技术2007级三.考核方式及办法:在规定实验时间内完成实验要求,依据实验过程及实验结果在实验现场逐一检查考核。四.配套的实验教材或指导书:自编实验指导书五.实验项目:实验1 SHELL命令的使用1、实验目的通过对LINUX的系统启动、注销、关闭和关机,帐号管理,文件系统的日常管理,文件系统的权限控制等常用基本命令的使用及与Windows下DOSSHELL的比较,了解现代操作系统SHELL的特点和功能。了解编辑器vi的使用方法。2、实验工具及环境LINUX系统网络环境或单机,Windows系统网络环境或单机。3、实验计划学时2学时上机实际操作。4、实验内容及操作步骤⑴系统启动和关闭使用自己的账户登录UNIX系统,查看系统提示符确定自己使用的shell程序类型别。◎开机后,系统自检启动后提示login:(输入:root↙)password:(输入:用户口令↙,root用户为redhat)查看/etc/passwd文件可以获得用户使用的shell#grep$LOGNAME/etc/passwd↙可能的显示为:user001:*:200:50::/usr/user001:/bin/sh请思考上述命令怎样得到了当前使用的shell类型的?使用下面的命令也可以查看当前shell:#echo$SHELL注销和关机命令。用户注销使用:$exit↙或$<ctrl>+<D>↙或$logout↙超级用户关机使用:#shutdown↙该命令将结束所有的进程,当执行此命令后系统提示“SafetoPowerofforPressAnyKeytoReboot”时可以关闭电源或按任一键重启系统。◎haltsys(halt),reboot只能由超级用户在单用户模式下使用。⑵帐号管理添加用户,删除用户,修改个人口令后重新进行登录;添加用户的shell命令:#useradduser08↙(Linux系统中可以为adduser)上述命令采用默认属性,UNIX也可以使用选项来指定创建帐户的属性:-ccomment用户说明-ddirectory指定用户主目录-m若用户的起始目录不存在则创建-ggroup指定用户所属组-sshell指定用户使用的shell-uuid为用户分配标识修改口令对linux系统而言,用adduser增加的用户应该随即用passwd命令来修改口令。#passwduser08↙newpassword:(输入口令,屏幕不回显)↙newpassword(again):(再次输入口令)↙删除用户的shell命令userdel命令用来删除已经存在的用户及相关的文档,其命令格式如下:#userdel〔选项〕用户名userdel命令的常用选项:-r将用户目录下的文档一并删除。在其他位置上的文档也将一一找出并删除。Userdel不允许移除正在线上的用户帐号,因此,如果想删除这类用户帐号,必须先杀掉用户在系统上运行的程序才能进行帐号删除。组的添加、删除管理;组信息保存在/etc/group文件中,文件记录格式为:userg1::21:user01,user02,user08其中:userg1为组名,组ID号为21,组成员有user01,user02,user08。添加用户组可以直接编辑/etc/group文件来创建一个新组。用who命令查看当前登录在系统中的用户列表、用户总数、系统启动时间等信息;#who-H↙查看当前用户的标识符及当前进程的状态;#ps–lf|pg↙观察上述命令的输出。用cal命令查看自己的生日是星期几。如:#cal91983↙根据显示可以得到答案。⑶文件系统的日常管理文件的显示、复制、移动和删除;#cat/etc/passwd↙#cat>filea↙#cat>>filea↙#more/etc/filea↙#pg/etc/filea↙cpfileafileb↙mvfilea/fileb↙rm/fileb↙目录的建立、删除、显示、改变和复制#mkdirdira↙#lsdira↙#mkdir–pdirb/dirc↙#cp–rdirbdira↙ls–Rdira↙#rmdir–pdira↙UNIX系统访问DOS或Windows下文件(FAT),完成读DOS格式的软盘文件或DOS格式的硬盘文件的过程。mount和umount命令。◎以超级用户登录,使用mkdir命令为DOS硬盘创建一个挂载点;#mkdir/mnt/zipdos↙◎用mount命令指定文件系统的类型、设备名称及挂载点:#mount-tmsdos/dev/hdal/mnt/zipdos↙◎挂载完成后可以使用df命令查阅设备挂载的情况;完成挂载后,可以在Linux系统下查阅到DOS目录下的文件内容。#cd/nt/zipdos↙#ls使用完后使用umount命令进行卸载:#umount/mnt/zipdos↙完成这些操作后,在根目录下除了包含有Linux系统中典型文件系统的内容外,还增加了一个/mnt/zipdos子目录。此目录是将DOS分区中的C盘挂在了Linux系统的根目录下,安装完成后普通用户就可以对其中的文件直接进行访问。在LINUX系统下挂载U盘插入U盘通常使用mount/dev/sda1/usb即可如果不行,输入fdisk-l/dev/sda查看输出结果,在输出信息中查看系统中U盘的Device名称,将前面命令中的sda1改命重新挂载即可。如果U盘是fat16就使用下面的命令选项-tmsdos;如果是fat32则为-tvfat。⑷文件系统的权限控制文件权限的表示#ls–l/etc|more↙#ls–l/dev|more↙chmod、chown、chgrp和umask命令;#ls–lfilea#chmod640filea↙#chownuser08fi1ea↙#chgrpuserg1fi1ea↙#umask↙/*不带参数的umask显示系统的设置情况*/#mkdirdirx↙#ls–ldirx↙/*查看新建的目录权限*/#umask027↙#mkdirdiry↙#ls–ldiry↙比较有什么不同。(5)在Windows下启动DOSSHELL,即输入CMD运行,对照在Linux下的文件管理操作,完成相应的操作后记录实验结果。(6)使用vi编辑一些文本文件,熟悉vi中的操作命令、工作模式切换及功能键的使用。掌握vi的启动、模式转换、文件的保存、退出操作。#vi↙或#vitext1↙输入”a,i”进入插入编辑方式输入文本后,按“ESC”退回到命令行方式。输入“:”进入末行命令方式,再键入“w”,“q”或“wq”存盘或退出。5、实验报告要求认真书写实验报告,报告的内容包括:实验目的、实验内容、实验步骤、实验结果等。思考问题:你觉得LinuxSHELL的命令使用方式与Windows或DOS比较,有何不同?实验二进程管理综合实验1、实验目的熟悉在C语言源程序中使用LIUNX所提供的系统调用的方法;掌握LINUX中子进程的创建方法以及调度执行情况,理解进程与程序的区别;掌握LINUX系统中vi编辑器和gcc编译器的用法;掌握Linux信号量的使用方法和P、V操作函数的定义,掌握使用P、V操作实现进程间的互斥的方法;进一步理解进程同步和互斥的概念;掌握fork()配合exec()使用创建进程的方法,熟悉进程的睡眠、同步、撤消等进程控制方法。通过实验建立起较为完整的进程并发、同步和互斥的概念,对LINUX下进程相关的系统调用有初步的掌握。2、实验工具及环境LINUX系统网络环境或单机,gcc编译器。3、实验计划学时4学时上机实际操作。4、实验内容1)GNUC编译器(1)Linux的基本c开发环境由以下几部分组成:c程序库glibc,c编译器gcc或cc,系统头文件glibc_header,库文件、包含文件和生成的可执行文件存放在/usr/lib目录下。编译连接可用以下的命令进行,假定源程序有两个文件分别是f1.c,f2.c,生成的可执行文件名为hello.exe,缺省目标名称的时候,gcc编译出来的文件是a.out,用“-o”选项可以指定输出文件名,例:#gcc-ohello.exefi.cf2.c更详尽的用法请参考联机帮助。GCC也可以指定编译器处理步骤。-c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接步骤。这个选项使用得非常频繁因为它编译多个C程序时速度更快且更易于管理。默认时GCC建立的目标代码文件有一个.o的扩展名。执行程序格式:./可执行文件名例:./hello.exe(2)gdb调试工具LINUX包含了一个叫gdb的GNU调试程序,能在程序运行时观察程序的内部结构和内存的使用情况。它具有以下一些功能:·监视程序中变量的值;·设置断点以使程序在指定的代码行上停止执行;·一行行的执行代码。以下是利用gdb进行调试的步骤:必须使程序在编译时包含调试信息。调试信息里包含程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb利用这些信息使源代码和机器码相关联。在编译时用–g选项打开调试选项。gdb基本命令命令描述file装入欲调试的可执行文件kill终止正在调试的程序list列出产生执行文件的源代码部分next执行一行源代码但不进入函数内部step执行一行源代码并进入函数内部run执行当前被调试的程序quit终止gdbwatch监视一个变量的值而不管它何时被改变break在代码里设置断点,使程序执行到这里时被挂起make不退出gdb就可以重新产生可执行文件shell不离开gdb就执行UNIXshell命令应用举例设有一源程序greet.c编译(gcc-ggdb–ogreetgreet.c)出错,运行gdbgreet,出现提示符(gdb),此时可在提示符下输入gdb的命令,如:(gdb)run(gdb)list用(gdb)quit退出调试状态,返回系统提示符。2)阅读理解下列程序后编译运行,分析得到的结果,与自己的预计有差别吗?反复多次运行后,再观察结果。#include<stdio.h>main(){intp1;putchar('x'); while((p1=fork())==-1);if(p1==0) putchar('b'); else putchar('a'); putchar('y'); }3)阅读理解下列程序后编译运行,分析得到的结果,与自己的预计有差别吗?反复多次运行后,再观察结果。#include<stdio.h>
main()
{
int
p,i;
while((p=fork())==-1);
//创建子进程直至成功
if(p==0)
//子进程返回
{
for(i=0;i<5;i++)
{
printf("The
child
process!\n");
sleep(1);
//延时1秒
}
}
else{
//父进程返回for(i=0;i<5;i++)
{
printf("The
parent
process!\n");
sleep(1);
//延时1秒
}
}
}
4)编写一段程序,使用系统调用fork()创建两个子进程p1和p2。p1显示字符'b',p2显示字符'c',父进程显示字符'a',父进程和两个子进程并发运行。观察并记录屏幕上的显示结果,分析原因。5)阅读理解下列程序后编译运行,子进程中对x重新赋值对父进程有什么影响?得到的结果与自己的预计有什么差别。反复多次运行后,再观察结果。#include<stdio.h>main(){intp1;intx=1;while((p1=fork())==-1);if(p1==0){ putchar('b');x=9; printf("%d",x);}else { putchar('a');printf("%d",x);}}6)阅读理解下列程序后修改3)题程序,使用exit()和wait()实现父子进程同步,其同步方式为父进程等待子进程的同步,即:子进程循环输出5次,然后父进程再循环输出5次。#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
main()
{
pid_tpc,pr;
pc=fork();
if(pc<0)
printf("errorocurred!/n");
elseif(pc==0){
printf("Thisischildprocesswithpidof%d\n",getpid());
sleep(10);exit(0);
}
else{
pr=wait(NULL);
printf("Icatchedachildprocesswithpidof%d\n"),pr);
}
exit(0);
}
7)阅读理解下列程序后编译运行,分析得到的结果。#include<stdio.h>#include<unistd.h>#include<stdlib.h>main(){intpid;pid=fork();/*创建子进程*/switch(pid){case-1:/*创建失败*/printf("forkfail!\n");exit(1);case0:/*子进程*/execl("/bin/ls","ls","-1","-color",NULL);printf("execfail!\n");exit(1);default:/*父进程*/wait(NULL);/*同步*/printf("lscompleted!\n");exit(0);}}8)使用信号量及其P、V操作实现进程互斥。设有父子2个进程共享一个临界资源,每个进程循环进入该临界区3次:父进程每次进入临界区后显示“prntin”,出临界区则显示“prntout”;子进程每次进入临界区后显示“chldin”出临界区则显示“chldout”。完善程序后,观察运行结果。对临界区设置互斥信号量mutex,其内部标识为mutexid,初值为1。程序中使用睡眠延时1秒来模拟进入临界区前和进入后所执行的程序。参考程序如下:#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/ipc.h>#include<sys/sem.h>#ifndef_SEMUN_H#define_SEMUN_Hunionsemun{ intval; structsemid_ds*buf; unsignedshortint*array; structseminfo*_buf;};#endif/*以下为函数申明*/staticintset_mutex(void); /*信号量mutex赋初值函数*/staticvoiddel_mutex(void); /*删除信号量mutex函数*/staticintp_mutex(void); /*P(mutex)操作函数*/staticintv_mutex(void); /*V(mutex)操作函数*/staticintsem_id; /*信号量标识*/intmain(){ intchld,i,j; sem_id=semget((key_t)1234,1,0666|IPC_CREAT); /*创建互斥信号量*/ set_mutex(); /*设置初值*/ while((chld=fork())==-1); /*创建子进程*/ if(chld>0) /*父进程返回*/ { i=1; while(i<=3) /*循环3次*/ { sleep(1);/*此部分学生填写语句)*/} wait(0); /*等待子进程终止*/ del_mutex(); /*删除信号量*/ exit(0); } else /*子进程返回*/ { j=1; while(j<=3) /*循环3次*/ { sleep(1); /*此部分学生填写语句)*/ } exit(0); /*子进程终止*/ } }/*以下为函数定义*/staticintset_mutex(void) /*定义设置信号量初值函数*/{ unionsemunsem_union; sem_union.val=1; /*互斥信号初值为1*/ if(semctl(sem_id,0,SETVAL,sem_union)==-1) return(1);}staticvoiddel_mutex(void) /*定义删除信号量函数*/{ unionsemunsem_union; if(semctl(sem_id,0,IPC_RMID,sem_union)==-1) /*IPC_RMID表示删除*/ fprintf(stderr,"Failedtodeletesemaphore\n");}staticintp_mutex(void) /*定义P操作函数*/{ structsembufsem_b; sem_b.sem_num=0; sem_b.sem_op=-1; /*负数表示P操作,每次减1*/ sem_b.sem_flg=SEM_UNDO; if(semop(sem_id,&sem_b,1)==-1) { fprintf(stderr,"p_mutexfailed"); return(0); } return(1);}staticintv_mutex(void) /*定义V操作函数*/{ structsembufsem_b; sem_b.sem_num=0; sem_b.sem_op=1; /*正数表示V操作,每次加1*/ sem_b.sem_flg=SEM_UNDO; if(semop(sem_id,&sem_b,1)==-1) { fprintf(stderr,"v_mutexfailed"); return(0); } return(1);}6、实验报告要求认真书写实验报告,报告的内容包括:实验目的、实验内容、实验步骤、实验结果等。思考问题:1)创建子进程后,子进程的执行有什么特点? 2)总结使用信号量系统调用的步骤和方法。 实验三 存储器管理综合实验1、实验目的掌握LINUX中动态申请内存的方法;理解多任务环境下存储管理的重要性以及基本存储管理实现方法;理解虚拟存储管理实现基本原理以及页面淘汰算法对虚拟存储器性能影响及页面淘汰算法的实现。2、实验工具及环境LINUX系统网络环境或单机,GCC编译器。3、实验计划学时4学时上机实际操作。4、实验内容⑴编写一个程序申请两块大小为10的内存,分别存放字符串“123456789”和“987654321”,并输出字符串及存放地址,然后重新调整内存大小为20,再次输出地址。使用键盘命令查看程序执行前后的内存使用情况。⑵利用C语言,编程实现先进先出、OPT、LRU中的一个算法,开发一个虚拟存储器的模拟程序,实现虚拟存储器的页面调度,页面序列从指定的数组或文本文件(TXT文件)中取出;输出:页面调度顺序,内存物理块中页面变化情况,缺页的总次数和缺页率。5、程序提示(1)申请内存:char*str; if((str=(char*)malloc(10))==NULL) { printf(“Notenoughmemorytoallocatebuffer\n”); exit(1);}调整内存:if((str=(char*)realloc(str,20))==NULL) { printf(“Notenoughmemorytoreallocatebuffer\n”); exit(1);}输出地址:printf(“Stringis%s\nAddressis%p\n”,str,str);释放内存:free(str);(2)LRU算法实现参考程序。#include<stdio.h>#include<conio.h>
#defineM4#defineN17#defineMyprintfprintf("|++++++++++++++++|\n") /*表格控制*/typedefstructpage{ intnum; /*记录页面号*/ inttime; /*记录调入内存时间*/}Page; /*页面逻辑结构,结构为方便算法实现设计*/
Pageb[M]; /*内存单元数*/intc[M][N]; /*暂保存内存当前的状态:缓冲区*/intqueue[100]; /*记录调入队列*/intK; /*调入队列计数变量*/
/*初始化内存单元、缓冲区*/voidInit(Page*b,intc[M][N]){ inti,j; for(i=0;i<N;i++) { b[i].num=-1; b[i].time=N-i-1; } for(i=0;i<M;i++) for(j=0;j<N;j++) c[i][j]=-1;}
/*取得在内存中停留最久的页面,默认状态下为最早调入的页面*/intGetMax(Page*b){ inti; intmax=-1; inttag=0; for(i=0;i<M;i++) { /*此部分学生填写(此处可能有一条或多条语句)*/ }
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川绵阳市河湖保护中心招聘5人备考题库带答案详解(轻巧夺冠)
- 2026江苏苏州市常熟市莫城街道(服装城)国有(集体)公司招聘13人备考题库及参考答案详解ab卷
- 2026山东济南市第五人民医院招聘卫生高级人才和博士(控制总量)8人备考题库及参考答案详解(典型题)
- 2026年医院超声室安全培训内容全流程拆解
- 2026年河北中考麒麟卷历史(六)及答案
- 2026广东广州市白云区石门第一实验幼儿园招聘3人备考题库带答案详解(夺分金卷)
- 2026陕西西安医学院第二附属医院硕士人才招聘51人备考题库带答案详解(模拟题)
- 2026广西柳州融安县长安镇卫生院乡村医生招聘2人备考题库参考答案详解
- 2026广西柳州融安县长安镇卫生院乡村医生招聘2人备考题库及答案详解(夺冠)
- 2026天津汇融商业管理有限公司招聘1人备考题库及答案详解(夺冠系列)
- (广东二模)2025年广东省高三高考模拟测试(二)历史试卷(含答案)
- 原发性胆汁性胆管炎 2025
- 教科版科学六年级下册25《相貌各异的我们》课件
- 2024中文编码字符集汉字24点阵字型 第1部分:宋体
- 近五年重庆中考数学真题及答案2024
- 维保合同范本电子版
- DZ∕T 0171-2017 大比例尺重力勘查规范(正式版)
- 《网络综合布线技术案例教程》教学课件-第4章-配线子系统的设计与施工
- 2024年濮阳职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 木雕手工坊项目计划书
- (完整word版)中医病证诊断疗效标准
评论
0/150
提交评论