應(yīng)用視角的操作系統(tǒng) (程序的狀態(tài)機模型;編譯優(yōu)化) [南京大學(xué)2023操作系統(tǒng)-

0#00:01
操作系統(tǒng)是管理硬件資源的軟件,它將應(yīng)用程序與硬件設(shè)備隔離開來。為了更好地理解操作系統(tǒng)上的程序,可以通過編寫最小的操作系統(tǒng)上的程序來深入了解。一個最小的程序可以是hello world,通過編譯生成可執(zhí)行文件。使用工具objdump可以查看可執(zhí)行文件中的匯編代碼。程序是一系列指令序列,包含了很多匯編指令。
0#08:22
操作系統(tǒng)中的程序編譯過程包括預(yù)編譯、編譯、匯編和鏈接。預(yù)編譯將源代碼轉(zhuǎn)換為預(yù)處理后的代碼,編譯器將預(yù)處理后的代碼轉(zhuǎn)換為匯編代碼,匯編器將匯編代碼轉(zhuǎn)換為目標(biāo)文件,鏈接器將目標(biāo)文件和運行時相關(guān)的文件鏈接成可執(zhí)行文件。通過查看編譯器的日志和命令行選項,可以了解編譯過程中的細節(jié)和配置信息。最小的hello world程序可以通過手動鏈接最小的運行時相關(guān)文件來實現(xiàn)。
0#17:49
通過調(diào)試器可以觀測程序的執(zhí)行過程,找到程序出錯的原因。在調(diào)試過程中,可以使用調(diào)試器的命令和功能來控制程序的執(zhí)行,如單步執(zhí)行、查看程序狀態(tài)等。正確提出問題并利用搜索引擎找到答案是學(xué)習(xí)計算機知識的關(guān)鍵。調(diào)試器還可以進行反向調(diào)試,即回溯到過去的程序狀態(tài)。在調(diào)試過程中,可以觀察程序的指令執(zhí)行情況,找到出錯的指令。
0#27:47
操作系統(tǒng)是一個狀態(tài)機,計算機系統(tǒng)的所有內(nèi)存和寄存器都是其狀態(tài)。CPU是一個無情執(zhí)行指令的機器,除非遇到死循環(huán)或系統(tǒng)調(diào)用,否則無法停下來。系統(tǒng)調(diào)用是操作系統(tǒng)提供的特殊指令,可以將程序交給操作系統(tǒng)執(zhí)行。通過系統(tǒng)調(diào)用,我們可以將程序停下來,實現(xiàn)操作系統(tǒng)和應(yīng)用程序的交互。
0#37:22
學(xué)習(xí)編程不僅僅是為了解決問題,還可以創(chuàng)造有趣的東西。重要的是學(xué)會提出正確的問題,并用正確的方式去尋找答案。搜索引擎是一個很好的工具,可以幫助我們找到需要的信息。在計算機系統(tǒng)中,一切都是狀態(tài)機,程序的狀態(tài)由內(nèi)存和寄存器決定。編程是一個將高級語言代碼轉(zhuǎn)化為狀態(tài)機的過程。理解程序的本質(zhì)可以幫助我們更好地學(xué)習(xí)編程。
0#47:11
編寫C語言代碼的解釋器可以幫助理解C語言的工作原理。解釋器可以將C語言程序解析為一系列指令,類似于調(diào)試器的功能。漢諾塔問題可以作為一個練習(xí),通過編寫非遞歸的解決方案來加深對函數(shù)調(diào)用和狀態(tài)機的理解。編譯器的作用是將C語言源代碼翻譯成匯編代碼,實際上是將狀態(tài)機的執(zhí)行轉(zhuǎn)化為指令序列。掌握這個模型后,可以更深入地學(xué)習(xí)操作系統(tǒng)和計算機系統(tǒng)的基本原理。
0#57:53
編譯器根據(jù)代碼的可見性和影響性進行優(yōu)化,可以刪除不可見的操作,合并連續(xù)的相同操作,并根據(jù)外部函數(shù)的可能影響進行必要的寫入操作。編譯正確性的判斷標(biāo)準(zhǔn)是從外部看,執(zhí)行結(jié)果與解釋器執(zhí)行結(jié)果一致。
0#67:37
操作系統(tǒng)中的應(yīng)用程序是一段指令序列,以二進制文件的形式存在。這些二進制文件實際上是一個字節(jié)序列,可以用文本編輯器或二進制查看工具來查看。在操作系統(tǒng)中,最重要的程序是核心工具和二進制工具,它們提供了基本的功能和處理二進制文件的能力。
0#77:36
操作系統(tǒng)中的工具和應(yīng)用程序都是基于系統(tǒng)調(diào)用的交互實現(xiàn)的。通過追蹤系統(tǒng)調(diào)用的序列,可以了解應(yīng)用程序的執(zhí)行輪廓。trace是一個重要的工具,可以打印出程序執(zhí)行的所有系統(tǒng)調(diào)用。編譯器和圖形界面程序都是基于操作系統(tǒng)的API實現(xiàn)的。
0#86:10
通過分析系統(tǒng)調(diào)用的日志,可以了解到編譯器的內(nèi)部工作流程,包括調(diào)用的工具和參數(shù),以及中間結(jié)果的存儲方式。這樣的分析可以幫助我們更好地理解計算機系統(tǒng)的基礎(chǔ)知識。
0#96:47
圖形界面程序不直接將圖形繪制到屏幕上,而是通過發(fā)送消息給服務(wù)器程序來描述繪制的內(nèi)容,服務(wù)器程序再將內(nèi)容繪制到屏幕上。所有應(yīng)用程序都是通過計算狀態(tài)機和執(zhí)行系統(tǒng)調(diào)用來實現(xiàn)的。