當前位置:首頁 » 存儲配置 » 存儲器的分配與回收

存儲器的分配與回收

發布時間: 2022-11-27 22:02:54

① amap內容是無效文件可以刪除嗎

不一定可以刪除的,這要看手機應用是不是要用到這個文件夾的內容。

AMAP文件夾:一般都是記錄地圖信息的文件夾,比如地圖導航之類的軟體開啟,就會產生一個這樣的文件夾。如果平時要經常用到導航之類的軟體,這個文件夾中的地圖信息就會有用。

也叫時做靜態文件緩存,就不能刪除,否則導航會現異常,又要重新下載。如果平常根本就不要用導航之類的軟體,就可以放心大膽的刪除,不會對手機的系統產生任何影響。

(1)存儲器的分配與回收擴展閱讀:

文件管理是操作系統中一項重要的功能。其重要性在於,在現代計算機系統中,用戶的程序和數據,操作系統自身的程序和數據,甚至各種輸出輸入設備,都是以文件形式出現的。盡管文件有多種存儲介質可以使用,它們都以文件的形式出現在操作系統的管理者和用戶面前。

文件管理是操作系統的五大職能之一,主要涉及文件的邏輯組織和物理組織,目錄的結構和管理。所謂文件管理,就是操作系統中實現文件統一管理的一組軟體、被管理的文件以及為實施文件管理所需要的一些數據結構的總稱。

從系統角度來看,文件系統是對文件存儲器的存儲空間進行組織,分配和回收,負責文件的存儲,檢索,共享和保護。從用戶角度來看,文件系統主要是實現"按名取存",文件系統的用戶只要知道所需文件的文件名,就可存取文件中的信息,而無需知道這些文件究竟存放在什麼地方。

參考資料來源:網路_文件管理

② 操作系統頁式存儲管理的問題

存儲管理的基本原理內存管理方法 內存管理主要包括內存分配和回收、地址變換、內存擴充、內存共享和保護等功能。 下面主要介紹連續分配存儲管理、覆蓋與交換技術以及頁式與段式存儲管理等基本概念和原理。 1. 連續分配存儲管理方式 連續分配是操作系統頁式存儲管理的問題

③ 操作系統的主要功能和分類

操作系統可以分為五大管理功能部分:
1)設備管理:主要是負責內核與外圍設備的數據交互,實質是對硬體設備的管理,包括對輸入輸出設備的分配,初始化,維護與回收等。例如管理音頻輸入輸出。
2)作業管理:這部分功能主要是負責人機交互,圖形界面或者系統任務的管理。
3)文件管理:這部分功能涉及文件的邏輯組織和物理組織,目錄結構和管理等。從操作系統的角度來看,文件系統是系統對文件存儲器的存儲空間進行分配,維護和回收,同時負責文件的索引,共享和許可權保護。而從用戶的角度來說,文件系統是按照文件目錄和文件名來進行存取的。
4)進程管理:說明一個進程存在的唯一標志是pcb(進程式控制制塊),負責維護進程的信息和狀態。進程管理實質上是系統採取某些進程調度演算法來使處理合理的分配給每個任務使用。
5)存儲管理:數據的存儲方式和組織結構。
操作系統的類型也可以分為幾種:批處理系統,分時操作系統,實時操作系統,網路操作系統等。下面將簡單的介紹他們各自的特點:
1)批處理系統:首先,用戶提交完作業後並在獲得結果之前不會再與操作系統進行數據交互,用戶提交的作業由系統外存儲存為後備作業;數據是成批處理的,有操作系統負責作業的自動完成;支持多道程序運行。
2)分時操作系統:首先交互性方面,用戶可以對程序動態運行時對其加以控制;支持多個用戶登錄終端,並且每個用戶共享CPU和其他系統資源。
3)實時操作系統:會有時鍾管理,包括定時處理和延遲處理。實時性要求比較高,某些任務必須優先處理,而有些任務則會被延遲調度完成。
4)網路操作系統:網路操作系統主要有幾種基本功能
(1)網路通信:負責在源主機與目標主機之間的數據的可靠通信,這是最基本的功能。
(2)網路服務:系統支持一些電子郵件服務,文件傳輸,數據共享,設備共享等。
(3)資源管理:對網路中共享的資源進行管理,例如設置許可權以保證數據源的安全性。
(4)網路管理:主要任務是實現安全管理,例如通過「存取控制」來確保數據的存取安全性,通過「容錯性」來保障伺服器故障時數據的安全性。
(5)支持交互操作:在客戶/伺服器模型的LAN環境下,多種客戶機和主機不僅能與伺服器進行數據連接通信,並且可以訪問伺服器的文件系統

④ 主存空間的分配和回收,

#include "iostream.h"
#include "iomanip.h"

