青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Brian Warehouse

Some birds aren`t meant to be caged, their feathers are just too bright... ...
posts - 40, comments - 16, trackbacks - 0, articles - 1

實驗二代碼 首次適應法 位示圖法

Posted on 2010-08-17 13:02 Brian 閱讀(1613) 評論(0)  編輯 收藏 引用 所屬分類: OS
/*
Title: 首次適應算法
Author: Brian
Date: 2010/05/31
*/
#include 
<iostream>
#include 
<cstdlib> // system()
using namespace std;

typedef 
struct SNode { // Space Node
    int start,end; // 起始,結束
    int length; // 長度大小
    struct SNode *next; // 指向下一結點的指針
}* SP;

SP space
=(SP)malloc(sizeof(SNode)); // 全局變量,內存空間頭結點


void DispSpace() { // 顯示內存空間分配情況

    SP p
=space;
    cout
<<"\n  空閑區說明表 \n"
        
<<"---地址--長度---\n";
    
while (p->next)
    {
        cout
<<"    "<<p->next->start
            
<<"    "<<p->next->length<<endl;
        p
=p->next;
    }
    cout
<<"----------------\n";
}

void Initial() { // 初始化說明表
    SP p,q;
    p
=(SP)malloc(sizeof(SNode));
    q
=(SP)malloc(sizeof(SNode));    
    p
->start=14; p->length=12; p->end=26;
    q
->start=32; q->length=96; q->end=128// 指導書上的作業分配
    space->next=p; // 與頭結點連接
    p->next=q;
    q
->next=NULL;
    DispSpace();
}

void Allocation(int len) { // 分配內存給新作業
    SP p=space,q;
    
while (p->next) {
        
if (p->next->length < len)
            p
=p->next;
        
else if (p->next->length > len) {
            p
->next->start=p->next->start+len;
            p
->next->length=p->next->length-len;
            cout
<<"分配成功!\n";
            DispSpace(); 
return;
        }
        
else {
            q
=p->next;
            p
->next=q->next;
            cout
<<"分配成功!\n";
            DispSpace(); 
return;
        }    
    } 
    cout
<<"分配失敗!\n";
    DispSpace(); 
return;
}

void CallBack(int sta,int len) { // 回收內存
    SP p=space,q=p->next,r; // 開始地址和長度
    p->end=0;
    
int en=sta+len;
    
while (q) {
        
if (sta == 0) { // 初始地址為0
            if (en == q->start) { // 正好回收
                q->start=0;
                q
->length=q->end;
                
return;
            }
            
else {
                r
=(SP)malloc(sizeof(SNode));
                r
->start=sta; r->length=len; r->end=en;
                p
->next=r;
                r
->next=q;
                
return;
            }
        }
        
else if ((p->end < sta) && (q->start > en)) { // 上鄰區
            r=(SP)malloc(sizeof(SNode));
            r
->start=sta; r->length=len; r->end=en;
            p
->next=r;
            r
->next=q;
            
return;
        }
        
else if ((p->end < sta) && (q->start == en)) { // 鄰區相接
            q->start=sta;
            q
->length=q->end-sta;
            
return;
        }
        
else if ((p->end == sta) && (q->start < en)) { // 下鄰區
            p->end=en;
            p
->length=en-p->start;
            
return;
        }
        
else if (p->end==sta && q->start==en) { // 鄰區相接
            p->end=q->end;
            p
->length=p->end-p->start;
            p
->next=q->next;
            
return;
        }
        
else {
            p
=p->next;
            q
=q->next;
        }
    }
}


void main() {
    Initial();
    cout
<<"現在分配大小為 6K 的作業 4 申請裝入主存: ";
    Allocation(
6); // 分配時參數只有長度    
    
//--------指導書測試數據演示----------
    cout<<"現回收作業 3 (起址10,長度4)\n";
    CallBack(
10,4);
    DispSpace();
    cout
<<"現回收作業 2 (起址26,長度6)\n";
    CallBack(
26,6);
    DispSpace();
    
//---------------演示結束-------------
    system("pause");
}

 

/*
Title: 位示圖法
Author: Brian
Date: 2010/05/25
*/
#include 
<iostream>
#include 
<cstdlib>
using namespace std;

typedef 
struct PNode { // 進程PCB    
    struct PNode *next; // 后向指針
    char name[12]; // 進程名
    int *PT; // 頁表
    int size; // 進程所需要的空間
}* Proc;

Proc H
=(Proc)malloc(sizeof(PNode)); // 進程頭結點
Proc CurrJob; // 當前進程指針

int BG_DEF[8][8= {  // 指導書上的初始條件
    {1,1,0,0,1,1,1,0},
    {
0,1,0,1,0,1,0,0},
    {
0,0,0,0,0,0,0,0},
    {
1,0,0,0,0,0,0,1},
    {
0,0,0,0,0,0,0,0},
    {
0,0,0,0,0,0,0,0},
    {
0,0,0,0,0,0,0,0},
    {
0,0,0,0,0,0,0,0
};
int FREE_DEF = 54// 指導書上初始條件的空閑塊數

int BG[8][8]={0}; // 用戶自定義位示圖
int FREE=64// 用戶自定義空閑塊數

void DispBG(int flag) // 顯示當前位示圖 F
{
    cout
<<"\n字節號\\位數\t0\t1\t2\t3\t4\t5\t6\t7\n";
    
for(int i=0; i<8; i++)
    {
        cout
<<'\t'<<i;
        
for(int j=0; j<8; j++)
        {
            
if (flag==1)
                cout
<<"\t"<<BG[i][j];
            
else cout<<"\t"<<BG_DEF[i][j];
        }
        cout
<<endl;
    }
    cout
<<endl;
}

void Initial() // 用戶選取坐標初始化內存塊
{
    DispBG(
1);
    cout
<<"\n請輸入您想要分配的塊號坐標,以 -1 -1 結束:\n";
    
int i,j;
    
while (1)
    {
        cin
>>i>>j;
        
if (i+j==-2// i==-1 && j==-1
            break;
        BG[i][j]
=1;
        FREE
--;
    }
    DispBG(
1);
}

void Allocation(int flag) //內存分配
{
    
int i,j,k,kflag=1// 進程個數
    Proc s=H;
    s
=s->next=(Proc)malloc(sizeof(PNode));
    cout
<<"請輸入進程名和內存大小: ";
    cin
>>s->name>>s->size;
    
if (flag==1)
    {
        
if (s->size > FREE)
        {
            cout
<<"空間不足,分配失敗!";
            
return;
        }
        FREE
-=s->size;
    }
    
else {
        
if (s->size > FREE_DEF) {
            cout
<<"空間不足,分配失敗!";
            
return;
        }
        FREE_DEF
-=s->size;
    }
    
    s
->PT=new int[s->size]; // 新建PT表
    k=0;
    
if (flag==1// 用戶自定義位示圖
    {
        
for (i=0; i<8 && kflag; i++)
            
for (j=0; j<8 && kflag; j++)
            {
                
if (!BG[i][j])
                {
                    BG[i][j]
=1;
                    FREE
--;
                    s
->PT[k++]=8*i+j;
                    
if (k==s->size)
                    {
                        cout
<<"分配完成!\n";
                        kflag
=0;
                    }
                }
            }
    }
    
else // 實驗指導書位示圖
    {
        
for (i=0; i<8 && kflag; i++)
            
for (j=0; j<8 && kflag; j++)
            {
                
if (!BG_DEF[i][j])
                {
                    BG_DEF[i][j]
=1;
                    FREE_DEF
--;
                    s
->PT[k++]=8*i+j;
                    
if (k==s->size)
                    {
                        cout
<<"分配完成!\n";
                        kflag
=0;
                    }
                }
            }
    }
    s
->next=NULL;
}

void CallBack(int flag) //內存回收
{
    
char name[12];
    cout
<<"請輸入需要回收的進程名: ";
    cin
>>name;
    Proc p
=H->next,q=H;
    
while (p)
    {
        
if (strcmp(name,p->name)==0// 刪除進程,回收內存
        {
            
for(int i=0; i<p->size; i++// 修改該進程位示圖
            {
                
int m=p->PT[i]/8;
                
int n=p->PT[i]%8;
                
if (flag==1)
                {
                    BG[m][n]
=0;
                    FREE
++;
                }
                
else {
                    BG_DEF[m][n]
=0;
                    FREE_DEF
++;
                }
            }
            
            q
->next=p->next; // 刪除進程結點
            free(q);
            cout
<<"回收成功!\n";
            
return;
        }
        p
=p->next;
        q
=q->next;
    }
    cout
<<"無此進程,回收內存失敗!\n";
}

void DispPT()
{
    
char name[12];
    cout
<<"請輸入要打印頁表的進程名: ";
    cin
>>name;
    Proc p
=H->next;
    
while (p)
    {
        
if (strcmp(name,p->name) == 0)
        {
            cout
<<"  塊號\n"
                
<<"--------\n";
            
for (int i=0; i<p->size; i++)
                cout
<<"    "<<p->PT[i]<<endl;
            cout
<<"--------\n";
            
return;
        }
        p
=p->next;
    }
    cout
<<"該進程不存在!\n";
}

void Welcome()
{
    cout
<<"----------位示圖法---------\n"
        
<<"       1. 新進程內存分配\n"
        
<<"       2. 舊進程內存回收\n"
        
<<"       3. 打印進程頁表\n"
        
<<"       4. 打印位示圖\n"
        
<<"       5. 退出系統\n"
        
<<"-----------------------------------\n";
}

void main()
{
    H
->next=NULL;
    
int flag;
    cout
<<"內存初始化方式: 1.自定義 2.指導書\n"
        
<<"請選擇: ";
    cin
>>flag;
    
if (flag==1) Initial(); // 用戶選取坐標初始化內存塊
    int choice;
    
while (1)
    {
        Welcome();
        cin
>>choice;
        
switch (choice)
        {
        
case 1: Allocation(flag); break// 進行一次分配內存工作
        case 2: CallBack(flag); break// 回收用戶指定進程的內存
        case 3: DispPT(); break// 打印用戶指定進程的頁表
        case 4: DispBG(flag); break// 打印用戶指定位示圖
        case 5: cout<<"\n退出成功!\n"; system("pause"); exit(1);
        }
    }
}
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产天堂久久综合| 亚洲一区三区视频在线观看| 亚洲乱码久久| 国产日韩欧美中文| 欧美视频你懂的| 欧美91福利在线观看| 久久国产精品黑丝| 亚洲欧美另类国产| 一区二区三区成人精品| 欧美激情一区二区三区成人| 久久精品色图| 性欧美大战久久久久久久久| 亚洲性视频网站| 99综合在线| 9国产精品视频| 99re亚洲国产精品| 亚洲人成欧美中文字幕| 雨宫琴音一区二区在线| 精品不卡在线| 精品99视频| 在线观看日韩精品| 在线欧美一区| 在线精品视频免费观看| 狠狠干综合网| 樱花yy私人影院亚洲| 影音先锋日韩有码| 在线播放视频一区| 韩日午夜在线资源一区二区| 黄色成人精品网站| 尤物精品在线| 最新国产乱人伦偷精品免费网站| 亚洲国产激情| 亚洲免费观看在线观看| 国产精品欧美在线| 亚洲综合电影一区二区三区| 欧美国产极速在线| 欧美成人精品不卡视频在线观看 | 国产精品视频自拍| 欧美午夜精品久久久久久孕妇| 欧美三区在线视频| 国产精品久久久久久户外露出| 国产精品久久久久一区二区三区 | 国产精品日韩精品欧美在线| 国产精品劲爆视频| 国产毛片精品视频| 国内久久婷婷综合| 亚洲高清免费| 99精品欧美一区二区三区| 一区二区三区精品| 午夜精品久久久| 久久久精彩视频| 欧美成人蜜桃| 亚洲美女中文字幕| 亚洲你懂的在线视频| 久久精品国产综合精品| 免费的成人av| 欧美性猛交xxxx免费看久久久| 国产精品社区| 影音先锋日韩有码| 9l国产精品久久久久麻豆| 亚洲欧美日韩在线不卡| 久久免费视频网站| 99精品视频免费全部在线| 欧美精品九九99久久| 奶水喷射视频一区| 欧美视频三区在线播放| 国产精品成人在线观看| 国产美女搞久久| 在线观看亚洲精品| 一本色道88久久加勒比精品| 欧美亚洲一区二区在线观看| 久久嫩草精品久久久精品一| 亚洲国产精品专区久久| 亚洲午夜精品一区二区| 久久久久成人精品免费播放动漫| 欧美久久电影| 国产一区清纯| 国产精品99久久久久久白浆小说| 久久国产精品毛片| 亚洲国产精品久久人人爱蜜臀| 亚洲视频一区在线| 老司机久久99久久精品播放免费| 欧美性猛交xxxx乱大交蜜桃| 在线精品国精品国产尤物884a| 亚洲在线观看免费| 欧美国产日韩免费| 亚洲欧美中文日韩v在线观看| 欧美黄色免费网站| 国产一区二区成人久久免费影院| 日韩视频不卡| 蜜桃av一区二区| 亚洲欧美一区二区精品久久久| 欧美激情综合亚洲一二区| 国内精品免费在线观看| 亚洲香蕉网站| 亚洲高清免费| 久久久精品一区二区三区| 国产精品国产三级国产专区53| 亚洲激情在线视频| 久久久久欧美| 亚洲男人的天堂在线| 欧美三区美女| 一本大道久久a久久精品综合| 麻豆久久婷婷| 欧美一区二区精品久久911| 欧美日韩午夜视频在线观看| 亚洲国产精品久久久久秋霞不卡 | 99re6热在线精品视频播放速度| 久久久噜噜噜久噜久久| 中文欧美在线视频| 欧美紧缚bdsm在线视频| 亚洲国产精品一区二区久| 久久久九九九九| 亚洲欧美日韩国产综合| 欧美视频亚洲视频| 日韩午夜av电影| 亚洲成人在线网站| 国产亚洲精品久久久久久| 亚洲免费精彩视频| 欧美黄色aaaa| 久久亚洲综合色一区二区三区| 国产区亚洲区欧美区| 亚洲欧美伊人| 亚洲免费久久| 欧美激情亚洲国产| 亚洲国产日韩一区| 噜噜噜躁狠狠躁狠狠精品视频 | 久久精品国产一区二区电影| 亚洲天堂成人| 国产精品久久久久毛片大屁完整版| 99v久久综合狠狠综合久久| 亚洲电影第三页| 欧美α欧美αv大片| 亚洲高清免费| 亚洲高清不卡一区| 欧美激情久久久久| 亚洲美女av在线播放| 亚洲国产精品专区久久| 欧美精品一区二区精品网 | 欧美在线观看一二区| 亚洲一区二区影院| 国产精品欧美激情| 午夜一区二区三区不卡视频| 亚洲无线视频| 国产农村妇女精品一二区| 久久成人国产精品| 欧美在线视频不卡| 亚洲第一精品福利| 欧美激情亚洲精品| 欧美成人精品h版在线观看| 亚洲精品综合久久中文字幕| 亚洲人久久久| 国产精品九九久久久久久久| 欧美一区二区三区四区夜夜大片| 亚洲男人的天堂在线观看| 国产一区视频在线观看免费| 噜噜噜在线观看免费视频日韩| 欧美jizzhd精品欧美巨大免费| 亚洲免费观看高清在线观看| 亚洲作爱视频| 国产欧美二区| 久久综合九色综合久99| 欧美成人精品三级在线观看| 亚洲色图在线视频| 亚洲欧美日韩中文播放| 怡红院精品视频| 亚洲精品社区| 国产欧美日韩视频一区二区| 玖玖玖国产精品| 欧美精选午夜久久久乱码6080| 性做久久久久久| 久久亚洲精选| 亚洲图片欧美午夜| 性欧美8khd高清极品| 亚洲第一偷拍| 欧美波霸影院| 91久久精品美女高潮| 免费在线欧美视频| 亚洲无线一线二线三线区别av| 亚洲免费视频观看| 在线观看国产精品淫| 亚洲精品日韩一| 国产亚洲亚洲| 亚洲精品国产精品国自产观看浪潮| 国产精品入口尤物| 欧美不卡在线视频| 国产精品扒开腿做爽爽爽视频| 久久久久免费视频| 欧美另类极品videosbest最新版本| 午夜宅男欧美| 欧美成年人视频网站| 性8sex亚洲区入口| 免费日韩av| 欧美一区永久视频免费观看| 欧美不卡在线| 久久青青草综合| 欧美午夜一区二区| 欧美成人午夜激情视频| 国产精品久久婷婷六月丁香| 欧美好骚综合网|