進程與線程

要講進程和線程就太難了,我自己都是半斤八兩,這個東西還是蠻難的,不過我們先大致瞭解!

首先,一般進程都是開頭首講的內容,爲什麼這個概念這麼重要?就像操作系統這個東西出來,有它的原因和意義,那爲什麼我們要提出這樣一個概念!不知道大家有沒有想過這個問題,其實對於原來的pc來講,是不需要這樣一個東西的,因爲只有一個程序在跑,也不需要維護什麼東西,但是到了多道程序來講,假設一個程序的執行爲一個活動,我們需要在活動之間切換,但是程序只是一個代碼,它是一個靜態的模型,就像人一樣,沒有進程這個模型,我們看到的都是差不多的木偶,很難知道彼此的區別,引入了這個概念之後,我們可以看到大大小小高矮胖瘦的實體,我們看到的是活的模型,通過他的外表我們知道它現在的狀態,而另外一方面,爲什麼進程如此重要?因爲我們最重要的就是要幹什麼,進程是實現我們思想的載體,它代表了我們的意志,其他的文件系統和內存之類的只是一個附件,只是一個看熱鬧的!

而這裏你也需要體會進程和程序的區別,在沒有進程模型的時代,程序就是一串串代碼,順序執行下去,這裏還要提一下單道程序和多道程序,前者就是幾個程序按順序依次執行,這樣相當於批處理,可以保證時間的可再現,是封閉的過程,但是一個程序霸佔整個時間段,功能簡單,多道程序不可再現,有不確定性,但是可以提高資源利用率,(當然沒有絕對的好與壞,具體看需求),進程是把程序作爲一個食譜在做得一序列動作,是一個活的實體,程序是死的,是一個算法,而進程是活的,是一個程序的動態執行過程,這樣應該說清楚了。

這樣來看,我們的進程具有動態性(程序的動態執行過程),併發性,獨立性和不可再現性,進程就是社會上的一個個人的存在,是資源和調度的最小分配單位!

所以我們打開wps,其實可能會創建不止一個進程,一件事情有時候需要幾個人來做!那我們什麼時候創建進程?

  1. 操作系統初始化,操作系統初始化的時候啓動了若干個進程,我們有我們的意志,操作系統也有它想要做的事情,它也需要創建進程來做它需要做的事情。

  2. 用戶進程調用了fork系統調用,這是我們主動地想要創建一個進程來幫忙做事。

  3. 響應用戶的shell命令行需求

  4. 批命令處理初始化(瞭解即可)

    。。。

    從本質上說,這些進程的創建都是由於被已有進程通過系統調用創建的新進程,至於創建的過程,暫時不詳細說。

    對應創建,必然要談一下什麼時候會導致進程的終止?

《1》進程已經執行結束了,正常退出,其實本質是調用exit系統調用

《2》進程出錯退出(有自願和非自願)

《3》被其他進程用kill命令殺死

在unix等系統,進程創建子進程,子進程創建子進程,如此下去,形成了一顆進程樹,樹的頂端是一個init進程,這個也是瞭解即可,另外一個需要了解的東西是進程的狀態,這個還是很重要的概念:

人每天的狀態都不一樣,進程也會因爲各種事情產生狀態的變化,這種狀態的區分在多道程序設計裏面更加重要,因爲我們需要在這些進程之間調度,對於他們的狀態的瞭解凸顯重要!

一般來講,我們認爲有三個狀態:運行態,就緒態,阻塞態,這三者,運行態最容易理解,就是進程此時佔用cpu,後面兩個需要區分,就緒態是說進程此時可以運行,但是沒有時間片,也就是說我可以跑下去,但是現在別人用着cpu呢,我還得等會,而阻塞態一般比如我現在正在等待你輸入某個數據,在你輸入之前我跑不下去,你給我cpu我現在也沒辦法往下跑!至於進程狀態轉換圖,這裏不想探討了,只是注意有6個轉換,一般書上給4種,從阻塞直接到運行這種也可以,但是不能從就緒到阻塞,因爲就緒態的進程無法因爲I/O等阻塞,此時跑都跑不了,怎麼可能有邏輯阻塞?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章