操作系统课设--使用信号量解决生产者/消费者同步问题
山東大學操作系統課設lab3
- 實驗三 使用信號量解決生產者/消費者同步問題(lab3)
- 實驗目的
- 理解Nachos的信號量是如何實現的
- 生產者/消費者問題是如何用信號量實現的
- 在Nachos中是如何創建并發線程的
- 在Nachos下是如何測試和debug的
實驗三 使用信號量解決生產者/消費者同步問題(lab3)
實驗目的
使用操作系統信號量機制,編寫程序解決生產者/消費者同步問題。
理解Nachos的信號量是如何實現的
信號量問題主要是對信號量的的占用。分為兩個角色來考慮信號量,一個是生產者,一個是消費者。
生產者/消費者問題是如何用信號量實現的
生產者負責生產message;等待buffer中是否有空位;獲取互斥鎖;將一條message放入buffer中;釋放互斥鎖; buffer中message++。
消費者等待通知有Message;獲取互斥鎖;取出一條message;釋放互斥鎖;buffer中message–。
在Nachos中是如何創建并發線程的
常規操作:
#include <fcntl.h>//訪問權限、創建文件模式、非阻塞標記
#include <stdlib.h>//定義了五種類型、一些宏和通用工具函數。
#include <unistd.h>//提供對 POSIX 操作系統 API 的訪問功能的頭文件的名稱
主要程序在prodcons.cc中
定義3個信號量;2個資源信號量,nempty,full;1個互斥信號量,mutex。
獲取互斥鎖,放入message,釋放互斥鎖。
獲取互斥鎖,取出message,釋放互斥鎖。
在構造函數Prodscon中初始化信號量和生產者、消費者數組
在Nachos下是如何測試和debug的
./nachos相當于執行.exe;進入桌面 cd ~/Desktop/
實驗結果沒有打印出來,而是生成了兩個文件tmp_0.tmp_1。兩個文件分別對應兩個消費者讀到的信息,信息中會記錄生產者的名稱。tmp_0、tmp_1如下:
但是這樣只是tmp_0里有生產者的記錄而已,tmp_1里沒有。我詢問了同學,他告訴我要加random seed,于是我去搜了一下隨機種子的含義及用法。-rs參數讓nachos的線程隨機yield,讓出cpu。我修改了命令:./nachos -rs 100,結果tmp_0,tmp_1如下:
我再次修改了命令:./nachos -rs 12553,結果tmp_0,tmp_1如下:
但是感覺對-rs的作用還是不是特別懂。
總結
以上是生活随笔為你收集整理的操作系统课设--使用信号量解决生产者/消费者同步问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统课设--具有优先级的线程调度
- 下一篇: 操作系统课设--扩展文件系统