91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

程序完成段頁式虛擬存儲管理存儲分配、地址重定位和缺頁中斷處理    為一個進程的內存申請(多少個段,每個段多大)分配內存,當一個進程(完成)結束時回收內存;    (2)對一個給定邏輯地址,判斷其是否缺段、缺頁,若不缺段、不缺頁,則映射出其物理地址;    (3)若缺段則進行缺段中斷處理,若缺頁則進行缺頁中斷處理。    假定內存64K,內存塊(頁框)1K,進程邏輯地址空間最大16個段,每個段最大64K。假設進程運行前未預先裝入任何地址空間。    輸出每次存儲分配/回收時,內存自由塊分布情況、相關進程的段表和頁表信息。

資源截圖

代碼片段和文件信息

#include
#include
#include
#include
#include

typedef?struct?Page??//頁結構
{
int?ID;??????????//頁號
char?in_out;?????//是否在內存
int?pianyi;???????//頁內偏移
int?block_num;???//對應塊號
int?time;????????//在內存的時間
int?Process_ID;??//所屬進程ID
char?name[10];???//所屬進程名
int?Segment_ID;??//所屬進程段號
struct?Page?*next;
}Pa*PaNode;

typedef?struct?Segment?//段結構
{
int?ID;??????????//段號
Page?*page;???????//段中的頁結構
int?size;????????//段大小
char?in_out;?????//是否在內存中
????struct?Segment?*next;
}Seg*SegNode;

typedef?struct?PCB?//進程信息
{
Segment?*segm;?//進程段信息
int?total_segmet;//段總數
int?ID;????????//進程ID
char?name[10];?//進程名
struct?PCB?*next;
}PCB*pcb;

typedef?struct?Memory//內存塊信息
{
int?ID;//頁框號
char?allocated;//標記是否已分配
int?block_size;//頁框大小
int?Process_ID;??//占用進程ID
char?name[10];???//占用進程名
int?Segment_ID;??//占用進程段號
int?Page_ID;?????//占用進程的頁號
int?time_in_memory;//頁在內存中的時間
int?recently;//最近訪問的時間
struct?Memory?*next;
}*memory;
//函數申明
void?CreateSegment();
void?CreateMemory();
void?CreateProcess();
void?InitPage(PaNode?*p);
void?InitSegment(SegNode?*s);
void?PrintProcessSegment();
void?InitProcess(pcb?*pro);
void?ApplyMemory();
void?PrintMemory();
void?AddressExchange();
void?InterruptHanding(int?idint?iint?j);
void?Apply();
void?Recycle();

int?Register;//段表的起始地址
int?Flash;?//內存大小
int?BLOCK;//頁框大小
int?remained;//剩余的內存
pcb?process;??//申明一個進程鏈表
int?total_process?=?0;//進程總數
memory?memory_info;//申明一個記錄內存信息的鏈表
int?InterruptType?=?-1;//中斷類型1表示缺段中斷,0表示缺頁中斷

void?CreateProcess()//建立進程信息
{
PCB?*p*s;
Seg?*m*n;
Pa?*r*t;
p?=?process;
int?ijk;
printf(“請輸入進程總數:“);
scanf(“%d“&total_process);
for(i?=?0;i? {
s?=?(PCB*)malloc(sizeof(PCB));
printf(“\n請輸入第%d個進程名:“i+1);
scanf(“%s“s->name);
s->ID?=?i;
printf(“\n請輸入該進程的段總數:“);
scanf(“%d“&s->total_segmet);
InitSegment(&s->segm);
n?=?s->segm;
for(j?=?0;j?total_segmet;j?++)
{
m?=?(Seg*)malloc(sizeof(Seg));
printf(“\n請輸入第%d個段的段大小:?“j+1);
scanf(“%d“&m->size);
m->ID?=?j;
m->in_out?=?‘N‘;
InitPage(&m->page);
t?=?m->page;
for(k?=?0;k?size/BLOCK;k?++)
{
r?=?(Pa*)malloc(sizeof(Pa));
r->block_num?=?-1;
r->ID?=?k;
r->in_out?=?‘N‘;
r->time?=?0;
r->pianyi?=?0;
r->Process_ID?=?i;
r->Segment_ID?=?j;
strcpy(r->names->name);
t->next?=?r;
t?=?t->next;
t->next?=?NULL;
}
n->next?=?m;
n?=?n->next;
n->next?=?NULL;
}
p->next?=?s;
p?=?p->next;
p->next?=?NULL;
}

}
//初始化
void?InitPage(PaNode?*p)
{
*p?=?(PaNode)malloc(sizeof(Pa));
(*p)->next?=?NULL;
}

void?InitSegment(SegNode?*s)
{
*s?=?(SegNode)malloc(sizeof(Seg));
(*s)->next?=?NULL;
}

void?InitProcess(pcb?*pro)
{
*pro?=?(pcb)malloc(sizeof(PCB));
(*pro)->next?=?NULL;

}

void?InitMemory(memory?*m)
{
*m?=?(memory)malloc(sizeof(Memory)

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-05-31?18:11??OS_test2\Debug\
?????文件????????4304??2013-05-23?13:12??OS_test2\OS_test2.dsp
?????文件?????????541??2013-05-23?12:42??OS_test2\OS_test2.dsw
?????文件???????66560??2013-05-30?13:06??OS_test2\OS_test2.ncb
?????文件???????53760??2013-05-30?13:06??OS_test2\OS_test2.opt
?????文件?????????895??2013-05-30?13:04??OS_test2\OS_test2.plg
?????文件???????24698??2013-05-30?13:04??OS_test2\main.cpp
?????目錄???????????0??2013-05-30?13:06??OS_test2\

評論

共有 條評論