操作系统(三十二)内存的基础常识
生活随笔
收集整理的這篇文章主要介紹了
操作系统(三十二)内存的基础常识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
3.1 內存的基礎常識
目錄
3.1 內存的基礎常識
3.1.1 計算機的多級存儲結構
3.1.2 程序的裝入和鏈接
3.1.1 計算機的多級存儲結構
? 對于計算機的存儲結構而言一般可以分為三層:最高層為 CPU 寄存器,中間為主存(內存),最底層是輔存,如下圖所示
? 內存:可以用來存儲數據的裝置,內存的主要作用是緩和高速CPU與低速外存之間的速度矛盾。為了可以將存儲在內存上的數據加以區分,我們會為內存的存儲單元編上地址,即內存地址。內存地址一般是從0開始的,每一個內存地址對應一個存儲單元。如果計算機是按字節編址的那么一個存儲單元就是一個字節記作1B即八個二進制位(8bit)。我們經常可以看到手機的內存是4GB等等,這里的4GB就是指個字節也就是個字節,所以這些字節就需要32位二進制數才能表示。
3.1.2 程序的裝入和鏈接
? 將一個用戶源程序變為可以在內存中執行的程序,一般要經過編譯、鏈接、裝入三個步驟,我們著重介紹的是裝入以及鏈接。
? 1. 程序的裝入:
- 絕對裝入:在編譯時,如果知道程序將放到內存中的哪個位置,編譯程序將產生絕對地址的目標代碼。裝入程序按照裝入模塊中的地址,將程序和數據裝入內存。但是絕對裝入的地址需要程序員事先提供,而且一旦程序或數據被修改后,可能要改變程序中的所有地址,十分不方便,只適用于單道程序環境。
- 可重定位裝入(靜態重定位):編譯、鏈接后的裝入模塊的地址都是從0開始的,指令中使用的地址、數據存放的地址都是相對于起始地址而言的邏輯地址。可根據內存的當前情況,將裝入模塊裝入到內存的適當位置。裝入時對地址進行“重定位”,將邏輯地址變換為物理地址(地址變換是在裝入時一次完成的)。靜態重定位的特點是在一個作業裝入內存時,必須分配其要求的全部內存空間,如果沒有足夠的內存,就不能裝入該作業。作業一旦進入內存后,在運行期間就不能再移動,也不能再申請內存空間。
- 動態運行時裝入(動態重定位):編譯、鏈接后的裝入模塊的地址都是從0開始的。裝入程序把裝入模塊裝入內存后,并不會立即把邏輯地址轉換為物理地址,而是把地址轉換推遲到程序真正要執行時才進行。因此裝入內存后所有的地址依然是邏輯地址。這種方式需要一個重定位寄存器的支持,用它來存放程序(數據)在內存中的起始地址。程序在執行時,真正訪問的內存地址是相對地址與重定位寄存器中的地址相加而形成的。
? 鏈接:由鏈接程序將編譯后形成的一組目標模塊,以及所需庫函數鏈接在一起,形成一個完整的裝入模塊
- 靜態鏈接:在程序運行之前,先將各目標模塊及它們所需的庫函數連接成一個完整的可執行文件(裝入模塊),之后不再拆開。
- 裝入時動態鏈接:將各目標模塊裝入內存時,邊裝入邊鏈接的鏈接方式。
- 運行時動態鏈接:在程序執行中需要該目標模塊時,才對它進行鏈接,用不到的模塊就不需要進入內存。其優點是便于修改和更新,便于實現對目標模塊的共享。
總結
以上是生活随笔為你收集整理的操作系统(三十二)内存的基础常识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网日报 | 5月25日 星期二 |
- 下一篇: 操作系统(三十三)内存管理