#define nofreearea 2
#define noadequacyarea 3
#define allocated 4

#define noprocess 2
#define nosuchprocess 3
#define reclaimed 4

typedef struct TUN
{
int address;
int size;
char name;
struct TUN *next;
} usedarea , *usedtable;

typedef struct TFN
{
int address;
int size;
struct TFN *next;
} freearea, *freetable;

usedtable usedTable = NULL;
freetable freeTable = NULL;

int alloc( char processname , int processsize )
{

if( freeTable == NULL )
return 1;
freetable p = freeTable;
freetable q = p;

while( p != NULL && p->size < processsize )
{
q = p;
p = p->next;
}

if( p == NULL )
return 3;

usedtable x = new usedarea;
x->address = p->address;
x->size = processsize;
x->name = processname;
x->next = NULL;

if( p->size > processsize )
{
p->size -= processsize;
p->address += processsize;
}

else
{
if( p == freeTable )
freeTable = NULL;
else
q->next = p->next;
delete p;
}

usedtable r = usedTable;
usedtable t = r;

while( r != NULL && r->address < x->address )
{
t = r;
r = r->next;
}

if( usedTable == NULL )
usedTable = x;
else
{
x->next = r;
t->next = x;
}

return 4;
}

int Reclaim( char processname )
{
if( usedTable == NULL )
return 1;
usedtable p = usedTable;
usedtable q = p;
while( p != NULL && p->name != processname )
{
q = p;
p = p->next;
}

if( p == NULL )
return 3;

freetable r = freeTable;
freetable t = r;
freetable x;
while( r != NULL && r->address < p->address )
{
t = r;
r = r->next;
}

x = new freearea;
x->address = p->address;
x->size = p->size;
x->next = NULL;

if( r == freeTable )
{
x->next = r;
freeTable = x;
t = freeTable;
}
else
{
x->next = r;
t->next = x;
}

while( t->next != NULL && t->address + t->size == t->next->address )
{
t->size += t->next->size;
r = t->next;
t->next = t->next->next;
delete r;
}

if( p == usedTable )
{
usedTable = usedTable->next;
}
else
q->next = p->next;
delete p;

return 4;
}

int Init()
{
freeTable = new freearea;
freeTable->address = 0;
freeTable->size = 128;
freeTable->next = NULL;
return 1;
}

void processrequest()
{
char processname;
int processsize;
cout<<"...................."<<endl;
cout<<"作業名: ";
cin >> processname;
cout<<"作業長度: ";
cin >> processsize;
if(processsize<=128)
{int i;
if( alloc( processname , processsize) == 4 )
{
i=i+processsize;
if(i>128)
{cout<<"該作業超出空間"<<endl;
}
if(i<=128)
cout<<"該作業已成功獲得所需空間"<<endl;
i=i+processsize;
cout<<"........................................"<<endl;

}
else
cout<<"該作業超出空間,沒有獲得所需空間"<<endl;
cout<<"........................................"<<endl;
return;
}
if(processsize>128)
{cout<<"該作業超出空間"<<endl;
cout<<"........................................"<<endl;
}

}

void processreclaim()
{
int processname;
cout<<"...................."<<endl;
cout<<"作業名: ";
cin >>processname;
int result = Reclaim( processname );
if( result == 4 )
cout<<"該作業已成功回收"<<endl;
else if( result == 2 || result == 1 )
cout<<"系統沒有作業或該作業不存在"<<endl;
cout<<"...................."<<endl;

}

void freeTablePrint()
{
cout<<endl<<endl<<endl<<"***********************************"<<endl;
cout<<setw(10)<<"address"<<setw(10)<<"length"<<setw(10)<<"state"<<endl<<endl;
freetable p = freeTable;
usedtable q = usedTable;
int x , y;
while( p || q )
{
if( p )
x = p->address;
else
x = 0x7fffffff;
if( q )
y = q->address;
else
y = 0x7fffffff;

if( x < y )
{
cout<<setw(10)<<p->address<<setw(10)<<p->size<<setw(10)<<"空閑"<<endl;
p = p->next;
}
if( x > y )
{
cout<<setw(10)<<q->address<<setw(10)<<q->size<<setw(10)<<"已分配"<<setw(10)<<"ID="<<q->name<<endl;
q = q->next;
}
}
cout<<endl<<endl<<endl<<"************************************"<<endl<<endl<<endl;

}

void main()
{
Init();
int choose;
bool exitFlag = false;
while( !exitFlag )
{

cout<<"************************0 - 退出 ************************"<<endl;
cout<<"************************1 - 分配主存 ************************"<<endl;
cout<<"************************2 - 回收主存 ************************"<<endl;
cout<<"************************3 - 顯示主存 ************************"<<endl<<endl<<endl;
cout<<"************************選擇所要執行的操作:";
cin>>choose;
switch( choose )
{
case 0:
exitFlag = true;
break;
case 1:
processrequest();
break;
case 2:
processreclaim();
break;
case 3:
freeTablePrint();
break;
}
}
}

