作業系統課程設計 執行緒的同步與互斥

2022-08-10 05:42:13 字數 2904 閱讀 2537

執行緒同步**,裡面包含互斥訊號量,這裡將它注釋了。

//

2.執行緒的同步與互斥 2015.12.11

#include

#include

#include

#include

intcurrent;

long

timecount;

#define ntcb 3

#define finished 0

#define running 1

#define ready 2

#define blocked 3

#define get_indos 0x34

#define get_crit_err 0x5d06

#define timeint 0x08

#define timeslip 20 //

時間片改大

#define stacklen 1024

char far *indos_ptr=0

;char far *crit_err_ptr=0;//

記錄型訊號量

typedef struct

semaphore;

struct

tcbtcb[ntcb];

semaphore mutex;

semaphore buffersem1, buffersem2;

void initindos(void

);int dosbusy(void

);void block(struct tcb **qp);

void wakeup_first(struct tcb **qp);

void p(semaphore *sem);

void v(semaphore *sem);

void

p1();

void

p2();

intfind();

void

interrupt new_swtch();

void

interrupt swtch();

void interrupt (*old_int8)(void

);void interrupt new_int8(void

);void interrupt test_int8(void

);void

over();

void

inittcb();

void

show_tcb_state();

intall_finished();

void

releasetcb();

typedef

void (far *funcptr)(void

);int create(char *name, funcptr func, int

stlen);

void initindos(void)}

int dosbusy(void)//

同步和互斥相關函式****************************************===

//將執行緒插入到阻塞佇列

void block(struct tcb **qp)

//插入到隊尾

else

tcb[current].next =null;

//主動切換

swtch();}//

從阻塞佇列中喚醒第乙個執行緒

void wakeup_first(struct tcb **qp)

//p 操作

void p(semaphore *sem)

enable();}//

v 操作

void v(semaphore *sem)

swtch();

enable();}//

生產者消費者問題

void

p1()

}void

p2()

}int

find()

void interrupt swtch() //

其他原因cpu排程

disable();

//儲存現場

tcb[current].ss =_ss;

tcb[current].sp =_sp;

if(tcb[current].state ==running)

tcb[current].state =ready;

//切換堆疊

_ss =tcb[id].ss;

_sp =tcb[id].sp;

tcb[id].state =running;

current =id;

timecount = 0

; enable();

}void interrupt new_int8(void

) }

}void

over()

swtch();

}void

inittcb()

void

show_tcb_state()

}}int

all_finished()

void

releasetcb()

}void

main()

tcb[

0].name[0]='\0'

; tcb[

0].state=finished;

setvect(timeint, old_int8);

show_tcb_state();

printf(

"multi_task system terminated.\n");

//system("pause");

}

作業系統課程設計

實驗 一 程序管理與程序同步 實驗目的 了解程序管理的實現方法,理解和掌握處理程序同步問題的方法並完成程式設計。實驗內容 實現銀行家演算法 程序排程的過程模擬。實驗步驟 理解銀行家演算法的核心機制 設計相應資料結構 程式設計實現 測試。理解程序的三狀態排程過程 設計排程演算法 程式設計實現 測試。實...

作業系統課程設計

1 實驗內容 學習程序管理的設計與實現,學習和運用作業系統原理,設計乙個作業系統子系統的模擬系統。通過該系統的設計除錯可增加對作業系統實現的感知性。設計乙個允許n個程序併發執行的程序管理的模擬系統。該系統包括簡單的程序控制 同步及通訊機構,其程序排程演算法可任意選擇。分析系統所需的資料結構 演算法的...

作業系統課程設計 模擬作業系統

程序管理主要包括程序排程,程序的建立和撤銷 程序的阻塞和喚醒,中斷作用的實現。用全域性變數模擬重要暫存器,如cpu重要暫存器,程式狀態暫存器psw 指令暫存器ir,程式計數器pc,資料緩衝暫存器dr等。中斷的發現應該是硬體的工作,這裡在函式cpu中加檢測psw的方式來模擬。在cpu 函式中,每執行一...