程序 執行緒 纖程 中斷
阿新 • • 發佈:2021-12-15
1. 程序和執行緒有什麼區別?
程序是OS分配資源的基本單位
執行緒是執行排程的基本單位。
分配資源最重要的是:獨立的記憶體空間,執行緒排程執行(執行緒共享程序的記憶體空間,沒有自己獨立的記憶體空間)
2. 什麼是纖程
使用者態的執行緒,執行緒中的執行緒,切換和排程不需要經過OS
纖程的優勢:
1:佔有資源很少,執行緒佔1M ,纖程佔4K
2:切換比較簡單
3:啟動很多個10W+
纖程的應用場景:很短的計算任務,不需要和核心打交道,併發量高
3. 殭屍程序
父程序產生子程序後,會維護子程序的一個PCB結構,子程序退出由父程序釋放,如果父程序沒有釋放,那麼子程序成為一個殭屍程序
危害:佔用少量資源,比如程序號,Linux程序號是有限制的
4. 孤兒程序
子程序結束之前,父程序已經退出,孤兒程序會成為init程序的孩子,由1號程序維護,基本沒有危害
5. 程序排程基本概念
程序型別
- IO密集型,大部分時間用於等待IO
- CPU密集型,大部分時間用於計算
程序優先順序
- 實時程序>普通程序(0-99)
- 普通程序nice值(-20-19)
時間分配
- linux採用按優先順序的cpu時間比
- 其他系統多采用按優先順序的時間片
6. linux預設的排程策略
對於實時程序:使用SCHED_FIFO和SCHED_RR兩種
對於普通程序:使用CFS(Completely Fair Scheduler,按優先順序分配時間片的比例,記錄每個程序的執行時間,如果有一個程序執行時間不到他應該分配的比例,優先執行)
其中等級最高的是FIFO,這種程序除非自己讓出CPU否則linux會一直執行它,除非更高等級的FIFO和RR搶佔它
RR只是這種執行緒中是同級別FIFO中的平均分配
只有實時程序主動讓出或者執行完畢,普通程序才有機會執行
7. 中斷
硬體跟作業系統核心打交道的一種機制
軟中斷(80中斷) == 系統呼叫
系統呼叫:int 0x80 或者 sysenter原語
通過ax暫存器填入呼叫號
引數通過bx cx dx si di傳入核心
返回值通過ax返回
java讀網路 – jvm read() – c庫read() - > 核心空間 -> system_call() (系統呼叫處理程式)-> sys_read()