執行緒同步**,裡面包含互斥訊號量,這裡將它注釋了。
//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 函式中,每執行一...