1.7 操作系統管理硬體
新手閱讀比較吃力,所以搬來其他書作為外援幫助理解。
1.對於我們程序員來說,硬體只關心CPU就好了,所以《CSAPP》在第4章還特意講了下如何實現CPU。如果你是學Java、.NET或腳本語言,甚至連CPU都不用關心,只關心虛擬機就好了,所以如果你是學這些語言,你永遠也讀不懂《CSAPP》...
進程上下文={寄存器值、程序計數器值、主存內容}切換到新進程的時候就會進行上下文切換,保存當前上下文,恢復新進程上下文,然後將控制權傳遞到新進程。這裡講的超抽象,對吧,第3章了解到寄存器和程序計數器就好理解了。
由於一個CPU只有8個寄存器,一個程序計數器,是非常有限的資源,只有獲得CPU執行權的進程會使用這些有限的寄存器和程序計數器。比如進程A獲得CPU執行權,那麼寄存器和程序計數器里的值都是在進程A這個內存里拿過去運算用的,如果運算到一半操作系統突然把CPU執行權給了B進程,B進程就會使用這8個寄存器和程序計數器,卧槽那A運算完的數據還在寄存器,沒來得及移動到內存怎麼辦?相當於你屎拉到一半,但是忽然間你要把廁所讓給一個屎快要拉在地上的人,你就只好忍著擦擦屁股,讓給那個屎快要拉到地上的人,等他拉完了,你再進廁所拉完剩下的。
所以操作系統在主存里維護有一個數據結構,專門用來保存進程上下文,當它要把CPU執行權給別的進程時,會把當前進程寄存器、程序計數器的值,保存到主存上面。然後把別的進程的上下文信息從主存恢復到寄存器、程序計數器。
關於那個主存內容,我不知道為什麼也算進程上下文,既然是在主存的,那麼B進程拿到CPU執行權後怎麼糟蹋寄存器和程序計數器都不會影響A進程的內容啊?
PC寄存器就是程序計數器,也簡稱PC。
這就是我們學C語言經常抽象的內存圖了。還有那些什麼鬼字元常量區、靜態區全都是在只讀代碼和數據這裡。虛擬存儲器不單是操作系統提供的抽象,它還需要硬體級支持。
自我修養這裡表達的很好了。虛擬地址基本概念
—————————————————————————————————————————
每個IO設備,包括磁碟、鍵盤、顯示器、甚至網路,都可以視為文件。
翻譯成人話的意思是,操作系統給你提供的一種抽象,像我們用windows的用滑鼠雙擊一下就可以操作這個設備了,你可以雙擊一下就可以打開你的C盤,完全無需關心硬體級的實現,畢竟我們是軟體工程師不是硬體工程師,我們只需要掌握操作系統提供給我們的抽象就可以了。
關於計算機底層學習的邊界問題 - 名前的文章 - 知乎專欄
推薦閱讀:
※簡析組件AWT和Swing各有的優缺點及區別
※第18篇 它不是人,它是恐豬
※對於一些自學編程QQ群的一些看法與感悟
※學習計算機的一些資源分享
TAG:自學編程 |