Android

基於 linux 的作業系統如何處理應用程序?

  • February 10, 2016

我試圖學習如何在沒有作業系統的情況下執行應用程序,但我不斷遇到這條資訊:為了在沒有作業系統的情況下執行程序,該程序必須提供作業系統通常提供的所有程序. 這讓我想到:像 linux(如 Android)這樣的作業系統用來執行應用程序的程序是什麼?

換句話說,我知道應用程序在作業系統內部執行(不了解 :),但我不太了解作業系統提供的功能或它們如何與 Linux 核心互動。

關於如何在沒有作業系統的情況下開發程序的建議很有用,但我主要是在尋找有關作業系統如何管理應用程序的資訊。謝謝您的幫助!

所有程序都是通過記憶體饋送到處理器的一行指令,處理器可以跳轉到記憶體的其他部分,並將部分記憶體作為數據進行操作。這就是最簡單的電腦的工作原理。(查看https://en.wikipedia.org/wiki/Universal_Turing_machine>和<https://en.wikipedia.org/wiki/Von_Neumann_architecture了解更多資訊)

在現代電腦中,您的處理器以兩種不同的模式執行——實模式使用者模式。當電腦啟動時,第一個程序可以獲得實模式,並在其中看到電腦的本來面目——以及它擁有的所有硬體。

該程序是作業系統核心。Unix 核心所做的是然後啟動一個使用者程序(第一個程序,通常在 Unices 上稱為init),它有一種錯覺,就像它擁有電腦本身一樣。

這是一種錯覺,因為核心將設置硬體,以便時不時地,該程序將被強制並且(對它)不可見地從處理器中取出,並且核心將被允許在很短的時間內完成其管理工作. 使用者程序將看到的記憶體也不會是真實記憶體,而是核心映射到真實硬體記憶體的假記憶體(有一些硬體幫助,請參閱https://en.wikipedia.org/wiki/Memory_management_unit了解更多資訊)。

使用者程序無法直接訪問硬體,但 Unix 核心向它提供了一個用於讀寫的分層結構(文件系統),核心將​​其轉換為硬體操作(最簡單的磁碟讀取和磁碟寫入,但不僅如此)。除了訪問文件系統之外,核心還提供了一些其他服務。使用者程序可以通過指定的簡單協議(稱為系統呼叫)聯繫核心來請求所有這些服務。

它可以要求的兩個最基本的服務是分叉一個execing。分叉要求核心為父映像創建另一個程序,並執行從文件系統載入新映像。這樣,初始程序可以啟動一大堆其他使用者程序,然後可以啟動其他程序等等。

就像初始程序一樣,每個使用者子程序都可以像它自己在電腦上一樣執行,但它實際上只會在虛擬記憶體地址空間上執行(核心映射到程序背後的真實地址),並且核心每隔一段時間就會強制將其從處理器中取出,以便其他程序也可以在處理器上執行(這稱為搶占式多任務處理,核心有一個稱為調度程序的部分,它負責確切地如何處理完成)。

本質上,核心在已啟動的使用者程序中**復用電腦的硬體資源(CPU、RAM、Hardrive、GPU ……程序可以進行)和高效(如果一個程序正在等待來自慢速源(磁碟、網路)的數據,核心不會浪費 CPU 時間讓它在 CPU 上執行只是詢問“它在了嗎?”當很長一段時間內,答案在邏輯上是否定的)。所有這些預設的公平性都通過人工輸入的策略進行調整。核心還確保程序可以通過核心提供的各種方式相互通信,並確保它們獲得共享全域狀態的合理視圖。

引用自:https://unix.stackexchange.com/questions/261130