信息安全系统设计基础实验二实验报告
信息安全系统设计基础实验二实验报告
标签(空格分隔): 20135328陈都
北京电子科技学院(BESTI) 实 验 报 告
课程: 深入理解计算机系统 班级: 1353
姓名: 朱锂 陈都
学号: 20135328 20135319
成绩:
指导教师: 娄嘉鹏
实验日期: 11.10
实验时间: 15:30-18:00
实验密级:
预习程度:
仪器组次:
必修/选修: 必修
实验序号: 2
实验名称: 信息安全系统设计基础EXP2固件设计
实验目的与要求:
- 了解多线程程序设计的基本原理。
- 学习 pthread 库函数的使用。
实验内容:
-
Linux使用:先打开桌面 vmware,然后打开C:/redhat 9虚拟机原始文件/redhat.vmx
用户名/密码: root:123456
vmware 与Winxp 切换:ctrl + alt -
完成 2410经典实验指导20110331.pdf中实验2.3
gcc *.c -l pthread
实验原理:
多线程程序的优缺点
多线程程序作为一种多任务、并发的工作方式,有以下的优点:
- 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整
个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技
术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。 - 使多CPU 系统更加有效。操作系统会保证当线程数不大于CPU 数目时,不同的线程
运行于不同的CPU 上。 - 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半
独立的运行部分,这样的程序会利于理解和修改。
LIBC 中的pthread 库提供了大量的API 函数,为用户编写应用程序提供支持。
实验过程:
- 配置环境,因实验一和实验二环境相同,所以详情请参见信息安全系统设计基础实验一实验报告(环境配置图片已经补充)
- 进入02_pthread目录,使用vi编辑器或其他编辑器阅读理解源代码。运行make 产生pthread 可执行文件。
- 进入/host/exp/basic/02_pthread目录,运行pthread,观察运行结果的正确性。实验结果如下:
实验结果
代码理解
- 生产者写入共享的循环缓冲区函数 PUT
void put(struct prodcons * b, int data)
{
pthread_mutex_lock(&b->lock); //获取互斥锁
while ((b->writepos + 1) % BUFFER_SIZE == b->readpos) {
//如果读写位置相同
pthread_cond_wait(&b->notfull, &b->lock);
//等待状态变量b->notfull,不满则跳出阻塞
}
b->buffer[b->writepos] = data; //写入数据
b->writepos++;
if (b->writepos >= BUFFER_SIZE) b->writepos = 0;
pthread_cond_signal(&b->notempty); //设置状态变量
pthread_mutex_unlock(&b->lock); //释放互斥锁
}
- 消费者读取共享的循环缓冲区函数 GET
int get(struct prodcons * b) { int data; pthread_mutex_lock(&b->lock);
//获取互斥锁 while (b->writepos == b->readpos) { //如果读写位置相同
pthread_cond_wait(&b->notempty, &b->lock);
//等待状态变量b->notempty,不空则跳出阻塞。否则无数据可读。 } data = b->buffer[b->readpos];
//读取数据 b->readpos++; if (b->readpos >= BUFFER_SIZE) b->readpos = 0;
pthread_cond_signal(&b->notfull); //设置状态变量
pthread_mutex_unlock(&b->lock); //释放互斥锁
问题解决
-
make不成功
修改环境变量后gcc运行。 -
无法运行
忘记在超级终端中将共享文件夹挂载好,建立开发板与虚拟机之间的通讯。输入命令“mount -t nfs -o nolock 192.168.0.234:/home/bc /host”在解决问题。