《操控》是韓國SBS電視臺于2017年7月24日起在月火檔播出的現實律政劇,由李政勛執導,金賢政編劇,南宮珉、劉俊相、嚴智苑、文成根等主演。該劇主要講述了想要揭發社會不正之風真相的記者之間發生的故事, 以下是為大家整理的關于操作系統文件管理實驗報告4篇 , 供大家參考選擇。
操作系統文件管理實驗報告4篇

【篇一】操作系統文件管理實驗報告
實驗項目二 進程管理
一、 實驗目的
1. 理解進程的概念,掌握父、子進程創建的方法。
2. 認識和了解并發執行的實質,掌握進程的并發及同步操作。
二、 實驗內容
1. 編寫一C語言程序,實現在程序運行時通過系統調用fork( )創建兩個子進程,使父、子三進程并發執行,父親進程執行時屏幕顯示“I am father”,兒子進程執行時屏幕顯示“I am son”,女兒進程執行時屏幕顯示“I am daughter”。
2. 多次連續反復運行這個程序,觀察屏幕顯示結果的順序,直至出現不一樣的情況為止。記下這種情況,試簡單分析其原因。
3. 修改程序,在父、子進程中分別使用wait()、exit()等系統調用“實現”其同步推進,并獲取子進程的ID號及結束狀態值。多次反復運行改進后的程序,觀察并記錄運行結果。
三、 源程序及運行結果
源程序1:
#include
#include
#include
int main(int argc, char ** argv )
{
int pid=fork();
if(pid < 0)
printf("error!");
else if( pid == 0 )
{
printf("I am son!\n");
}
else
{
int pid=fork();
if (pid < 0)
printf("error!");
else if( pid == 0 )
{
printf(“I am daughter! \n");
}
else
printf("I am father!\n");
}
sleep(1);
return 0;
}
運行結果:
源程序2:
#include
#include
#include
int main(int argc, char ** argv )
{
char *message;
int n;
int pid=fork();
if(pid < 0)
printf("error!");
else if( pid == 0 )
{
message="I am daughter!";
pid=getpid();
n=3;
}
else
{
int pid=fork();
if (pid < 0)
printf("error!");
else if( pid == 0 )
{
message="I am son!";
pid=getpid();
n=3;
}
else
message="I am father!";
n=3;
}
for(;n>0;n--)
{
puts(message);
sleep(1);
}
return 0;
}
運行結果:
四、 實驗分析與總結
1. 實驗內容1運行結果為什么無固定順序,fork()函數創建進程是如何并發執行的。
答:因為進程是并發執行的,fork()函數創建的三個進程搶占cpu不同,從而導致三個程序被cpu 調度順序不同,所以實驗一結果無固定順序。Fork()函數調用成功后,子進程與父進程并發執行的代碼相同,但由于子進程也繼承父進程的程序指針,所以子進程是從fork()后執行的,另外fork在子進程和父進程中返回值是不同的。在父進程中返回子進程的pid,而在子進程中返回0,使父進程和子進程執行不同的分支。
2. 實驗內容3是如何實現父子進程的同步執行的。
答:wait()會暫時停止目前進程的執行,直到有信號來到或子進程結束。程序段主要使用了函數wait()和,exit()這是因為父進程必須等待兩個子進程終止后才終。在父進程中調用wait()函數,則父進程被阻塞,進入等待隊列,等待子進程結束。子進程終止時執行exit()向父進程發終止信號,當接到信號后,父進提取子進程的結束狀態值,從wait()返回繼續執行原程序,從而實現了父、子進程的同步推進。
總結:通過進程管理實驗,了解fork()函數創建進程是并發執行的,wait()進程表示會暫時停止目前進程的執行,可以靈活運用fork()和wait()進程解決有關問題。在實驗中遇到許多問題,如:實驗中調用fork()進程失敗,可能的原因有系統中有太多的進程或者實際用戶ID的進程總數超過了系統的限制。剛接觸VMware這個系統,操作不熟悉,多次操作后,了解這個系統有關操作,實驗做起來就比較簡單了。對實驗代碼也不熟悉,最后通過請教老師和同學,終于實驗理解透徹,并成功運行了。不僅上課要認真聽課,要想真正學會,課下也要付出努力。
【篇二】操作系統文件管理實驗報告
題目:實驗五組號:第五組 同組同學姓名:紀天嘯 宋雅迪 印佳明 于洋 湛健 日期: 2017年4月7日
實驗環境:
內核版本:替換前4.8.0 替換后4.10.8
編譯器:gcc 5.4.0
1. 問題描述學習linux系統調用的過程,通過向系統內核中增加一個自己編寫的新函數,實現對內核空間的讀寫。函數功能主要為向用戶返回目前時間(書中要求返回xtime的值,在新版本中時間以由timekeeper結構體替代)。
由于編譯一次內核時間較長,修改不易。所以主要實現方式為先通過編寫內核模塊,修改系統內存中的系統調用表,插入自己編寫的內核函數,對功能進行驗證。無誤后,修改linux內核源代碼,加入自己編寫的系統調用函數,重新編譯內核,對現有內核進行替換。并在用戶空間對函數進行調用驗證。
2. 流程圖插入內核模塊方式:
重新編譯內核方式:
系統調用函數功能的實現:
3. 設計實現3.1程序源碼
附上程序源碼
要求每個函數都有文件頭
/*******************************************************
函數名:
參數表說明:
返回值:
函數功能描述:
********************************************************/
每個關鍵步驟都有注釋,最好英文
插入內核模塊方式:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define my_syscall_num 134//占用的原表中的系統調用號
//模塊信息說明
MODULE_LICENSE("GPL");
MODULE_AUTHOR("JTX");
MODULE_DESCRIPTION("my_syscall");
MODULE_VERSION("1.0");
void disable_write_protection(void);//清除寫保護
void enable_write_protection(void);//恢復寫保護
asmlinkage long sys_my_syscall(int flag, struct timeval __user *thetime);//自己實現的系統調用函數
unsigned long *sys_call_table = 0;//存儲系統調用表的地址
static int (*anything_saved)(void);//存儲原表項的值
/*******************************************************
函數名:unsigned long **get_sys_call_table(void)
參數表說明:無
返回值:系統調用表地址
函數功能描述:獲得內存中系統調用表的首地址。賦予entry內核空間首地址,對每塊地址進行遍歷,當entry[__NR_close]==sys_close,時即可認為找到系統調用表的地址,__NR_close為close的系統調用號。
********************************************************/
unsigned long **get_sys_call_table(void)
{
unsigned long **entry = (unsigned long **)PAGE_OFFSET;//賦予entry內核空間首地址
//對內核空間中每塊地址進行遍歷查找
for (;(unsigned long)entry < ULONG_MAX; entry += 1)
{
if (entry[__NR_close] == (unsigned long *)sys_close)
{
return entry;
}
}
return NULL;
}
/*******************************************************
函數名:void disable_write_protection(void)
參數表說明:無
返回值:無
函數功能描述:修改控制寄存器cr0,從而關閉寫保護
********************************************************/
void disable_write_protection(void)
{
unsigned long cr0 = read_cr0();//讀取cr0
clear_bit(16, &cr0);//清除第16位
write_cr0(cr0);//寫回控制寄存器
}
/*******************************************************
函數名:void enable_write_protection(void)
參數表說明:無
返回值:無
函數功能描述:修改控制寄存器cr0,恢復寫保護
********************************************************/
void enable_write_protection(void)
{
unsigned long cr0 = read_cr0();
set_bit(16, &cr0);
write_cr0(cr0);
}
/*******************************************************
函數名:static int __init init_addsyscall(void)
參數表說明:無
返回值:整型,狀態
函數功能描述:初始化內核模塊。獲取系統調用表地址,并修改插入自己編寫的系統調用函數
********************************************************/
static int __init init_addsyscall(void)
{
printk(KERN_EMERG"insmod!\n");
sys_call_table = (unsigned long *)get_sys_call_table();//獲取系統調用表首地址
anything_saved = (int(*)(void)) (sys_call_table[my_syscall_num]);//保存原始系統調用的地址
disable_write_protection();//關閉寫保護
sys_call_table[my_syscall_num] = (unsigned long)&sys_my_syscall;//更改原始的系統調用地址
enable_write_protection();//恢復寫保護
return 0;
}
/*******************************************************
函數名:asmlinkage long sys_my_syscall(int flag, struct timeval __user *thetime)
參數表說明:flag為標志位,thetime返回當前時間
返回值:長整型
函數功能描述:從內核變量中讀取當前時間并返回給用戶,當標志位為真是,打印時間
********************************************************/
asmlinkage long sys_my_syscall(int flag, struct timeval __user *thetime)
{
if (likely(thetime != NULL))
{
struct timeval ktv;
struct timespec64 now;
getnstimeofday64(&now);
ktv.tv_sec = now.tv_sec;
ktv.tv_usec = now.tv_nsec/1000;
if (copy_to_user(thetime, &ktv, sizeof(ktv)))
return -EFAULT;
if (flag)
printk(KERN_EMERG"flag is true!\ntv.tv_sec: %ld\ntv.tv_usec: %ld\n", ktv.tv_sec, ktv.tv_usec);
}
printk(KERN_EMERG"This is my_syscall!\n");
return 0;
}
/*******************************************************
函數名:static void __exit exit_addsyscall(void)
參數表說明:無
返回值:無
函數功能描述:恢復系統調用表,退出模塊
********************************************************/
static void __exit exit_addsyscall(void)
{
disable_write_protection();//關閉寫保護
//恢復原有的sys_call_table的函數指針的值。
sys_call_table[my_syscall_num] = (unsigned long)anything_saved;
//恢復寫保護
enable_write_protection();
printk(KERN_EMERG"rmmod!\n");
}
module_init(init_addsyscall);
module_exit(exit_addsyscall);
重新編譯內核方式:
1.在include/linux/syscalls.h中加入函數聲明:
asmlinkage long sys_my_syscall(int flag, struct timeval __user *thetime);
2.在kernel/sys_ni.c加入系統調用,處理失敗的情況:
cond_syscall(sys_my_syscall);
3.在arch/x86/entry/syscalls/syscall_64.tbl(針對x86架構)中添加系統調用表項:
332 common my_syscall sys_my_syscall
4.在time.c中添加函數定義
3.2測試結果
插入內核模塊進行測試:
編譯內核前內核版本:
編譯替換后:
在用戶空間對調用進行測試:
4. 總結4.1 遇到的問題及解決辦法
問題1:編譯一次內核所需時間太長,修改調試不方便
問題1解決方法:采取先在內核模塊中完成測試功能后,再寫入內核代碼。
問題2:在編譯內核時提示無配置文件,無法編譯
問題2解決辦法:把系統中原有的內核配置文件.config拷貝到新內核的目錄下即可
問題3:查找系統調用表時,網上的例子是使用命令查看/proc文件來獲取,再硬編碼到程序中,這種方法不可靠,當重新開機后地址會改變
問題3解決方法:遍歷內核空間每個地址即可,具體說明可見代碼中函數get_sys_call_table的說明
問題4:網上例子中采取內聯匯編的方式修改寄存器,在32位中有效,在64位系統中報錯
問題4解決方法:查閱資料可知,內核中提供了修改寄存器的接口
問題5:在內核代碼kernel文件夾下系統調用表無效
問題5解決方法:查閱文檔可知,x86架構有其指定的系統調用表,在arch/x86下,kernel文件夾中為其他架構通用的系統調用表
4.2 心得體會
本次實驗涉及的是linux的系統調用。所謂系統調用,即操作系統為應用程序提供的與內核進行交互的一組接口。通過此接口,用戶態下的應用程序可以轉化為內核態,同時調用相應的內核函數運行,從而實現應用程序與內核的交互。
通過本次實驗我們學會了如何向linux系統內核中添加自己編寫的函數進行調用,明白了linux系統調用的過程,體會到了系統內核的重要性,計算機本身不具備文件寫入和讀出功能,這些功能由操作系統提供。操作系統是功能擴展機(虛擬機),它提供了許多系統調用,供程序員使用。要做好實驗,需要按照實驗教程上面的內容一步步落實,要邊做邊領悟相關原理及運行結果的出現的原因,這樣我們才能在試驗中學到更多、掌握更多。其次,也遇到問題我們自然是要先自己思考,通過不同的嘗試來解決,之后不能解決的我們要多向老師同學請教,通過互相交流得來的知識也是會讓我們難忘的。
【篇三】操作系統文件管理實驗報告
許昌學院
《操作系統》實驗報告書
學號:
姓名:閆金科
班級:14物聯網工程
成績:
2016年02月
實驗一Linux的安裝與配置
一、實驗目的
1. 熟悉Linux系統的基本概念,比如Linux發行版、宏內核、微內核等。
2. 掌握Linux系統的安裝和配置過程,初步掌握Linux系統的啟動和退出方法。
3. 熟悉Linux系統的文件系統結構,了解Linux常用文件夾的作用。
二、實驗內容
1. 從網絡上下載VMware軟件和兩個不同Linux發行版鏡像文件。
2. 安裝VMware虛擬機軟件。
3. 在VMware中利用第一個鏡像文件完成第一個Linux的安裝,期間完成網絡信息、用戶信息、文件系統和硬盤分區等配置。
4. 在VMware中利用第二個鏡像文件完成第二個Linux的安裝,并通過LILO或者GRUB解決兩個操作系統選擇啟動的問題。
5. 啟動Linux系統,打開文件瀏覽器查看Linux系統的文件結構,并列舉出Linux常用目錄的作用。
三、 實驗過程及結果
1、啟動VMware,點擊新建Linux虛擬機,如圖所示:
2、點擊下一步,選擇經典型,點擊下一步在選擇客戶機頁面選擇Linux,版本選擇RedHatEnterpriseLinux5,如圖所示:
3、點擊下一步創建虛擬機名稱以及所要安裝的位置,如圖所示:
4、點擊下一步,磁盤容量填一個合適大小,此處選擇默認值大小10GB,如圖所示:
5、點擊完成,點擊編輯虛擬機設置,選擇硬件選項中的CD-ROM(IDE...)選項,在右側連接中選擇“使用ISO鏡像(I)”選項,點擊“瀏覽”,找到Linux的鏡像文件,如圖所示:
6點擊確定按鈕后,點擊啟動虛擬機按鈕,來到Linux的安裝界面,如圖所示:
7、到此頁面之后,等待自動檢測安裝,如圖所示:
8、等到出現如圖所示頁面后點擊“skip”按鈕,跳過檢測,直接進入安裝設置界面,如圖所示:
9、安裝設計界面如圖所示:
10、點擊Next按鈕進入設置語言界面,設置語言為“簡體中文”,如圖所示:
11、點擊Nest按鈕進入系統鍵盤設置按鈕,設置系統鍵盤為“美國英語式”,如圖所示:
12、點擊下一步按鈕,彈出“安裝號碼”對話框,選擇跳過輸入安裝號碼,如圖所示:
13、按照提示,一直點擊下一步按鈕,如圖所示:
14、到設置最后一步,點擊下一步按鈕進入開始安裝RedHatEnterpriseLinuxSever界面,如圖所示:
15、安裝完成后,進入歡迎界面,按照提示點擊前進按鈕知道進入Linux桌面,如圖所示:
16、安裝成功的Linux系統桌面如圖所示,桌面包含五個圖標,分別為:計算機、jk’sHome、回收站、RHEL/5.3i386DVD。
四、實驗總結
通過安裝虛擬機等操作讓我認識到Linux這系統一些基本特點,本次試驗學會了安裝虛擬機并且使用虛擬機安裝操作系統,掌握了紅帽Linux系統的安裝和配置過程,以及對鏡像ISO文件的使用,有別于我們機器上使用的系統,通過虛擬機這個軟件還可以在已有系統的基礎上使用其他操作系統。安裝過程中一定要注意選擇版本的時候要選擇RedHatEnterpriseLinux5版本,否則安裝不能成功。自己動手成功的安裝了Linux系統,自己對Linux的學習產生更大的興趣。
實驗二Linux操作系統的運行模式
一、實驗目的
1. 熟悉Linux系統終端工作環境的使用,了解Linux命令的格式,使用學會利用常用的Linux命令來完成系統的管理和維護。
2. 了解X-Windows的特點,熟悉Linux圖形用戶接口的使用,掌握GNOME桌面環境的基本操作。
3. 了解和掌握在Linux環境下安裝軟件包的方法,如QQforLinux等用軟件的安裝方法。
二、實驗內容
1. 啟動Linux系統打開虛擬終端界面,使用Linux的在線幫助指令man或help獲得ls、uname、date、cal、mkdir、cp等Linux命令的幫助手冊,了解這些命令的具體使用方法。同時,也可以通過執行“命令名–help”來顯示該命令的幫助信息,如“ls–help”,試用這些命令。
2. 通過uname命令的執行,查看并給出相關系統信息:操作系統的名稱、系統域名、系統CPU名稱等。
3. 在主目錄下創建一個名為myetc的子目錄,將/etc目錄下與網絡相關的文件和子目錄拷貝到該目錄,并將這些文件的執行權限設置為可執行。
4. 在主目錄/home下創建目錄program、music和temp,然后在program下建立目錄java和C,列出完成該過程的所有命令。
5. 在圖形界面環境中,查看GNOME桌面的面板和桌面,設置GNOME,包括屏幕保護程序、更改背景和指定關聯程序等。
6. 實現對光盤的加載和訪問,然后卸載。
三、實驗過程及結果
1、打開終端,輸入【ls–help】來查看【ls】指令的使用方法,同理查看uname、date
、cal、mkdir、cp的使用方法。
2、在終端中輸入【uname–a】顯示操作系統名系統cpu名和系統域名
3、重啟系統,用【root】用戶名進入系統,以獲得權限。在終端中輸入【mkdirmyetc】,在主目錄下創建【myrtc】的目錄,【ls】查看是否創建。輸入【cd..】返回至【/】文件,輸入【cp–retcroot/myetc】講etc中內容復制到myetc中,進入myetc文件【ls】查看。輸入
【chmodu+xetc】賦予文件可執行的權限,輸入【ll】查看。
4、在home下,輸入【mkdir{program,music,temp}】,可在home下創立這三個目錄,輸入【ls】查看。在program下輸入【mkdir{java,C}】,可創立java和C兩個目錄,【ls】查看。
5、在桌面上方選擇【系統】-【首選項】,即可設置屏幕保護程序和更改背景和指定關聯程序
5、在桌面上可見看到有CD光盤,雙擊瀏覽,右鍵【彈出】即卸載。
四、實驗總結和體會
Linux的指令系統是學習Linux操作系統很重要的一部分,指令系統相當于在Windows操作系統下的doc,可以省去圖形化界面。通過這次的實驗讓我了解了Linux的強大功能,了解到Linux有許多方便快捷的設置基本配置的方法,這使我更喜歡上Linux的使用。在使用指令的過程中,有時候對文件的操作需要一定的權限,這時需要在登陸時用戶名使用【root】,而不是我們在安裝時使用的用戶名,這樣就獲得了管理員權限,可以對一些系統文件進行操作。
實驗三Linux應用軟件與系統管理
一、實驗目的
1. 了解OpenOffice.Org集成辦公軟件,掌握利用OpenOffice.Org的套件來完成文檔和圖片的處理。
2. 了解Linux網絡管理的知識,熟悉Linux網絡配置的方法,掌握在Linux環境下配置Web服務器和ftp服務的方法。
二、實驗內容
1. 配置Linux系統的網絡環境,安裝FTP和Web服務器,并配置相關的屬性,利用FTP實現WINDOWS和Linux之間的數據交換。
2. 利用FTP程序上傳自己的照片到FTP服務器,利用OpenOffice的文字處理工具OpenOfficeWriter制作一份表格形式的個人簡歷。個人簡歷中至少包含學號、姓名、性別、專業、照片和學習經歷等內容,并保存為網頁格式(html格式)。
3. 將個人簡歷網頁設置為WEB服務器的首頁,然后在客戶端利用瀏覽器訪問WEB服務器,查看效果。
4. 通過讀取proc文件系統,獲取系統各種信息(如主機名、系統啟動時間、運行時間、版本號、所有進程信息、CPU使用率等),并以比較容易的方式顯示。
三、實驗過程及結果
1.配置網絡環境:在(服務.cmd).里面進行以下操作:在服務里選擇3按回車
完成后,可在本地連接看到VMware已連接上網絡
在虛擬機設置中設置以太網網絡連接方式為
網關地址填虛擬機的網管,IP地址設為虛擬機的一個子網:
四、總結:
在linux系統下,make是我們經常用到的編譯命令,所以關于make代碼和他的操作指令一定要記清楚。所以,熟練掌握了make和makefile工具之后,源碼安裝軟件就變的像windows下安裝軟件一樣簡單。
實驗四進程控制與管理
一、實驗目的
1. 掌握GCC編譯器的用法,學會利用GCC編輯器來編輯C語言程序,學會利用GDB調試器來調試C語言程序。
2. 理解進程和程序的區別和聯系,
3. 掌握在Linux環境下觀察進程運行情況和CPU工作情況的命令。
4. 了解fork()系統調用,掌握利用fork()創建進程的方法。
5. 了解Linux系統其他與進程相關的系統調用,如exec、wait和exit等。
6. 了解Linux常用的進程通信機制。
二、實驗內容
1. 利用Linux的進程管理命令ps、top來監視和跟蹤進程,體會進程和程序的關系。
2. 利用Linux的文字編輯器編寫文件復制的C語言程序,并用gcc編譯該程序,然后運行該程序。
3. 編寫一段程序,使用系統調用fork()創建兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示"a",子進程分別顯示字符"b"和字符"c"。試觀察記錄屏幕上的顯示結果,并分析原因。
4. 修改上述程序,每一個進程循環顯示一句話。子進程顯示"daughter…"及"son……",父進程顯示"parent……",觀察結果,分析原因。
5. 用fork()創建一個進程,再調用exec()用新的程序替換該子進程的內容。
三、實驗過程及結果
1、利用Linux的進程管理命令ps、top來監視和跟蹤進程,體會進程和程序的關系。
從用戶身份切換到ROOT身份
輸入命令ps查看進程
輸入命令top跟蹤進程
2、利用Linux的文字編輯器編寫一個計算機100個自然數和的C語言程序,并用gcc編譯該程序,然后運行該程序。
創建一個.C文件并進入進行編輯
用GCC進行編譯,再查看文件,發現產生執行文件a.out
執行這個可執行文件得到結果5050
1、 編寫一段程序,使用系統調用fork()創建兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。讓每一個進程在屏幕上顯示一個字符:父進程顯示"a",子進程分別顯示字符"b"和字符"c"。試觀察記錄屏幕上的顯示結果,并分析原因。
穿件一個.C文件并進行編寫程序代碼
反復執行2次該程序
可以看出兩次執行的結果abc出現的順序不同,原因是,3個進程的輸出次序是隨機的,并不會按規定的順序出現,所以會出現上述結果。
4、修改上述程序,每一個進程循環顯示一句話。子進程顯示"daughter…"及"son……",父進程顯示"parent……",觀察結果,分析原因。
重新修改代碼
執行這段程序
原分析:
因和之前一樣,可以看出執行的結果3個單詞出現的順序不同,原因是,
3個進程的輸出次序是隨機的,并不會按規定的順序出現,所以會出現上述結果。
5、用fork()創建一個進程,再調用exec()用新的程序替換該子進程的內容。
編寫代碼
執行的結果
結果表明execl替代了son的內容
四、實驗總結和體會
這個實驗考察的是進程之間存在很多可能性以及對編輯器的使用。本次實驗學習了在linux環境下用gcc編譯器運行c語言程序,在linux環境下編寫程序用到了vi編輯器,知道了該編輯器也需要各種命令來操作。編寫C語言程序時用到了fork()函數,再調用execl()用新的程序替換該子進程的內容。
實驗五進程調度模擬程序的設計與實現
一、實驗目的
1. 了解進程調度的概念,掌握常用進程調度算法的原理。
2. 掌握Linux程序設計編輯、編譯和調試的技巧。
二、實驗內容
1. 編寫程序實現進程調度調度算法先來先服務、優先級高優先和時間片輪轉調度算法。(編程語言不限)
2. 輸入數據,輸出運行結果。
三、實驗過程及結果
四、 實驗總結和體會
通過做本實驗,讓我對進程或作業先來先服務、高優先權、按時間片輪轉調度算法以及進程調度的概念和算法,有了更深入的認識!理解進程的狀態及變化,動態顯示每個進程的當前狀態及進程的調度情況。進程調度是處理機管理的核心內容。優先級高優先是根據作業的優先級,總是選擇優先級最高者進入隊列。輪轉調度算法是調度程序每次把CPU分配給就緒隊列首進程/線程使用規定的時間間隔,就緒隊列中都路保留巡行一個時間片。
【篇四】操作系統文件管理實驗報告
操作系統教程
實驗指導書
實驗一 WINDOWS進程初識
1、 實驗目的
(1) 學會使用VC編寫基本的Win32 Consol Application(控制臺應用程序)。
(2) 掌握WINDOWS API的使用方法。
(3) 編寫測試程序,理解用戶態運行和核心態運行。
2、 實驗內容和步驟
(1)編寫基本的Win32 Consol Application
步驟1:登錄進入Windows,啟動VC++ 6.0。
步驟2:在“FILE”菜單中單擊“NEW”子菜單,在“projects”選項卡中選擇“Win32 Consol Application”,然后在“Project name”處輸入工程名,在“Location” 處輸入工程目錄。創建一個新的控制臺應用程序工程。
步驟3:在“FILE”菜單中單擊“NEW”子菜單,在“Files”選項卡中選擇“C++ Source File”, 然后在“File” 處輸入C/C++源程序的文件名。
步驟4:將清單1-1所示的程序清單復制到新創建的C/C++源程序中。編譯成可執行文件。
步驟5:在“開始”菜單中單擊“程序”-“附件”-“命令提示符”命令,進入Windows“命令提示符”窗口,然后進入工程目錄中的debug子目錄,執行編譯好的可執行程序:
E:\課程\os課\os實驗\程序\os11\debug>hello.exe
運行結果 (如果運行不成功,則可能的原因是什么?) :
答:運行成功,結果:
(2)計算進程在核心態運行和用戶態運行的時間
步驟1:按照(1)中的步驟創建一個新的“Win32 Consol Application”工程,然后將清單1-2中的程序拷貝過來,編譯成可執行文件。
步驟2: 在創建一個新的“Win32 Consol Application”工程,程序的參考程序如清單1-3所示,編譯成可執行文件并執行。
步驟3:在“命令提示符”窗口中運行步驟1中生成的可執行文件,測試步驟2中可執行文件在核心態運行和用戶態運行的時間。
E:\課程\os課\os實驗\程序\os12\debug>time TEST.exe
步驟4:運行結果 (如果運行不成功,則可能的原因是什么?)
因為此程序是個死循環,所以運行時間為無窮大。______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
步驟5:分別屏蔽While循環中的兩個for循環,或調整兩個for循環的次數,寫出運行結果。
屏蔽i循環:
_______________________________________________________________________________屏蔽j循環:
_______________________________________________________________________________調整循環變量i的循環次數:
_______________________________________________________________________________調整循環變量j的循環次數:
_______________________________________________________________________________
3、 實驗結論
通過實驗可以得知運行一個程序CPU的使用情況是不同的,同時與循環的次數無關,和當前計算的復雜情況有關。實驗得出的數據可以可以說明這一點。
實驗二 進程管理
1、實驗目的
1) 通過創建進程、觀察正在運行的進程和終止進程的程序設計和調試操作,進一步熟悉操作系統的進程概念,理解Windows進程的“一生”。
2) 通過閱讀和分析實驗程序,學習創建進程、觀察進程、終止進程以及父子進程同步的基本程序設計方法。
2、實驗內容和步驟
(1). 創建進程
本實驗顯示了創建子進程的基本框架。該程序只是再一次地啟動自身,顯示它的系統進程ID和它在進程列表中的位置。
步驟1:創建一個“Win32 Consol Application”工程,然后拷貝清單2-1中的程序,編譯成可執行文件。
步驟2:在“命令提示符”窗口運行步驟1中生成的可執行文件。運行結果:
范例:E:\課程\os課\os實驗\程序\os11\debug>os21
(假設編譯生成的可執行文件是os21.exe)
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
按下ctrl+alt+del,調用windows的任務管理器,記錄進程相關的行為屬性:
PID:3676 ,
句柄數:11
內存使用:1080K
頁面錯誤:263
頁面緩存:15K
步驟3:在“命令提示符”窗口加入參數重新運行生成的可執行文件。運行結果:
范例:E:\課程\os課\os實驗\程序\os11\debug>os21 3
(假設編譯生成的可執行文件是os21.exe)
按下ctrl+alt+del,調用windows的任務管理器,記錄進程相關的行為屬性:
PID:2821
句柄數:7
內存使用:832K
頁面錯誤:263
頁面緩存:15K
步驟4:修改清單2-1中的程序,將nClone的定義和初始化方法按程序注釋中的修改方法進行修改,編譯成可執行文件(執行前請先保存已經完成的工作)。再按步驟2中的方式運行,看看結果會有什么不一樣。運行結果:
第一次修改:結果不變。
第二次修改:是一個死循環,不斷的彈出此窗口:
從中你可以得出什么結論:
nClone的作用:_控制程序的執行,當nClone大于等于5時可跳出程序。
________________________________________________________________
_____________________________________________________________________
變量的定義和初始化方法(位置)對程序的執行結果有影響嗎?為什么?________________
____有,nClone被修改后會對程序的結束控制產生影響
_______________________________________________________________________________
(2). 父子進程的簡單通信及終止進程
步驟1:創建一個“Win32 Consol Application”工程,然后拷貝清單2-2中的程序,編譯成可執行文件。
步驟2:在VC的工具欄單擊“Execute Program”(執行程序) 按鈕,或者按Ctrl + F5鍵,或者在“命令提示符”窗口運行步驟1中生成的可執行文件。運行結果:
范例:E:\課程\os課\os實驗\程序\os11\debug>os22
(假設編譯生成的可執行文件是os22.exe)
步驟3:按源程序中注釋中的提示,修改源程序2-2,編譯執行(執行前請先保存已經完成的工作)。運行結果:
不斷的彈出:
在程序中加入跟蹤語句,或調試運行程序,同時參考MSDN中的幫助文件CreateProcess()的使用方法,理解父子進程如何傳遞參數。給出程序執行過程的大概描述:
通過main(int argc, char* argv[])傳遞參數,每次運行時先檢測argc的值,若小于1,程序運行結束,否則繼續往下執行。
步驟4:填空
CreateProcess() 函數有_5_______個核心參數?本實驗程序中設置的各個參數的值是:
a. ______szFilename___________________________________________;
b. ______szCmdLine___________________________________________;
c. ______NULL___________________________________________;
d. ______NULL___________________________________________;
e. ______FALSE___________________________________________;
f. _______CREATE_NEW_CONSOLE__________________________________________;
g. _______NULL__________________________________________;
h. _______NULL__________________________________________;
i. _______si__________________________________________;
j. _______pi__________________________________________。
步驟5:按源程序中注釋中的提示,修改源程序2-2,編譯執行。運行結果:
步驟6:參考MSDN中的幫助文件CreateMutex()、OpenMutex()、ReleaseMutex()和WaitForSingleObject()的使用方法,理解父子進程如何利用互斥體進行同步的。給出父子進程同步過程的一個大概描述:
CreateMutex()創建互斥體,OpenMutex()打開互斥體,ReleaseMutex()釋放互斥體,WaitForSingleObject()檢測hHandle事件的信號狀態,通過這些方法可實現當前只有一個進程被創建或使用,實現進程的同步。
3、 實驗結論
通過對進程的操作,如創建進程,實現對進程的簡單控制。創建互斥體,解決了進程的同步問題,兩者相互使用,使進程的運行情況得到了很好的管理。
實驗三 進程同步的經典算法
1、實驗目的
1) 回顧系統進程、線程的有關概念,加深對Windows 2000線程的理解。
2) 了解互斥體對象,通過對生產者消費者等進程間同步與互斥經典算法的實現,加深對P、V原語以及利用P、V原語進行進程間同步與互斥操作的理解。
2、實驗內容和步驟
(1). 生產者消費者問題
步驟1:創建一個“Win32 Consol Application”工程,然后拷貝清單3-1中的程序,編譯成可執行文件。
步驟2:在“命令提示符”窗口運行步驟1中生成的可執行文件。運行結果:
范例:E:\課程\os課\os實驗\程序\os11\debug>os31
(假設編譯生成的可執行文件是os31.exe)
步驟3:仔細閱讀源程序,找出創建線程的WINDOWS API函數,回答下列問題:線程的第一個執行函數是什么(從哪里開始執行)?它位于創建線程的API函數的第幾個參數中?
答:第一個執行函數是Producer;位于第三個參數中。
步驟4:修改清單3-1中的程序,調整生產者線程和消費者線程的個數,使得消費者數目大與生產者,看看結果有何不同。運行結果:
從中你可以得出什么結論:
生產速度快,生產者經常等待消費者;反之,消費者經常等待。
步驟5:修改清單3-1中的程序,按程序注釋中的說明修改信號量EmptySemaphore的初始化方法,看看結果有何不同。運行結果:
步驟6:根據步驟4的結果,并查看MSDN,回答下列問題
1)CreateMutex中有幾個參數,各代表什么含義。
答:有三個參數.
1. LPSECURITY_ATTRIBUTES lpMutexAttributes 代表安全屬性的指針
2. BOOL bInitialOwner代表布爾bInitialOwner
3. LPCTSTR lpName 代表LPCTSTR類型lpName
2)CreateSemaphore中有幾個參數,各代表什么含義,信號量的初值在第幾個參數中。
四個參數:1、表示采用不允許繼承的默認描述符2、設置信號機的初始計數3、設置信號機的最大計數 4、指定信號機對象的名稱。
3)程序中P、V原語所對應的實際Windows API函數是什么,寫出這幾條語句。
P:Take() V:Append()
4)CreateMutex能用CreateSemaphore替代嗎?嘗試修改程序3-1,將信號量Mutex完全用CreateSemaphore及相關函數實現。寫出要修改的語句:
可以
Mutex=CreateSemaphore(NULL,false,false,NULL);
(2). 讀者寫者問題
根據實驗(1)中所熟悉的P、V原語對應的實際Windows API函數,并參考教材中讀者、寫者問題的算法原理,嘗試利用Windows API函數實現第一類讀者寫者問題(讀者優先)。
3、 實驗結論
將信號量看作生產或消費的一個對象,對信號量的生成和銷毀操作如同P操作和V操作一樣,生成者消費者問題模擬的就是對信號量的生成和銷毀,其中牽涉了信號量的同步,這也是該問題為何稱為同步的經典問題的原因。
實驗四 存儲管理
1、 實驗目的
(1) 通過對Windows 2000“任務管理器”、“計算機管理”、“我的電腦”屬性、“系統信息”、“系統監視器”等程序的應用,學習如何察看和調整Windows的內存性能,加深對操作系統存儲管理、虛擬存儲管理等理論知識的理解。
(2) 了解Windows 2000的內存結構和虛擬內存的管理,理解進程的虛擬內存空間和物理內存的映射關系。
2、 實驗內容和步驟
(1)觀察和調整Windows 2000/XP的內存性能。
步驟1:閱讀“背景知識”,請回答:
1) 什么是“分頁過程”?
分頁過程就是將信息從主內存移動到磁盤進行臨時存儲的過程。
2) 什么是“內存共享”?
允許訪問某些內存空間而不危及它和其他應用程序的安全性和完整性
3) 什么是“未分頁合并內存”和“分頁合并內存”?
Windows 2000中,未分頁合并內存的最大限制是多少?
未分頁合并內存:分頁合并內存是存儲遲早需要的可分頁代碼或數據的內存部分。
分業合并內存: 未分頁合并內存包含必須駐留在內存中的占用代碼或數據。
在Windows2000中為分業合并內存的最大限制是256MB。
4) Windows 2000分頁文件默認設置的最小容量和最大容量是多少?
內存數量的1.5倍作為分頁文件的最小容量,這個最小容量的兩倍作為最大容量。
步驟2:登錄進入Windows 2000 Professional。
步驟3:查看包含多個實例的應用程序的內存需求。
1) 啟動想要監視的應用程序,例如Word。
2) 右鍵單擊任務欄以啟動“任務管理器”。
3) 在“Windows任務管理器”對話框中選定“進程”選項卡。
4) 向下滾動在系統上運行的進程列表,查找想要監視的應用程序。
請在表4-3中記錄:
?
表4-3 實驗記錄
?
“內存使用”列顯示了該應用程序的一個實例正在使用的內存數量。
5) 啟動應用程序的另一個實例并觀察它的內存需求。
請描述使用第二個實例占用的內存與使用第一個實例時的內存對比情況:
第二個實例占用內存22612K,比第一個實例占用的內存大很多。
步驟4:未分頁合并內存。
估算未分頁合并內存大小的最簡單方法是使用“任務管理器”。未分頁合并內存的估計值顯示在“任務管理器”的“性能”選項卡的“核心內存”部分。
總數 (K) :__96340K___________________________
分頁數:_____50328___________________________
未分頁 (K) :__46052K_________________________
還可以使用“任務管理器”查看一個獨立進程正在使用的未分頁合并內存數量和分頁合并內存數量。操作步驟如下:
1) 單擊“Windows任務管理器”的“進程”選項卡,然后從“查看”菜單中選擇“選擇列”命令,顯示“進程”選項卡的可查看選項。
2) 在“選擇列”對話框中,選定“頁面緩沖池”選項和“非頁面緩沖池”選項旁邊的復選框,然后單擊“確定”按鈕。
返回Windows 2000“任務管理器”的“進程”選項卡時,將看到其中增加顯示了各個進程占用的分頁合并內存數量和未分頁合并內存數量。
仍以剛才打開觀察的應用程序 (例如Word) 為例,請在表4-4中記錄:
?
表4-4 實驗記錄
?
從性能的角度來看,未分頁合并內存越多,可以加載到這個空間的數據就越多。擁有的物理內存越多,未分頁合并內存就越多。但未分頁合并內存被限制為256MB,因此添加超出這個限制的內存對未分頁合并內存沒有影響。
步驟5:提高分頁性能。
在Windows 2000的安裝過程中,將使用連續的磁盤空間自動創建分頁文件(pagefile.sys) 。用戶可以事先監視變化的內存需求并正確配置分頁文件,使得當系統必須借助于分頁時的性能達到最高。
雖然分頁文件一般都放在系統分區的根目錄下面,但這并不總是該文件的最佳位置。要想從分頁獲得最佳性能,應該首先檢查系統的磁盤子系統的配置,以了解它是否有多個物理硬盤驅動器。
1) 在“開始”菜單中單擊“設置” – “控制面板”命令,雙擊“管理工具”圖標,再雙擊“計算機管理”圖標。
2) 在“計算機管理”窗口的左格選擇“磁盤管理”管理單元來查看系統的磁盤配置。
如果系統只有一個硬盤,那么建議應該盡可能為系統配置額外的驅動器。這是因為:Windows 2000最多可以支持在多個驅動器上分布的16個獨立的分頁文件。為系統配置多個分頁文件可以實現對不同磁盤I/O請求的并行處理,這將大大提高I/O請求的分頁文件性能。
請在表4-5中記錄:
?
表4-5 實驗記錄
?
步驟6:計算分頁文件的大小。
要想更改分頁文件的位置或大小配置參數,可按以下步驟進行:
1) 右鍵單擊桌面上的“我的電腦”圖標并選定“屬性”。
2) 在“高級”選項卡上單擊“性能選項”按鈕。
3) 單擊對話框中的“虛擬內存”區域中的“更改”按鈕。
請記錄:
所選驅動器 (C: ) 的頁面文件大小:
驅動器:_C:__________________________________
可用空間:________31637________________________ MB
初始大小 (MB) :___________________________
最大值 (MB) :_____________________________
所選驅動器 (D: ) 的頁面文件大小:(如果有的話)
驅動器:______D:_____________________________
可用空間:____20682____________________________ MB
初始大小 (MB) :____756MB_______________________
最大值 (MB) :____1512MB_________________________
所有驅動器頁面文件大小的總數:
允許的最小值:___2_________________________ MB
推薦:___________1522_________________________ MB
當前已分配:________756______________________ MB
4) 要想將另一個分頁文件添加到現有配置,在“虛擬內存”對話框中選定一個還沒有分頁文件的驅動器,然后指定分頁文件的初始值和最大值 (以兆字節表示) ,單擊“設置”,然后單擊“確定”。
5) 要想更改現有分頁文件的最大值和最小值,可選定分頁文件所在的驅動器。然后指定分頁文件的初始值和最大值,單擊“設置”按鈕,然后單擊“確定”按鈕。
6) 在“性能選項”對話框中單擊“確定”按鈕。
7) 單擊“確定”按鈕以關閉“系統特性”對話框。
步驟7:使用任務管理器。
可以使用“任務管理器”來簡單地檢查分頁文件是否配置了正確容量。這樣可以實時提供系統正在使用分頁文件的方式以及其他重要系統信息的準確描述。
通過右鍵單擊任務欄運行“任務管理器”,選定“性能”選項卡查看實時的系統統計數據。與分頁文件大小最有關的信息位于“認可用量”區域。這一區域顯示了認可“峰值”是否達到或超過了認可“限制”,以及它是否超過了系統上的物理內存數量。認可“峰值”是指系統迄今為止向進程分配的最大物理內存和虛擬內存數量。
請記錄:
物理內存 (K)
總數:___1039660K_____________________________
可用數:_502544K_____________________________
系統緩存:504332K____________________________
認可用量 (K)
總數:____400156K____________________________
限制:____1714520K____________________________
峰值:____427648K____________________________
當系統遇到分頁活動增加的情況時,提交的內存數量 (“認可總數”) 就會增加。一旦它達到了“認可限制”值,系統就需要擴展分頁文件。“認可限制”值指出在不必擴展分頁文件的情況下可以向內存提交的虛擬內存數量。因為目標是避免擴展分頁文件,所以必須保持“認可總數”和“認可限制”值相差較大。如果這兩個值接近了,那么系統必須動態增加分頁文件的大小。
“任務管理器”的“認可用量”區域顯示的信息還說明了系統的主內存是否足以滿足系統執行的任務。如果認可“總數”值經常超過系統中的內存數量,那么系統的物理內存可能不足。
(2)了解和檢測進程的虛擬內存空間。
步驟1:創建一個“Win32 Consol Application”工程,然后拷貝清單4-1中的程序,編譯成可執行文件。
步驟2:在VC的工具欄單擊“Execute Program”(執行程序) 按鈕,或者按Ctrl + F5鍵,或者在“命令提示符”窗口運行步驟1中生成的可執行文件。
范例:E:\課程\os課\os實驗\程序\os11\debug>os41
(假設編譯生成的可執行文件是os41.exe)
步驟3:根據運行結果,回答下列問題
虛擬內存每頁容量為:________4.00KB______________________________________
最小應用地址:______________0x00010000_____________________________________
最大應用地址:_____________0x7ffeffff_______________________________________
當前可供應用程序使用的內存空間為:_____1.99GB___________________________
當前計算機的實際內存大小為:_____0.99GB_________________________________
理論上每個Windows應用程序可以獨占的最大存儲空間是:_____________
按committed、reserved、free等三種虛擬地址空間分別記錄實驗數據。其中“描述”是指對該組數據的簡單描述,例如,對下列一組數據:
00010000 – 00012000 Committed, READWRITE, Private
可描述為:具有READWRITE權限的已調配私有內存區。
?
將系統當前的自由區 (free) 虛擬地址空間填入表4-6中。
?
表4-6 實驗記錄
?
?
將系統當前的已調配區 (committed) 虛擬地址空間填入表4-7中。
?
表4-7 實驗記錄
?
將系統當前的保留區 (reserved) 虛擬地址空間填入表4-8中。
?
表4-8 實驗記錄
?
3、 實驗結論
簡單描述windows進程的虛擬內存管理方案:通過對文件的操作權限,有只讀,讀寫,不允許訪問等等和不同的調度方式實現對虛擬內存的管理。
實驗五 文件和設備管理
1、實驗目的
通過對Windows 2000提供的文件與文件夾加密、磁盤配額管理、進行磁盤清理、執行備份操作、使用CHKDSK維護文件完整性和整理磁盤碎片等功能進行操作:
1) 熟悉Windows 2000的文件系統。
2) 明確應用NTFS文件系統的積極意義。
3) 掌握優化Windows 2000磁盤子系統的基本方法。
4) 進一步理解現代操作系統文件管理知識。
2、實驗內容與步驟
步驟1:閱讀“背景知識”,請回答:
1) Windows 2000支持哪三種主要的文件系統:
a. ______FAT16____________________________________________________________
b. _______FAT32___________________________________________________________
c. _____ NTFS _____________________________________________________________
2) NTFS文件系統只能用于哪些操作系統環境:
Windows NT、2000和XP
步驟2:登錄進入Windows 2000 Professional。
步驟3:加密文件或文件夾。
為加密文件或文件夾,可按照以下步驟進行:
1) 在“Windows資源管理器”中,右鍵單擊想要加密的文件或文件夾,然后單擊“屬性”命令。
2) 在“常規”選項卡上,單擊“高級”按鈕。在“高級屬性”對話框中,可以設置的文件屬性有:
3) 選定“加密內容以便保護數據”復選框。
4) 單擊“確定”按鈕完成操作。
步驟4:訪問RSM服務。
Windows 2000還通過一些輔助組件提供了用于額外存儲的選項。可移動存儲管理 (Removable Storage Management,RSM) 就是一項用于管理可移動媒體 (例如磁帶和光盤) 以及存儲設備 (庫) 的服務。RSM允許應用程序訪問和共享相同的媒體資源。RSM使用戶可以很容易地追蹤可移動存儲媒體 (例如磁帶和光盤) ,并管理包含它們的庫 (例如轉換器和光盤機) 。
為訪問RSM服務,可按以下步驟操作:
1) 在“控制面板”中雙擊“管理工具”圖標,再雙擊其中的“計算機管理”圖標,打開本地“計算機管理”窗口。
2) 在左窗格右鍵單擊控制樹中的“可移動存儲”。
“可移動存儲”可以管理和設置的項目有:
a. ________媒體____________________________________________
b. _________庫___________________________________________
磁盤配額可追蹤和控制卷的磁盤空間使用情況。為分配磁盤配額,可按照以下步驟進行:
1) 打開“我的電腦”。
2) 右鍵單擊想要指定默認配額位的卷 (例如某個硬盤) ,然后單擊“屬性”命令。
3) 在“屬性“對話框中,選定”配額“選項卡。
4) 在“屬性“對話框的”配額“選項卡上,選定“啟用配額管理”。
5) 選定“將磁盤空間限制為”選項,這將激活磁盤空間限制和警告級別區域。
6) 在文本框中鍵入數值,從下拉列表中選定一個磁盤空間限制單位,然后單擊“確定”。可以使用小數值 (例如20.5MB) 。
步驟6:添加新的磁盤配額項
在啟用卷的磁盤配額時,將從這一時刻開始自動追蹤新用戶的卷使用情況。為了對現有的卷用戶應用磁盤配額,可以在“配額項”對話框中添加新的配額項。操作步驟如下:
1) 在“我的電腦”窗口中,右鍵單擊想要添加新的磁盤配額項的卷,然后單擊“屬性”命令。
2) 在“屬性”對話框中,選定“配額”選項卡。
3) 在“配額”選項卡上,單擊“配額項”按鈕。
4) 在“配額項目”窗口的“配額”菜單中單擊“新建配額項”命令。
5) 在“選擇用戶”對話框中,單擊“查找范圍”列表框,選定想要從中選擇用戶名的域名或工作組名稱。單擊“添加”,然后單擊“確定”按鈕。
6) 在“添加新配額項”對話框中,可以對所選用戶設置的配額限制項目有:
7) 單擊“確定”按鈕完成操作。
只能在Windows 2000中使用 NTFS格式化的磁盤卷上分配磁盤配額。如果想要管理配額,則必須是驅動器所在計算機上的Administrators組的成員。
步驟7:磁盤清理。
“磁盤清理”有助于釋放硬盤驅動器空間。“磁盤清理”程序將搜索驅動器,然后顯示可以安全刪除的臨時文件、Internet緩存文件以及不需要的程序文件。可以指示刪除其中一些或所有的文件。
為打開“磁盤清理”功能,可單擊“開始”按鈕,單擊“程序”菜單中的“附件”-“系統工具”-“磁盤清理”命令。
“磁盤清理”搜索指定的驅動器。在打開和關閉文件或者使用Interne連接時,系統會創建臨時文件,這些臨時性質的文件有時會繼續保存在硬盤上。“磁盤清理”程序可以了解這些文件采用的形式及其在磁盤上的位置,以便安全地刪除這些文件,釋放寶貴的磁盤空間。
步驟8:備份。
為應對故障事件,Windows 2000包括了一個功能齊全的“備份”程序,該程序使用了一些標準的備份設備。
單擊“開始”菜單中“系統工具”的“備份”命令,可運行“備份”實用程序。
在“備份”程序中包括了“備份向導”和“還原向導”,這些向導簡化了備份和恢復Windows 2000服務器上存儲的重要數據的任務。用戶也可以在“備份”選項卡和“還原”選項卡中使用“備份”和“還原”程序的手工版本。
· 備份數據
要想選定要備份的數據,只需要在“備份”窗口的左窗格中單擊要備份的文件或目錄旁邊的復選框即可。然后在窗口下方選擇備份目的地,命名備份媒體,最后單擊“開始備份”按鈕。
· 恢復數據
為“還原”恢復數據,先選定想要恢復的文件和文件夾,選定恢復備份文件和文件夾的位置,設置恢復選項,然后單擊“開始還原”進行恢復操作。
· 計劃作業
除備份和恢復數據之外,Windows 2000“備份”程序還允許計劃備份作業,以便在無人干預的情況下運行。
計劃備份操作可按照以下步驟進行:
1) 打開“備份”實用程序。
2) 單擊“備份”選項卡,從“作業”菜單中
選擇“新建”命令。
3) 單擊以選定想要備份的任何驅動器、文件夾或文件的復選框。
4) 選定將作為備份目的地的文件或磁帶設備,然后單擊“作業”菜單中的“保存選項”命令,以保存文件和文件夾選擇。
5) 在“備份媒體或文件名”文本框中,鍵入備份文件的路徑和文件名或者選定磁帶。
6) 單擊“工具”菜單中的“選項”命令,選定想要使用的任何備份選項,例如備份類型和日志文件類型,然后單擊“確定”按鈕。
7) 單擊“開始備份”,在“備份作業信息”對話框中進行所需要的任何更改。
8) 如果想要設置高級備份選項,例如數據驗證或硬件壓縮,則單擊“高級”。選擇完高級備份選項后,單擊“確定”按鈕。
9) 單擊“備份作業信息”對話框中的“計劃”。
10) 在“設置賬號信息”對話框中,輸入一個用戶名和密碼 (指定在這個賬號下運行計劃的備份操作) 。
11) 在“計劃的作業選項”對話框中,在“作業名”文本框中鍵入計劃的備份作業的名稱。然后單擊“屬性”,以設置計劃備份的日期、時間和頻率參數。在完成后單擊“確定”按鈕退出操作。
步驟9:使用 CHKDSK維護文件完整性
Windows 2000的CHKDSK可以掃描FAT、FAT32和NTFS分區上的文件系統完整性,它檢查丟失的簇、交叉鏈接文件等,還可以嘗試更正它找到的任何錯誤。它還提供了其他許多文件系統信息。
如果Windows 2000感覺到文件系統損壞,它將在啟動時自動運行CHKDSK。用戶也可以手工啟動這個實用程序。CHKDSK可以在5種模式中運行。第一種模式沒有任何參數,這是一種只讀模式,僅用于檢查文件系統中的任何錯誤。在這種模式中,CHKDSK會報告任何錯誤,但是不會嘗試修復錯誤,因此這個過程完成得非常快。其他4個選項使用以下參數:
· /FILENAME 檢查指定文件的碎片化情況。
· /F 嘗試修復文件系統中的任何錯誤。
· /V 提供分區上的每一個文件的名稱和完整路徑。
· /R 查找分區上的壞扇區并嘗試恢復可讀信息。
要運行CHKDSK,可執行以下操作:
1) 在“開始”菜單中單擊“程序”-“附件”-“命令提示符”命令,打開“命令提示符”窗口。
2) 在命令提示符上進入要檢查的分區。例如,鍵入C:\ 。
3) 鍵入不帶任何參數的CHKDSK,以便只檢查文件系統錯誤。如果找到了任何錯誤,則繼續進行第4) 步。
請記錄系統執行CHKDSK命令過程中顯示的提示信息:
CHKDSK系統檢查之后,報告的磁盤信息是:
4) 運行帶 /F參數的CHKDSK,以嘗試修復在文件系統中找到的錯誤。
一般情況下,用戶只有在擔心系統存在著Windows 2000沒有意識到的磁盤問題時才會使用這個實用程序。
步驟10:整理磁盤碎片。
Microsoft聲稱使用像NTFS這樣有效的文件系統可以減少整理碎片的需要,但是NTFS文件系統也仍然會受碎片化的影響。Windows 2000中包括了一個“磁盤碎片整理程序”實用程序。通過整理使用FAT、FAT32或NTFS文件系統的卷的碎片,Windows 2000包括了一些用來維護磁盤性能的能力。
這個版本具有以下限制:
· 只能整理本地卷的碎片。
· 一次只能整理一個卷的碎片。
· 在掃描一個卷時不能整理另一個卷的碎片。
· 不能使用腳本。
· 不能計劃碎片的整理工作。
· 一次只能運行一個Microsoft管理控制臺 (MMC) 管理單元。
所有測試過的系統配置都表明,NTFS碎片整理可以改進性能,并且較快的系統配置從磁盤碎片整理上獲得的收益比功能較弱的系統更多
為打開“碎片整理”功能,可單擊“開始”按鈕,單擊“程序”菜單中的“附件”-“系統工具”-“碎片整理”命令。
3、實驗結論
談談WINDOWS支持的幾種文件系統的優缺點:
解答:FAT文件系統是早期文件系統之一,也是MS-DOS使用的原始文件系統。它將文件信息儲存在位于卷標開頭處的文件分配表中,并保存兩份文件分配表,以防其中的一個遭到破壞,
FAT文件系統最大的優點是MS-DOS、Windows 9x甚至OS/2都能訪問FAT卷標;而其最大的弱點是隨著FAT卷標尺寸的增長,最小的簇尺寸也隨之增長。對于大于512MB的硬盤而言,最小的簇尺寸為16KB;對于大于2GB的硬盤,最小的簇尺寸為64KB。這就導致磁盤空間的極大浪費,因為一個文件必須占用整數個簇。因此,1KB的文件在2GB的硬盤上將占用64KB的磁盤空間。FAT文件系統不支持尺寸大于4GB的卷標。
FAT32文件系統通過提供長文件名的支持來擴展FAT文件系統,并與FAT16兼容。FAT (16和32) 文件系統是支持可移動媒體 (例如軟盤) 上的惟一的文件系統。
Windows NT文件系統 (NTFS) 包括了FAT文件系統的所有功能,同時又提供了對高級文件系統特征 (例如安全模式、壓縮和加密) 的支持。它是為在大磁盤上有效地完成文件操作而設計的。與FAT和保護模式FAT文件系統不同,它的最小簇尺寸不超過4KB。但是,NTFS卷標只能為Windows NT、2000和XP操作系統所訪問。




