您好,欢迎访问三七文档
第1页共17页操作系统实验报告册班级:××××学号:××××姓名:××××教师:××××第2页共17页目录实验说明实验1Linux(虚拟机)安装及Linux常用命令使用.......3实验2makefile的编写及Linux内核编译...........6实验3Linux的进程和线程.................11实验4同步与互斥..................15实验5文件系统.............17第3页共17页实验编号1题目Linux(虚拟机)安装及Linux常用命令使用实验目的(1)为了更好地了解Linux操作系统及其常用的命令;(2)学会在VMWARE虚拟机下安装Linux系统,提高自身的动手实践能力。实验内容(1)成功在VmwareWorkstation下安装Linux系统(2)完成配置Vmware中Linux系统与宿主机Windows系统的文件交换(3)编写常用的Linux命令报告内容要求(1)实现方法和思路(2)测试及结果报告正文(1)在配置Vmware中安装Linux系统和VMWARETOOLS第4页共17页(2)完成配置Vmware中Linux系统与宿主机Windows系统的文件交换。方法:打开VMware-工具栏—虚拟机-选择设置-选项共享文件夹点添加,按提示来添加一个windows下的文件夹。Windows下得文件夹被存放在/mnt/hgfs(2)编写常用的Linux命令1、进入文件夹命令cdcd/etc/hp:进入到根目录下的etc的子目录hp(使用绝对路径)2、查看当前目录名命令pwd3、使用touch创建普通文件,并将创建好的文件移动到/etc/hp文件夹下第5页共17页4、复制命令cpCpzhang/etc将创建好的文件夹zhang复制到/etc目录下第6页共17页实验编号2题目makefile的编写及Linux内核编译实验目的(1)理解Linux中的makefile文件(2)理解Linux内核的Makefile(3)掌握至少一个版本Linux内核的编译步骤实验内容(1)在虚拟机上安装Linux内核(2)用makefile解决编译运行问题报告内容要求(1)实现方法和思路(2)测试及结果报告正文1、在配置Vmware中安装Linux内核根据步骤:1)拷贝源代码到/usr/src目录下;2)在当前目录(/usr/src)下解压源代码“tarxvflinux-2.6.32.60.tar.bz2”3)拷贝软件包到“~”目录下;4)获取超级用户权限(输入三次123456,第一次是要求当前用户的口令,后两次是为root用户设置口令);5)切换当前目录到你存放软件包的目录之下;6)执行安装必备的软件包所需的命令;7)转到内核源代码所在的目录“/usr/src/linux-2.6.32.60”;8)输入Makemenuconfig,进入generalsetup选项,进入localversion菜单输入你自己想要添加的版本标示——13121228,并保存配置文件,保存并退出配置菜单。一步步进行安装:安装结果如下图所示(1)内核编译过程-Make第7页共17页第8页共17页第9页共17页(2)安装完成,重启客户机之后,检验内核安装是否成功,敲入命令:uname-r2、用makefile解决helloworld编译运行问题第10页共17页(1)敲入命令gedit建立helloworld.c文件(2)敲入命令gedit建立Makefile文件,内容如下:(3)在命令行窗口,输入make直接编译链接,然后输入./文件名执行文件第11页共17页实验编号3题目Linux的进程和线程实验目的(1)理解进程/线程的概念(2)掌握创建和终止进程/线程的方法(3)掌握与进程/线程控制相关的系统函数实验内容(1)了解进程和线程控制相关的系统函数(2)编写与进程和线程相关的7个实例程序,实现相关功能。报告内容要求(1)实现方法和思路(2)测试及结果报告正文1、实现获得进程、父进程、用户和组的ID。2、使用进程函数fork(),wait()防止僵尸进程的产生fork()函数没有入口参数,返回进程描述符。如果返回值是0,那么当前进程就是新创建的子进程。如果返回值大于零,那么当前进程就是父进程,返回值表示的是子进程的进程ID。如果fork的返回值小于零,就说明发生了错误。wait函数提供了一种同步机制如果子进程在父进程有机会调用wait前退出了,这个子进程成为僵尸进程。不过,现在再调用wait还是可以释放资源,这种情况下wait函数会立即返回。wait返回退出的子进程的pid值,如果发生错误则返回-1.第12页共17页3、使用sign()函数,实现信号句柄注册signal函数允许你为进程注册信号句柄(一种回调函数,是通过函数指针调用函数),signal返回前面注册的信号句柄。4、使用pause()函数将把进程挂起。pause函数会把进程挂起,直到接收到信号。在接收到以后,调用进程从pause中返回,继续进行。如果进程捕获的信号已经注册了信号句柄,那么pause函数会在信号句柄被调用并返回之后才返回。第13页共17页5、创建线程原型和终止线程原型Intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg)第一个参数为指向线程标示符的指针。第二个参数用来设置线程属性。第三个参数是线程运行函数的起始地址。最后一个参数是运行函数的参数。若成功则返回0,若失败则返回出错编号。intpthread_exit(void*retval);在编译链接时需要注意添加-pthread和-lpthread6、线程管理获得自己的线程描述符pthread_tpthread_self(void)实现同步线程,使用pthread_join函数,在调用该函数时会挂起调用者直到加入的线程完成。在加入的线程完成后,调用者会从pthread_join的返回值中获得加入线程的终止状态。intpthread_join(pthread_tth,void**thread_return);参数th是想要加入的线程参数thread_return存储线程完成后的返回值,可以为NULL,表明不捕获线程的返回状态。返回值,0代表成功,非0代表失败的编号第14页共17页7、创建线程互斥变量,运用pthread_mutex_lock和pthread_mutex_trylock可以通过锁定或解锁它,从而创建关键区。pthread_mutex_lock加锁,可能会阻塞。pthread_mutex_trylock加锁,如果互斥变量已锁定,则不会阻塞,而是立即返回一个值来描述互斥锁状态,在成功时返回零,失败时返回非零的错误码。第15页共17页实验编号4题目同步与互斥实验目的(1)理解并发中的互斥原理(2)掌握Peterson算法(3)掌握读者写者模型实验内容用POSIX的线程库(pthread_)实现Peterson算法报告内容要求(1)实现方法和思路(2)测试及结果报告正文1、定义全局两个变量flag[i]表示哪个进程正在占用临界区及临界区的状态,并都初始化为falseTurn表示能进入临界区的进程序号;2、建立parbegin函数使用pthread_create函数创建线程P0,P1使用pthread_join函数,作用为等待一个线程结束,以阻塞的方式等待th指定的线程结束。建立P0(P1)函数调用P0函数时,设置flag[0]=true,表示0号线程占用临界区,turn=1,1号线程能够进入临界区。建立while循环,当两个线程进入while语句时,线程0将循环0次进入临界区,而线程1则不停地循环且不能进入临界区,直到线程0退出临界区为止。3、代码及结果如下#definetrue1#definefalse0intflag[2];intturn;voidP0(){while(true){flag[0]=true;turn=1;while(flag[1]&&turn==1);flag[0]=false;printf(Iamthread0,Iamrunning\n);pthread_exit(0);}第16页共17页}voidP1(){while(true){flag[1]=true;turn=0;while(flag[0]&&turn==0);flag[1]=false;printf(Iamthread1,Iamrunning\n);pthread_exit(0);}}voidparbegin(void*p0,void*p1){intret1,ret2,status;pthread_ta;pthread_tb;ret1=pthread_create(&a,NULL,p0,NULL);ret2=pthread_create(&b,NULL,p1,NULL);pthread_join(a,(void**)&status);pthread_join(b,(void**)&status);}第17页共17页实验编号5题目文件系统实验目的(1)掌握锁的结构和操作(2)掌握如何对文件进行加锁、解锁(3)学会如何协调不同进程对同一文件的互斥操作实验内容文件锁的测试报告内容要求(1)实现方法和思路(2)测试及结果报告正文文件锁的测试打开一个新文件,再创建一个子进程。父子进程通过fcntl函数进行文件级的加锁,来进行对该文件互斥的访问。
本文标题:操作系统实验报告
链接地址:https://www.777doc.com/doc-3352932 .html