0 控制流
什麼是控制流?
指令流。
控制轉移:PC改變值
正常流:
- 平滑序列smooth sequence:PC++
- 程序指令jump、call、ret改變平滑序列
異常流Exception:突然控制傳輸,以響應系統狀態的變化
1 異常
異常的層次:
- 硬件層:定時器中斷(PIT)
- OS層:上下文切換
- 應用程序層:setjmp(),longjump()
異常:由時間引起,異常處理/中斷服務程序處理(ISP)
- 怎樣定位到對於的異常處理程序/ISP?
- Exception number [Page fault 14]
- Exception table [initialized at boot time]
- RTR:異常表基地址寄存器
異常分類:
- 異步異常
- 中斷 interrupt(返回到下一條指令)
- 同步異常
由執行指令引起的事件引起- 陷阱 trap(返回到下一條指令)
E.g. system calls, breakpoint traps - 錯誤 fault(可能返回到當前指令)
E.g. page faults, protection faults, floating point exceptions - 中止 Abort 不return
E.g. illegal instruction, ECC memory check
- 陷阱 trap(返回到下一條指令)
異常 V.S. 函數調用
- 返回地址
可能不是下一個指令 - 內核堆棧 V.S. 用戶堆棧
- 在內核模式下運行
- 將更多推送到堆棧上
EFLAGS(程序狀態和控制) - 發生時間
- 關聯的函數
- 軟件還是硬件
IA32/x86 中的異常
2 進程和線程
進程 process
異常允許操作系統提供進程
why?OS可以通過異常處理拿回對CPU控制權
- 時間片超時
- I/O完成
- 系統調用
進程:程序的一個實例(它與程序是什麼關係?)
- 資源所有權(空間)
專用地址空間
虛擬內存
主內存的獨佔使用 - 調度/執行(時間):絕對下一個運行的進程
邏輯控制流
上下文切換
CPU 的獨佔使用
進程組成的?
- 數據
- 代碼
- 上下文/PCB
交錯(物理)和併發(邏輯) Interleaving and concurrency :看似併發,實際上是交錯的
多任務multitasking的類型
- Cooperative multitasking 協作式多任務
- Preemptive multitasking 搶佔式多任務
CPU mode:
- CPU mode = 1,用戶態,不能執行特權指令
- CPU mode = 0,系統態,可以特權指令
異常出現,就切換:
- 模式切換 mode switch
- 上下文切換 context switch
進程相關的WIN32 API
- 創建進程及其主線程:CreateProcess()
暗含系統調用NtCreateProcessEx(), NtCreateThread() - 終止當前進程:ExitProcess()
- 終止另外的進程:TerminateProcess()
暗含系統調用NtTerminateProcess()
線程 thread
Why 線程?
更多的控制/跟蹤流程(Remote Procedure Call,RPC)
多線程:在單個進程中支持多個執行線程
用戶態線程(ULT) VS 內核態線程(KLT)
3 Windows的進程和線程
WHY 學windows API?
- 在利用 Windows 功能時爲您提供最佳性能、最大功能和最大多功能性。
- 可執行文件相對較小,不需要外部庫運行。
- 熟悉 API 可以更深入地瞭解 Windows 內部
注意
頭文件: WINDOWS.H
程序入口 WinMain
#define WINAPI __stdcall //function call protocol
hInstance instance handler 實例句柄
szCmdLine parameters
iCmdShow initialized window size
hello world 1:簡單版本
hello world 2:完整版本
要點
- Windows 向程序發送消息
- 如何結合窗口、窗口類、窗口過程、消息隊列、消息循環和窗口消息到實際程序的上下文中
- 沒有人真正記住所有的語法來編寫這個開銷
通過複製現有程序並進行適當的更改來開始新程序