操作系統之內存管理概念(上)

之前由於“中職組磐雲杯網絡空間安全“的賽項和一系列亂七八糟的項目和單子,沒有更新博客,也很少去學習。

暑假給自己放了兩個月的假,現在打算好好學習,也準備即將到來的九月份和十月份的考試。

今天覆習一下操作系統的內存管理。

關於內存

		內存是用於存放數據的硬件,程序執行前需要先放到內存中才可以被CPU處理。

我很少寫一些關於內存的話題,曾經也寫過一篇: https://blog.csdn.net/qq_27180763/article/details/83617196

不過這次是站在操作系統的角度上來考慮這個問題。

	內存由存儲單元組成。

如果計算機按照字節編址,則每個存儲單元的大小爲1字節,即1B,8個二進制位
如果計算機按照字編址,則每個存儲單元大小爲1個字,大小爲16個二進制位。

進程是靠指令來運行的。指令是二進制代碼組成的。

從寫程序到程序運行一共分爲3步,首先是編譯,然後是鏈接,最後是裝入。

關於鏈接
進程的鏈接分爲三類:
	1、靜態鏈接
	2、裝入時動態鏈接
	3、運行時動態鏈接

靜態鏈接是指在程序鏈接時就將程序的各個目標模塊和他們需要的庫函數連接成一個完整的可執行文件
裝入時動態鏈接是指將各個模塊裝入內存時,一邊裝入一邊鏈接。
運行時動態鏈接時指在程序執行時,在需要目標模塊時纔對他進行鏈接。
關於裝入
1、絕對裝入
	直接把絕對地址寫入程序(只適用於單道程序設計)
2、靜態重定位
	裝入時對地址進行重定位,裝入時把邏輯地址轉換成絕對地址。根據內存的當前狀態進行重定位。將裝入模塊導入內存的適當位置。
3、動態重定位
	動態運行時裝入。把地址轉換推遲到程序真正需要執行時才進行。使用重定位寄存器來存放裝入模塊時的存放的初始未知。需要一個重定位寄存器的支持。
內存管理和相關的概念

1、操作系統負責內存空間的分配和回收
2、程序員只用關注邏輯地址。而邏輯地址到物理地址由操作系統負責進行轉換。
3、操作系統需要提供某種技術從邏輯上對內存空間進行擴充
4、操作系統需要提供內存保護功能。讓進程在運行過程中各自運行,互不干擾。

可以設置上下限寄存器,利用重定位寄存器和界地址寄存器進行判斷越界問題。

內存覆蓋和交換問題

內存空間擴充技術:
		1、覆蓋技術
		2、交換技術

下一篇我們將着重來闡述這兩種內存空間擴充技術的實現方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章