为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

华科操作系统实验报告

2021-01-16 7页 doc 234KB 11阅读

用户头像 个人认证

dykcs64

从事建筑工程对接,工程图纸设计施工管理方面的经验

举报
华科操作系统实验报告`课程实验报告课程名称:操作系统原理专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录TOC\o"1-2"\h\uHYPERLINK\l_Toc23300目录2实验一:线程的同步3一、实验目的3二、实验容3三、实验心得6实验二:誊抄实验的进程实现7一、实验目的7二、实验容7三、实验心得10实验三:Linux文件目录操作12一、实验目的12二、实验容12三、实验心得14实验一:线程的同步一、实验目的1、掌握Linux系统用户界面中键盘命令的使用。2、学会一种Linux下的编程环境。3、掌握Linux下进(线)程的...
华科操作系统实验报告
`课程实验课程名称:操作系统原理专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录TOC\o"1-2"\h\uHYPERLINK\l_Toc23300目录2实验一:线程的同步3一、实验目的3二、实验容3三、实验6实验二:誊抄实验的进程实现7一、实验目的7二、实验容7三、实验心得10实验三:Linux文件目录操作12一、实验目的12二、实验容12三、实验心得14实验一:线程的同步一、实验目的1、掌握Linux系统用户界面中键盘命令的使用。2、学会一种Linux下的编程环境。3、掌握Linux下进(线)程的概念。4、了解Linux进程同步与通信的主要机制,并通过信号灯操作实现进程间的同步与互斥。二、实验容1、程序要求两个线程,共享公共变量a线程1负责计算(+1)线程2负责打印2、运行环境软件配置(含操作系统版本):ubuntu-14.10硬件:PC3、源程序源程序:#include#include#include#include#include#includeintsemid;inta=0;typedefunionsenum{intval;structsemid_ds*buf;unsignedshort*array;structseminfo*_buf;}SEM_CTL_UN;voidP(intsemid,intindex){structsembufsem;sem.sem_num=index;sem.sem_op=-1;//Psem.sem_flg=0;//biaojisemop(semid,&sem,1);}voidV(intsemid,intindex){structsembufsem;sem.sem_num=index;sem.sem_op=1;sem.sem_flg=0;semop(semid,&sem,1);}void*thread1(void*arg){inti=0;for(i;i<8;i++){P(semid,0);printf("add:\n");a=a+1;printf("a=%d\n",a);V(semid,1);}}void*thread2(void*arg){inti=0;for(i;i<8;i++){P(semid,1);printf("print:\n");printf("a=%d\n",a);V(semid,0);}}intmain(){pthread_tid1,id2;intret1,ret2;key_tkey;SEM_CTL_UNsemctlarg1;SEM_CTL_UNsemctlarg2;key=1;semid=semget(key,2,IPC_CREAT|0666);//创建semctlarg1.val=1;semctlarg2.val=0;semctl(semid,0,SETVAL,semctlarg1);//初始化semctl(semid,1,SETVAL,semctlarg2);ret1=pthread_create(&id1,NULL,thread1,NULL);ret2=pthread_create(&id2,NULL,thread2,NULL);pthread_join(id1,NULL);pthread_join(id2,NULL);}4、实验结果实验结果截图如下:图1-1线程同步三、实验心得通过本次实验,我掌握了Linux系统用户界面中键盘命令的使用,熟悉了Linux下的编程环境,进一步理解并掌握了线程的概念,了解了线程同步与通信的主要机制,并能通过信号灯操作实现线程间的同步和互斥。由于本次实验较为简单,主要目的是熟悉Linux编程环境,所以代码量较小,难度不大,实验过程中没有遇到太大问题。通过实验熟悉了线程的创建和信号灯的设置,为以后的实验打下了基础。实验二:誊抄实验的进程实现一、实验目的在Linux下编程实现誊抄问题,通过多个进(线)程合作将源文件复制到目标文件中。二、实验容1、程序要求main、get、copy、put四个可执行程序(或线程)。main:初始化信号灯、缓冲区,创建三个子进程,等待子进程运行结束后做善后处理;get:读源文件,送入缓冲区S;copy:从S复制信息到T;put:将T息写入目标文件。2、运行环境软件配置(含操作系统版本):ubuntu-14.10硬件:PC3、源程序源程序:Get:#include"touwenjian.h"intmain(void){inti=0;intshmid1;char*s,*t,str[]="wangzihao!";semid=semget(IPCKEY,4,IPC_CREAT|0666);shmid1=shmget(SHMKEY1,sizeof(char),IPC_CREAT|0666);s=(char*)shmat(shmid1,NULL,NULL);do{P(semid,1);*s=str[i];printf("get\n");i++;V(semid,0);}while(s[0]!='\0');}copy:#include"touwenjian.h"intmain(void){intj=0;intshmid1,shmid2;char*s,*t;semid=semget(IPCKEY,4,IPC_CREAT|0666);shmid1=shmget(SHMKEY1,sizeof(char),IPC_CREAT|0666);s=(char*)shmat(shmid1,NULL,NULL);shmid2=shmget(SHMKEY2,sizeof(char),IPC_CREAT|0666);t=(char*)shmat(shmid2,NULL,NULL);do{P(semid,0);P(semid,3);strcpy(t,s);printf("copy\n");V(semid,2);V(semid,1);}while(t[0]!='\0');}Put:#include"touwenjian.h"intmain(void){intk=0;intshmid1,shmid2;char*s,*t;semid=semget(IPCKEY,4,IPC_CREAT|0666);shmid2=shmget(SHMKEY2,sizeof(char),IPC_CREAT|0666);t=(char*)shmat(shmid2,NULL,NULL);do{/*if(t[0]=='\0')break;*/P(semid,2);if(t[0]!='\0')printf("put---->%c\n",*t);elseprintf("put---->\\0\n");V(semid,3);}while(t[0]!='\0');}头文件:#include#include#include#include#include#include#include#include#defineLOOPS10#defineIPCKEY(key_t)0x11#defineSHMKEY1(key_t)0x222#defineSHMKEY2(key_t)0x333voidP(intsemid,intindex);voidV(intsemid,intindex);intsemid;voidP(intsemid,intindex)//对标记符为semid的信号量集中的第index个//元素进行P操作(信号量操作要用到semop()函数){structsembufsem;//此数据类型在sys/sem.h中定义sem.sem_num=index;//对信号量集中的第index个元素进行P操作sem.sem_op=-1;//表示P操作sem.sem_flg=0;//操作标记:0或IPC_NOWAIT等semop(semid,&sem,1);//1:要操作1个信号量}voidV(intsemid,intindex){structsembufsem;sem.sem_num=index;sem.sem_op=1;sem.sem_flg=0;semop(semid,&sem,1);return;}4、实验结果实验结果截图如下:图2-1誊抄问题进程实现三、实验心得本次实验实现了誊抄问题的进程实现,这是一个经典的进程问题,通过进程合作将源文件复制到目标文件中。本次实验相较于第一次实验较为复杂,涉及到了文件操作的相关系统调用等操作。实验中共享存的设置是重点。通过本次实验,我对进程的合作有了更深的了解和认识,掌握了常用文件操作相关系统调用,熟悉了进程的同步于互斥,了解了exec函数组的用法。总而言之,通过本次试验我收获颇丰。实验三:Linux文件目录操作一、实验目的了解并掌握Linux文件目录结构。二、实验容1、程序要求1)、熟悉Linux文件系统的使用;2)、了解Linux文件系统目录结构;3)、编程实现目录查询命令;功能类似ls-l;查询指定目录下的文件及子目录信息;显示文件的类型、大小、时间等信息;递归显示子目录中的文件信息;2、运行环境软件配置(含操作系统版本):ubuntu-14.10硬件:PC3、源程序源程序:#include#include#include#include#include#includevoidprintdir(char*dir,intdepth){DIR*dp;structdirent*entry;structstatstatbuf;if((dp=opendir(dir))==NULL){//打开目录不成功printf("openthefileerror!\n");return;}chdir(dir);chars[1000];while((entry=readdir(dp))!=NULL){//读到一个目录项if(strcmp(entry->d_name,"..")==0||strcmp(entry->d_name,".")==0){continue;}//跳过strcpy(s,"./");strcat(s,entry->d_name);lstat(s,&statbuf);//读取到了符号,lstat读取符号本身的状态信息if(S_ISDIR(statbuf.st_mode)){//权限&类型inti=0;for(i=0;id_name);//文件名printdir(entry->d_name,depth+1);}else{inti=0;for(;id_name,statbuf.st_size,statbuf.st_ino);}}chdir("../");closedir(dp);}voidmain(void){chardir[1000];intdepth=0;scanf("%s",dir);printdir(dir,depth);return;}4、实验结果实验结果截图如下:图3-1文件目录操作三、实验心得通过本次实验,我熟悉了Linux文件系统的使用,了解了Linux文件系统目录结构;实现了查询指定目录下的文件及子目录信息、显示文件的类型、大小、时间等信息、递归显示子目录中的文件信息等功能;学习了Linux文件属性接口和目录文件接口等方面的知识。文件系统能为用户程序所需要,同时也为操作系统自身需要,它为用户和操作系统提供存储、检测、共享和保护文件的手段,通过本次实验我充分了解了文件系统的重要性,这对我今后的学习有很大的帮助。Word文档
/
本文档为【华科操作系统实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索