国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【操作系統(tǒng)】FIFO先進先出頁面置換算法(C語言實現(xiàn))

這篇具有很好參考價值的文章主要介紹了【操作系統(tǒng)】FIFO先進先出頁面置換算法(C語言實現(xiàn))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

FIFO頁面置換算法,計算缺頁率,文末附代碼,及例題解析

1、內(nèi)容

? ? ? ? 在地址映射過程中,若在頁面中發(fā)現(xiàn)所要訪問的頁面不在內(nèi)存中,則產(chǎn)生缺頁中斷。當發(fā)生缺頁中斷時,如果操作系統(tǒng)內(nèi)存中沒有空閑頁面,則操作系統(tǒng)必須在內(nèi)存選擇一個頁面將其移出內(nèi)存,以便為即將調(diào)入的頁面讓出空間。而用來選擇淘汰哪一頁的規(guī)則叫做頁面置換算法。

? ? ? ? 模擬內(nèi)存的頁式管理,實現(xiàn)內(nèi)存的分配和調(diào)用,完成虛擬內(nèi)存地址序列和物理內(nèi)存的對應。在內(nèi)存調(diào)用出現(xiàn)缺頁時,調(diào)入程序的內(nèi)存頁。在出現(xiàn)無空閑頁面時,使用先進先出(FIFO)算法實現(xiàn)頁面置換。

2、頁的結(jié)構(gòu)

頁的結(jié)構(gòu)如下:

? 頁號、頁面號、時間戳(在本算法中未使用,在LRU中使用)

名稱

符號

功能

頁號

Page_num

記錄頁號

頁面號

Pframe_num

記錄頁面號

? ? ? FIFO頁面置換算法選擇在主存中停留時間最長(即最老)的一頁置換,即先進入內(nèi)存的頁,先退出內(nèi)存。理由是:最早調(diào)入內(nèi)存的頁,其不再被使用的可能性比剛調(diào)入內(nèi)存的可能性大。建立一個FIFO隊列,收容所有在內(nèi)存中的頁。被置換頁面總是在隊列頭上進行。當一個頁面被放入內(nèi)存時,就把它插在隊尾上

? ? ? ?通過使用線性表來實現(xiàn)頁表,在每次需要淘汰頁時,都是淘汰最先進入的頁,這樣就可以實現(xiàn)淘汰在主存中停留時間最長的頁。

流程如下:

【操作系統(tǒng)】FIFO先進先出頁面置換算法(C語言實現(xiàn))

3、例題解析

在頁式管理系統(tǒng)中,訪問的順序(訪問串)為:1,2,3,4,1,2,5,1,2,3,4,5,當分配的頁面數(shù)量為3時,請分別計算使用下述(1)替換算法的缺頁次數(shù),并畫出頁面置換圖。

(1)? FIFO。

訪問串 1 2 3 4 1 2 5 1 2 3 4 5
頁面1 1 2 3 4 1 2 5 5 5 3 4 4
頁面2 1 2 3 4 1 2 2 2 5 3 3
頁面3 1 2 3 4 1 1 1 2 5 5
是否缺頁

缺頁率:9/12=0.75

4、代碼如下:

#define _CRT_SECURE_NO_WARNINGS 1


#include <stdio.h>
#include <stdlib.h>

#define MAX_PAGES 20
#define MAX_PFRAME 20
#define INVALID -1

typedef struct {
	int page_num;
	int pframe_num;
	int count;
	int timestamp;
}page_type;

page_type page[MAX_PAGES];

typedef struct pf_struct {
	int pframe_num;//頁面號
	struct pf_struct* next;
}pf_type;

pf_type pframe[MAX_PFRAME];

int diseffct = 0;//缺頁記錄

void InitPage(const int* page_n, const int* pframe_n)
{
	int total_vp = *page_n, total_pf = *pframe_n;
	int i = 0;
	diseffct = 0;
	for (i = 0; i < total_vp; i++)//虛擬頁
	{
		page[i].page_num = i;
		page[i].pframe_num = INVALID;
		page[i].count = 0;
		page[i].timestamp = -1;
	}
	for (i = 0; i < total_pf - 1; i++)
	{
		pframe[i].next = &pframe[i];
		pframe[i].pframe_num = i;
	}
	pframe[total_pf - 1].next = NULL;
	pframe[total_pf - 1].pframe_num = total_pf - 1;
}


double miss_page_rate(int pframe_order[100]) {
	int i = 0;
	double missrate = 0, count = 0;
	while (pframe_order[i] != -1)
	{
		count++;
		i++;
	}
	missrate = diseffct / count;
	return missrate;
}

void menu(int* page_n, int* pframe_n)
{
	int a, b;
	printf("---------------------------------------------\n");
	printf("請輸入頁面的數(shù)量:");
	scanf("%d", page_n);
	printf("請輸入頁的數(shù)量:");
	scanf("%d", pframe_n);
	printf("--------------------------------------------\n");
}

