课程实验报告
课程名称:操作系统
专业班级: 学号: 姓名: 指导教师:
报告日期:
计算机科学与技术学院
目录
实验环境..............................................................................................................03 1 实验一飞机售票系统......................................................................................03
1.1 实验目的.......................................................................................................03 1.2 实验要求.......................................................................................................03 1.3 设计思想.......................................................................................................03 1.4实验结果.......................................................................................................04 1.5程序源代码...................................................................................................05 2 实验二双线程单缓冲区合作...........................................................................08
2.1 实验目的.......................................................................................................08 2.2 实验要求.......................................................................................................08 2.3 设计思想.......................................................................................................08 2.4 实验结果.......................................................................................................08 2.5程序源代码...................................................................................................09 3 实验三生产者与消费者..................................................................................11
3.1 实验目的.......................................................................................................11 3.2 实验要求.......................................................................................................11 3.3 设计思想.......................................................................................................11 3.4 实验结果.......................................................................................................12 3.5程序源代码...................................................................................................13 4 实验四目录查询.............................................................................................18
4.1 实验目的.......................................................................................................18 4.2 实验要求.......................................................................................................18 4.3 设计思想.......................................................................................................18 4.4实验结果.......................................................................................................19 4.5程序源代码...................................................................................................20 5 心得体会..........................................................................................................24 参考文献..............................................................................................................24
实验环境
虚拟机:VMware Workstation 7.1.4 build-385536 操作系统:ubuntu 12.04 LTS
1 实验一飞机售票系统
1.1 实验目的
1)了解并掌握Linux线程及信号灯;
2)了解Linux线程与信号灯使用,包括:Linux线程,Linux信号灯,线程互斥,
线程同步。
1.2 实验要求
1)熟悉Linux线程接口及连接; 2)了解Linux信号灯的编程;
3)编程模拟实现飞机售票,包括:创建多个售票线程,已售票使用公用全局变
量,创建互斥信号灯,对售票线程临界区施加P、V操作。
1.3 设计思想
飞机售票系统需要创建多个线程,对售票线程临界区实现P、V操作。 首先创建一个信号灯集,对0号信号灯mutex初始化,值为1。然后创建5个线程,5个线程共可出售32张票,将该全局变量命名为TicketNum。
当线程开始时,先执行P操作,随后再执行V操作,唤醒其他线程。 为了保证不出现一个线程售完所有票的情况,每次售票完成后,应当休眠一段时间。
程序结构如下所示: main() {
创建信号灯集;
设置互斥/同步信号灯初值; 创建子线程; 同步等待子线程退出; 撤消信号灯集; } 1.4 实验结果
运行结果如图1、图2所示:
图1 运行结果
图2 运行结果
1.5 程序源代码 #include
#include
#define THREAD_NUM 5
int SemID = -1; int TicketNum = 32; int SellNum = 0;
union semun{ };
void P(int semid,int semno) { }
void V(int semid,int semno) { }
struct sembuf sop; sop.sem_num = semno;
sop.sem_op = 1; semop(semid,&sop,1); sop.sem_flg = 0; struct sembuf sop; sop.sem_num = semno; sop.sem_op = -1;
sop.sem_flg = 0; semop(semid,&sop,1); int val;
struct semid_ds *buf; unsigned short *array;