linux的0,1,2號進程


一、答案

https://blog.csdn.net/gatieme/article/details/51532804

仔細讀一下作者的博客,都是操作系統底層相關。

二、補充:

  1、linux代碼,arch下是不同CPU的代碼,計算機下我們關心X86

  

  2、init文件下,main.c下的start_kernel函數是啟動的初始化函數;

  3、x86 CPU啟動的第一個動作CS:EIP=FFFF:0000H(換算為物理地址為000FFFF0H,因為16位CPU有20根地址線),即BIOS程序的位置。http://wenku.baidu.com/view/4e5c49eb172ded630b1cb699.html

  4、BIOS例行程序檢測完硬件並完成相應的初始化之后就會尋找可引導介質,找到后把引導程序加載到指定內存區域后,就把控制權交給了引導程序。這里一般是把硬盤的第一個扇區MBR和活動分區的引導程序加載到內存(即加載BootLoader),加載完整后把控制權交給BootLoader。
  5、引導程序BootLoader開始負責操作系統初始化,然后起動操作系統。啟動操作系統時一般會指定kernel、initrd和root所在的分區和目錄,比如root (hd0,0),kernel (hd0,0)/bzImage root=/dev/ram init=/bin/ash,initrd (hd0,0)/myinitrd4M.img
  6、內核啟動過程包括start_kernel之前和之后,之前全部是做初始化的匯編指令,之后開始C代碼的操作系統初始化,最后執行第一個用戶態進程init。
  一般分兩階段啟動,先是利用initrd的內存文件系統,然后切換到硬盤文件系統繼續啟動。initrd文件的功能主要有兩個:1、提供開機必需的但kernel文件(即vmlinuz)沒有提供的驅動模塊(modules) 2、負責加載硬盤上的根文件系統並執行其中的/sbin/init程序進而將開機過程持續下去

  7、init進程詳解

  Linux內核中的init_task進程和idle進程,道生一(start_kernel....cpu_idle),一生二(kernel_init和kthreadd),二生三(即前面0、1和2三個進程),三生萬物(1號進程是所有用戶態進程的祖先,2號進程是所有內核線程的祖先),新內核的核心代碼已經優化的相當干凈,都符合中國傳統文化精神了。

二、內核的棧

  https://www.cnblogs.com/dormant/p/5456491.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM