天天看點

資訊安全系統設計基礎實驗二:固件設計(20135229,20135234)一、實驗内容

北京電子科技學院(BESTI)

實     驗    報     告

課程:資訊安全系統設計基礎      班級:1352          姓名:呂松鴻 馬啟揚

   學号:20135229 20135234 成績:       指導教師:婁嘉鵬    實驗日期::2015.11.10 

  實驗密級:        預習程度:                     實驗時間:15:30—17:30

   儀器組次:       必修/選修:必修                實驗序号:02

一、實驗内容

1.開發環境的配置同實驗一。

2.将實驗代碼拷貝到共享檔案夾中。

3.在虛拟機中編譯代碼。

對于多線程相關的代碼,編譯時需要加-lpthread 的庫。

資訊安全系統設計基礎實驗二:固件設計(20135229,20135234)一、實驗内容

4.下載下傳調試

在超級終端中運作可執行檔案pthread,運作可執行檔案term。

資訊安全系統設計基礎實驗二:固件設計(20135229,20135234)一、實驗内容
資訊安全系統設計基礎實驗二:固件設計(20135229,20135234)一、實驗内容
資訊安全系統設計基礎實驗二:固件設計(20135229,20135234)一、實驗内容

二、代碼解析

(1)分析

  • 這個代碼是生産者-消費者問題模型的實作。
  • 主程式中分别啟動生産者線程和消費者 線程。生産者線程不斷順序地将0到1000的數字寫入共享的循環緩沖區,同時消費者線程不斷地從共享的循環緩沖區讀取資料。
  • 生産者首先要獲得互斥鎖,并且判斷寫指針+1 後是否等于讀指針,如果相等則進入等待狀态,等候條件 變量notfull;如果不等則向緩沖區中寫一個整數,并且設定條件變量為notempty,最後釋放互斥鎖。

(2)源代碼注釋

#include <stdio.h>          
#include <stdlib.h>          
#include <time.h>          
#include "pthread.h"          
#define BUFFER_SIZE 16          
/* 設定一個整數的圓形緩沖區 */          
struct         prodcons {
           
};
           
/*初始化緩沖區:初始化緩存指針資訊(信号量)*/          
void init(struct prodcons * b)      
    pthread_mutex_init(&b->lock, NULL);
           
    pthread_cond_init(&b->notempty, NULL);
           
    pthread_cond_init(&b->notfull, NULL);
           
    b->readpos =               ;
           
    b->writepos =               ;
           
}
           
/* 向緩沖區中寫入一個整數*/          
void put(struct prodcons * b, int data)      
printf         (                "wait for not full\n"         );
           
    }
           
    b->writepos++;
           
if         (b->writepos >= BUFFER_SIZE) b->writepos =               ;
           
}
           
/*從緩沖區中讀出一個整數 */          
int get(struct prodcons * b)      
int         data;
           
printf         (                "wait for not empty\n"         );
           
    }
           
    b->readpos++;
           
if         (b->readpos >= BUFFER_SIZE) b->readpos =               ;
           
return         data;
           
}
           
#define OVER (-1)          
struct         prodcons buffer;
           
/*實作一個生産者程式:生産者線程不斷順序地将0到1000的數字寫入共享的循環緩沖區,當生産-1時,程式終止。*/          
void         * producer(                void         * data)
           
int         n;
           
printf         (                " put-->%d\n"         , n);
           
         put(&buffer, n);
           
    }
           
    put(&buffer, OVER);
           
printf         (                "producer stopped!\n"         );
           
return         NULL;
           
}
           
/*消費掉緩存中生産出來的資料:消費者線程不斷地從共享的循環緩沖區讀取資料,當消費-1時,程式終止*/          
void         * consumer(                void         * data)
           
int         d;
           
while         (                1         ) 
           
         d = get(&buffer);
           
if         (d == OVER )                 break         ;
           
printf         (                " %d-->get\n"         , d);
           
    }
           
printf         (                "consumer stopped!\n"         );
           
return         NULL;
           
}
           
int main(void)      
    pthread_t th_a, th_b;
           
void         * retval;
           
    init(&buffer);
           
     pthread_create(&th_a, NULL, producer,               );
           
     pthread_create(&th_b, NULL, consumer,               );
           
    pthread_join(th_a, &retval);
           
    pthread_join(th_b, &retval);
           
return             ;
           
}
           

1.找不到檔案

  • 檔案夾壓縮拷貝到共享檔案夾bc之後,進入虛拟機,在指令行輸入./install.sh配置編譯環境失敗。顯示install.sh not found。
  • 我們打開的指令行所在的是系統預設位置,應該進入bc再輸入指令。

2.執行./term錯誤

可以通過方法建立一個連接配接來解決。首先在超級終端中進入/dev檔案夾中。

輸入指令“ln –sf /dev/tts/0 /dev/ttyS0” 注意空格與字母l、數字0

轉載于:https://www.cnblogs.com/lv-20135229/p/4989661.html