操做系統 - 進程

九月份參加的一場面試被問道了進程和線程的相關問題,這篇博文主要整理一下本身的思路。面試


 

進程控制表(PCB)

Tanenbaum的大做《現代操做系統》中,列出了PCB包含的一些實體。PCB主要包括三個部分:進程管理、內存管理和文件管理。下面來仔細說說我所瞭解的各個部分的實體。算法


 

進程管理

說道進程管理,首先應該想到的就是PID,進程狀態等相關內容。這裏按照書上列舉的順序依次來講明。函數

Register、PC和PSW

Register、PC和PSW嚴格意義上都是寄存器。說道寄存器,首先想到的就是PC(程序計數器),在《現代操做系統中》看來是將PC和其它寄存器分開了看待。可是我翻了一下本身學習的計算機組成原理的書後,對於寄存器有了一點淺顯的認識。CPU主要有下面幾類寄存器。學習

  1. IR(指令寄存器)保存CPU當前正在執行的指令。我想是從PC中取指令。
  2. PC(程序計數器)保存下一次須要執行的指令。
  3. AR(數據地址寄存器)保存當前CPU所訪問的數據在cache中的地址。
  4. 通用寄存器 保存ALU操做數。固然通用寄存器還有其它功能:地址指示器、變址寄存器、堆棧指示器等。
  5. PSW(狀態字寄存器)保存算術和邏輯運算的各類條件代碼,保存中斷和系統工做狀態等信息。

因此當進程切換的時候,以上的信息必需要保存。操作系統

Stack Pointer(棧指針)

這個我不是很清楚,說一說本身的理解吧。在內存管理中,系統會爲一個進程分配一個地址空間,這樣不一樣的進程就不會相互影響。咱們寫代碼的時候(c代碼),代碼中有常量、變量、各類控制語句,或許你還會寫一個遞歸函數。這樣當系統爲進程分配內存的時候,將進程分配的內存也對應的分爲三個部分(我本身的理解):代碼區、堆和棧。棧保存一些變量和常量,若是有遞歸,還要保存每次返回的地址(這裏就明白了爲何會棧溢出了吧。。。)。堆保存那些動態變化的數據。好比,調用了malloc函數,申請一塊內存就是從堆裏面分配內存。不知道這裏的棧指針是否是指這個棧。線程

Process State

這個只要學習過操做系統的都知道翻譯

Priority

這個也是,當調度算法使用的話指針

Scheduling parameters

這個也是和調度相關的遞歸

Proces ID

這個的做用很明顯進程

Patent process

同上

Signals

這個不清楚

Time when process started、CPU time used和Children‘s CPU time

這個都是和調度相關

Time of next alarm

這個知道,囧!

以上就是進程管理所保存的信息。下面介紹內存管理。


 

內存管理

Pointer to next text segment info

Pointer to next  data segment info

Pointer to next stack segment info

看了這些,就知道在上面所說的棧指針指的不是內存管理中系統爲進程分配的內存中棧的指針了,Pinter to next statck segement info 纔是。那麼進程管理中的棧指針是指什麼呢?求大神告知。在網上搜了一下,通常進程有兩個棧:系統棧和用戶棧。前面所說的應該就是系統棧了,這裏所說的應該就是用戶棧。系統棧主要用在中斷髮生時使用,保存中斷現場。在《現代操做系統》中,當系統處理中斷時,第一個要作的就是 Hardware statcks program counter,etc. 這句話翻譯過來就是硬件將PC等數據存在棧中。若是是這樣,個人理解就是系統棧將進程管理中所說的那些實體所有存在系統棧中?看來仍是沒有搞透這個問題。是否這個問題考慮到這裏就夠了?我主要也不是搞操做系統的,也不是搞硬件的。求大神解答啊!!!


 

文件管理

Root directory

根目錄

Working directory

工做目錄,因此配置JDK有點麻煩,就是要配置這兩個東西。知道JDK和JRE絕對目錄和源文件的工做目錄

User ID

Group ID

這兩個,通常多用戶的時候使用的多。


看玩了PCB的內容,我想對於進程的概念應該有一個直觀的理解了。

首先,進程是一個具備特定功能的程序關於某個數據集合的一次運行活動,它是一個動態的概念。

其次。進程是一個實體集合,它所包含的某些實體是不斷變化的,這些實體確保了程序的正確執行。

相關文章
相關標籤/搜索