1. 什么是中斷和異常?
中斷:由外部設備(如鍵盤、網卡)觸發的異步事件,用于通知 CPU 有緊急事件需要處理。
異常:由 CPU 內部執行指令時產生的同步事件(如除零錯誤、缺頁異常),需要操作系統介入處理。
2. 用戶態和核心態
用戶態:進程運行在受限環境,只能訪問自己的內存空間和受限系統調用。
核心態:操作系統內核運行的特權模式,可訪問所有硬件資源和內存空間。
3. 并行和并發
并行:多個任務在多核 CPU 上同時執行。
并發:多個任務在單核 CPU 上通過時間片輪轉交替執行,宏觀上看似同時運行。
4. 內部碎片和外部碎片
內部碎片:分配的內存塊大于實際所需,導致部分空間浪費(如固定分區分配)。
外部碎片:內存中存在多個小空閑塊,但無法合并為大連續空間(如動態分區分配)。
5. 僵尸進程和孤兒進程
僵尸進程:子進程結束后,父進程未回收其狀態信息(PID、退出碼等),導致進程控制塊殘留。
孤兒進程:父進程提前退出,子進程被 init 進程(PID=1)收養。
6. 信號和信號量
信號:用于進程間異步通知的機制(如SIGTERM、SIGKILL)。
信號量:用于進程 / 線程同步的計數器,通過 P/V 操作控制臨界資源的訪問。
7. 常用 Linux 命令
文件操作:ls、cd、mkdir、rm、cp、mv
文本處理:grep、sed、awk
進程管理:ps、top、kill、pkill
網絡:ping、ifconfig/ip、netstat/ss
權限:chmod、chown
8. 查看和殺死進程
查看進程:ps aux(詳細列表)、top/htop(實時監控)、pgrep <進程名>(獲取 PID)。
殺死進程:kill (默認發送 SIGTERM)、kill -9 (強制終止)、pkill <進程名>。
9. 局部性原理
程序在執行時傾向于訪問近期使用過的內存區域(時間局部性)和相鄰內存位置(空間局部性),是緩存設計的基礎。
10. 進程 vs 線程
11. 進程的狀態
運行態:正在 CPU 上執行。
就緒態:等待 CPU 調度。
阻塞態:等待外部事件(如 IO)。
創建態:進程正在被創建。
終止態:進程正在退出。
12. 進程間通信(IPC)方式
管道:半雙工通信(如|)。
消息隊列:基于消息的存儲 - 轉發機制。
共享內存:最快的方式,直接訪問同一塊物理內存。
信號量:同步機制,控制對共享資源的訪問。
套接字(Socket):跨主機通信。
13. 線程同步方式
互斥鎖:同一時間只允許一個線程訪問臨界區。
讀寫鎖:允許多個線程同時讀,寫時互斥。
條件變量:線程等待特定條件滿足。
信號量:允許多個線程并發訪問有限資源。
14. 常見鎖
互斥鎖(Mutex):二進制鎖,用于互斥訪問。
自旋鎖(Spinlock):不睡眠,循環等待鎖釋放(適用于短時間持有)。
讀寫鎖(ReadWriteLock):讀共享、寫互斥。
遞歸鎖(Reentrant Lock):允許同一線程多次加鎖。
15. 死鎖的條件與解除
死鎖條件:互斥、占有并等待、不可搶占、循環等待。
解除方法:
預防:破壞死鎖的四個條件之一(如資源一次性分配)。
避免:銀行家算法動態檢測安全性。
檢測與恢復:定期檢測并強制釋放資源。
16. 進程調度算法
先來先服務(FCFS):按到達順序調度。
短作業優先(SJF):優先調度執行時間最短的進程。
時間片輪轉(RR):每個進程分配固定時間片。
多級反饋隊列:動態調整優先級,平衡長短期作業。
17. 分段 vs 分頁
18. 頁面置換算法
FIFO:淘汰最早進入內存的頁面。
LRU:淘汰最久未使用的頁面(需維護訪問順序)。
OPT:淘汰未來最長時間不會使用的頁面(理論最優)。
Clock:近似 LRU,用訪問位(Reference Bit)實現。
19. IO 多路復用
通過一個線程監視多個 IO 事件(如 socket 連接),當有事件就緒時通知應用程序處理。
常見實現:select、poll、epoll(Linux)、kqueue(BSD/macOS)。