日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc

發布時間:2024/4/19 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

操作系統進程同步實驗報告

實驗三:進程同步實驗

一、實驗任務:

(1)掌握操作系統的進程同步原理;

(2)熟悉linux的進程同步原語;

(3)設計程序,實現經典進程同步問題。

二、實驗原理:

(1)P、V操作

PV操作由P操作原語和V操作原語組成(原語是不可中斷的過程),對信號量進行操作,具體定義如下:

P(S):①將信號量S的值減1,即S=S-1;

②如果S30,則該進程繼續執行;否則該進程置為等待狀態,排入等待隊列。

V(S):①將信號量S的值加1,即S=S+1;

②如果S>0,則該進程繼續執行;否則釋放隊列中第一個等待信號量的進程。

(2)信號量

信號量(semaphore)的數據結構為一個值和一個指針,指針指向等待該信號量的下一個進程。信號量的值與相應資源的使用情況有關。當它的值大于0時,表示當前可用資源的數量;當它的值小于0時,其絕對值表示等待使用該資源的進程個數。注意,信號量的值僅能由PV操作來改變。

一般來說,信號量S30時,S表示可用資源的數量。執行一次P操作意味著請求分配一個單位資源,因此S的值減1;當S<0時,表示已經沒有可用資源,請求者必須等待別的進程釋放該類資源,它才能運行下去。而執行一個V操作意味著釋放一個單位資源,因此S的值加1;若S£0,表示有某些進程正在等待該資源,因此要喚醒一個等待狀態的進程,使之運行下去。

(3)linux的進程同步原語

①wait();阻塞父進程,子進程執行;

②#include

#include

key_t ftok (char*pathname, char proj);它返回與路徑pathname相對應的一個鍵值。

③int semget(key_t key, int nsems, int semflg)

參數key是一個鍵值,由ftok獲得,唯一標識一個信號燈集,用法與msgget()中的key相同;參數nsems指定打開或者新創建的信號燈集中將包含信號燈的數目;semflg參數是一些標志位。參數key和semflg的取值,以及何時打開已有信號燈集或者創建一個新的信號燈集與msgget()中的對應部分相同。該調用返回與健值key相對應的信號燈集描述字。調用返回:成功返回信號燈集描述字,否則返回-1。

④int semop(int semid, struct sembuf *sops, unsigned nsops);

semid是信號燈集ID,sops指向數組的每一個sembuf結構都刻畫一個在特定信號燈上的操作。nsops為sops指向數組的大小。

⑤int semctl(int semid,int semnum,int cmd,union semun arg)

該系統調用實現對信號燈的各種控制操作,參數semid指定信號燈集,參數cmd指定具體的操作類型;參數semnum指定對哪個信號燈操作,只對幾個特殊的cmd操作有意義;arg用于設置或返回信號燈信息。

三、實驗源程序:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define PERM S_IRUSR|S_IWUSR

#define SEMKEY (key_t)0x200

typedef union _senum{

int val;

struct semid_ds *buf;

ushort *array;

}semun;

int semid;

static int count=0;

FILE *fp,*fp1,*fp2;

struct sembuf prmutex={0,-1,0},pwmutex={1,-1,0},ps={2,-1,0};

struct sembuf vrmutex={0,1,0},vwmutex={1,1,0},vs={2,1,0};

int initsem()

{

semun x;

x.val=1;

if((semid=semget(SEMKEY,3,0600|IPC_CREAT|IPC_EXCL))==-1)

{

if(errno==EEXIST)

s

總結

以上是生活随笔為你收集整理的进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。