实验指导书xx范文.doc_第1页
实验指导书xx范文.doc_第2页
实验指导书xx范文.doc_第3页
实验指导书xx范文.doc_第4页
实验指导书xx范文.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验指导书xx范文 操作系统实验说明实验报告要求将所有实验的所有实验报告装订在一起。 实验报告应包括如下内容?封面请使用老师规定的封面?目录(每个实验对应的页号)每个实验报告包含以下内容?实验目的?实验内容?实验要求?实验测试结果及分析最后有如下内容?收获及体会?参考资料实验要求 (1)一共6个实验。 其中实验1为熟悉系统,实验2,3,4,5为必做实验,实验6为选作实验。 (2)2,3,4,5全部完成并在最后一次上机之前(含最后一次上机)找老师运行检查,并提交一份实验报告。 若最后一次上机无法完成实验的检查工作,剩余的同学将由老师安排上机考试以实现试验的评分工作。 实验报告的格式参照实验指导书的要求。 (3)实验不允许抄袭。 发现抄袭一律0分记。 因此请自己保护好自己的代码。 实验一X UNIX/LINUIX入门实验学时2学时实验类型验证型 一、实验目的了解UNIX/LINUX运行环境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下C语言程序的编写、编译、调试和运行方法。 二、实验内容 1、熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。 (常用Linux命令在附录中列出,请参阅。 ) 2、熟悉UNIX/LINUX下C语言编译器/g的使用方法。 编写一个简单的显示“Hello,World!”C语言程序,用g编译并观察编译后的结果,然后运行它。 具体方法如下 (1)开机选择Linux操作系统进入,根据要求输入用户名root,密码rootroot。 (2)尝试使用实验指导书中提供的各种指令。 步骤如下如果你机器是英文系统,找Applications?Aessories?Terminal,并运行。 如果你机器是中文系统,找应用?附件?终端,并运行。 注意Terminal是一个命令行系统,尝试运行相关的命令。 (3)尝试写一个Hello world程序。 步骤如下a)选择一个目录下创建一个文件example.c b)双击代表example.c的图标进入器并输入hello world代码c)保存并退出d)在终端(Terminal)中对example.c进行编译。 编译命令为g example.co examplee)运行编译好的程序。 指令为./example 三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行。 附录Linux常用命令Linux系统常用命令格式mandoptionargument1argument2.其中option以“-”开始,多个option可用一个“-”连起来,如“ls-l-a”与“ls-la”的效果是一样的。 根据命令的不同,参数分为可选的或必须的;所有的命令从标准输入接受输入,输出结果显示在标准输出,而错误信息则显示在标准错误输出设备。 可使用重定向功能对这些设备进行重定向。 命令在正常执行结果后返回一个0值,如果命令出错可未完全完成,则返回一个非零值(在shell中可用变量$?查看)。 在shell script中可用此返回值作为控制逻辑的一部分。 帮助命令:man获取相关命令的帮助信息例如man dir可以获取关于dir的使用信息。 info获取相关命令的详细使用方法bzip2/bunzip2.bz2文件的压缩/解压缩程序cpio备份文件dump备份文件系统gzip/gunzip.gz文件的压缩/解压缩程序gzexe压缩可执行文件restore还原由倾倒(Dump)操作所备份下来的文件或整个文件系统(一个分区)tar将若干文件存档或读取存档文件unarj解压缩.arj文件zip/unzip压缩/解压缩zip文件磁盘操作cd/pwd切换目录/显示当前工作目录df显示磁盘的相关信息du显示目录或文件的大小e2fsck检查ext2/ext3文件系统的正确性fdisk对硬盘进行分区fsck检查文件系统并尝试修复错误losetup设置循环设备ls列出目录内容mkdir创建目录mformat对MS-DOS文件系统的磁盘进行格式化mkbootdisk建立目前系统的启动盘mke2fs建立ext2文件系统mkisofs制作iso光盘映像文件mount/umount加载文件系统/卸载文件系统quota显示磁盘已使用的空间与限制sync将内存缓冲区内的数据写入磁盘tree以树状图列出目录的内容系统操作:clock调整RTC时间date显示或设置系统时间与日期dmesg显示开机信息eval重新运算求出参数的内容exit退出目前的shell export设置或显示环境变量finger查找并显示用户信息free显示内存状态hostid显示主机标识hostname显示主机名id显示用户标识kill删除执行中的程序或工作last列出目前与过去登入系统的用户相关信息logout退出系统lsmod显示已载入系统的模块modprobe自动处理可载入模块passwd设置用户密码ps processstatus报告程序状况reboot重启计算机rhwo查看系统用户rlogin远程登入rpm管理Linux各项套件的程序shutdown关机su switchuser变更用户身份top显示,管理执行中的程序uname显示系统信息useradd/userdel添加用户/删除用户userinfo图形界面的修改工具usermod修改用户属性,包括用户的shell类型,用户组等,甚至还能改登录名w显示目前注册的用户及用户正运行的命令whereis确定一个命令的二进制执行码,源码及帮助所在的位置who列出正在使用系统的用户whois查找并显示用户信息文件操作cat显示文件内容和合并多个文件clear清屏chattr改变文件属性chgrp改变文件组权chmod改变文件或目录的权限chown改变文件的属权m比较两个已排过序的文件cp将文件拷贝至另一文件dd从指定文件读取数据写到指定文件df报告磁盘空间使用情况diff比较两个文本文件,列出行不同之处du统计目录文件所占磁盘空间的大小file辨识文件类型emacs功能强大的环境find搜索文件并执行指定操作(find2)grep按给定模式搜索文件内容head显示指定文件的前若干行less按页显示文件ln创建文件链接locate查找符合条件的文件more在终端屏幕按帧显示文本文件mv文件或目录的移动或更名rm/rmdir删除文件目录sed利用script来处理文本文件sort对指定文件按行进行排序tail显示指定文件的最后部分touch创建文件tr转换字符vi全屏器wc显示指定文件中的行数,词数或字符数which在环境变量$PATH设置的目录里查找符合条件的文件mv文件或目录的移动或更名rm/rmdir删除文件目录sed利用script来处理文本文件sort对指定文件按行进行排序tail显示指定文件的最后部分touch创建文件tr转换字符vi全屏器wc显示指定文件中的行数,词数或字符数实验二进程管理实验学时2学时实验类型验证型、设计型3 一、实验目的加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。 二、实验内容 (1)进程创建编写一段程序,使用系统调用fork()创建两个子进程。 当此程序运行时,在系统中有一个父进程和两个子进程活动。 让每一个进程在屏幕上显示一个字符父进程显示“a“;子进程分别显示字符”b“和字符“c”。 试观察记录屏幕上的显示结果,并分析原因。 (提示对每个进程的打印循环执行10次,则可以发现执行顺序的不同) (2)进程控制修改已编写的程序,将每一个进程输出一个字符改为用一个循环输出1000个字符(父进程输出1000个“a”,子进程分别输出1000个“b”和“c”),再观察程序执行时屏幕上出现的现象,并分析原因。 (3)进程的管道通信编写程序实现进程的管道通信。 使用系统调用pipe()建立一个无名管道,二个子进程P1和P2分别向管道各写一句话Child1is sendinga message!Child2is sendinga message!父进程从管道中读出二个子进程的信息并显示(要求先接收P1的消息,再接收P2的消息)。 三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、补充材料管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信。 1、无名管道的创建无名管道由pipe()函数创建#includeint pipe(int filedis2);参数filedis返回两个文件描述符filedes0为读而打开,filedes1为写而打开。 filedes1的输出是filedes0的输入。 2、read()系统调用格式int read(fd,buf,nbyte)功能从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf所指示的缓冲区中。 如该文件被加锁,等待,直到锁打开为止。 参数定义int fd;char*buf;unsigned nbyte; 3、write()系统调用格式int read(fd,buf,nbyte)功能把nbyte个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。 如文件加锁,暂停写入,直至开锁。 参数定义同read()。 实验三线程的管理实验学时2学时实验类型设计 一、实验目的编写Linux环境下的多线程程序,了解多线程的程序设计方法,掌握最常用的三个函数pthread_create,pthread_join和pthread_exit的用法 二、实验内容 1、主程序创建两个线程myThread1和myThread2,每个线程打印一句话。 使用pthread_create(&id,NULL,(void*)thread,NULL)完成。 提示先定义每个线程的执行体,然后在main中()创建几个线程,最后主线程等待子线程结束后再退出。 2、创建两个线程,分别向线程传递如下两种类型的参数?传递整型值?传递字符 三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、补充材料Linux下的多线程编程简介 (1)pthread库Linux下的多线程遵循POSIX线程接口,称为pthread。 编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库pthread。 注意编译时要使用如下命令(设example.c是源程序名字)。 因为pthread的库不是linux系统的库,所以在进行编译的时候要加上-lpthread,否则编译不过。 具体命令如下g example.c-lpthread-o example( (2)函数pthread_create()的用法函数pthread_create()用来创建一个线程,它的原型为extern intpthread_create_P(pthread_t*_thread,_const pthread_attr_t*_attr,void*(*_start_routine)(void*),void*_arg);第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。 这里,如果所创建的函数thread不需要参数,则最后一个参数设为空指针。 第二个参数一般也设为空指针,这样将生成默认属性的线程。 当创建线程成功时,函数返回0,若不为0则说明创建线程失败,常见的错误返回代码为EAGAIN和EINVAL。 前者表示系统限制创建新的线程,例如线程数目过多了;后者表示第二个参数代表的线程属性值非法。 创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。 声明和创建线程名为myThread1的代码片段.pthread_t id1,id2;ret=pthread_create(&id2,NULL,(void*)myThread1,NULL);if(ret)printf(Create pthreaderror!n);.向所创建的线程创建整数参数的代码片段主线程main()中.pthread_t tidp;int error;int test=4;int*attr=&test;ret=pthread_create(&tidp,NULL,myThread,(void*)attr);.线程Mythread void*MyThread(void*arg)int*num;num=(int*)arg;printf(create parameteris%dn,*num);return(void*)0; (3)函数pthread_join()的用法函数pthread_join()用来等待一个线程的结束。 函数原型为extern intpthread_join_P(pthread_t_th,void*_thread_return);第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。 这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。 一个线程的结束有两种途径,一种是像上面的例子一样,函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现。 它的函数原型为extern voidpthread_exit_P(void*_retval)_attribute_(_noreturn_);唯一的参数是函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给thread_return。 最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码ESRCH。 在这一节里,我们编写了一个最简单的线程,并掌握了最常用的三个函数pthread_create,pthread_join和pthread_exit。 下面,我们来了解线程的一些常用属性以及如何设置这些属性。 实验四利用信号量实现进程控制实验学时2学时实验类型验证、设计型 一、实验目的学习UNIX类(System V)操作系统信号量机制,编写Linux环境下利用信号量实现进程控制的方法,掌握相关系统调用的使用方法。 二、实验内容创建4个线程,其中两个线程负责从文件读取数据到公共的缓冲区,另两个线程从缓冲区读取数据作不同的处理(加和乘运算)。 使用信号量控制这些线程的执行。 提示 (1)参见“ 四、补充材料”中的相关系统调用的基本用法。 (2)创建4个线程,其中2个线程用于从文件中读数据到缓冲区中(例如一个进程读1.dat文件,另一个进程读2.dat文件),另2个线程从缓冲区中取数据作处理。 事先好数据文件如1.dat和2.dat,假设它们的内容分别为12345678910和-1-2-3-4-5-6-7-8-9-10,然后运行你编写的程序,应得到如下类似的结果Multiply:-1*-2=2Plus:-1+-2=-3Multiply:9*10=90Plus:-9+-10=-19Multiply:-7*-8=56Plus:-5+-6=-11Multiply:-3*-4=12Plus:9+10=19Plus:7+8=15Plus:5+6=11 三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、补充材料信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。 当公共资源增加时,调用函数sem_post()增加信号量。 只有当信号量值大于时,才能使用公共资源,使用后,函数sem_wait()减少信号量。 函数sem_trywait()和函数pthread_mutex_trylock()起同样的作用,它是函数sem_wait()的非阻塞版本。 下面我们逐个介绍和信号量有关的一些函数,它们都在头文件/usr/include/semaphore.h中定义。 信号量的数据类型为结构sem_t,它本质上是一个长整型的数。 函数sem_init()用来初始化一个信号量。 它的原型为extern intsem_init_P(sem_t*_sem,int_pshared,unsigned int_value);sem为指向信号量结构的一个指针;pshared不为时此信号量在进程间共享,否则只能为当前进程的所有线程共享;value给出了信号量的初始值。 函数sem_post(sem_t*sem)用来增加信号量的值。 当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略决定的。 函数sem_wait(sem_t*sem)被用来阻塞当前线程直到信号量sem的值大于0,解除阻塞后将sem的值减一,表明公共资源经使用后减少。 函数sem_trywait(sem_t*sem)是函数sem_wait()的非阻塞版本,它直接将信号量sem的值减一。 函数sem_destroy(sem_t*sem)用来释放信号量sem。 实验五基于消息队列和共享内存的进程间通信 一、实验目的Linux系统的进程通信机构(IPC)允许在任意进程间大批量地交换数据。 本实验的目的是了解和熟悉1.Linux支持的消息通信机制及其使用方法2.Linux系统的共享存储区的原理及使用方法。 二、实验内容1消息的创建、发送和接收使用消息调用msgget()、msgsnd()、msgrcv()、msgctl()编制长度为1K的消息的发送和接收程序。 2共享存储取得创建、附接和断接使用系统调用shmget()、shmat()、shmctl(),编制一个与上述功能相同的程序。 三、实验要求按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、设计提示为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,server和client,进行通信;server端建立一个key为75的消息队列,等待其他进程发来的消息。 当遇到类型为1的消息时,则作为结束信号,取消该队列,并退出Server。 Server每收到一个消息后显示一句“(Server)received”;Client端使用key为75的消息队列,先后发送类型为10到1的消息,然后退出。 最后一个消息即server端需要的结束信号。 Client每发送一条消息,显示一句“(Client)sent”;父进程在server和client均退出后结束。 五、相关系统调用 1、共享内存 (1)共享存储区的建立shmget()系统调用功能描述?新建一个的共享储存器区段。 ?获取一个共享储存器区段的访问权。 建立(获得)一块共享存储区,返回该共享存储区的描述符shmid;若尚未建立,便为进程建立一个指定大小的共享存储区。 如果是一个新的共享存储段,shmget()将初始共享存储段中所有单元为0。 用法#include#includeint shmget(key_t key,size_t size,int shmflg);参数key共享储存器区段的键。 size共享储存器区段的大小。 shmflg建立标志和储存权限,可能值有下面那些,可通过or组合在一起IPC_CREAT/建立新的共享区段。 IPC_EXCL/和IPC_CREAT标志一起使用,如果共享区段已存在失败返回。 SHM_HUGETLB/使用huge pages来分配共享区段。 SHM_NORESERVE/不要为共享区段保留交换空间。 (2)共享存储区的控制shmctl()对共享存储区执行多种操作,对其状态信息进行读取和修改。 其函数原型如下#include#include#includeint shmctl(int shmid,int cmd,struct shmid_ds*buf);说明:cmd参数指定下列5种命令中一种,使其在shmid指定的段上执行IPC_STAT对此段取shmid_ds结构,并存放在由buf指向的结构中。 IPC_SET按buf指向的结构中的值设置与此段相关结构中的下列三个字段shm_perm.uid、shm_perm.gid以及shm_perm.mode。 IPC_RMID从系统中删除该共享存储段。 因为每个共享存储段有一个连接计数(shm_nattch在shmid_ds结构中),所以除非使用该段的最后一个进程终止或与该段脱接,否则不会实际上删除该存储段。 不管此段是否仍在使用,该段标识符立即被删除,所以不能再用shmat与该段连接。 SHM_LOCK锁住共享存储段。 此命令只能由超级用户执行。 SHM_UNLOCK解锁共享存储段。 此命令只能由超级用户执行。 (3)共享存储区的附接在进程已经建立了共享存储区或已获得了其描述符后,还须利用系统调用shmat(id,addr,flag)将该共享存储区附接到用户给定的某个进程的虚地址上,并指定该存储区的访问属性,即指明该区是只读,还是可读可写。 此共享存储区便成为该进程虚地址空间的一部分。 系统调用格式addr=shmat(shmid,addr,flag)该函数使用头文件如下#include#include#include参数定义:int shmid,flag;char*addr;其中,shmid是共享存储区的标识符;addr是用户给定的,将共享存储区附接到进程的虚地址;flag规定共享存储区的读、写权限,以及系统是否应对用户规定的地址做舍入操作。 其值为SHM_RDONLY时,表示只能读;其值为0时,表示可读、可写;其值为SHM_RND(取整)时,表示操作系统在必要时舍去这个地址。 该系统调用的返回值是共享存储区所附接到的进程虚地址addr。 (4)共享存储区的断开当进程不再需要一个共享存储段时,可以调用shmdt()将它从进程的地址空间分离。 其函数原型如下#include#include#includeint shmdt(void*addr);说明addr参数是以前调用shmat()时的返回值。 注意这个函数仅是是一个共享存储段不再与调用进程的地址空间相连,它并不实际删除共享存储段本身,删除共享存储段是shmctl()函数IPC_RMID命令的功能。 2、消息队列消息是一个用户可定义的通用结构,例如struct msgbuflong mtype;/*消息类型,必须0*/char mtext1;/*消息文本*/; (1)int msgget(key_t key,int msgflg);功能创建或者访问一个消息队列。 该函数使用头文件如下#include#include#include参数key消息队列关联的键。 msgflg消息队列的建立标志和存取权限。 如果flag为IPC_CREAT,表示如果内核中没有此队列,则创建它。 Flag为IPC_EXCL当和IPC_CREAT一起使用时,表示如果队列已经存在,则失败。 IPC_EXCL单独使用是没有用处的。 下面是一个创建和打开消息队列的例子Int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论