資源簡介

代碼片段和文件信息
#include????/*里面包含了很多BIOS和DOS調用函數*/
#include????/*動態分配內存,相當于malloc.h*/
#include??
#include?
#include????/*包含對字符數組操作的函數*/
/*#include?“indos.c“
#include?“exterr.c“*/
#define?GET_INDOS?0X34
#define?GET_GRIT_ERR?0X5D06
#define?NTCB?5???/*表示系統允許的最大線程數*/
#define?NTEXT?20????/*消息的最大字節數*/?
#define?NBUF??5?????/*消息緩沖區的數目*/
/*#define?TL???3*/
/*?state?code?*/
/*?null 0 not?assigned?*/
#define?FINISHED?0????/*表示線程處于終止態或TCB是空白狀態*/?
#define RUNNING 1?????/*表示線程處于運行狀態*/
#define?READY? 2?????/*表示線程處于就緒狀態*/
#define?BLOCKED?3?????/*表示線程處于阻塞狀態*/
unsigned?oldssoldsp;
static?int?current=0; /*?the?tcb?index?of?the?current?process?當前正在運行的進程的ID?*/
int?multstop=1;
int?timecount=0;
int?TL;
int?n?=0;
int?buf1;
char?far?*indos_ptr?=?0?;??/*INDOS標志的地址*/
char?far?*crit_err_ptr?=?0?;???/*嚴重錯誤標志的地址*/
/*?the?pointer?to?the?process‘s?code指針指向進程的代碼??*/
typedef?int?(far?*codeptr)(void);
/*信號量結構體,記錄型信號量*/?
typedef?struct{
??int?value;???/*信號量的值,表示空閑資源的總數*/
??struct?TCB?*wq;???/*線程阻塞隊列隊首指針*/
}?semaphore;
semaphore?mutexfb={1NULL};/*?是一個關鍵資源空閑消息緩沖隊列的互斥信號量?*/
semaphore?sfb={NBUFNULL};/*?空閑消息緩沖隊列的計數信號量?*/
semaphore?mutex={1NULL};??/*對n執行加操作時的信號量,f5和f6會用到*/?
semaphore?sa={1NULL}sb={0NULL};
/*消息緩沖區*/
struct?buffer?{
??int?id;
??int?size;???/*消息長度*/
??char?text[NTEXT];??/*消息正文*/?
??struct?buffer?*next;??/*指向下一個消息緩沖區的指針*/
}?buf[NBUF]*freebuf;??/*buf[]是消息隊列,freebuf指向消息隊列中的某條消息*/?
/*線程控制塊*/
struct?TCB?{
int? id;???/*?unique?process?id?*/
char name[10]; /*?線程的外部標識符?*/
unsigned?char?*stack;?/*?線程堆棧的真實地址?*/
unsigned? sp;??/*堆棧指針,指向棧頂內容*/
????unsigned? ss;??/*堆棧段址,存放程序下一條指令所在的地址*/
char? state;?/*線程狀態,取值可以是FINISHED、RUNNING、READY、BLOCKED*/
unsigned? *chan;?/*?event?process?is?awainting?*/
struct?buffer?*mq;???/*接受線程的消息隊列隊首指針*/?
semaphore?????mutex;??/*接收線程的消息隊列的互斥信號量*/
semaphore?????sm;???/*接收線程的消息隊列的計數信號量,用于實現同步*/?
struct?TCB???*next;?/*?指向下一個線程的指針?*/
}?tcb[NTCB]?;
/*?the?registers?pushed?in?the?stack?after?entering?an?interrupt?funtion?*/
/*struct?int_regs?{
??unsigned?bpdisidsesdxcxbxaxipcsflags;
};*、?
/*頭文件的這個數據結構修改成這樣?線程的私有堆棧,保存現場信息*/
struct?int_regs?{
unsigned?bpdisidsesdxcxbxaxipcsflagsoffseg;
/*????段寄存器cs指向存放程序的內存段,ip是用來執行下條待執行指令在內存中的偏移量
??把他們和在一起可在該內存段?內取到下次要執行的指令,
??????段寄存器ss指向用于堆棧的內存段,sp指向該堆棧的棧頂,和在一起可訪問棧頂單元
??????當偏移量用到了指針寄存器BP,則其缺省的段寄存器是SS,并且可用BP訪問整個堆棧?
??????段寄存器ds指向數據段,es指向附加段,存放當前執行程序中一個輔助數據段的段地址在存取操作數時,二者之一和一個偏移量合并就可得到存儲單元的物理地址
??該偏移量可以是具體數值,符號地址和指針寄存器的值等之一
??SI,DI是變址寄存器,flags是標志寄存器?
?段寄存器?????????????偏移地址寄存器
?CS??????????????????IP
?SS????????????????SP或BP
?DS????????????????BX、DI、SI?
?ES???????????????DI(用于串指令)
*/
};
/*struct?{
??char?name[10];
??codeptr?code;
}table[NTCB]={“f1“f1;
??????“f2“f2;
??????“f3“f3;
??????“f4“f4;
??????};
*/
void?interrupt?(*old_int8)(void);??/*定義用于處理中斷的函數?*/
void?interrupt?new_int8(void);???/*時間片到時引起的CPU調度*/
int?create(char?*name
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-09-24?10:55??多任務系統\
?????文件???????28479??2016-05-27?00:49??多任務系統\amy_main.c
?????文件???????21498??2016-05-27?00:19??多任務系統\一個發送者兩個接受者.c
?????文件??????443145??2016-06-12?00:13??文件系統\amain.exe
?????文件???????34414??2016-06-12?00:13??文件系統\amain.c
?????目錄???????????0??2016-09-24?10:55??文件系統\
?????文件??????359136??2016-09-24?10:55??操作系統課程設計.docx
?????文件????10485762??2016-06-12?14:54??文件系統\虛擬磁盤.disk
評論
共有 條評論