zoukankan      html  css  js  c++  java
  • 信息安全系统设计基础实验二实验报告

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

    标签(空格分隔): 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”在解决问题。

  • 相关阅读:
    各国货币M2增长对比
    Centos6 服务器病毒查杀命令历史
    常见的贷款实际年化利率
    Nginx Rewrite规则
    使用HTML5新特性Mutation Observer实现编辑器的撤销和撤销回退操作
    通过javascript在网页端解压zip文件并查看压缩包内容
    通过javascript在网页端生成zip压缩包并下载
    Plupload上传组件 + javaweb实现上传源码以及DEMO
    chrome 26.0.XXX版本下media query流媒体查询有问题的bug
    epub电子书--目录结构介绍
  • 原文地址:https://www.cnblogs.com/cdcode/p/5061856.html
Copyright © 2011-2022 走看看