九月份參加的一場面試被問道了進程和線程的相關問題,這篇博文主要整理一下本身的思路。面試
Tanenbaum的大做《現代操做系統》中,列出了PCB包含的一些實體。PCB主要包括三個部分:進程管理、內存管理和文件管理。下面來仔細說說我所瞭解的各個部分的實體。算法
說道進程管理,首先應該想到的就是PID,進程狀態等相關內容。這裏按照書上列舉的順序依次來講明。函數
Register、PC和PSW嚴格意義上都是寄存器。說道寄存器,首先想到的就是PC(程序計數器),在《現代操做系統中》看來是將PC和其它寄存器分開了看待。可是我翻了一下本身學習的計算機組成原理的書後,對於寄存器有了一點淺顯的認識。CPU主要有下面幾類寄存器。學習
因此當進程切換的時候,以上的信息必需要保存。操作系統
這個我不是很清楚,說一說本身的理解吧。在內存管理中,系統會爲一個進程分配一個地址空間,這樣不一樣的進程就不會相互影響。咱們寫代碼的時候(c代碼),代碼中有常量、變量、各類控制語句,或許你還會寫一個遞歸函數。這樣當系統爲進程分配內存的時候,將進程分配的內存也對應的分爲三個部分(我本身的理解):代碼區、堆和棧。棧保存一些變量和常量,若是有遞歸,還要保存每次返回的地址(這裏就明白了爲何會棧溢出了吧。。。)。堆保存那些動態變化的數據。好比,調用了malloc函數,申請一塊內存就是從堆裏面分配內存。不知道這裏的棧指針是否是指這個棧。線程
這個只要學習過操做系統的都知道翻譯
這個也是,當調度算法使用的話指針
這個也是和調度相關的遞歸
這個的做用很明顯進程
同上
這個不清楚
這個都是和調度相關
這個知道,囧!
以上就是進程管理所保存的信息。下面介紹內存管理。
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等數據存在棧中。若是是這樣,個人理解就是系統棧將進程管理中所說的那些實體所有存在系統棧中?看來仍是沒有搞透這個問題。是否這個問題考慮到這裏就夠了?我主要也不是搞操做系統的,也不是搞硬件的。求大神解答啊!!!
根目錄
工做目錄,因此配置JDK有點麻煩,就是要配置這兩個東西。知道JDK和JRE絕對目錄和源文件的工做目錄
這兩個,通常多用戶的時候使用的多。
看玩了PCB的內容,我想對於進程的概念應該有一個直觀的理解了。
首先,進程是一個具備特定功能的程序關於某個數據集合的一次運行活動,它是一個動態的概念。
其次。進程是一個實體集合,它所包含的某些實體是不斷變化的,這些實體確保了程序的正確執行。