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

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>
            激情文学一区| 欧美成人国产va精品日本一级| 日韩亚洲国产精品| 欧美成人资源网| 欧美日韩你懂的| 久久在线播放| 欧美三级视频在线| 在线亚洲一区| 亚洲视频免费在线| 国产欧美日韩在线视频| 欧美日韩mp4| 国产欧美日韩综合一区在线观看| 一本色道婷婷久久欧美| 欧美一区二区三区免费在线看| 国产伦精品一区二区三区照片91| 久久精品国产综合| 91久久线看在观草草青青| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美在线视频一区| 久久视频在线看| 亚洲综合国产| 国产精品theporn88| 亚洲二区视频| 国产日韩欧美a| 亚洲欧美国产高清va在线播| 一区二区三区精密机械公司 | 国产精品久久久久av免费| 久久人人爽人人| 亚洲欧洲日韩在线| 蜜臀av国产精品久久久久| 亚洲免费一在线| 国产一在线精品一区在线观看| 另类天堂av| 麻豆精品视频在线观看| 亚洲免费av网站| 一本色道久久综合亚洲精品婷婷 | 99re在线精品| 国产精品丝袜久久久久久app| 久久精品视频一| 日韩视频欧美视频| 亚洲视频精品| 免费美女久久99| 亚洲一级黄色| 亚洲性av在线| 亚洲视频免费看| 亚洲国产一成人久久精品| 久久久久高清| 久久久亚洲欧洲日产国码αv| 久久欧美肥婆一二区| 亚洲精品麻豆| 男男成人高潮片免费网站| 亚洲精品一区二区三区99| 亚洲美女精品久久| 亚洲激情在线| 欧美与欧洲交xxxx免费观看| 99视频精品免费观看| 久久国产精品毛片| 亚洲精品视频免费观看| 午夜精品久久久99热福利| 蜜臀va亚洲va欧美va天堂| 久久亚洲图片| 欧美激情国产日韩精品一区18| 国产精品美女主播| 一区二区三区色| 亚洲裸体俱乐部裸体舞表演av| 亚洲素人一区二区| 亚洲国产aⅴ天堂久久| 99香蕉国产精品偷在线观看| 国产精品美女久久久久久2018| 免费成人av在线| 影音先锋亚洲一区| 亚洲欧洲综合另类| 久久精品国产免费| 久久手机免费观看| 欧美伊人久久久久久午夜久久久久 | 136国产福利精品导航网址| 午夜久久tv| 欧美激情91| 欧美成人黄色小视频| 99国产精品视频免费观看| 国产精品草草| 快she精品国产999| 欧美日韩国产一区二区三区地区| 欧美在线播放高清精品| 欧美偷拍一区二区| 欧美国产日韩精品| 亚洲美女视频网| 欧美高清视频www夜色资源网| 国产日韩精品视频一区二区三区 | 国产精品网站在线播放| 午夜精品久久久久| 日韩天堂在线视频| 亚洲专区在线| 一区在线观看视频| 久久久久久色| 亚洲一区美女视频在线观看免费| 国产综合色在线视频区| 亚洲午夜精品久久| 一区二区三区日韩欧美| 在线亚洲伦理| 亚洲影视在线| 国产一区二区三区日韩| 久久久人成影片一区二区三区| 欧美 日韩 国产 一区| 亚洲乱码国产乱码精品精天堂| 久久久夜夜夜| 亚洲第一页在线| 亚洲一区三区视频在线观看| 欧美全黄视频| 欧美在线观看www| 一区二区欧美激情| 欧美精品日韩www.p站| 亚洲图片欧洲图片av| 香蕉国产精品偷在线观看不卡 | 午夜视频在线观看一区| 国产在线精品一区二区中文 | 欧美成人精品在线| 亚洲五月六月| 精品av久久久久电影| 久久精品夜色噜噜亚洲a∨| 欧美成人综合在线| 亚洲精品中文字| 久久天天躁夜夜躁狠狠躁2022| 国产精品久久久久aaaa| 亚洲区欧美区| 99国产一区| 亚洲欧美国产日韩天堂区| 欧美黄色一区二区| 欧美在线视频一区二区| 国产一区二区三区久久 | 久久躁日日躁aaaaxxxx| 欧美一区二区视频在线观看2020 | 亚洲国产成人精品久久| 日韩一级免费观看| 国产午夜精品一区理论片飘花| 欧美日本亚洲韩国国产| 欧美在线高清视频| 在线视频你懂得一区二区三区| 亚洲精品视频啊美女在线直播| 欧美日韩视频| 久久亚洲二区| 欧美一区二区三区的| 欧美高清hd18日本| 午夜久久福利| 牛夜精品久久久久久久99黑人| 亚洲国产日韩一级| 欧美视频在线免费看| 久久另类ts人妖一区二区| 欧美一区二区三区电影在线观看| 国产欧美一区二区三区在线老狼| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲精品久久在线| 久久一区二区三区国产精品 | 亚洲成在人线av| 国产精品www色诱视频| 美日韩精品免费观看视频| 亚洲欧美日韩一区二区三区在线观看 | 一区二区三区在线观看视频| 亚洲一区二区三区精品在线观看 | 国产一区二区三区免费在线观看 | 欧美日韩你懂的| 狂野欧美性猛交xxxx巴西| 久久在线免费视频| 亚洲免费视频观看| 黄色亚洲在线| 在线视频观看日韩| 亚洲图片欧洲图片av| 久久精品国产清高在天天线 | 欧美国产乱视频| 欧美成人精品在线观看| 欧美色精品天天在线观看视频| 亚洲美女av网站| 欧美黄色小视频| 日韩视频在线免费观看| 亚洲一区国产| 黄色成人小视频| 欧美精品首页| 久久成人精品无人区| 欧美电影在线观看| 亚洲砖区区免费| 永久91嫩草亚洲精品人人| 欧美日韩亚洲一区二区| 性色一区二区| 亚洲精品国久久99热| 久久激情综合| 99国产精品久久| 在线观看91久久久久久| 欧美视频在线播放| 久久人体大胆视频| 亚洲一区二区视频在线观看| 亚洲第一狼人社区| 久久中文精品| 亚洲欧美日韩视频二区| 亚洲精品乱码久久久久| 国产视频在线一区二区| 欧美色一级片| 欧美日韩成人免费| 久久综合网hezyo| 欧美在线三区| 99热这里只有成人精品国产|