int get_input_order(int fprame_order[100], int pframe_n)
{
	int p = 0;
	int tmp = 0;
	printf("請輸入訪問串(1到%d中的數(shù)字,每輸入一個數(shù)輸入一次回車,輸入-1表示結(jié)束):\n", pframe_n);
	while (1)
	{
		scanf("%d", &tmp);
		fprame_order[p] = tmp;
		p++;
		if (tmp == -1)
		{
			break;
		}
	}

	return p;
}

int check_all_page(int page_num, int target)
{
	int judge = 0;
	for (int i = 0; i < page_num; i++)
	{
		if (page[i].pframe_num == target)
		{
			judge = 1;
		}
	}
	if (judge == 1)
	{
		return 1;
	}
	else
	{
		diseffct++;//全程序只在本處處理缺頁次數(shù)
		return 0;
	}
}

void display(int page_num, int judge)//就是打印出所有的頁
{
	printf("頁面號\t頁號\t時間戳\n");
	for (int i = 0; i < page_num; i++)
	{
		printf("%d\t%d\t%d\n", page[i].page_num, page[i].pframe_num, page[i].timestamp);
	}
	if (judge == 1) {
		printf("不缺頁\n");
	}
	else
	{
		printf("缺頁\n");
	}
}

void FIFO(int page_num, int pframe_id)//page_num為頁的數(shù)量,pframe_id為頁面號
{
	int i, j;
	pf_type* p;
	for (i = page_num - 2; i >= 0; i--)
	{
		//page[i + 1].count = page[i].count;
		page[i + 1].pframe_num = page[i].pframe_num;
	}
	page[0].pframe_num = pframe_id;
}

void execute_pagef(int pframe_order[100], int page_num)//page_num為虛擬頁的數(shù)量,page_n指針和page_num的值一樣
{
	int i = 0, jugde = 0;
	while (pframe_order[i] != -1)
	{
		printf("************************************\n");
		printf("使用頁 %d\n", pframe_order[i]);
		jugde = check_all_page(page_num, pframe_order[i]);
		if (jugde == 1) {//在虛擬頁內(nèi)
			i++;
		}
		else//不在頁內(nèi)就調(diào)用頁面置換算法
		{
			FIFO(page_num, pframe_order[i]);
			i++;
		}
		display(page_num, jugde);
	}
}



int main()
{
	int* page_n = (int*)malloc(sizeof(int));
	int* pframe_n = (int*)malloc(sizeof(int));
	int pframe_order[100];
	int order_num = 0;
	menu(page_n, pframe_n);
	InitPage(page_n, pframe_n);
	order_num = get_input_order(pframe_order, *pframe_n);
	execute_pagef(pframe_order, *page_n);
	//printf("%d %d\n", *page_n, *pframe_n);
	printf("\n缺頁率為: %lf", miss_page_rate(pframe_order));
	free(page_n);
	free(pframe_n);
	return 0;
}

5、運行如下:

程序分為5個頁,內(nèi)存中有3個頁面,訪問串是1、2、3、2、4、5、2

【操作系統(tǒng)】FIFO先進先出頁面置換算法(C語言實現(xiàn))

缺頁率為:0.857143文章來源地址http://www.zghlxwxcb.cn/news/detail-505604.html

