1. 程式人生 > 其它 >程序 執行緒 纖程 中斷

程序 執行緒 纖程 中斷

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()