【學習筆記】3. 一個進程的演變

0. 同系列索引

  1. 進程與進程組
  2. 各類不一樣的進程
  3. 一個進程的演變

1. init進程

1.1 1號進程的建立

內核態建立進程使用 kernel_thread ,用戶態建立進程使用 fork

kernel_thread 會建立 init 進程 和 ktheadd 內核線程就是常說的 1號進程和2號進程html

  • 1號進程是全部進程的祖先 : 用戶空間,
  • 2號進程 負責管理內核中的進程 : 內核空間

這二個進程維護系統的全部進程shell

此時1號進程仍是在內核空間。
execve 函數把控制器從內核空間切換到用戶空間。
經過加裝用戶空間的應用程序(exec 加裝應用文件),而後 kernel_thread 建立的init進程,就變成了用戶空間的第一個進程segmentfault

clipboard.png
圖:能夠看出 1號進程和2號進程的父子關係bash

clipboard.png
圖:全部進程的父進程,起源都是1號進程和2號進程。併發

1.2 1號進程作了什麼?

clipboard.png

1號進程到了用戶態以後,作了什麼: 完成各類初始化函數

clipboard.png

1.3 1號進程的特徵

clipboard.png

  • 用戶空間的全部進程都是init進程fork產生的
  • init進程會轉換爲守護進程

2. 進程的init 過程

  1. 0號進程
  2. init內核進程
  3. 1號init用戶進程
  4. getty進程
  5. shell 進程

前面的部分已經介紹了 1-3 步驟
第四步:1號進程fork一個子進程,啓動getty。 若是用戶登陸了,就會啓動一個login進程,驗證登陸。學習

因此沒有登陸,沒有到第四步的終端,以下圖spa

clipboard.png

第五步:啓動一個bash進程,在bash裏面運行shell命令線程

clipboard.png

3. init 進程的演變

這個特別須要記住

clipboard.png

上面集中是 init 服務進程的演變,各有優缺點。code

由於平常不會再想init徹底過程那樣了,在虛擬終端和僞終端,使用了不一樣的演變方式。
好比 sysvinit 經過加載 init.d 文件。
好比咱們在上面的介紹中,託管子進程是 upstart。它能夠併發運行。
虛擬終端中使用的是 :systemd。(廣爲使用的)

咱們在瞭解的時候,不是靠記憶,而是知道它的原理,而後理解就能夠了。

100. 致敬

若有不詳,請參考王老師的精彩講解
學習過程當中,得到了極大的知足感,把以前的一些東西串聯了起來。十分感謝 王利濤老師在此表示感謝。PS:本文中全部的資源和圖片均來自視頻中

相關文章
相關標籤/搜索