⑤ 在操作系統中,文件管理的主要作用是什麼

在操作系統中文件管理的主要作用是實現文件的虛擬存取和高速存取。

操作系統的功能包括管理計算機系統的硬體、軟體及數據資源,控製程序運行,改善人機界面,為其它應用軟體提供支持等,使計算機系統所有資源最大限度地發揮作用,提供了各種形式的用戶界面,使用戶有一個好的工作環境,為其它軟體的開發提供必要的服務和相應的介面。

簡單體系結構

計算機操作系統誕生初期,其體系結構就屬於簡單體系結構,由於當時各式各樣影響因素的作用,如硬體性能、平台、軟體水平等方面的限制,使得當時的計算機操作系統結構呈現出一種混亂且結構模糊的狀態。

其操作系統的用戶應用程序和其內核程序魚龍混雜,甚至其運行的地址和空間都是一致的。這種操作系統實際上就是一系列過程和項目的簡單組合,使用的模塊方法也相對較為粗糙,因此導致其結構宏觀上非常模糊。

⑥ 數據結構的一些小問題

5.4 文件系統的實現
5.4.1 存儲空間的分配與回收
在計算機系統中,存儲空間是一種寶貴的資源。外存儲設備中的空間容量雖然比較大,但也不是無限的,故對文件刪除之後而不再使用的空間,必須加以回收,然後在建立文件等操作中重新利用。

對於制度的存儲設備,無所謂回收,也無所謂動態分配,這種存儲設備在物理上就是不可重用的。

為了進行存儲空間的分配與回收,在外存儲設備上設置有空閑空間登記表,該表動態跟蹤該外存儲設備上所有還沒有分配給任何文件的空閑塊的數目和塊號。

該空閑空間登記表雖然稱為表,但不一定以一個二維表格的形式實現。從方便、高效和安全的角度考慮,通常把空閑空間登記表放在存儲介質上。

對空閑空間表的訪問與修改工作是經常發生的。在進行文件刪除、文件建立、寫文件等操作中都會訪問和修改空閑空間表。

在設計空閑空間登記表的數據結構時,一般有四種不同的方案可以考慮,下面分別介紹。

1、 位示圖

位示圖的基本思想是,利用一串二進制位(BIT)的值來反映磁碟空間的分配使用情況。在位示圖中,沒一個磁碟中物理塊用一個二進制位對應,如果某個物理塊為空閑,則相應的二進制位為0;如果該物理塊已分配了,則相應的二進位為,如圖5-15所示。

位示圖對空間分配情況的描述能力強。一個二進位就描述一個物理塊的狀態。另外,位示圖佔用空間較小,因此可以復制到內存,使查找既方便又快速。位示圖適用於各種文件物理結構的文件系統。使用位示圖能夠簡單有效地在盤上找到N個連續的空閑塊。

2、 空閑塊表

空閑塊表是專門為空閑塊建立的一張表,該表記錄外存儲器全部空閑的物理塊:包括每個空閑塊的第一個空閑物理塊號和該空閑塊只能感空閑物理塊的個數。如圖5-16所示。空閑塊表方式特別適合於文件物理結構為順序結構的文件系統。

在建立新文件時,應該尋找一組連續的空閑物理塊,其空閑塊個數恰好等於所申請值,或接近於所申請值。系統首先查找空閑塊表,主要查看該空閑塊表項中是否有符合上述申請值的對應表項,如果有,就將該表項從空閑塊表中刪去,並且把所對應的一組連續的空閑物理塊分配給申請者。

當刪除文件時,系統收回它所佔用的物理塊,並且考慮所收回的物理塊是否可以與原有空閑塊相鄰接,以便合並成更大的空閑區域,最後修改有關空閑塊表項。

3、 空閑塊鏈表

將外存儲器中所有的空閑物理塊連成一個鏈表,用一個空閑塊首指針指向第一個空閑塊,隨後的每個空閑塊中都含有指向下一個空閑塊的指針,最後一塊的指針為空,表示鏈尾,這樣就構成了一個空閑塊鏈表,如圖5-17所示。

在圖45-17中,一個空閑塊鏈表的首指針維持一個指向物理塊12的指針,該塊是第一個空閑物理塊。物理塊12包含一個指向物理塊13的指針,物理塊13指向物理塊14,如此等等。

空閑塊鏈表模式效率低。要遍歷整張空閑塊鏈表,必須讀每一個物理塊,這就需要大量的I/O時間。

在空閑塊鏈表模式中對空間的申請和釋放是以塊為單位的。申請空間時從鏈首取空閑塊。空間釋放時將物理塊接入鏈尾。

