期中總結

內核的啓動過程能夠簡單地這麼來看:start_kernel從內核一啓動的時候它會一直存在,這個就是0號進程,idle就是一個while0,一直在循環着,當系統沒有進程須要執行的時候就調度到idle進程,咱們在windows系統上會常常見到,叫作system idle,這是一個一直會存在的0號進程,而後呢就是0號進程建立了1號進程,這個init_process是咱們的1號進程也就是第一個用戶態進程,也就是它默認的就是根目錄下的程序,也就是常會找默認路徑下的程序來做爲1號進程,1號進程接下來還建立了kthreadd來管理內核的一些線程,這樣整個程序就啓動起來了。也就是所謂的道生一,一輩子二,二生三,三生萬物。Linux操做系統架構概覽咱們在這裏總結一下這個課學習的內容:linux

任何計算機系統都包含一個基本的程序集合,稱爲操做系統
- 內核(進程管理,進程調度,進程間通信機制,內存管理,中斷異常處理,文件系統,I/O系統,網絡部分)
-其它程序(例如函數庫,shell程序、系統程序等等)
操做系統的目的
-與硬件交互,管理全部的硬件資源
-爲用戶程序(應用程序)提供一個良好的執行環境
那麼咱們能夠看一張圖:最底層有磁盤管理,物理內存的管理,內存控制器還有控制檯,這個地方它有一個Kernel Intelface to the hardware,
也就是對硬件資源的管理,而後呢在上一層就是內核的實現,內核的實現也就是CPU調度,內存管理,按需調度,虛擬內存等等,還有其餘的驅動,磁盤管理,文件系統等等,這些操做系統的內核,咱們這門課分析的內核只是計算機操做系統裏面最最關鍵的一些代碼,實際上整個操做系統很是複雜,不少其餘的部分都沒有涉及。那麼呢,這個地方有一個系統調用接口,這裏涉及到不一樣的部分,基礎軟件也就是share共享庫lib ,動態加載器這些等等。

3.從CPU和內存的角度來看Linux系統的執行

1.從在CPU執行指令的角度看:shell

  

2.從內存的角度看windows

      我理解的計算機進行工做時,總線鏈接cpu和內存,cpu內有許多的寄存器,他們分工不一樣,大小也不一樣,cpu其中有個很重要的寄存器,就是ip寄存器,ip寄存器不斷向下遞增,指令被不斷地執行。計算機經過必定的語句來控制這些組件,實現計算機要完成的工做,就拿這個實驗,將c語言編譯成機器更容易理解的彙編語言。使用匯編語言,指令被不斷地執行,反映在棧中,就是堆棧裏面不斷髮生改變,計算機這樣完成了本身的工做。
      內核的啓動過程能夠簡單地這麼來看:start_kernel從內核一啓動的時候它會一直存在,這個就是0號進程,idle就是一個while0,一直在循環着,當系統沒有進程須要執行的時候就調度到idle進程,咱們在windows系統上會常常見到,叫作system idle,這是一個一直會存在的0號進程,而後呢就是0號進程建立了1號進程,這個init_process是咱們的1號進程也就是第一個用戶態進程,也就是它默認的就是根目錄下的程序,也就是常會找默認路徑下的程序來做爲1號進程,1號進程接下來還建立了kthreadd來管理內核的一些線程,這樣整個程序就啓動起來了。也就是所謂的道生一,一輩子二,二生三,三生萬物。
計算機中進程的建立與描述:
   
系統調用
  
      我理解中這三大法寶是缺一不可,共同配合以後完成的工做。尤爲是中斷,上一次課的時候沒有講到中斷,其實中斷也很重要。有了中斷之後在系統裏面能夠同時跑好幾個程序,每一個程序有本身的執行流,在這個執行流的過程當中,能夠切換過去完成另一項任務,這時候cpu就會作一件事情,由cpu和內核代碼共同實現了保存現場和恢復現場。cpu把當前的esp、ebp都壓到一個叫作內核堆棧的另一個堆棧裏面去,壓到這個堆棧裏面去以後呢,而後把eip指向一箇中斷處理程序的入口,保存現場,執行中斷處理程序,咱們這個中斷處理程序模擬了這個時鐘中斷,這是是週期性的,每過一段時間發生一個時鐘中斷,這個時鐘中斷也會調用一個程序,咱們的實驗能夠很明顯看到當前系統裏只有一個進程,一直在那裏執行,執行過程當中每隔一段時間,時鐘中斷髮生一次,這樣就模擬了一個最基本的系統環境,在這個系統環境中咱們就能夠寫一個最簡單的時間片輪轉的一個很是小的,代碼少的一個操做系統內核。這就是我理解的操做系統的工做過程。
相關文章
相關標籤/搜索