- 程序:存儲在存儲器中,用編程語言寫好,經過預處理,編譯,彙編,鏈接成的二進制代碼。
- 進程:正在運行的程序。
- 多進程:爲了提高CPU的利用率,在某進程遇到阻塞時,CPU能夠不必等待該阻塞的進程而去執行別的進程,使CPU一直處於忙碌狀態,提出了多進程。
- PCB:CPU在切換進程前,會將當前進程的狀態信息、數據信息保存在該進程的PCB中。
- 通過調度算法來實現進程間的切換。
- 調度算法有:一、先來先服務。二、短作業優先。三、設定優先級,優先調度優先級高的進程。四、動態調整優先級,即高響應比優先調度。五、時間片輪轉調度算法。六、多級反饋隊列調度算法。
- 多進程會產生的問題:死鎖,多個進程由於互相等待對方持有的資源而造成誰都無法執行的情況。
- 死鎖的原因:
一、資源互斥。進程一旦佔有資源,別的進程不能使用
二、資源保持。進程佔有了一些資源,再去申請別的資源
三、環路等待。各自申請者對方佔有的資源。
四、資源不可搶佔。別的進程拿有你需要的資源但你不能搶。 - 死鎖的處理方法:
一、不保持資源。一次性申請所有自己所需資源,若資源不足,則釋放所有資源。
二、對資源進行編號,資源申請按序進行,避免環路等待。
三、利用算法(銀行家算法),每次申請資源前,先檢查申請後會不會出現死鎖,若會出現死鎖,則不申請。
四、若出現死鎖,取出某一進程,讓其釋放資源。
五、不處理。 - 銀行家算法:在進程需要申請資源時,操作系統首先要詢問該進程所需最大資源數,若該最大資源數小於操作系統現有資源數,則將資源分配給該進程,否則推遲分配。當進程處理完畢之後,立即釋放所有資源歸還給操作系統。
- 進入內核的方法:中斷。
- 進程間的同步:多個進程合作完成一項任務,實現進程合作的合理有序。
- 進程間同步的方式:
一、信號量
二、臨界區
三、互斥鎖
四、自旋鎖
其中,用信號量實現多進程同步,用臨界區保護信號量,用互斥鎖進入臨界區。 - 臨界區:每次只能有一個進程進入的代碼片段。(代碼段是進程共享的資源,需要用互斥鎖來保護)
- 互斥鎖原理:在硬件層面上,將某個標誌類型用一條指令實現,進入臨界區之前,執行這一條指令,既上鎖,運行臨界區,當出臨界區時,再執行這一條指令,既解鎖。當鎖被別的進程佔有時,其他進程是不能進入該臨界區的。
- 互斥鎖的用法:pthread.h頭文件中定義了互斥鎖,呼出鎖的用法是通過調用pthread_mutex_init生成鎖,通過調用pthread_mutex_lock()和pthread_mutex_unlock()函數來實現上鎖和解鎖操作。
- 每個進程擁有完整的用戶地址空間,包括代碼段,數據段,BSS段,堆段,棧段。
- 進程由:程序,數據,和PCB組成。
- 線程指的是進程的指令序列。一個進程至少有一個線程,可以有多個互不影響的指令序列,也就是說有多個線程。
- 線程保留了指令序列併發的優點且減少了資源切換的系統開銷。
- 與進程類似,每個線程擁有一個特殊的數據結構來記錄線程切換前的狀態和數據,稱之爲TCP。
- 線程擁有自己的線程ID,PC指針,寄存器集合和堆棧。線程之間共享同一個內存映射表,共享同一地址空間。
- 線程是調度的基本單元,故調度算法應說線程調度算法更爲合理。
- 進程是資源分配的基本單元,線程是調度的基本單元,進程包含線程,線程共享進程的資源。
- 併發:一個處理器任意一個時刻只能處理一條指令,通過多個指令的輪換執行,在宏觀上感覺是多條指令同時執行。
- 並行:多個處理器同時處理多個指令,每個處理器執行一條指令,多個指令同時執行。
- 週轉時間:從任務開始到任務結束所用的時間
- 響應時間:從操作發出到CPU響應所經過的時間
進程/線程知識總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.