空閑塊鏈表法節省內存,但申請空間和回收空間的速度較慢,實現效率較低。

4、 成組鏈接

對鏈接表的一個改進方案是將N個空閑盤塊的地址存放在第一個空閑塊中,如圖5-18所示。期於N-1個空閑盤塊是實際空閑的。假設每100個空閑塊為一組。第一組的100個空閑塊塊號放在第二組的頭一塊中,而第二組的其餘99塊是完全空閑的。第二組的100個塊號又放在第三組的頭一塊中,依次類推,組與組之間形成鏈接關系。在最後一組的塊號中第2個單元填「0」,表示該塊中指出的塊號是最後一組的塊號,空閑塊鏈到此結束。在這個空閑塊鏈中,不組100塊的一個組的塊號,通常放在內存的一個專用塊中。這種方式稱為成組鏈接。

系統在初始化時先把專用塊內容讀到內存中,當需分配空閑塊時,就直接在內存中找到哪些塊是空閑的,每分配一塊後把空閑塊數減1。但在把一組中的第一個空閑塊分配出去之前,應把登記在該塊中的下一組的塊號及塊數保存到專用塊中(此時原專用塊中的信息已經無用,因為它指出的一組空閑塊都已被分配了)。當一組空閑塊被分配完後,則再把專用塊的內容讀到內存中,指出另一組可供分配的空閑塊。

假設初始化時系統已把專用塊讀入主存儲器L單元開始的區域中,分配和回收的演算法如下:

⑴分配一個空閑塊

查L單元內容(空閑塊數):

當空閑塊數>1,I:=L+空閑塊數;

從I單元得到一空閑塊號;

把該塊分配給申請者;

空閑塊數減1。

當空閑塊數=1,取出L+1單元內容(一組的第一塊塊號或0);

取值 =0,無空閑塊,申請者等待;

≠0,把該塊內容復制到專用塊;

把專用塊內容獨到主存L開始的區域。

⑵歸還一塊

查L單元的空閑塊數;

當空閑塊數〈100,空閑塊數加1;

J:=L+空閑塊數;

規劃塊號填入J單元。

當空閑塊數=100,把主存中登記的信息寫入歸還塊中;

把歸還塊號填入L+1單元;

將L單元置成1。

採用成組鏈接後,分配回收空閑塊時均在內存中查找和修改,只有在一組空閑塊分配完或空閑的磁碟塊構成一組時才需要啟動磁碟讀寫。因此,成組鏈接的管理方式比普通的鏈接方式效率高。

成組鏈接這種方案能夠迅速找到大量空閑盤塊地址。有些版本的UNIX操作系統便採用了這種方案。

5.4.2 實現文件系統的表目
當用戶申請打開一個文件時,系統要在內存中為該用戶保存一些必要的信息,這些信息以表格欄目中內容的形式出現,被稱為表目。在實現文件系統時所需要的表目有若干種,其中在內存中所需的重要表目有如下一些:

1、 系統打開文件表

系統打開文件表,專門用於保存已打開文件的文件控制塊。該系統打開文件表放在內存。除了保存已打開文件的文件控制塊之外,在該表格中還保存有已打開的文件號、共享計數、修改標志等等,圖5-19。

2、 用戶打開文件表

在每個進程中,都有一個「用戶打開文件表」。該表的內容有文件描述符、打開方式、讀寫指針、系統打開文件表入口等,圖5-20。另外在進程的進程式控制制塊PCB中,還記錄了「用戶打開文件表」的位置。

3、 系統打開文件表與用戶打開文件表之間的關系

用戶打開文件表指向了系統打開文件表。如果多個進程共享同一個文件,則一定有多個用戶打開文件表目對應著系統打開文件表的同一入口,圖5-21。

5.4.3 記錄的成組與分解
用戶的文件毫無疑問是由用戶按名自己的需要組織的。用戶還可按信息的內在邏輯關系,把文件劃分成若干個邏輯記錄。顯然,邏輯記錄的大小是由文件性質決定的。

另外,存儲介質上的物理分塊與存儲介質的特性有關,尤其是磁碟。磁碟上的塊的大小是在磁碟初始化時預先劃好的。因此,邏輯記錄的大小往往與存儲介質物理分塊的大小不一直。

當用戶文件的邏輯記錄比存儲介質的物理分塊小得多時,把一個邏輯記錄存入一個物理塊中,就會造成存儲空間的浪費。為此,可把多個邏輯記錄存放在一個物理塊中,當用戶需要某個邏輯記錄時再從一物理塊信息中將其分解出來。

1、 記錄的成組

把若干個邏輯記錄合成一組存放一物理塊的工作稱「記錄的成組」,每塊中的邏輯記錄個數稱「塊因子」。