到了這里,關(guān)于【操作系統(tǒng)】FIFO先進先出頁面置換算法(C語言實現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 虛擬內(nèi)存頁面置換算法(操作系統(tǒng))

    虛擬內(nèi)存頁面置換算法(操作系統(tǒng))

    通過這次實驗,加深對虛擬內(nèi)存頁面置換概念的理解,進一步掌握先進先出FIFO、最佳置換OPI和最近最久未使用LRU頁面置換算法的實現(xiàn)方法。 問題描述: 設(shè)計程序模擬先進先出FIFO、最佳置換OPI和最近最久未使用LRU頁面置換算法的工作過程。假設(shè)內(nèi)存中分配給每個進程的最小物

    2024年02月04日
    瀏覽(22)
  • 操作系統(tǒng) | 實驗五 頁面置換算法

    操作系統(tǒng) | 實驗五 頁面置換算法

    (1)加深對頁面置換算法的理解。 (2)掌握幾種頁面置換算法的實現(xiàn)方法。 (3)通過實驗比較各種置換算法的優(yōu)劣。 參考用C語言實現(xiàn)的先進先出算法FIFO的代碼,實現(xiàn)最佳置換算法OPT和最近最少使用算法LRU。使得隨機給出一個頁面執(zhí)行序列,計算不同置換算法的缺頁數(shù),

    2024年02月04日
    瀏覽(27)
  • 計算機操作系統(tǒng)——頁面置換算法

    計算機操作系統(tǒng)——頁面置換算法

    聲明 :本篇博客參考書籍《計算機操作系統(tǒng)》(西安電子科技大學出版社) 首先說說影響頁面換進換出的效率的幾個因素: (1)頁面置換算法。該因素是影響頁面換進換出效率的重要因素。一個好的頁面置換算法可以使進程在運行過程中具有較低的缺頁率,從而減少頁面換

    2024年02月07日
    瀏覽(35)
  • 【操作系統(tǒng)】抖動、缺頁中斷率、頁面置換算法

    【操作系統(tǒng)】抖動、缺頁中斷率、頁面置換算法

    對于進程P的一個長度為A的頁面訪問序列,如果進程P在運行中發(fā)生缺頁中斷的次數(shù)為F,則f = F/A稱為缺頁中斷率。 1、進程分得的主存頁框數(shù):頁框數(shù)多則缺頁中斷率低,頁框數(shù)少則缺頁中斷率高。 2、頁面大小:頁面大則缺頁中斷率低,頁面小則缺頁中斷率高。 3、頁面替換

    2024年01月20日
    瀏覽(28)
  • 操作系統(tǒng)常見的十種頁面置換算法

    操作系統(tǒng)常見的十種頁面置換算法

    OS常見頁面置換算法整理 在地址映射過程中,若在頁面中發(fā)現(xiàn)所要訪問的頁面不在內(nèi)存中,則產(chǎn)生缺頁中斷。當發(fā)生缺頁中斷時,如果操作系統(tǒng)內(nèi)存中沒有空閑頁面,則操作系統(tǒng)必須在內(nèi)存選擇一個頁面將其移出內(nèi)存,以便為即將調(diào)入的頁面讓出空間。而用來選擇淘汰哪一頁

    2024年02月02日
    瀏覽(24)
  • 計算機操作系統(tǒng)實驗:頁面置換算法的實現(xiàn)

    計算機操作系統(tǒng)實驗:頁面置換算法的實現(xiàn)

    本實驗的目的是通過編程模擬不同的頁面置換算法,比較它們的缺頁率和命中率,加深對操作系統(tǒng)內(nèi)存管理的理解。本實驗采用C語言編寫,實現(xiàn)了最佳置換算法(OPT)、先進先出置換算法(FIFO)和最近最久未使用算法(LRU)。實驗中,頁面號引用串從文本文件中讀取,輸出

    2024年02月02日
    瀏覽(24)
  • 【操作系統(tǒng)】虛擬內(nèi)存相關(guān)&分段分頁&頁面置換算法

    【操作系統(tǒng)】虛擬內(nèi)存相關(guān)&分段分頁&頁面置換算法

    【進程地址空間=虛擬地址空間=C/C++程序地址空間就是那個4G的空間】 虛擬內(nèi)存是操作系統(tǒng)內(nèi)核為了對進程地址空間進行管理,而設(shè)計的一個邏輯意義上的內(nèi)存空間概念。在程序運行過程中,虛擬內(nèi)存中需要被訪問的部分會被映射到物理內(nèi)存空間中, CPU 通過將虛擬地址翻譯成

    2024年02月12日
    瀏覽(23)
  • 頁面置換算法模擬實現(xiàn)-操作系統(tǒng)課程設(shè)計基于Java

    頁面置換算法模擬實現(xiàn)-操作系統(tǒng)課程設(shè)計基于Java

    存儲管理的主要功能之一是合理的分配空間,請求頁式存儲管理是一種常用的虛擬存儲管理技術(shù)。在地址映射過程中,若在頁表中發(fā)現(xiàn)所要訪問的頁面不在內(nèi)存,則產(chǎn)生中斷,當發(fā)生中斷時,系統(tǒng)必須在內(nèi)存選擇一個頁面移出內(nèi)存,調(diào)用頁面置換算法,以便為調(diào)入新的頁面讓

    2024年02月07日
    瀏覽(29)
  • 【操作系統(tǒng)筆記04】操作系統(tǒng)之內(nèi)存管理方式(分頁、分段、段頁式)、虛擬存儲技術(shù)、頁面置換算法

    這篇文章,主要介紹操作系統(tǒng)之內(nèi)存管理方式(分頁、分段、段頁式)、虛擬存儲技術(shù)、頁面置換算法。 目錄 一、操作系統(tǒng) 1.1、基地址變換機構(gòu) 1.2、具有快表的地址變換機構(gòu)

    2023年04月21日
    瀏覽(25)
  • 【操作系統(tǒng)--頁面置換算法】C語言詳解--大作業(yè)版(附代碼)

    【操作系統(tǒng)--頁面置換算法】C語言詳解--大作業(yè)版(附代碼)

    1設(shè)計和實現(xiàn)FIFO,LRU,OPT和CLOCK算法 2設(shè)計和實現(xiàn)一個完整的可供選擇不同算法的程序 3通過頁面訪問序列隨機發(fā)生器實現(xiàn)對上述算法的測試及性能比較 4領(lǐng)略頁面置換背后的資源調(diào)配思想,并將其運用到其他的操作系統(tǒng)的知識,以及運用到生活中的資源調(diào)配策略以及解決措施 5理

    2024年02月06日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包