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

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 閱讀(1612) 評論(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>
            禁久久精品乱码| 久久午夜激情| 一区二区三区 在线观看视| 欧美亚洲综合网| 亚洲综合电影| 久久综合九色99| 亚洲成在人线av| 亚洲精品久久久久久久久久久久久 | 欧美综合国产精品久久丁香| 欧美高清在线| 亚洲免费在线视频| 禁断一区二区三区在线| 亚洲综合精品| 亚洲精选中文字幕| 免费毛片一区二区三区久久久| 国产亚洲综合精品| 久久国产精彩视频| 欧美一区二区私人影院日本| 国产精品一区二区久久| 亚洲欧美影院| 亚洲免费伊人电影在线观看av| 欧美丝袜第一区| 亚洲一区二区在线看| 99这里只有精品| 国产精品vvv| 欧美一级久久久久久久大片| 午夜精品视频一区| 国产一区二区视频在线观看| 久久久久久久久久久久久9999| 午夜日韩福利| 黄色亚洲在线| 久久综合激情| 蜜桃av噜噜一区| 日韩午夜精品| 9国产精品视频| 国产精品免费看久久久香蕉| 欧美在线观看一二区| 性感少妇一区| 樱桃成人精品视频在线播放| 亚洲精品久久久久中文字幕欢迎你 | 亚洲美女毛片| 欧美日韩国产成人| 亚洲欧美日本在线| 午夜免费在线观看精品视频| 激情五月***国产精品| 欧美国产日韩一二三区| 欧美激情久久久久| 亚洲午夜在线视频| 亚洲欧美日韩精品久久亚洲区| 国产欧美一级| 欧美不卡一卡二卡免费版| 牛牛国产精品| 国产女人18毛片水18精品| 亚洲欧美日韩国产| 欧美诱惑福利视频| 亚洲精品一二| 亚洲一区三区视频在线观看| 国产一区二区三区自拍| 亚洲国产人成综合网站| 欧美日韩在线直播| 久久久中精品2020中文| 欧美精品一卡二卡| 久久久一二三| 欧美揉bbbbb揉bbbbb| 久久人人97超碰精品888| 欧美美女喷水视频| 久久久综合网| 欧美午夜宅男影院| 欧美成人午夜激情视频| 国产精品欧美经典| 亚洲国产日韩欧美在线图片| 国产视频一区在线| 亚洲精品孕妇| 亚洲电影毛片| 欧美亚洲日本一区| 亚洲欧美日本另类| 欧美日韩精品一区| 久久亚洲美女| 久久久91精品国产一区二区精品| 一区二区av| 久久综合久久久| 久久久久久久久伊人| 欧美视频第二页| 欧美激情一区二区三区在线视频观看| 国产欧美日韩一区二区三区在线 | 国产偷自视频区视频一区二区 | 欧美日韩伦理在线| 蘑菇福利视频一区播放| 国产精品视频免费一区| 一本久久综合| 日韩网站在线观看| 美女任你摸久久| 老鸭窝毛片一区二区三区| 国产区精品视频| 在线亚洲伦理| 99在线精品视频在线观看| 久久综合网色—综合色88| 久久琪琪电影院| 狠狠色噜噜狠狠色综合久| 欧美一级一区| 久久国产精品久久久久久久久久| 国产精品久久久久久久久| 亚洲九九爱视频| 亚洲视频axxx| 欧美色精品天天在线观看视频 | 尤物在线精品| 久久久精品国产免费观看同学| 久久成人免费网| 国产欧美午夜| 欧美ab在线视频| 亚洲婷婷综合久久一本伊一区| 91久久夜色精品国产九色| 久久精品一区二区三区四区| 小嫩嫩精品导航| 欧美一级大片在线免费观看| 一区二区三区日韩欧美| 久久国产一区二区| 免费在线观看一区二区| 欧美日韩三级一区二区| 亚洲日本在线观看| 亚洲乱码视频| 欧美视频一区在线观看| 亚洲一区在线播放| 午夜亚洲影视| 韩国精品在线观看| 狂野欧美一区| 日韩一级裸体免费视频| 亚洲欧美视频| 激情久久综合| 欧美国产日韩亚洲一区| 日韩一二三区视频| 欧美中在线观看| 亚洲国产精品一区二区三区| 欧美日本在线一区| 亚洲欧美日韩视频一区| 男女精品网站| 亚洲一区二区三区四区在线观看| 国产精品中文在线| 久久精品最新地址| 亚洲美女中出| 在线免费精品视频| 亚洲精品一二| 久久成人一区二区| 亚洲欧洲精品一区二区| 欧美香蕉视频| 久久久久女教师免费一区| 亚洲三级视频在线观看| 欧美在线一区二区| 亚洲伦理中文字幕| 国产亚洲精品bt天堂精选| 欧美激情视频网站| 欧美一区二区三区四区高清| 亚洲人成7777| 久久午夜电影网| 亚洲影院一区| 亚洲精品免费在线| 国产一区二区三区不卡在线观看| 欧美福利视频在线观看| 欧美在线免费一级片| 9色porny自拍视频一区二区| 欧美xart系列高清| 欧美在线视频在线播放完整版免费观看| 亚洲精品视频免费在线观看| 国内精品久久久久久久影视麻豆| 欧美人成网站| 亚洲国产欧美一区二区三区久久| 亚洲一区二区黄色| 亚洲人在线视频| 狠狠久久综合婷婷不卡| 欧美午夜电影网| 欧美精品日本| 久久一二三区| 欧美在线免费一级片| 午夜精品福利一区二区蜜股av| 日韩亚洲一区在线播放| 性欧美超级视频| 亚洲三级免费电影| 亚洲高清成人| 欧美va天堂在线| 久久一区精品| 久久精品中文字幕一区| 亚洲综合成人在线| 午夜日韩在线观看| 亚洲伊人一本大道中文字幕| 99re6这里只有精品| 亚洲经典一区| 亚洲国产一区二区三区高清| 在线观看91精品国产入口| 国产色婷婷国产综合在线理论片a| 国产精品乱码一区二区三区| 国产精品a久久久久| 欧美性猛片xxxx免费看久爱| 欧美日韩黄色大片| 欧美三区在线| 国产精品一区二区久久久久| 国产精品欧美日韩| 国产日韩欧美成人| 韩国自拍一区| 亚洲国产综合在线看不卡| 在线免费高清一区二区三区|