記錄的成組在不同存儲介質上進行信息轉儲是很有用的。

由於信息交換以塊為單位,所以,要進行成組操作時必須使用內存的緩沖區。該緩沖區的長度等於要進行成組的最大邏輯記錄長度乘以成組的塊因子。成組轉儲操作如圖5-22所示。

在進行記錄成組時,還應考慮邏輯記錄的格式。這是因為在記錄式文件中,有「定長記錄格式」和「不定長記錄格式」。對定長記錄格式的文件按記錄成組的方式存儲到存儲介質上,則除最後一塊外,每塊中存放的邏輯記錄個數是相同的。故只要在文件目錄中說明邏輯記錄的長度和塊因子,在需要使用某個記錄時就能方便地將其找出。

如果是一個不定長記錄格式的文件,各個邏輯記錄的長度可能不相等,在進行記錄成組操作時,就應在每個邏輯記錄前附加說明該記錄長度的控制信息。

2、 記錄的分解

對應簽署記錄成組的操作,有必要考慮從一組邏輯記錄中把一個邏輯記錄分離出來的操作,這種操作稱為「記錄的分解」。

顯然,從事記錄的分解操作也要使用內存緩沖區。

當用戶請求讀一個文件中的某個記錄時,文件系統首先找出該記錄所在物理塊的位置,然後把含有該記錄的物理塊全部信息讀入內存緩沖區,由於讀入內存緩沖區的物理塊信息中含有多個邏輯記錄,所以要再從內存緩沖區中分解出指定的記錄,然後傳送到用戶工作區。

對定長記錄格式,只要的邏輯記錄的長度就可容易地進行分解。對不定長記錄格式,要根據說明邏輯記錄長度的控制信息,計算出用戶所指定的記錄在內存緩沖區中的位置,然後把記錄分解出來。圖5-23是記錄的分解操作示例。

在圖5-23中,用戶要求讀出邏輯記錄K4。用戶文件中的記錄是成組存放在磁碟上的,系統找出含有記錄K4的物理塊,從中讀出了6個邏輯記錄K1,K2,K3,K4,K5和K6,並且知道這些邏輯記錄的長度為80,塊因子為6。該塊信息被讀入內存緩沖區後,根據邏輯記錄的長度和塊因子胃,立即就能取出其中的邏輯記錄K4,並把K4傳送到用戶工作區。

從上面的討論可以看到,為了提高存儲空間的利用率和減少啟動設備的次數,採用了記錄的成組和分解技術。但是上述效果的獲得也付出了代價,主要包括:需要設立內存緩沖區,另外操作系統增加了成組和分解的操作的功能。

5.4.4 文件的操作
文件系統是提供給用戶使用的,用戶可以進行按名存取所需要的文件。在文件系統的實現中,為用戶提供使用文件的手段是文件系統的重要任務之一。

1、 建立文件

用戶首先調用文件系統的「建立文件」操作,在請求調用該操作時,提供所要創建的文件的文件名及若干參數:用戶名、文件名、存取方式、存儲設備類型、記錄格式、記錄長度,等等。

系統依據用戶提供的文件名及若干參數,為這一新創建的文件分配一個文件控制塊,填寫文件控制塊中的有關項。

建立文件的實質是建立文件的文件控制塊FCB,並建立必要的存儲空間,分配空的FCB。從而建立起系統與文件的聯系。

建立文件系統調用的一般格式為:CREATE(文件名,訪問許可權,(最大長度))。

建立文件的具體步驟如下:

⑴檢查參數的合法性:

文件名是否符合命名規則,若是,則進行下一步⑵;否則報錯,返回。

⑵檢查同一目錄下有無重名文件:

若沒有,則進行下一步⑶;否則報錯,返回。

⑶在目錄中有無空閑位置;

若有,則進行下一步⑷;否則,不成功返回。

⑷填寫目錄項內容:

包括:文件名、用戶名、存取許可權、長度置零,首地址等等。

⑸返回

2、 打開文件

打開文件,是使用文件的第一步,任何一個文件使用前都要先打開,即把文件控制塊FCB送到內存。

打開文件系統調用的一般格式為:FD=OPEN(文件路徑名,打開方式)。

打開文件時,系統主要完成以下工作:

⑴根據文件路徑名查目錄,找到FCB主部。

⑵根據打開方式、共享說明和用戶身份檢查訪問合法性。

⑶根據文件號查系統打開文件表,看文件是否已被打開。

如果是,共享計數加1;

否則,將外存中的CB主部等信息填入系統打開文件表空表項,共享計數置為1。

⑷在用戶打開文件表中取一空表項,填寫打開方式等,並指向系統打開文件表對應表項。

返回信息:FD:文件描述符,是一個非負整數,用於以後讀寫文件。

3、 讀文件

