信息安全系统设计基础实验二实验报告

信息安全系统设计基础实验二实验报告

标签(空格分隔): 20135328陈都


北京电子科技学院(BESTI) 实 验 报 告

课程: 深入理解计算机系统 班级: 1353
姓名: 朱锂 陈都
学号: 20135328 20135319
成绩:
指导教师: 娄嘉鹏
实验日期: 11.10
实验时间: 15:30-18:00
实验密级:
预习程度:
仪器组次:
必修/选修: 必修
实验序号: 2
实验名称: 信息安全系统设计基础EXP2固件设计
实验目的与要求:

  • 了解多线程程序设计的基本原理。
  • 学习 pthread 库函数的使用。

实验内容

  1. Linux使用:先打开桌面 vmware,然后打开C:/redhat 9虚拟机原始文件/redhat.vmx
    用户名/密码: root:123456
    vmware 与Winxp 切换:ctrl + alt

  2. 完成 2410经典实验指导20110331.pdf中实验2.3

    gcc *.c -l pthread
    实验原理
    多线程程序的优缺点
    多线程程序作为一种多任务、并发的工作方式,有以下的优点:

  1. 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整
    个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技
    术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
  2. 使多CPU 系统更加有效。操作系统会保证当线程数不大于CPU 数目时,不同的线程
    运行于不同的CPU 上。
  3. 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半
    独立的运行部分,这样的程序会利于理解和修改。
    LIBC 中的pthread 库提供了大量的API 函数,为用户编写应用程序提供支持。

实验过程

  1. 配置环境,因实验一和实验二环境相同,所以详情请参见信息安全系统设计基础实验一实验报告(环境配置图片已经补充)
  2. 进入02_pthread目录,使用vi编辑器或其他编辑器阅读理解源代码。运行make 产生pthread 可执行文件。
  3. 进入/host/exp/basic/02_pthread目录,运行pthread,观察运行结果的正确性。实验结果如下:

实验结果
image009.png-382.6kB

代码理解

  • 生产者写入共享的循环缓冲区函数 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”在解决问题。

原文地址:https://www.cnblogs.com/cdcode/p/5061856.html