操作系统原理: 计算机的体系结构、内存的层次结构 、地址的生成
?
操作系統(tǒng)需要完成抽象邏輯地址空間,保護(hù)獨(dú)立地址空間,提供可以訪問共享的內(nèi)存空間,還需要根據(jù)程序運(yùn)行場景虛擬出更多的地址空間這4步。
在操作系統(tǒng)中管理內(nèi)存的方法包括:程序重定位、分段、分頁、虛擬內(nèi)存、按需分頁虛擬內(nèi)存等。
?
一、地址空間 和地址的生成
地址空間分為兩種,一種是物理地址空間,它的地址空間和內(nèi)存條代表的主存,硬盤代表的外村是直接映射的關(guān)系。第二種是邏輯地址空間,指的是應(yīng)用程序所能看到的地址空間,它是一維的,由十六位數(shù)字表示。所有邏輯地址空間都會落實在一個物理地址空間上,這個映射規(guī)則由操作系統(tǒng)完成。
1)邏輯地址的生成
以Linux下的GCC的編譯過程為例gcc的編譯過程分為三步:
第一步將??文件1.c??文件2.c???文件3.c 分別通過編譯器解析成匯編語言???文件1.s??文件2.s???文件3.s?????。? ? 可執(zhí)行命令???gcc??-S??文件1.s??文件2.s???文件3.s????只激活預(yù)處理,和編譯
第二步將???文件1.s??文件2.s???文件3.s 分別通過匯編器??文件1.o??文件2.o???文件3.o??????。? ? ?可執(zhí)行命令???gcc??-c??文件1.s??文件2.s???文件3.s????只激活預(yù)處理,和編譯和匯編,生成obj目標(biāo)代碼文件
第三步將這些文件通過鏈接器生成 out 的可執(zhí)行文件 如果不想編譯出來成??a.out 名字? ? ? ? ? ? 可執(zhí)行命令???gcc -o??新文件名???待編譯文件名?
合成a.out 的文件過程中將文件頭的數(shù)據(jù)大小,代碼段,bss段,數(shù)據(jù)段 通過符號表中的引用信息來進(jìn)行合并。
生成出來的a.out 文件包含四部分內(nèi)容:
1) 文件頭 : 包含了文件的加載信息和大小,其中
????1.1) tsize = 代碼段大小
????1.2) dsize = 包含了初始化全局變量和初始化靜態(tài)局部變量的數(shù)據(jù)段大小。
????1.3) bsize??=包含了未初始化的全局變量和未初始化的靜態(tài)局部變量的bss段大小。
?????1.4) total_size =加載??a.out文件的總大小
2)代碼段:包含了可執(zhí)行代碼
3)數(shù)據(jù)段:?包含了初始化全局變量和初始化靜態(tài)數(shù)據(jù)
4)符號表: 可選,用于調(diào)式。
生成可執(zhí)行文件后,通過一個loader方法將可執(zhí)行文件上的段大小,偏移量映射到邏輯地址來進(jìn)行正確的數(shù)據(jù)的訪問和執(zhí)行操作。
2)物理地址的生成
當(dāng)CPU取到邏輯地址時,通過自身的MMU(內(nèi)存管理單元),查詢對應(yīng)的物理地址 ,如果沒有則到主存中去尋址。
?
?
?
總結(jié)
以上是生活随笔為你收集整理的操作系统原理: 计算机的体系结构、内存的层次结构 、地址的生成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统原理:中断,异常,系统调用
- 下一篇: 操作系统原理:连续的内存分配