打開文件後,就可以讀取文件中的信息。

讀文件系統調用的一般格式為:READ(文件名,(文件內位置),要讀的長度,內存目的地址)。

隱含參數:文件主。

讀寫方式可為讀、寫合既讀又寫等。

讀文件時,系統主要完成以下工作:

⑴檢查長度是否為正整數;

若是,則進行下一步;否則,轉向(10)。

⑵根據文件名查找目錄,確定該文件在目錄中的位置。

⑶根據隱含參數中的文件主和目錄中該文件的存儲許可權數據,檢查是否有權讀:

若是,則進行下一步,否則,轉向(10)。

⑷由文件內位置與要讀的長度計算最末位置,將其與目錄中的文件長度比較,超過否?

若是,則轉向(10);否則,進行下一步(5)。也可將參數中的長度修正為目錄中的文件長度。

⑸根據參數中的位置、長度和目錄中的映射信息,確定物理塊號、需要讀出的塊數等讀盤參數。

⑹根據下一塊號讀塊至內存緩沖區。

⑺取出要讀的內容,也許要進行成組的分解,將取出的內容送至參數中的內存目的地址。

⑻根據塊內長度或起始塊號+塊數,確定還讀下一塊嗎?同時確定下一塊號:

若是,則轉向(5);否則,進行下一步(9)。

⑼正常返回。

⑽錯誤返回,返回響應錯誤號。

4、 寫文件

寫文件系統調用的一般格式為:WRITE文件名,記錄鍵,內存位置)。

把內存中指定單元的數據作為指定的一個記錄寫入指定文件中,系統還將為其分配物理塊,以便把記錄信息寫到外存上。

5、 關閉文件

若文件暫時不用每則應將它關閉。文件關閉後一般不能存取,若要存取,則必須再次打開

6、 刪除文件

刪除文件文件系統調用的一般格式為:DELETE(文件名)。

7、 指針定位

指針定位的一般格式為:SEEK(FD,新指針的位置)。

指針定位時,系統主要完成以下工作:

⑴由FD檢查用戶打開文件表,找到對應的入口;

⑵將用戶打開文件表中文件讀寫指針位置設為新指針的位置,供後續讀寫命令存取該指針處文件內容。

希望對你有幫助

⑦ 操作系統中 存儲器對什麼進行管理

存儲管理即是對主存的管理,它是操作系統的重要功能之一。主存儲器是計算機系統中的一種寶貴資源,對主存的管理和有效使用是操作系統中十分重要的內容。為了便於對主存進行有效的管理,應該將主存分成若干個區域,以便同時存放多個用戶程序和系統軟體。因此,存儲管理應具有如下功能:主存的分配和回收、提高主存的利用率、「擴充」主存容量和存儲保護。存儲分配主要解決多道作業之間劃分主存空間的問題,存儲分配有三種主要方式:直接分配方式、靜態分配方式和動態分配方式。絕大多數計算機系統都採用靜態分配方式或動態分配方式。為了實現靜態和動態兩種存儲分配策略,需要採用將邏輯地址與物理地址分開,並對邏輯地址實施地址重定位技術。所謂重定位是由於一個作業裝入到與其地址空間不一致的存儲空間時所引起的有關地址調整過程,實質上,這是一個地址變換過程,地址變換也稱為地址映射。根據地址變換進行的時間及採用的技術手段不同,可以把重定位分為兩類:靜態重定位和動態重定位。所謂靜態重定位是在程序運行之前,由鏈接裝配程序進行的重定位。靜態重定位的特點是無需增加硬體地址變換機構,但要求為每個程序分配一個連續的存儲區,且在程序執行期間不能移動,故難於做到程序和數據的共享;動態重定位是在程序的執行過程中,每當訪問到指令或數據時,將要訪問的程序或數據的邏輯地址轉換成物理地址。動態重定位的實現需要依靠硬體地址變換機構。最簡單的實現方法是利用一個重定位寄存器。動態重定位的特點是需要附加硬體的支持,優點是可以將程序分配到不連續的存儲區中,在程序運行之前可以只裝入部分代碼即可運行,然後在程序運行期間,根據需要動態地申請分配內存,所以,便以程序段的共享,並且可向用戶提供一個比主存的存儲空間大得多的地址空間,該地址空間也稱為虛擬存儲器。

⑧ 分區存儲管理中常用哪些分配策略

1、固定分區存儲管理
其基本思想是將內存劃分成若干固定大小的分區,每個分區中最多隻能裝入一個作業。當作業申請內存時,系統按一定的演算法為其選擇一個適當的分區,並裝入內存運行。由於分區大小是事先固定的,因而可容納作業的大小受到限制,而且當用戶作業的地址空間小於分區的存儲空間時,造成存儲空間浪費。

一、空間的分配與回收

