操作系統課講64位系統而不是32位,哪些概念會完全不同?哪些不會有什麼變化?
01-05
我只知道還是像32位那麼搞頁表會很大
強行來裝X除了地址位數以外,Intel的64位架構去掉了segmentation功能,這意味著地址翻譯的唯一步驟就是頁表了,段寄存器還留著,可以隨便拿來玩了,但是本來依賴於segmentation的功能只能另尋出路了。
還有,本來的4個ring因為沒什麼人用(也許其實只是最先做出64位的AMD想搞個大新聞)被去掉了兩個,只剩kernel和user兩個態了,本來依賴於4個ring的功能又得另尋出路了。
哦,再補充一點,64位因為虛擬地址範圍足夠大,kernel會在高地址放一個directmap區域和物理內存一一映射來方便管理,這在32位就做不到。x86-32保護模式和x86-64長模式最大的區別是,
我們都知道保護模式的分頁是三級頁表吧,長模式換成4級頁表了蛤蛤蛤,頁表比保護模式更大哦
另外長模式強制關閉了段,也就沒有了gdtr這個東西,cs,ds,es,ss強製為0,而fs和gs也不再是選擇子。想想全局都是一個rip也是很爽的哦。
當然因為有兼容模式所以gdt還是存在的
還有一點是兼容模式不支持v8086,所以64位windows木有ntvdmx64的寄存器多很多,以前32位調用時如果不是fastcall,比如默認的stdcall或者pascal或者cdecl,參數都通過棧來傳。但在64位裡面前四個參數都通過寄存器傳(rcx rdx r8 r9),感覺是寄存器多得不用白不用了。參見:Parameter Passing
不會有什麼不同,不會有什麼變化。因為操作系統課雖然說的是32位系統,其實老師心裡頭還是16位系統。
很多回答講的是X64和X86的一些細節差別,但是從操作系統層面而言,64位/32位處理器並不是只有Intel一家,而且這些細節差別對操作系統的實現也沒有什麼實質影響。
真正差別大的是16位和32位系統的差別。因為即使在16位系統流行的上古年代,弱小的定址能力也不能滿足那時需求,所以必須考慮一些特別的調度方式,比如將應用程序分成若干段,根據需要載入,這比起後來的虛擬內存方式可以說差遠了(有點手工管理內存和GC的感覺)。
除此之外,其他方面也不會有什麼實質不同。至於類似的保護模式、頁面管理、線性地址等等和操作系統實現有很大關係的問題,並不是16位和32位的不同,只是CPU時代的不同。看一看這本書
32位的時候頁表就已經很大了,但是intel牛逼的地方就在於,頁表也可以被換出去。所以這並不是問題。
去掉硬體不同,其他差距還真不大。如果不講操作系統實踐,僅僅原理來說,區別不大,頁表x64支持大頁跟巨頁,頁表也不會很大。要說實踐的話,x64跟x32有幾點區別。一是寄存器多了,傳參數一般用寄存器,而不是堆棧。
二是fs,gs基值不再由段選擇符決定,通過其他指令設置。gs一般用來保存每個cpu獨立數據。
三是取消了任務門。異常中斷棧可以設置7個獨立棧。x64有個redzone,rsp下面128位元組是保留的,除非編譯時顯示關閉redzone。那就很有必要設置獨立的異常中斷棧,否則會破壞redzone。四,理論上來說不同進程可以共享一個地址空間,64位地址空間實在夠大,目前x64實現的52位空間來說,也足夠目前應用了。但主流os還是把不同進程空間隔離。基本原理都一樣吧,既然題主沒有明說,就默認X86和X86_64了吧。感覺最大的差別就是寄存器全變64位了?還有32位是真32位,但是X86-64其實只有48位?支持可以執行位啥的,感覺也都是小改動,學完32位之後直接看本64位彙編入門應該就差不多了吧?
自問自答,強行裝X,說錯了求指正
32位OS,虛擬內存空間2^32=4G64位OS,如果地址空間是2^64的話,如果一個頁4K,需要有2^52個頁表,如果每個頁表8位元組,整個頁表就要30PB然而好像現在的64位系統虛擬地址空間並不是2^64如果是本科課程的話,基本上一樣,只有在講page或memory章節,用到virtual address或physical address時所用的計算數據不同
推薦閱讀:
※微軟未來3~5年之內會完全融合手機操作系統與桌面操作系統么?
※蘋果在手機操作系統領域吊打微軟,為何在電腦操作系統領域卻被微軟吊打?
※現代操作系統的內核線程調度是什麼方式,和CPU使用率什麼關係?
※微軟這些年有哪些大的敗筆?
※關於小米筆記本用linux系統?