1. 程式人生 > 其它 >程序和執行緒的一些知識整理

程序和執行緒的一些知識整理

1.什麼是程序?

  執行程式的封裝,作業系統進行資源排程分配的基本單位。

2.什麼什麼是程序表?

  由一個結構陣列組成,每個程序佔一個程序表項,表項包含程序的重要資訊(程式計數器、堆疊指標、記憶體分配情況、檔案狀態、賬戶排程資訊等),保證程序能隨後再次啟動。

3.什麼是並行和併發?

  併發:單個核心在很短時間分別執行多個程序。

  並行:多個核心同時執行多個程序。

4.程序的幾個狀態

  執行態:程序佔用cpu;

  就緒態:由於其他程序在執行二暫時停止執行;

  就緒掛起:程序在外存,進入記憶體馬上執行;

  阻塞態:程序在等待某一事件而暫時執行;

  阻塞掛起:程序在外存,並等待某一事件發生。

5.什麼是程序控制塊(PCB)?

  程序存在的唯一標識,用於作業系統感知程序,有以下資訊:

  程序描述資訊:程序識別符號、使用者識別符號等;

  程序控制和管理資訊:程序狀態、優先順序等;

  程序資源分配清單:虛擬記憶體空間資訊地址、開啟檔案列表等;

  cpu相關資訊:cpu暫存器的值,便於程序重斷點處繼續執行。

6.程序切換為何比執行緒慢?

  程序的切換涉及到虛擬地址空間的切換,而執行緒沒有。虛擬地址轉換為實體地址涉及頁表查詢,頁表查詢很慢,因此常利用TLB快表來快取常用的地址對映,頁表切換或導致TLB失效,虛擬地址轉為實體地址就會變慢,而執行緒不會。

7.什麼是守護程序?

  守護程序是指在後臺運⾏的,沒有控制終端與它相連的程序。它獨⽴於控制終端,週期性地執⾏某種任務。 Linux的⼤多數伺服器就是⽤守護程序的⽅式實現的,如web伺服器程序http等。

8.什麼是多程序?

  通過父程序fork()多個子程序,稱為多程序。父子程序除pid號不相同外,幾乎所有部分一樣。兩者共享資料,但在子程序寫資料時,會將公共資料重新拷貝一份再修改,而不是在同一塊資料修改。

9.什麼是殭屍程序?如何避免?

  多程序情況下,子程序結束後,父程序還沒捕獲子程序退出狀態前,子程序變為殭屍程序。目的在於維護子程序資訊便於父程序捕獲。殭屍程序會佔用核心資源,因此要避免殭屍程序的產生和持續時間。

  避免:呼叫wait等待子程序會導致父程序阻塞,呼叫waitpid不會產生阻塞。忽略signal訊號可以把殭屍程序交給init程序處理。而不是等待wait回收資源。