系統設置一張「分區分配表」來描述各分區的使用情況,登記的內容應包括:分區號、起始地址、長度和佔用標志。其中佔用標志為「0」時,表示目前該分區空閑;否則登記佔用作業名(或作業號)。有了「分區分配表」,空間分配與回收工作是比較簡單的。

二、地址轉換和存儲保護

固定分區管理可以採用靜態重定位方式進行地址映射。

為了實現存儲保護,處理器設置了一對「下限寄存器」和「上限寄存器」。當一個已經被裝入主存儲器的作業能夠得到處理器運行時,進程調度應記錄當前運行作業所在的分區號,且把該分區的下限地址和上限地址分別送入下限寄存器和上限寄存器中。處理器執行該作業的指令時必須核對其要訪問的絕對地址是否越界。

三、多作業隊列的固定分區管理

為避免小作業被分配到大的分區中造成空間的浪費,可採用多作業隊列的方法。即系統按分區數設置多個作業隊列,將作業按其大小排到不同的隊列中,一個隊列對應某一個分區,以提高內存利用率。

2、可變分區存儲管理
可變分區存儲管理不是預先將內存劃分分區,而是在作業裝入內存時建立分區,使分區的大小正好與作業要求的存儲空間相等。這種處理方式使內存分配有較大的靈活性,也提高了內存利用率。但是隨著對內存不斷地分配、釋放操作會引起存儲碎片的產生。

一、空間的分配與回收

採用可變分區存儲管理,系統中的分區個數與分區的大小都在不斷地變化,系統利用「空閑區表」來管理內存中的空閑分區,其中登記空閑區的起始地址、長度和狀態。當有作業要進入內存時,在「空閑區表」中查找狀態為「未分配」且長度大於或等於作業的空閑分區分配給作業,並做適當調整;當一個作業運行完成時,應將該作業佔用的空間作為空閑區歸還給系統。

可以採用首先適應演算法、最佳(優)適應演算法和最壞適應演算法三種分配策略之一進行內存分配。

二、地址轉換和存儲保護

可變分區存儲管理一般採用動態重定位的方式,為實現地址重定位和存儲保護,系統設置相應的硬體:基址/限長寄存器(或上界/下界寄存器)、加法器、比較線路等。

基址寄存器用來存放程序在內存的起始地址,限長寄存器用來存放程序的長度。處理機在執行時,用程序中的相對地址加上基址寄存器中的基地址,形成一個絕對地址,並將相對地址與限長寄存器進行計算比較,檢查是否發生地址越界。

三、存儲碎片與程序的移動

所謂碎片是指內存中出現的一些零散的小空閑區域。由於碎片都很小,無法再利用。如果內存中碎片很多,將會造成嚴重的存儲資源浪費。解決碎片的方法是移動所有的佔用區域,使所有的空閑區合並成一片連續區域,這一技術稱為移動技術(緊湊技術)。移動技術除了可解決碎片問題還使內存中的作業進行擴充。顯然,移動帶來系統開銷加大,並且當一個作業如果正與外設進行I/O時,該作業是無法移動的。

3、頁式存儲管理

基本原理

1.等分內存

頁式存儲管理將內存空間劃分成等長的若干區域,每個區域的大小一般取2的整數冪,稱為一個物理頁面有時稱為塊。內存的所有物理頁面從0開始編號,稱作物理頁號。

2.邏輯地址

系統將程序的邏輯空間按照同樣大小也劃分成若干頁面,稱為邏輯頁面也稱為頁。程序的各個邏輯頁面從0開始依次編號,稱作邏輯頁號或相對頁號。每個頁面內從0開始編址,稱為頁內地址。程序中的邏輯地址由兩部分組成:

邏輯地址
頁號p
頁內地址 d

3.內存分配

系統可用一張「位示圖」來登記內存中各塊的分配情況,存儲分配時以頁面(塊)為單位,並按程序的頁數多少進行分配。相鄰的頁面在內存中不一定相鄰,即分配給程序的內存塊之間不一定連續。

對程序地址空間的分頁是系統自動進行的,即對用戶是透明的。由於頁面尺寸為2的整數次冪,故相對地址中的高位部分即為頁號,低位部分為頁內地址。

3.5.2實現原理

1.頁表

系統為每個進程建立一張頁表,用於記錄進程邏輯頁面與內存物理頁面之間的對應關系。地址空間有多少頁,該頁表裡就登記多少行,且按邏輯頁的順序排列,形如:

邏輯頁號
主存塊號

0
B0

1
B1

2
B2

3
B3

2.地址映射過程

頁式存儲管理採用動態重定位,即在程序的執行過程中完成地址轉換。處理器每執行一條指令,就將指令中的邏輯地址(p,d)取來從中得到邏輯頁號(p),硬體機構按此頁號查頁表,得到內存的塊號B』,便形成絕對地址(B』,d),處理器即按此地址訪問主存。

