日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

实验五 操作系统之存储管理

發布時間:2024/4/17 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实验五 操作系统之存储管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗五 操作系統之存儲管理

一、實驗目的?

???? 連續內存分配方式會形成許多“碎片”,雖然可以通過“緊湊”方法將許多碎片拼接成可用的大塊空間,但須為之付出很大開銷。如果允許將一個進程直接分散地裝入到許多不相鄰接的分區中,則無需再進行“緊湊”。基于這一思想而產生了離散分配方式。

如果離散分配的基本單位是頁,則稱為分頁存儲管理方式;如果離散分配的基本單位是段,則稱為分段存儲管理方式。??

在分頁存儲管理方式中,如果不具備頁面兌換功能,則稱為基本的分頁存儲管理方式,或稱為純分頁存儲管理方式,它不具備支持虛擬存儲器的功能,它要求把每個作業全部裝入內存后方能運行。

本實驗通過程序模擬操作系統的基本分頁存儲管理方式,進一步理解這一內存分配方式的原理和特點,加深對理論知識的掌握。?

?

二、實驗要求?

?1、用C語言或Java語言編寫程序模擬操作系統對內存的基本分頁存儲管理方式??

2、程序要能正確對“內存”進行“分配”和“回收”,能接受用戶的輸入,顯示內存的分配情況,并有一定的容錯能力。??

3、每個人獨立按時完成實驗內容。?

三、實驗內容?

?? 本實驗假定內存空間已經按塊劃分,目標程序無需關心內存塊大小等底層細節,只需按算法對內存塊進行分配即可。程序應該實現以下功能:

??1、內存初始化。假定內存塊共有N個,初始化后的內存空間應該有一部分已經被使用,這可以用隨機數或程序內部的其他算法完成。

??2、程序應該能接受用戶輸入的進程信息,并為之分配內存,返回分配結果(成功或失敗),注意,此處應該考慮到不合法的輸入并進行相應處理。

??3、程序能回收用戶指定的進程所占用的內存空間,因此,程序可能需要為每個進程分配一個唯一的進程號并給出詳細的提示信息。

??4、能直觀合理地顯示內存分配情況。

??5、程序界面友好,便于操作和查看運行結果。?

四.實驗代碼

?

#include<stdio.h> #include<stdlib.h> #include<time.h> struct memory{int memory_number;char proname; }; struct memory memory_table[20]={0}; struct page{ char proname;//進程名稱int prosize;//進程大小 int pagetable[10];//進程頁表 };//頁表 struct page page_table[10]={0};int allocate(int memorysize,int i,int pagesize);//為進程分配內存空間 int reclaim(int memorysize,char proname);//釋放進程占用的空間void output(); int main() {int pagesize;//分頁大小int memorysize=80;//內存大小char proname;int choice;//操作選擇int i;printf("Please enter the page size:\n");scanf("%d",&pagesize);//初始化for(i=0;i<20;i++){memory_table[i].memory_number=i;memory_table[i].proname='0';}for(i=0;i<10;i++){page_table[i].proname='0';}srand((unsigned)time(NULL));for(i=0;i<7;i++){int number=rand()%19+1;memory_table[number].proname='a';memorysize--;}output();//進入存儲分配while(memorysize!=0){printf("Selecting Operation\n1.Allocate 2.Reclaim\n");scanf("%d",&choice);if(choice==1){for( i=0;i<10;i++){if(page_table[i].proname=='0'){getchar();printf("Please enter process name:");scanf("%c",&page_table[i].proname);getchar();printf("Please enter process size:");scanf("%d",&page_table[i].prosize);break;}}memorysize=allocate(memorysize,i,pagesize);}else{printf("Please enter process name:");getchar();scanf("%c",&proname);memorysize=reclaim(memorysize,proname);}output();}return 0; }int allocate(int memorysize,int i,int pagesize) {int k;int j;for(k=0;k<(page_table[i].prosize/pagesize);k++){for( j=0;j<20;j++){if(memory_table[j].proname=='0'){memory_table[j].proname=page_table[i].proname;page_table[i].pagetable[k]=j;memorysize--;break;}}}return memorysize; }int reclaim(int memorysize,char proname) {int j;int k;for( j=0;j<20;j++){if(memory_table[j].proname==proname){memory_table[j].proname='0';memorysize++;}}for (j=0;j<10;j++){if(page_table[j].proname==proname){page_table[j].proname='0';page_table[j].prosize=0;for(k=0;k<10;k++){page_table[j].pagetable[k]=0;}break;}}return memorysize; }void output(){int i;printf("————————memory allocation——————————\n");printf("Physical Block No. Process Name\n");for(i=0;i<20;i++){printf("%d %c\n",memory_table[i].memory_number , memory_table[i].proname);} }

五.運行結果

?

?

六.實驗總結

通過這次的實驗更好地加深了我對基本分頁存儲的理解。同時也提高了編碼能力。

轉載于:https://www.cnblogs.com/iTues/p/4568034.html

總結

以上是生活随笔為你收集整理的实验五 操作系统之存储管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。