iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 2
1
自我挑戰組

Android API超初學!!系列 第 2

[Android API] [Day 2] Linux Kernel

  • 分享至 

  • xImage
  •  

HI 大家好,又是我HANA,今天要來讀Linux Kernel,但因為我的主題是Android API,所以不細讀,先大概了解一下即可。

Wiki的第一句話就是

(Linux Kernel)是一種開源的類Unix作業系統單核心

這裡提到一個名詞單核心,所指的不是CPU的單核多核(CPU core),而是作業系統中的單核心(monolithic kernel)。與之相對的為微核心(Microkernel),當然也有綜合以上兩種的混合核心(Hybrid kernel)

我不是研究OS的專家,所以我以最白話的方式來理解,可能會有不精確的部分,就請大家自行研究囉!

單核心提供的所有服務都在同一位址空間(kernel space),優點是執行速度快,但牽一髮動全身,只要有某個服務壞掉,就整個系統都掛了。

微核心為了改善這個缺點,就把大部分的服務提出來到另一些各自獨立的位址空間,這樣就算某一個服務掛掉,整個系統和其他的服務也不會掛掉。但因為大家的位址空間都分開了,勢必會多出各個空間彼此溝通的effort,使效率變差。

混合核心的話,架構概念等同微核心,但實作類似單核心。這麼神奇的事情到底怎麼做,而且效能如何,我就不繼續研究下去了。

不負責提問:Android是單核心,iOS是混合核心,那到底誰的效能快呢?
/images/emoticon/emoticon34.gif

Linux kernel是單核心,也有服務模組化的概念(只不過各個服務的位址空間還是同一大塊),所以可以根據不同使用需求加上或刪除特定服務。就算都是Android手機,不同廠牌或不同型號,也可以有不同的客製化Linux kernel。

既然如此,該如何客製化自己的超高效率kernel呢?這研究下去會沒完沒了,跳過!

另外還有一個重點,就是kernel space和user space。Kernel space就是剛才說,所有的服務都擠在同一塊位址空間的這個空間。user space就是使用者等級的程式碼執行的空間了,這裡說的使用者等級程式碼,是指不需要調用系統資源的程式碼,例如簡單的數學運算在user space完成即可,但如果要寫檔讀檔,就必須在kernel space完成。

但因為user space的存取權限較低,而kernel space的存取權限較高,所以user space需要透過OS提供的system call來存取kernel space中的資料。

不到10分鐘的kernel教學影片

User space/Kernel space影片


上一篇
[Android API] [Day 1] 好多東西都想知道喔
下一篇
[Android API] [Day 3] Dalvik VM (1) - Java bytecode
系列文
Android API超初學!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言