# 應用視角的作業系統 :::info 課程:南京大學蔣炎岩教授 [操作系統(2025 春)](https://jyywiki.cn/OS/2025/) ::: 從我們熟悉的軟體領域(高階程式語言)往下探到程式如何與 OS 合作 ## Background ### 電腦作為 Turing Machine 的現代實作版本,是一種狀態機 - 在任何時刻,都可以用一組「狀態」完整描述 - 執行一條指令,就是從「狀態 A」→「狀態 B」 > 只要一個東西符合這三件事: > 1. 在任何時刻,都有一個可描述的狀態 > 2. 會因為某些事件而改變狀態 > 3. 狀態改變是有限規則下的轉移 > > 那它就可以被建模為狀態機 ### 電腦在執行程式時就是在管理狀態的變化 - 名詞定義 - PC(Program Counter):CPU 裡的一個暫存器,永遠指著下一條要執行的指令 - Stack Frame:一次 function 呼叫的執行現場,裡面會存放 - local variables - return address(function 執行完要回去的位置) - 過程 1. PC 指向 `main()`,此時僅有一個 stack frame,且所有的 global variables 都是初始值 2. CPU 依照 PC 指向的指令執行,過程中會修改 register 或 memory 中的狀態 - 若執行到 function call: - 將 return address push 進 stack(形成新的 stack frame 往上疊) - PC 改為指向被呼叫 function 的第一條指令 - 執行後狀態改變,形成新的狀態 3. 當 function 執行完畢: - stack frame 會被 pop - PC 會被設為該 frame 中的 return address - 繼續執行呼叫者後續指令 4. 直到所有 stack frame 都被 pop,程式 return ## Hook 此種「狀態遷移」的概念可以適用到所有純粹的計算,均指改變「程式內的狀態」 但是有些 standard library 暴露出來的 API 需要改變「程式外的狀態」,這些有副作用的呼叫都需要由 OS 處理 - e.g. `putchar` 真的會在物理意義上產生一個實體(螢幕上的像素點) 這就是為什麼純計算語言最終一定需要作業系統 ## What Does OS Do? 當程式在執行「會影響程式外世界」的操作時,就需要將控制權交給 OS 代為執行,執行入口就是 ABI (Application Binary Interface) 層級的系統調用 (syscall) - e.g. 在 `putchar` 背後發生的事情是 ```bash putchar (libc) → write (syscall) → kernel → device driver → hardware ``` 所以 OS 的職責就是提供一組「安全、受控、可抽象化的介面」,讓應用程式能在不理解硬體細節的情況下,合法地改變世界
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up