儲存管理之分頁儲存管理方式C語言模擬(實驗五)
分頁儲存管理方式,將程式劃分為若干個大小固定的區域(頁),也把實體記憶體劃分為大小和頁相等的塊,通過頁表完成頁到塊的對映。
分頁儲存管理之C語言模擬:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define PAGE 20
int memory[PAGE];
struct page{ //描述程序資訊
int process;
int page_num;
int user[PAGE];
int f;
page(){
f = 0;
process = 0;
page_num = 0;
memset(user,0,PAGE);
}
};
struct page *Mem = new page[PAGE];
void init_memory()
{
printf("請輸入一個4*5的二維矩陣,1代表已分配,0代表未分配\n");
for(int i = 0; i < 4; i++)
for(int j = 0; j < 5; j++)
scanf("%d",&memory[i * 5 + j]);
}
void output()
{
printf("當前記憶體的狀態\n");
for(int i = 0; i < PAGE; i++){
printf("%d ",memory[i]);
if(!((i +1) % 5))
printf("\n");
}
printf("\n");
}
void c_malloc() /*分配記憶體*/
{
int page_num,page_no;
printf("請輸入作業號和作業大小\n");
scanf("%d%d",&page_no,&page_num);
int sum = 0;
for(int i = 0; i < PAGE; i++) /*檢查記憶體狀態,是否滿足作業需求*/
if(!memory[i])
sum ++;
if(sum < page_num){ /*可用記憶體頁數小於作業需要的記憶體頁數則結束*/
printf("記憶體空間不足\n");
return;
}
int page_s;
for( page_s = 0; page_s < PAGE; page_s++){ /*檢查是否存在相同作業號的作業*/
if(Mem[page_s].f && Mem[page_s].process == page_no){ /*存在同名的給出提示並結束*/
printf("存在同名的作業號\n");
return;
}
if(Mem[page_s].f == 0){ /*作業狀態標記為使用*/
Mem[page_s].f = 1;
break;
}
}
Mem[page_s].process = page_no;
Mem[page_s].page_num = page_num;
for(int i = 0,j = 0; i < PAGE; i++) /*更發記憶體頁號為已使用*/
if(!memory[i] && j < page_num){
memory[i] = 1;
Mem[page_s].user[j++] = i;
}
}
void c_free() /*回收記憶體*/
{
int page_no;
printf("請輸入作業號和作業大小\n");
scanf("%d",&page_no);
int page_f;
for(page_f = 0; page_f < PAGE; page_f++) /*檢查是否存在作業資訊*/
if(Mem[page_f].f && Mem[page_f].process == page_no) /*若存在則結束*/
break;
if(page_f == PAGE - 1){ /*作業資訊不存在,提示並結束*/
printf("作業資訊不存在\n");
return;
}
for(int i = 0; i < Mem[page_f].page_num; i++) /*把矩陣置0*/
memory[Mem[page_f].user[i]] = 0;
Mem[page_f].f = 0; /*把作業標誌置0*/
}
int menu() /*選單*/
{
printf("新增作業:1\n");
printf("刪除作業:2\n");
printf("輸出記憶體狀態:3\n");
printf("結束作業:0\n");
int menu;
scanf("%d",&menu);
return menu;
}
int main(int argc,char *argv[])
{
init_memory(); /*初始化記憶體空間*/
int t;
while((t = menu())){
if(t == 1)
c_malloc(); /*分配記憶體*/
else if(t == 2)
c_free(); /*釋放記憶體*/
else if(t == 3)
output(); /*輸出記憶體資訊*/
}
return 0;
}
相關推薦
儲存管理之分頁儲存管理方式C語言模擬(實驗五)
分頁儲存管理方式,將程式劃分為若干個大小固定的區域(頁),也把實體記憶體劃分為大小和頁相等的塊,通過頁表完成頁到塊的對映。 分頁儲存管理之C語言模擬: #include <stdio.h> #include <string.h> #i
操作系統筆記(十)內存管理之分頁,分段和段頁式
分段式內存管理 筆記 關系 代碼 保護 系統 長度 段頁式內存管理 bit 基本內存管理: 進程占用空間必須連續,導致外部碎片以及附加的compaction 整個進程的swap in 和 swap out十分耗時。 解決:分頁 ->內存空間不必連續,無外部碎片,
SQL儲存過程之分頁用法
create procedure [dbo].[psys_Paging]@sql text, --要執行的sql語句@page int, --要顯示的頁碼@pageSize int, --每頁的大小@pageCount int=0 out, --總頁數@recordCount int=0 out -
計算機原理學習(6)-- x86-32 CPU和記憶體管理之分頁管理
前言 上一篇我們瞭解了x86-16 CPU計算機的記憶體訪問方式,定址方式,以及基於MS-DOS的應用程式的記憶體佈局。這一篇會主要介紹32位處理器的記憶體訪問,記憶體管理以及應用程式的記憶體佈局。雖然目前64位CPU已經非常普及了,不過相對於32位的記憶體管理方式並沒
C++語言學習(二十)——自定義內存管理
single null allocated 析構函數 opera .get cat st2 argc C++語言學習(二十)——自定義內存管理 一、統計類對象中成員變量的訪問次數 mutable是為了突破const函數的限制而設計的,mutable修飾的成員變量將永遠處於可
Go語言基礎(十五)—— Go語言實現json資料檔案讀取與儲存
案例: package main import ( "os" "fmt" "encoding/json" "time" ) type Person2 struct { Name string Age int Sex string Hobby []string } fun
山東青年政治學院學生工作管理信息系統的設計與實現--文獻隨筆(十五)
集成 條件 隨筆 系統應用 lena 快捷 詳細 提高 定義 一、基本信息 標題:山東青年政治學院學生工作管理信息系統的設計與實現 時間:2014 出版源:山東大學 關鍵詞:學生工作管理信息系統; J2EE; 流程管理; 權限; 二、研究背景 問題定義:伴隨著高考入學率的提
C語言入門(廿二)之預處理指令、巨集、條件編譯、檔案包含、typedef、const
預處理指令 什麼是預處理指令: 在我們的檔案翻譯成0和1之前做的操作我們稱之為預處理指令。一般情況預處理指令都是以#號開頭的。 巨集定義的格式 不帶引數的巨集定義: #define 巨集名 值 巨集定義的作用:
C語言入門(廿一)之static、extern關鍵字
區域性變數 概念: 區域性變數就是定義在函式, 程式碼塊和函式形參列表中的變數, 我們就稱之為區域性變數 作用範圍: 從定義的那一行開始一直直到遇到大括號結束或者遇到return為止 特點: 相同作用域範圍內不
C語言入門(二十)之列舉
C語言中,列舉就是專門用於表示幾種固定型別的取值。列舉的本質就是基本資料型別, 就是整形。 列舉和結構體一樣, 要想定義列舉型別變數, 那麼必須先定義列舉型別。 列舉型別定義的格式 enum 列舉型別名稱 { 取值, }; // 1.
C語言入門(十九)之結構體
太晚了(11點半了),明天繼續結構體 陣列: 是用於儲存一組相同型別的資料 結構體: 是用於儲存一組不同型別的資料 // 1.定義結構體型別 struct Person { // char name[20]; char *name;
C語言入門(十八)之指標、字串、函式
如何利用指標運算元組 int ages[3] = {1, 3 , 5}; ages[0] = 998; printf("ages[0] = %i\n", ages[0]); int *p = ages; // int *p = &a
C語言入門(十七)之指標的基本概念
如何定義指標變數 普通變數: 資料型別 變數名稱; 指標變數: &nb
C語言入門(十六)之字串
字串的基本概念 如何定義字串變數, 由於字串是同一種類型的資料組成, 並且是有序的。 而陣列就是用於儲存很多同一種類型的有序資料, 所以可以使用陣列來儲存字串。 注意: 字串變數和普通的字元陣列有一定的區別。 C語言規定, 字串必須以\0結尾(作為字串的結束符號), 所以
程式設計菜鳥到大佬之路:C語言程式(十二)
第十二天學習精要 遞迴初步 遞迴 一個函式,自己呼叫自己,就是遞迴。 # include <iostream> using namespace std; int factorial(int n) // 函式返回n的階乘 { if (n ==
判斷迴文字串 (20 分)c語言解答(指標法)
判斷迴文字串 (20 分) 本題要求編寫函式,判斷給定的一串字元是否為“迴文”。所謂“迴文”是指順讀和倒讀都一樣的字串。如“XYZYX”和“xyzzyx”都是迴文。 函式介面定義: bool palindrome( char *s ); 函式palindrome判斷輸入字串cha
Android 學習之《第一行程式碼》第二版 筆記(十五)執行時許可權
一、執行時許可權功能 使用者不需要在安裝軟體的時候一次性授權所有申請的許可權,而是可以在軟體的使用過程中再對某一項許可權申請進行授權。 分類:普通許可權和危險許可權 我們在進行執行時許可權處理時使用的是許可權名,但是使用者一旦同意授權了,那麼該許可權所對應的
Android 遊戲開發之主角的移動與地圖的平滑滾動(十五)
程式碼的實現方式 還是以人物向右移動為例,我們須要三個座標 一個是m_HeroPos 來儲存人物在地圖中的X座標 一個是 mScreenPos 來儲存人物在螢幕中的顯示座標 mMapPos 來儲存地圖在手機螢幕中的顯示座標,按鍵盤右鍵後人物在地圖中的座標加上8畫素(表示行走的步長),當人物的座標
分頁儲存管理方式介紹及例題
一、引入 在儲存器管理中連續分配方式會形成許多“碎片”,雖然可以通過“緊湊”方法將許多碎片拼接成可用的大塊空間,但須為之付出很大的開銷,如果一個程序能夠直接分散地裝入到許多不相鄰接的分割槽中,便可充分的利用空間,無需再進行緊湊。基於這一思想便產生了離散分配方式,根據在離散分配時所分配地址空間的基本單位不
第四章 分頁儲存管理方式
一,儲存管理的離散分配方式 基本分頁儲存管理 基本分段儲存管理 段頁式儲存管理 二,基本分頁儲存管理 離散分配記憶體: 作業規定大小劃分成小份;記憶體也按同樣大小劃分成小份 作業的任一小份可分散放入記憶體任意未使用的小份 1)頁面的概念 記憶體劃分成多個小單元,