3.頁面的共享與保護

當多個不同進程中需要有相同頁面信息時,可以在主存中只保留一個副本,只要讓這些進程各自的有關項中指向內存同一塊號即可。同時在頁表中設置相應的「存取許可權」,對不同進程的訪問許可權進行各種必要的限制。

4、段式存儲管理

基本原理

1.邏輯地址空間

程序按邏輯上有完整意義的段來劃分,稱為邏輯段。例如主程序、子程序、數據等都可各成一段。將一個程序的所有邏輯段從0開始編號,稱為段號。每一個邏輯段都是從0開始編址,稱為段內地址。

2.邏輯地址

程序中的邏輯地址由段號和段內地址(s,d)兩部分組成。

3.內存分配

系統不進行預先劃分,而是以段為單位進行內存分配,為每一個邏輯段分配一個連續的內存區(物理段)。邏輯上連續的段在內存不一定連續存放。

3.6.2實現方法

1.段表

系統為每個進程建立一張段表,用於記錄進程的邏輯段與內存物理段之間的對應關系,至少應包括邏輯段號、物理段首地址和該段長度三項內容。

2.建立空閑區表

系統中設立一張內存空閑區表,記錄內存中空閑區域情況,用於段的分配和回收內存。

3.地址映射過程

段式存儲管理採用動態重定位,處理器每執行一條指令,就將指令中的邏輯地址(s,d)取來從中得到邏輯段號(s),硬體機構按此段號查段表,得到該段在內存的首地址S』, 該段在內存的首地址S』加上段內地址d,便形成絕對地址(S』+d),處理器即按此地址訪問主存。

5、段頁式存儲管理

頁式存儲管理的特徵是等分內存,解決了碎片問題;段式存儲管理的特徵是邏輯分段,便於實現共享。為了保持頁式和段式上的優點,結合兩種存儲管理方案,形成了段頁式存儲管理。

段頁式存儲管理的基本思想是:把內存劃分為大小相等的頁面;將程序按其邏輯關系劃分為若干段;再按照頁面的大小,把每一段劃分成若干頁面。程序的邏輯地址由三部分組成,形式如下:

邏輯地址
段號s
頁號p
頁內地址d

內存是以頁為基本單位分配給每個程序的,在邏輯上相鄰的頁面內存不一定相鄰。

系統為每個進程建立一張段表,為進程的每一段各建立一張頁表。地址轉換過程,要經過查段表、頁表後才能得到最終的物理地址。

⑨ System memory是什麼意思

System memory是系統存儲器的意思。存儲系統是指計算機中由存放程序和數據的各種存儲設備、控制部件及管理信息調度的設備(硬體)和演算法(軟體)所組成的系統。

計算機存儲系統的核心是存儲器,存儲器是計算機中必不可少、用來存儲程序和數據的記憶設備。內部存儲器(簡稱內存)主要存儲計算機當前工作需要的程序和數據,包括高速緩沖存儲器(Cache,簡稱緩存)和主存儲器。目前構成內存的主要是半導體存儲器。

外部存儲器(簡稱外存)主要有磁性存儲器、光存儲器和半導體存儲器三種實現方式,存儲介質有硬磁碟、光碟、磁帶和移動存儲器等。

(9)存儲器的分配與回收擴展閱讀

分配存儲管理

1、單一連續分配

在單道程序環境下,內存分為系統區和用戶區,系統區只留給OS時候,放在低地址部分,用戶區僅裝有一道用戶程序。

2、固定分區分配

將內存的用戶空間劃分為若干個固定大小的分區,,並為之建立一張分區使用表,包含每個分區的起始地址,大小,狀態.

3、動態分區分配

要實現動態分區分配,必須解決分區所用的數據結構,分區分配演算法和分區的分配與回收這三個問題。

熱點內容
安卓手機怎麼關閉原圖 發布:2023-02-05 16:04:37 瀏覽:57
c語言銀行利率 發布:2023-02-05 16:01:26 瀏覽:393
so編譯器版本 發布:2023-02-05 15:50:56 瀏覽:387
c語言編程規則 發布:2023-02-05 15:50:44 瀏覽:800
電動拉閘門遙控器怎麼配置 發布:2023-02-05 15:42:57 瀏覽:832
交通訪問 發布:2023-02-05 15:42:54 瀏覽:256
安卓手機如何知道自己去了哪裡 發布:2023-02-05 15:42:06 瀏覽:318
垃圾壓縮液 發布:2023-02-05 15:41:59 瀏覽:858
安卓10支持哪個聖安地列斯 發布:2023-02-05 15:34:11 瀏覽:704
mutexpython 發布:2023-02-05 15:33:55 瀏覽:464