课 程 实 验 报 告
课程名称: 操 作 系 统 原 理
专业班级: 学 号: 姓 名: 指导教师: 报告日期:
计算机科学与技术学院
目录
目录 .................................................................................................................................................. 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 硬件:PC 3、源程序
源程序:
#include
int semid; int a=0;
typedef union senum {
int val;
struct semid_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;
semop(semid,&sem,1); }
void* thread1(void *arg) {
int i=0;
for(i;i<8;i++) { P(semid,0); printf(\ a=a+1; printf(\ V(semid,1); } }
void* thread2(void *arg) {
int i=0;
for(i;i<8;i++) { P(semid,1); printf(\ printf(\ V(semid,0); } }
int main() {
pthread_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(&id2,NULL,thread2,NULL);
pthread_join(id1,NULL); pthread_join(id2,NULL); }
4、实验结果
实验结果截图如下: