SLP(Chapter 14)::異常和進程/線程

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:異常表基地址寄存器

在這裏插入圖片描述
在這裏插入圖片描述

異常分類:

  • 異步異常
    1. 中斷 interrupt(返回到下一條指令)
  • 同步異常
    由執行指令引起的事件引起
    1. 陷阱 trap(返回到下一條指令)
      E.g. system calls, breakpoint traps
    2. 錯誤 fault(可能返回到當前指令
      E.g. page faults, protection faults, floating point exceptions
    3. 中止 Abort 不return
      E.g. illegal instruction, ECC memory check

在這裏插入圖片描述

異常 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

  1. 創建進程及其主線程:CreateProcess()
    暗含系統調用NtCreateProcessEx(), NtCreateThread()
  2. 終止當前進程:ExitProcess()
  3. 終止另外的進程: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 向程序發送消息
  • 如何結合窗口、窗口類、窗口過程、消息隊列、消息循環和窗口消息到實際程序的上下文中
  • 沒有人真正記住所有的語法來編寫這個開銷
    通過複製現有程序並進行適當的更改來開始新程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章