硬件視角的操作系統(tǒng) (CPU Reset;固件;為硬件編程) [南京大學(xué)2023

0#00:01
計算機硬件是由數(shù)字邏輯電路構(gòu)成的,可以模擬任何計算機系統(tǒng)。計算機系統(tǒng)是一個嚴格的數(shù)學(xué)對象,可以通過函數(shù)來描述其狀態(tài)遷移。初始狀態(tài)是一個重要問題,決定了程序是否能在計算機上執(zhí)行。手機和電腦可以通過重啟按鈕來解決死機問題。
0#08:26
計算機系統(tǒng)中的CPU reset狀態(tài)是由硬件和程序員之間的約定建立起來的。CPU reset后的狀態(tài)包括所有寄存器的值,如程序計數(shù)器。廠商和CPU之間的約定使得主板的生產(chǎn)廠商可以在CPU reset的地址上放置代碼,從而執(zhí)行特定的操作。這些約定都是通過手冊規(guī)定的,沒有任何魔法存在。
0#17:48
操作系統(tǒng)的啟動過程包括硬件的初始化和固件的執(zhí)行。固件是由廠商提供的一部分代碼,用于配置和管理計算機硬件,并加載操作系統(tǒng)。固件可以根據(jù)需求配置硬件選項,如啟用或禁用某些功能。固件也可以識別和加載不同的操作系統(tǒng)。
0#26:17
BIOS是一種固件,負責(zé)啟動計算機并提供一些功能。IBM PC的BIOS還提供了一組API,可以調(diào)用一些功能,如打印字符和配置屏幕。隨著計算機硬件的發(fā)展,傳統(tǒng)的BIOS已經(jīng)不能滿足需求,于是出現(xiàn)了UEFI,它規(guī)定了驅(qū)動和啟動程序的格式和規(guī)范。傳統(tǒng)的BIOS的主要功能是將程序加載到內(nèi)存中,它會掃描可引導(dǎo)設(shè)備,找到第一個可引導(dǎo)的設(shè)備,并將其第一個扇區(qū)加載到內(nèi)存中的7c00位置。
0#34:32
CPU reset后,計算機系統(tǒng)會執(zhí)行一段代碼,將可引導(dǎo)磁盤的第一個512字節(jié)加載到內(nèi)存的0x7c00位置,并將PC指向第一條指令開始執(zhí)行。主引導(dǎo)扇區(qū)的代碼可以由程序員控制,通常比外部代碼小一些。主引導(dǎo)扇區(qū)的最后兩個字節(jié)是magic number,用于標記可引導(dǎo)磁盤。主引導(dǎo)扇區(qū)前面還有分區(qū)表。通過模擬器可以單步執(zhí)行指令,進一步了解計算機系統(tǒng)的執(zhí)行過程。
0#44:10
本節(jié)課介紹了x86匯編語言和如何通過翻譯和改寫來理解匯編代碼。通過一個示例代碼,展示了如何使用匯編語言打印字符串到屏幕上。還介紹了如何使用qemu和gdb來調(diào)試模擬器中的代碼。
0#53:51
本節(jié)課介紹了使用gdb進行匯編代碼調(diào)試的方法,包括使用gdp init文件自動化調(diào)試流程、使用watch point追蹤內(nèi)存變化等技巧。這些技巧可以提高調(diào)試效率,幫助解決代碼中的問題。
0#62:37
操作系統(tǒng)的重要機制使得我們能夠應(yīng)對困難和挑戰(zhàn)。固件加載和總線的基本原理類似,但有一些額外的約定。固件必須是GUID分區(qū)表格式化的,并且必須有一個FAT32分區(qū)。固件加載器可以加載任意大小的PE可執(zhí)行文件和EFI文件。系統(tǒng)調(diào)用可以訪問硬件信息和USB設(shè)備。啟動加載器是一個重要的組件,它可以加載操作系統(tǒng)內(nèi)核并使其運行。計算機病毒可以感染固件并導(dǎo)致系統(tǒng)無法啟動。
0#70:59
操作系統(tǒng)就是一個C程序,寫操作系統(tǒng)并不難,只需要了解一些基礎(chǔ)知識和API。操作系統(tǒng)可以直接在計算機硬件上運行,只需要用到一些特定的編譯選項和庫函數(shù)。操作系統(tǒng)的編程和普通的C編程沒有太大區(qū)別,只需要正確使用API即可。
0#79:24
通過使用命令行編譯工具和合并選項,可以更好地理解和閱讀代碼的編譯過程。使用好的搜索引擎和人工智能工具可以提高學(xué)習(xí)效率。
0#89:13
操作系統(tǒng)是一個C程序,可以分時運行多個程序。計算機啟動的流程是操作系統(tǒng)的重要內(nèi)容。