A. 操作系統如何管理存儲器
不就是管理文件嗎,不用怎麼管理的,分好盤,每個盤里裝上特定的東西就可以了,用資源管理器就行了,
B. 操作系統上機實驗—存儲管理
#include<stdio.h>#include <dos.h>#include<stdlib.h>#include<conio.h>#include<iostream.h>
#define n 10 /*假定系統允許的最大作業數為n,假定模擬實驗中n值為10*/ #define m 10 /*假定系統允許的空閑區表最大為m,假定模擬實驗中m值為10*/ #define minisize 100 /*空閑分區被分配時,如果分配後剩餘的空間小於minisize,則將該空閑分區全部分配,若大於minisize,則切割分配*/
struct { float address; /*已分配分區起始地址*/ float length; /*已分配分區長度,單位為位元組*/ int flag; /*已分配區表登記欄標志,用"0"表示空欄目*/ }used_table[n]; /*已分配區表*/
struct { float address; /*空閑區起始地址*/ float length; /*空閑區長度,單位為位元組*/ int flag; /*空閑區表登記欄標志,用"0"表示空欄目,用"1"表示未分配*/ }free_table[m]; /*空閑區表*/
void allocate(char J,float xk) /*給J作業,採用最佳分配演算法分配xk大小的空間*/ { int i,k; float ad; k=-1;
for(i=0;i<m;i++) /*尋找空間大於xk的最小空閑區登記項k*/ if(free_table[i].length>=xk&&free_table[i].flag==1) if(k==-1||free_table[i].length<free_table[k].length) k=i; if(k==-1)/*未找到可用空閑區,返回*/ { printf("無可用空閑區\n"); return; }
/*找到可用空閑區,開始分配:若空閑區大小與要求分配的空間差小於minisize大小,則空閑區全部分配;若空閑區大小與要求分配的空間差大於minisize大小,則從空閑區劃出一部分分配*/ if(free_table[k].length-xk<=minisize) { free_table[k].flag=0; ad=free_table[k].address; xk=free_table[k].length; } else { free_table[k].length=free_table[k].length-xk; ad=free_table[k].address+free_table[k].length; } /*修改已分配區表*/ i=0; while(used_table[i].flag!=0&&i<n) /*尋找空表目*/ i++;
if(i>=n) /*無表目可填寫已分配分區*/ { printf("無表目填寫已分分區,錯誤\n");
/*修正空閑區表*/ if(free_table[k].flag==0) /*前面找到的是整個空閑分區*/ free_table[k].flag=1; else {/*前面找到的是某個空閑分區的一部分*/ free_table[k].length=free_table[k].length+xk; return; } } else {/*修改已分配表*/ used_table[i].address=ad; used_table[i].length=xk; used_table[i].flag=J; }
return; }/*主存分配函數結束*/
void reclaim(char J) /*回收作業名為J的作業所佔主存空間*/ { int i,k,j,s,t; float S,L;
/*尋找已分配表中對應登記項*/ s=0; while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n) s++;
if(s>=n)/*在已分配表中找不到名字為J的作業*/ { printf("找不到該作業\n"); return; }
/*修改已分配表*/ used_table[s].flag=0;
/*取得歸還分區的起始地址S和長度L*/ S=used_table[s].address; L=used_table[s].length; j=-1;k=-1;i=0;
/*尋找回收分區的空閑上下鄰,上鄰表目k,下鄰表目j*/ while(i<m&&(j==-1||k==-1)) { if(free_table[i].flag==1) { if(free_table[i].address+free_table[i].length==S)k=i;/*找到上鄰*/ if(free_table[i].address==S+L)j=i;/*找到下鄰*/ } i++; }
if(k!=-1) if(j!=-1) /* 上鄰空閑區,下鄰空閑區,三項合並*/ { free_table[k].length=free_table[j].length+free_table[k].length+L; free_table[j].flag=0; } else /*上鄰空閑區,下鄰非空閑區,與上鄰合並*/ free_table[k].length=free_table[k].length+L; else if(j!=-1) /*上鄰非空閑區,下鄰為空閑區,與下鄰合並*/ { free_table[j].address=S; free_table[j].length=free_table[j].length+L; } else /*上下鄰均為非空閑區,回收區域直接填入*/ { /*在空閑區表中尋找空欄目*/ t=0; while(free_table[t].flag==1&&t<m) t++; if(t>=m)/*空閑區表滿,回收空間失敗,將已分配表復原*/ { printf("主存空閑表沒有空間,回收空間失敗\n"); used_table[s].flag=J; return; } free_table[t].address=S; free_table[t].length=L; free_table[t].flag=1; } return; }/*主存回收函數結束*/
int main( ) { int i,a; float xk; char J;
/*空閑分區表初始化:*/ free_table[0].address=10240; /*起始地址假定為10240*/ free_table[0].length=10240; /*長度假定為10240,即10k*/ free_table[0].flag=1; /*初始空閑區為一個整體空閑區*/ for(i=1;i<m;i++) free_table[i].flag=0; /*其餘空閑分區表項未被使用*/
/*已分配表初始化:*/ for(i=0;i<n;i++) used_table[i].flag=0; /*初始時均未分配*/
while(1) { printf("選擇功能項(0-退出,1-分配主存,2-回收主存,3-顯示主存)\n"); printf("選擇功項(0~3) :");
scanf("%d",&a); switch(a) { case 0: exit(0); /*a=0程序結束*/
case 1: /*a=1分配主存空間*/ printf("輸入作業名J和作業所需長度xk: "); scanf("%*c%c%f",&J,&xk); allocate(J,xk); /*分配主存空間*/ break;
case 2: /*a=2回收主存空間*/ printf("輸入要回收分區的作業名"); scanf("%*c%c",&J); reclaim(J); /*回收主存空間*/ break;
case 3: /*a=3顯示主存情況*/ /*輸出空閑區表和已分配表的內容*/ printf("輸出空閑區表:\n起始地址 分區長度 標志\n"); for(i=0;i<m;i++) printf("%6.0f%9.0f%6d\n",free_table[i].address,free_table[i].length, free_table[i].flag); printf(" 按任意鍵,輸出已分配區表\n"); getch(); printf(" 輸出已分配區表:\n起始地址 分區長度 標志\n"); for(i=0;i<n;i++) if(used_table[i].flag!=0) printf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length, used_table[i].flag); else printf("%6.0f%9.0f%6d\n",used_table[i].address,used_table[i].length, used_table[i].flag); break;
default:printf("沒有該選項\n"); }/*case*/ }/*while*/
return 1;}
C. 操作系統 存儲器管理
M是3時,缺頁次數是6,缺頁率是50%
M是4時,缺頁次數是3,缺頁率是25%
D. 操作系統中 存儲器對什麼進行管理
存儲管理即是對主存的管理,它是操作系統的重要功能之一。主存儲器是計算機系統中的一種寶貴資源,對主存的管理和有效使用是操作系統中十分重要的內容。為了便於對主存進行有效的管理,應該將主存分成若干個區域,以便同時存放多個用戶程序和系統軟體。因此,存儲管理應具有如下功能:主存的分配和回收、提高主存的利用率、「擴充」主存容量和存儲保護。存儲分配主要解決多道作業之間劃分主存空間的問題,存儲分配有三種主要方式:直接分配方式、靜態分配方式和動態分配方式。絕大多數計算機系統都採用靜態分配方式或動態分配方式。為了實現靜態和動態兩種存儲分配策略,需要採用將邏輯地址與物理地址分開,並對邏輯地址實施地址重定位技術。所謂重定位是由於一個作業裝入到與其地址空間不一致的存儲空間時所引起的有關地址調整過程,實質上,這是一個地址變換過程,地址變換也稱為地址映射。根據地址變換進行的時間及採用的技術手段不同,可以把重定位分為兩類:靜態重定位和動態重定位。所謂靜態重定位是在程序運行之前,由鏈接裝配程序進行的重定位。靜態重定位的特點是無需增加硬體地址變換機構,但要求為每個程序分配一個連續的存儲區,且在程序執行期間不能移動,故難於做到程序和數據的共享;動態重定位是在程序的執行過程中,每當訪問到指令或數據時,將要訪問的程序或數據的邏輯地址轉換成物理地址。動態重定位的實現需要依靠硬體地址變換機構。最簡單的實現方法是利用一個重定位寄存器。動態重定位的特點是需要附加硬體的支持,優點是可以將程序分配到不連續的存儲區中,在程序運行之前可以只裝入部分代碼即可運行,然後在程序運行期間,根據需要動態地申請分配內存,所以,便以程序段的共享,並且可向用戶提供一個比主存的存儲空間大得多的地址空間,該地址空間也稱為虛擬存儲器。
E. 操作系統:請求分頁存儲管理模擬實現
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
#include"windows.h"
#include"os.h"
#define n 64//實驗中假定主存的長度
#define m 4//實驗中假定每個作業分得主存塊塊數
int p[m];//定義頁
struct
{
short int lnumber;//頁號
short int flag;//表示該頁是否在主存,「1」表示在主存,「0」表示不在主存
short int pnumber;//該頁所在主存塊的塊號
short int write;//該頁是否被修改過,「1」表示修改過,「0」表示沒有修改過
short int dnumber;//該頁存放在磁碟上的位置,即磁碟塊號
short int times;//被訪問的次數,用於LRU演算法
}page[n];//定義頁表
//各個函數的實現如下:
computer::computer()
{
int i;
for(i=0;i<n;i++)
{
page[i].lnumber = i;
page[i].flag = 0;
page[i].pnumber = 10000;//用10000表示為空
page[i].write = 0;
page[i].dnumber = i;
page[i].times = 0;
}//初始化頁表
for(i=0;i<m;i++)
{
page[i].pnumber = i;
}
for(i=0;i<m;i++)
{
p[i] = i;
page[i].flag = 1;
}//初始化頁
}
void computer::showpagelist()
{
int i;
cout<<"頁號"<<"\t"<<"是否在主存中"<<"\t"<<"塊 號"<<"\t"<<"是否被修改過"<<"\t"<<"磁碟塊號"<<"\t"<<"訪問次數"<<endl;
for(i=0;i<n;i++)
{
cout<<page[i].lnumber<<"\t"<<page[i].flag<<" "<<page[i].pnumber<<"\t"<<page[i].write<<" "<<page[i].dnumber<<" \t"<<page[i].times<<endl;
}
}
void computer::showpage()
{
int i;
for(i=0;i<m;i++)
{
cout<<"\t"<<p[i];
}
cout<<endl;
}
void computer::transformation()
{
unsigned logicAddress,logicNumber,innerAddress,physicsAddress,physicsNumber;
int i,head=0,fail = 0;
int method,temppage=0;
short int times = 10000;
cout<<"請輸入一個邏輯地址(四位十六進制數):";
cin>>hex>>logicAddress;//讀入邏輯地址
logicNumber = logicAddress >> 10;//得到頁號
cout<<"頁號為:"<<logicNumber<<endl;
innerAddress = logicAddress & 0x03ff;//得到頁內地址
cout<<"頁內地址為:"<<innerAddress<<endl;
for(i=0;i<n;i++)
{
if(logicNumber==(unsigned)page[i].lnumber)
{
if(page[i].flag == 1)
{
cout<<"請求的頁面在主存中!"<<endl;
page[i].times++;
physicsNumber = page[i].pnumber;//由頁號得到塊號
cout<<"請求的主存塊號為:"<<physicsNumber<<endl;
physicsAddress = physicsNumber << 10 |innerAddress;//得到物理地址
cout<<"請求的物理地址為:"<<physicsAddress<<endl;//輸出物理地址
break;
}
else
{
cout<<"請求的頁面不在主存中! 將進行缺頁中斷處理!"<<endl<<"請選擇演算法!"<<endl;
cout<<"1.先進先出"<<endl<<"2.最近最少用"<<endl<<"請選擇置換演算法:";
cin>>method;
if(method == 1) //採用先進先出演算法
{
cout<<"採用先進先出演算法!"<<endl;
fail = p[head];
cout<<"第"<<fail<<"頁將被替換!"<<endl;
p[head] = logicNumber;
head = (head+1) % m;
if(page[fail].write == 1)
cout<<"第"<<fail<<"頁曾被修改過!"<<endl;
page[fail].flag = 0;
page[logicNumber].flag = 1;
page[logicNumber].write = 0;
page[logicNumber].pnumber = page[fail].pnumber;
page[fail].pnumber = 10000;
page[logicNumber].times++;
break;
}
else if(method == 2) //採用最近最少用演算法
{
cout<<"採用最近最少用演算法!"<<endl;
for(i=0;i<n;i++)
{
if(page[i].flag == 1)
{
if(page[i].times<times)
{
times = page[i].times;
temppage = page[i].lnumber;
}
}
}
cout<<"第"<<temppage<<"頁將被替換!"<<endl;
for(i=0;i<m;i++)
{
if(p[i] == temppage)
{
p[i] = logicNumber;
}
}
if(page[temppage].write == 1)
cout<<"第"<<temppage<<"頁曾被修改過!"<<endl;
page[temppage].flag = 0;
page[logicNumber].flag = 1;
page[logicNumber].write = 0;
page[logicNumber].pnumber = page[temppage].pnumber;
page[temppage].pnumber = 10000;
page[logicNumber].times++;
break;
}
else
{ cout<<"你輸入有誤,即將退出!";
exit(1);
}
}
}
}
}
void main()
{
char c,d;
computer os;
cout<<"頁表正在初始化中...,3秒鍾後為你顯示頁和頁表!"<<endl;
Sleep(3000);
os.showpage();
os.showpagelist();
T:
os.transformation();
cout<<"是否顯示頁和頁表?(Y/N)";
cin>>c;
switch(c)
{
case 'y':
os.showpage();
os.showpagelist();
case 'n':
cout<<"是否繼續進行請求分頁?(Y/N)";
cin>>d;
if (d=='Y'||d=='y')
goto T;
else if (d=='N'||d=='n')
exit(1);
else
cout<<"輸入錯誤!"<<endl;
default:cout<<"輸入錯誤!"<<endl;
}
}
F. 操作系統課程設計 (包括進程管理、進程的同步和互斥、存儲管理)
- 課程設計的計算機操作系統程序
課程概述
計算機操作系統是中央廣播電視大學計算機科學與技術專業(本科),系統設置必修課程。教學總時數72.4學分,開設一學期。前課程,計算機組成原理,面向對象編程和數據結構。
計算機操作系統課程是計算機專業的課程,通過學習,使學生掌握電腦作業系統的設計和組成的基本原則之一;計算機操作系統的基本概念和新的概念,術語和術語;了解計算機的發展,操作系統的功能和設計技巧和方法,基本操作使用最常用的計算機操作系統(DOS,Windows,UNIX或Linux)的。
?課程內容
主要內容包括:概述電腦的操作系統,作業管理,文件管理,存儲管理,輸入輸出設備管理,工藝和管理處理器,操作系統結構和編程。
二,系統的教學內容和教學要求
章概述操作系統的中
教學內容:
操作系統的定義和發展形成的操作系統和五個主要類型,操作系統五大功能特性的操作系統的性能,配置的操作系統,「生成」的概念
教學要求:
主:什麼是操作系統;知道五類和五功能的操作系統;
至少掌握:掌握操作系統的安裝,使用和維護的實際懷抱;
理解:如何理解一個初步的了解,熟悉和解剖學的人機交互界面的操作系統
任務的作業管理
教學內容如下:
的特點,人機界面的發展;操作系統的shell語言的第一,第二和第三代介面的發展特點,基本鍵盤命令和系統調用任務調度演算法; 教學要求:
主的人機界面設計
大師:掌握基本的作業系統人機界面的設計思路;
理解:傳統的介面界面
章文件管理的
教學內容:
文件管理任務和功能的操作系統文件的結構和分類的物理結構和邏輯結構的文件,文件目錄結構,文件訪問控制和安全機制,文件系統模型結構;
教學要求:
水平:基本的文件訪問控制和系統管理;
>掌握的文件系統目錄分類管理功能;
理解:文件系統的程序設計
的章內部存儲管理
教學內容:
內存分區,分頁,子段的管理理念;物理地址和邏輯地址內存「擴展」技術;存儲管理,支柱存儲管理的內存分配演算法的
教學的要求:
掌握基本配置:內存管理和調度方法;
主:主不同的分區存儲管理,分頁和分段方法;
有關:有效利用的內存空間
第五章輸入和輸出設備管理器的教學內容:
的輸入和輸出設備的功能分類;獨占的,共享的,虛擬裝置的管理功能;輸入和輸出設備的處理程序;管理策略的輸入和輸出設備;
教學要求:
法師:法師的輸入和輸出設備的管理特性;
法師:法師分類設計方法的輸入和輸出設備;
明白了:
編程元素的輸入和輸出設備處理程序第
教學內容的低級別的處理器管理:
操作系統的核心功能,「過程」的概念,過程的並發和並行的基本狀態的轉換的過程;進程調度演算法進程同步和互斥過程PV操作,「鎖」的概念;
教學要求:
大師:在操作系統內核運行的基本概念「過程「;
掌握的基本轉換過程中的狀態和特徵;
理解:操作系統
教學內容,進程調度演算法的編程方案的結構
BR />第七章:
操作分層的模塊化的系統結構設計和操作系統的測試;的
教學的要求:
本章教學基本要求:了解基本的設計思路和方法現代計算機操作系統
三,教學媒體
本課程使用的教學媒體:文字材料,視頻材料,網路教學和輔導。
1。文字材料
計算機操作系統(2)武企業萬元清華大學出版社
註:本課程實驗的主要教材。
文字教材過程中的主要傳播媒介。准備的文字材料,同時保持先進性,科學的學科體系,這兩種作業系統的理論,技術,實現了一體化的三個強調的能力。
2。視頻教材
該課程16節和視頻,每講50分鍾,講授的課程集中困難,科目匯總。為了幫助學生理解操作系統的整體概念和思想,伍啟元教授揚聲器。
當然,視頻與相應的文字材料,注重藝術表達播放視頻教材,教學形象化。
3。
在線教學網上教學和指導,咨詢與上述有機介質方面的作用:(1)釋放的教學和指導性文件,課程公告,咨詢,參考材料;(2)根據工程進度教學,心理咨詢聊天室發表的一篇文章「自我測試題(3)實時Q&A,一天到一天的課程論壇Q;(4)開展網上教師培訓與教學研討會。
文字材料的基礎上,對學生的學習,視頻教科書的補充文字材料,在線咨詢是一個方便的教學和學習方式的互動。總之,分工和各種媒體,讓學生有更大的自主學習空間,以方便學生自由選擇,自主學習,提高學生的自我學習能力。
教學安排建議
當然主要教科書和課程實驗教學安排建議
教學點,請根據中央電大統一安排課程,面對面輔導的要求,如表1所示。
表1的主要教科書和課程實驗教學安排建議
每周教學內容小時的實驗內容推薦小時
操作系統的教學安排概述
2操作系統定義了五種類型, 5 4
三人人機界面管理Linux的實踐准備1
四個工作管理任務調度4
五個文件管理的任務和功能的Linux操作系統命令的邏輯結構和物理結構4
7個存儲管理任務和功能2命令解釋器4
九編制2
八分分配存儲管理段4
分配的存儲管理作業調度模擬編程的六個文件10設備管理的任務和職能
11種設備,技術和管理存儲分配管理設計4
過程的定義和特徵4 13進程調度和通信進程調度模擬編程 p> 15操作系統級模塊結構僵局的產生和處理14 26 4
(總復習)4
共56條16
課程視頻內容,示於表2。
章教學內容表2視頻教材課程小時的視頻時間分配
操作系統提供了一個概述8小時4
運營管理8小時2
文件管理2
8小時的存儲管理8小時
5個設備管理器
6過程管理8小時10小時4
7操作系統的系統程序結構6小時0
56小時16
2在線咨詢在線咨詢內容
包括教學文件,課程輔導,網路教室。充分利用網路資源,和偶爾的在線課程相關的輔導材料,定期,根據教學在線輔導和考試Q&A活動,適當安排的需要。具體安排如下:
?
包括課程介紹,教師,教學大綱,教學設計,教學檔案。
?課程輔導
包括課程學習和答案,專題輔導,習題和答案,自我測試,評估說明,網上還提供了教師講課教案教學點的教學使用。
?網路課堂
包括直播課堂和IP課件。
基於網路的教學活動:中央廣播電視大學一般集中在每學期安排的實時在線輔導學生,教師的教學和研究活動。具體的時間表,每學期上發布的TVU的網上家園。
?論壇:每天的日常應答的過程中。
課程的課堂直播第一學期,通過教育電視台播出,安排四次直播課堂,每次50分鍾。的第一堂課3個教學點,難點的教學和演講後代表咨詢審查的輔導和考試說明的過程中反映的共性問題。直播課堂掛在網頁上的內容。
工作
課程形成性評估書,當然工作量。工作成績計入課程成績。中央電大的工作,不時抽查,檢查審查和完成作業。
課程考試,請參閱「中央廣播電視大學計算機操作系統課程評估的指示。建議
五,教學方法?教學建議
(1)計算機操作系統是一個實用的課程。其特點是概念多,涉及范圍廣。要求教學輔導深和混亂的概念來進行詳細說明,並詳細描述每章的重點,管理和控制的調度演算法技能。
(2)注重培養學生熟悉的操作系統,以及在維護操作系統的問題進行分析,並在實驗中解決問題的能力。
?建議
(1)從宏觀和微觀把握學習操作系統。在宏觀上,要認識到在計算機系統中的操作系統的地位清除操作系統的整體結構;微觀方面應把握的操作系統是管理計算機資源(過程中,處理器,內存,文件,設備),了解概念,原理和技術。
(2)操作系統是計算機技術和管理技術相結合的聯想日常生活學習重復熟悉的樣品管理實現運營系統的管理方法,以加深對問題的理解。
(3)要注意加強自我學習的能力,有能力實現這一目標的「學習」的文化。