




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 实 验 报 告课程名称: 操 作 系 统 原 理 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术学院目录目录2实验一:线程的同步3一、实验目的3二、实验内容3三、实验心得6实验二:誊抄实验的进程实现7一、实验目的7二、实验内容7三、实验心得10实验三:Linux文件目录操作12一、实验目的12二、实验内容12三、实验心得14实验一:线程的同步一、实验目的1、掌握Linux系统用户界面中键盘命令的使用。2、学会一种Linux下的编程环境。3、掌握Linux下进(线)程的概念。4、了解Linux进程同步与通信的主要机制,并通过信号灯操作实现进程间的同步与互斥。二、
2、实验内容1、程序要求 两个线程,共享公共变量a 线程1负责计算(+1) 线程2负责打印2、运行环境软件配置(含操作系统版本):ubuntu - 14.10硬件:PC3、源程序源程序:#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <sys/types.h>#include <sys/sem.h>#include <sys/ipc.h>int semid;int a=0;typedef union senumint val;struct se
3、mid_ds *buf;unsigned short *array;struct seminfo *_buf;SEM_CTL_UN;void P(int semid,int index) struct sembuf sem; sem.sem_num = index; sem.sem_op = -1;/P sem.sem_flg = 0;/biaoji semop(semid,&sem,1);void V(int semid,int index) struct sembuf sem; sem.sem_num = index; sem.sem_op = 1; sem.sem_flg = 0
4、; semop(semid,&sem,1);void* thread1(void *arg)int i=0;for(i;i<8;i+)P(semid,0);printf("add:n");a=a+1;printf("a=%dn",a);V(semid,1);void* thread2(void *arg)int i=0;for(i;i<8;i+) P(semid,1);printf("print:n");printf("a=%dn",a);V(semid,0);int main()pthread
5、_t id1,id2;int ret1,ret2;key_t key;SEM_CTL_UN semctlarg1;SEM_CTL_UN semctlarg2; 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(&
6、amp;id2,NULL,thread2,NULL);pthread_join(id1,NULL);pthread_join(id2,NULL);4、实验结果实验结果截图如下:图1-1 线程同步三、实验心得通过本次实验,我掌握了Linux系统用户界面中键盘命令的使用,熟悉了Linux下的编程环境,进一步理解并掌握了线程的概念,了解了线程同步与通信的主要机制,并能通过信号灯操作实现线程间的同步和互斥。由于本次实验较为简单,主要目的是熟悉Linux编程环境,所以代码量较小,难度不大,实验过程中没有遇到太大问题。通过实验熟悉了线程的创建和信号灯的设置,为以后的实验打下了基础。实验二:誊抄实验的进程实
7、现一、实验目的在Linux下编程实现誊抄问题,通过多个进(线)程合作将源文件复制到目标文件中。二、实验内容1、程序要求main、get、copy、put四个可执行程序(或线程)。main:初始化信号灯、缓冲区,创建三个子进程,等待子进程运行结束后做 善后处理;get : 读源文件,送入缓冲区S;copy:从S复制信息到T;put : 将T中信息写入目标文件。2、运行环境软件配置(含操作系统版本):ubuntu - 14.10硬件:PC3、源程序源程序:Get:#include"touwenjian.h" int main(void) int i=0; int shmid1;
8、 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=stri; printf("getn"); i+; V(semid,0); while(s0!='0'); copy:#include"touwenjian.h" int
9、 main(void) int j=0; int shmid1,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); st
10、rcpy(t,s); printf("copyn"); V(semid,2); V(semid,1); while(t0!='0'); Put:#include"touwenjian.h" int main(void) int k=0; int shmid1,shmid2; char *s,*t; semid = semget(IPCKEY,4,IPC_CREAT|0666); shmid2 = shmget(SHMKEY2,sizeof(char),IPC_CREAT|0666); t=(char *)shmat(shmid2,NULL
11、,NULL); do /*if(t0='0')break;*/ P(semid,2); if(t0!='0')printf("put->%cn",*t); else printf("put->0n"); V(semid,3); while(t0!='0'); 头文件:#include <sys/types.h>#include <sys/sem.h>#include <semaphore.h>#include <stdio.h>#include &
12、lt;stdlib.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/shm.h>#define LOOPS 10#define IPCKEY (key_t) 0x11#define SHMKEY1 (key_t)0x222#define SHMKEY2 (key_t)0x333void P(int semid,int index); void V(int semid,int index); int semid; void P(int semid,int index) /对标记符为semid的
13、信号量集 中的第index个 /元素进行P操作(信号量操作要用到semop()函数) struct sembuf sem; /此数据类型在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个信号量void V(int semid,int index) struct sembuf sem;sem.sem_num =index;sem.sem_op=1;sem
14、.sem_flg=0;semop(semid,&sem,1);return;4、实验结果实验结果截图如下:图2-1 誊抄问题进程实现三、实验心得本次实验实现了誊抄问题的进程实现,这是一个经典的进程问题,通过进程合作将源文件复制到目标文件中。本次实验相较于第一次实验较为复杂,涉及到了文件操作的相关系统调用等操作。实验中共享内存的设置是重点。通过本次实验,我对进程的合作有了更深的了解和认识,掌握了常用文件操作相关系统调用,熟悉了进程的同步于互斥,了解了exec函数组的用法。总而言之,通过本次试验我收获颇丰。实验三:Linux文件目录操作一、实验目的 了解并掌握Linux文件目录结构。二、实
15、验内容1、程序要求 1)、熟悉Linux文件系统的使用; 2)、了解Linux文件系统目录结构; 3)、编程实现目录查询命令; 功能类似ls -l; 查询指定目录下的文件及子目录信息; 显示文件的类型、大小、时间等信息; 递归显示子目录中的文件信息;2、运行环境软件配置(含操作系统版本):ubuntu - 14.10硬件:PC3、源程序源程序:#include <unistd.h>#include <sys/stat.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#
16、include <dirent.h>void printdir(char *dir, int depth)DIR *dp;struct dirent *entry;struct stat statbuf;if (dp=opendir(dir)=NULL)/打开目录不成功printf("open the file error!n");return ;chdir(dir);char s1000;while (entry=readdir(dp)!=NULL)/读到一个目录项 if (strcmp(entry->d_name,".")=0|st
17、rcmp(entry->d_name, ".")=0)continue;/跳过strcpy(s,"./");strcat(s,entry->d_name);lstat(s, &statbuf);/读取到了符号链接,lstat读取符号链接本身的状态信息if (S_ISDIR(statbuf.st_mode)/权限&类型 int i=0; for(i=0;i<depth;i+) printf(" "); printf("|-%sn", entry->d_name);/文件名 printdir(entry->d_name, depth+1);else int i=0; for(;i<depth;i+) printf(" "); printf("|-%s %ld%ldn", entry->d_name,statbuf.st_size, statbuf.st_ino); chdir("./");closedir(dp);void main(void) char dir1000; int depth=0;scanf("%s&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 向俱乐部索赔协议书
- 包销公司避税协议书
- 医疗产品试用协议书
- 2025年物联网智能家居集成标准鉴定报告
- 劳动雇佣合同协议书
- 2025年金融科技企业投资价值评估体系与决策模型研究报告
- 合伙生产药品协议书
- 双方费用平分协议书
- 医患纠纷调解协议书
- 商超终止合同协议书
- 秘书公文写作范文
- 旅游经济专业知识和实务经济师考试(中级)试卷及解答参考(2025年)
- 方山县赤坚岭至刘家坡村段、横泉水库至东坡村段防洪能力提升工程环评报告书
- 一次性筷子购销合同
- AQ/T 1119-2023 煤矿井下人员定位系统通 用技术条件(正式版)
- 家庭护理服务劳务合同范本
- 幼儿园班级幼儿图书目录清单(大中小班)
- 四川省自贡市2023-2024学年八年级下学期期末数学试题
- 借用舞台布置设备协议
- 社区智慧养老方案含内容课件
- 2024年新课标高考物理试卷(适用云南、河南、新疆、山西地区 真题+答案)
评论
0/150
提交评论