實驗目的
1、理解作業系統儲存管理原理
作業系統的發展使得系統完成了大部分的記憶體管理工作。對於程式設計師而言,這些記憶體管理的過程完全透明不可見。因此,程式設計師開發時從不關心系統如何為自己分配記憶體,而且永遠認為系統可以分配給程式所需要的記憶體。在程式開發時,程式設計師真正需要做的就是:申請記憶體、使用記憶體、釋放記憶體,其他一概無需過問。 2、
研讀linux
記憶體管理所用到的檔案
include/linux/mm.h,
主要包括兩個資料結構:
mem_map
、free_area 3、
在linux 下,用malloc()函式實現cat或copy命令。
1、定義學號的.c檔案
vi b17070306.c
2、編寫.c檔案
**如下;
#include #include //exit函式,實驗指導上少了這乙個標頭檔案
#include #include int main(void)
strcpy(str,"hello");
printf("string is %s\\n",str);
free(str);
return 0;
}
3、編譯執行gcc b17070306.c
./a.out
4、過程與結果及結果分析
實驗一執行結果:
結果分析:
函式通過
void *malloc(size_t size) 分配指定大小size個位元組的記憶體空間,成功時返回分配記憶體的指標(即所分配記憶體的位址)。該記憶體區域沒有清空。
然後通過strcpy(str,"hello");將hello賦值給該記憶體空間,然後輸出並通過
void free(void * addr);函式釋放由malloc()分配的記憶體,addr是要釋放記憶體空間的起始位址,並且addr必須是被以前malloc( )呼叫返回的。
1、建立.c檔案
vi sanyanjie.c
2、編寫.c檔案
最初**:
#include#include #include #include #include main()
報錯:
原因是return-type:函式有無返回值以及返回值型別不匹配;這是因為c標準裡規定main返回值必須為int。具體可參看這篇
故修改為
#include#include #include #include #include int main()
然後有報錯
原因是使用open函式使用錯誤,仔細檢視open函式發現其相關性質,具體參考這篇
1. 標頭檔案:
#include #include #include
2. 定義函式:
int open(const char * pathname, int flags);
int open(const char * pathname, int flags, mode_t mode);
引數pathname指向欲開啟的檔案路徑字串
故再次修改標頭檔案,及其open函式的引數,根據題意,修改為上一檔案的目錄。
#include#include #include #include #include #include #include int main()
3、編譯執行gcc sanyanjie.c
./a.out
4、結果與過程
結果分析:
該函式通過fstat()獲得檔案長度,然後通過malloc()系統呼叫申請響應大小的記憶體空間,通過read()將檔案內容完全讀入該記憶體空間,並顯示出來。
南郵作業系統實驗三(儲存機制的模擬實現)
本實驗要求使用最佳置換演算法 opt 先進先出置換演算法 fifo 以及最近最久未使用置換演算法 lru 來模擬實現頁面的置換。本文章實現了先進先出置換演算法 fifo 和最近最久未使用演算法 lru includeusing namespace std define n 12 define m 3...
作業系統 儲存器管理實驗
實驗過程 理解windows中堆 棧的記憶體布局 通過wndows系統提供的系統呼叫heapcreate heapalloc heapfree 等函式的應用,理解虛擬記憶體管理技術中的記憶體分配原理。使用工具軟體vmmap檢視某個程序的虛擬位址空間,並理解虛位址空間中的相關術語。本實驗要求用c語言書...
作業系統程序管理實驗 3
繼上次的建立執行緒後,我又帶著一段新的 來了qaq 死鎖是什麼呢?死鎖是指兩個或兩個以上的執行緒在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。啥是互相競爭資源?我上次...