2012-11-13 38 views
3

當一個程序被OS從文件系統加載到內存中時,操作系統如何知道該程序有多大?當操作系統將程序從文件系統加載到內存中時,操作系統如何知道程序有多大?

它是否一次只從一個文件系統中翻頁? 或者是否有某種硬件或軟件指示器,以便操作系統知道程序有多大?

+1

你的意思是「多大」? –

+1

你的意思是'程序',機器代碼的大小(.text)還是所有的exe段? – James

+0

我基本上問的(我認爲)是當一個程序變成一個進程時,操作系統如何知道要分配給進程的內存量? 您點擊的.exe只是許多文件中的一個。 –

回答

2

在可執行文件的開頭有一個頭文件,它爲操作系統設置了可執行文件的各個部分。在Linux上,這通常是"ELF" format,在Windows上其格式不同,但想法是一樣的。

可執行文件中的部分可以直接複製到內存中,也可以按需加載/分頁。某些部分可能是虛擬的(例如,佈局說「我需要8MB的零內存」,但該文件實際上不包含8MB的零)。部分可以在內存中移動,或者可以加載到內存中的固定位置。

只有最初的可執行文件被OS以這種方式加載。任何其他文件(或動態鏈接的庫等)都是由操作系統間接加載的(應用程序只是要求存儲器,要求將一些文件複製到該存儲器中,然後跳轉到該代碼中)。