進程 對於我們計算機相關專業畢業的人而言,顯得陌生而又熟悉。因爲大學的時候操作系統 這本課程中 最核心的部分就是圍繞進程展開的。“知恩圖報”—— 都已經還給老師啦。
一如IT深似海…啊
1. 進程的概念
操作系統最核心的概念就是進程,其它內容都是圍繞着進程展開的。
進程(Process) 是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位.
AWAN,計算機在早期階段是隻支持單任務的,因爲我是單核的CPU。這意味着:敲代碼的時候就不能聽音樂。所以早起的先驅者就引入了進程的概念。
進程是操作系統提供的最古老,最重要的抽象概念之一。即使CPU只有一個,將一個單獨的CPU變換成多個虛擬的CPU,讓我們感受到(僞)併發的能力。
毫不誇張地講,沒有進程的抽象,現代計算機將不復存在。
值得注意的是,處在現代的我們不能說算盤的發明意義不大。
習慣於在電腦上工作的我們也許不太注意:我們的電腦經常會在同一時間做許多事情。從概念來講,每個進程都擁有自己的虛擬CPU,事實上,真正的CPU其實在各個進程之間來回切換的。
從操作系統的實現上來講,新進程 都是由一個已存在的進程執行了一個用於創建進程的系統調用所創建的。
在UNIX系統中,只有一個系統調用可以用來創建新進程:fork
創建進程之後,父進程和子進程有各自不同的存儲空間。
2. Android系統的進程
我們都知道Android系統底層是基於Linux Kernel的。當Kernal啓動時,會創建init進程,該進程是所有用戶態的鼻祖。
Android系統的啓動最重要的過程也就是各個系統服務的啓動,系統所有的功能都是依賴這些服務來完成的。
PS :此處的服務 是從概念上講的,跟Android四大組件中的Service沒有任何關係。
此圖來源於:Android啓動流程
這些服務分爲2部分:
- 本地服務;
- Android服務;
所有的這些服務都會向ServiceManager進程註冊
1. 本地服務
本地服務指的是:運行在C++層以及Native層的系統進程,一部分本地服務是init進程直接啓動的,如:ServiceManager,rild,MediaServer等,還有一部分是由這些本地服務進一步創建的,如:MediaServer 服務會啓動 MediaPlayerService 及 CameraService等。
2. Android服務
Android進程指的大名鼎鼎的Zygote進程 (PS:Zygote 的英文意思爲:受精卵)
它是Android系統中最重要的進程,後續所有的應用程序包括System系統進程都是zygote進程fork出來的。
我們都知道Delvik虛擬機,那麼它和zygote進程有什麼聯繫呢?
其實它fork出來的進程就可以快速地獲得一個虛擬機實例。
3. 總結
操作系統最核心的概念就是進程;
Android系統的進程有很多,我們這裏特別指出幾個:
- init 進程是第一個進程。
- ServiceManager 管理着整個系統的內部服務。
- MediaService 啓動了MediaPlayerService 和 CameraService;
- Zygote進程是所有Android應用的父進程。
請繼續閱讀 Android 系統探索2 —— Android系統的啓動過程