資源簡介
操作系統 實驗報告 很全面 可以直接上交了 含源代碼 實驗報告 可執行程序

代碼片段和文件信息
#include?
#include?
#define?TOTAL_MEMORY_SIZE?640
#define?SYSTEM_MEMORY_SIZE?40
#define?getpch(type)(type*)malloc(sizeof(type))
typedef?struct?Job?JCB;
typedef?struct?MemoryBlock?MB;
int?order?=?0;
//作業的內部唯一標識符
//作業控制塊
struct?Job
{
????????int?ident;
//唯一的內部標識符
????????char?jobName[10];?
//作業名
????????char?state;?
//作業狀態W表示后備,R表示執行,F表示完成
????????int??memoryNeedSize;
//所需的內存空間,單位為KB
????????JCB*?next;
????????MB??*?mbPtr;
}*headJCB=NULL*endJCB=NULL*headJCBFish=NULL*endJCBFish;
struct?MemoryBlock
{
???????int?ident;
???//如果該內存塊已經分配給作業,則此值為作業的內部標識符
???????int?begin;
???//此內存塊的始地址
???????int?memorySize;
???//此內存塊的空間大小
???????int?state;
???//0表示未分配,1表示已經分配
???????MB??*pre?*next;
}*headMBPtr=NULL;
//為新的作業創建JCB控制塊
void?addJCB(JCB*?newJCB);
void?createJCB()
{
????????JCB*?newJCB?=?getpch(JCB);
????????if(newJCB?==?NULL)
????????{
????????????????printf(“系統內存不夠!\n“);
???????????????//?exit(-1);
????????}
????????printf(“\n請輸入作業名:?“);
????????scanf(“%s“newJCB->jobName);
????????printf(“\n請輸入所需的主存空間(K):?“);
????????scanf(“%d“&newJCB->memoryNeedSize);
????????newJCB->ident?=?++order;
//作業序號加1
????????newJCB->state?=?‘W‘;
//初始化為后備狀態
????????newJCB->next?=?NULL;
????????newJCB->mbPtr?=?NULL;
????????addJCB(newJCB);
????????printf(“創建作業成功.\n“);
}
//創建內存分區塊
MB*?createMB(int?jobIdentint?begin?int?size?int?state?MB*?pre?MB*?next)
{
??????MB*?newMB?=?getpch(MB);
??????newMB->ident?=?jobIdent;
??//等于作業的序號
??????newMB->begin?=?begin;
??//開始位置的設置
??????newMB->memorySize?=?size;
??//空間大小的設置
??????newMB->state?=?state;
??//狀態的設置
??????newMB->pre?=?pre;
??//前向指針
??????newMB->next?=?next;
??//后向指針
??????return?newMB;
}
//初始化內存分區塊鏈,分為系統區和用戶作業區
void?initMblinkList()
{
?????//對于系統區,前鏈置為空狀態為已分配。已分配區作業內部標識符一率置為-1.
?????MB*?systemMB?=?createMB(-10SYSTEM_MEMORY_SIZE1NULLNULL);
?????MB*?userMB?=?createMB(-1SYSTEM_MEMORY_SIZETOTAL_MEMORY_SIZE-SYSTEM_MEMORY_SIZE0systemMBNULL);
?????systemMB->next?=?userMB;
?????headMBPtr?=?systemMB;
}
//把作業控制塊添加到后備作業鏈當中
void?addJCB(JCB*?newJCB)
{
????????if(newJCB==NULL)
????????????????return?;
????????if(headJCB==NULL)
????????{//未有作業
????????????????endJCB?=?headJCB?=?newJCB;
????????}
????????else
????????{//隊列未空,直接插入到隊尾
????????????????endJCB->next?=?newJCB;
????????????????endJCB?=?endJCB->next;
????????}
????????newJCB?=?NULL;
}
void?dispMblinkList()
{
?????printf(“類別\t開始地址\t所占空間大?。╧)\t\t狀態\t作業內部標識號\n“);
?????MB*?systemMBPtr?=?headMBPtr;
?????printf(“系統區\t“);
?????printf(“%d\t\t“systemMBPtr->begin);
?????printf(“%d\t\t\t“systemMBPtr->memorySize);
?????printf(“已分配\n“);
?????
?????//以下部分打印輸出用戶區內存分配情況
?????MB*?userMBPtr?=?systemMBPtr->next;
?????while(userMBPtr)
?????{
??????????printf(“用戶區\t“);
??????????printf(“%d\t\t“userMBPtr->begin);
??????????printf(“%d\t\t\t“userMBPtr->memorySize);
??????????userMBPtr->state==0?printf(“未分配\t“
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????13079??2011-11-28?10:09??實驗三\Cpp3.cpp
?????文件???????3377??2011-12-03?01:03??實驗三\Cpp3.dsp
?????文件????????516??2011-12-03?01:04??實驗三\Cpp3.dsw
?????文件??????41984??2011-12-03?01:04??實驗三\Cpp3.ncb
?????文件??????48640??2011-12-03?01:03??實驗三\Cpp3.opt
?????文件????????740??2011-12-03?01:03??實驗三\Cpp3.plg
?????文件??????30730??2011-12-03?00:58??實驗三\Debug\cpp1.obj
?????文件?????188513??2011-12-03?01:03??實驗三\Debug\Cpp3.exe
?????文件?????192876??2011-12-03?01:03??實驗三\Debug\Cpp3.ilk
?????文件??????26157??2011-12-03?01:03??實驗三\Debug\Cpp3.obj
?????文件????3565628??2011-12-03?00:58??實驗三\Debug\Cpp3.pch
?????文件?????467968??2011-12-03?01:03??實驗三\Debug\Cpp3.pdb
?????文件?????214088??2011-11-28?09:35??實驗三\Debug\Os3.pch
?????文件?????148480??2011-12-03?01:03??實驗三\Debug\vc60.idb
?????文件??????77824??2011-12-03?00:58??實驗三\Debug\vc60.pdb
?????文件?????187459??2011-12-20?09:15??實驗三\實驗三報告.docx
?????目錄??????????0??2011-12-17?23:05??實驗三\Debug
?????目錄??????????0??2011-12-17?23:05??實驗三
-----------?---------??----------?-----??----
??????????????5208059????????????????????18
- 上一篇:GA408-道路交通違法管理信息代碼
- 下一篇:STM32L15**手冊和寄存器說明
評論
共有 條評論