目錄
uclinux和linux的差別是什麼
首頁 運維 linux運維 uclinux和linux的差別是什麼

uclinux和linux的差別是什麼

May 17, 2022 am 11:02 AM
linux

區別:1、uclinux採用記憶體的分頁管理,linux採用虛擬記憶體管理;2、uclinux沒有fork系統調用,使用vfork,而linux使用fork系統調用;3、uclinux不能運行時增加進程棧,linux可以在運行時增加進程棧。

uclinux和linux的差別是什麼

本教學操作環境:linux7.3系統、Dell G3電腦。

uclinux和linux的差別是什麼

在uClinux這個英文單字中u表示Micro,小的意思,C表示Control,控制的意思,

所以uClinux就是Micro-Control-Linux,字面上的理解就是"針對微控制領域而設計的Linux系統"。

ucLinux與linux區別

  • #沒有虛存管理

  • ##不能運行時增加進程棧

  • 不支援分頁

  • 執行程式不是elf,   而是flat

  • 不能用fork,   而是用vfork

  • RAMDISK  

uClinux是針對控制領域的嵌入式linux作業系統,它從Linux 2.0/2.4內核衍生而來,沿襲了主流Linux的絕大部分特性。

適合不具備記憶體管理單元(MMU)的微處理器/微控制器。沒有MMU支援是 uClinux與主流Linux的基本差異。 

對uCLinux 來說,其設計針對沒有MMU的處理器,不能使用處理器的虛擬記憶體管理技術。 uCLinux仍然採用記憶體的分頁管理,系統在啟動時把實際記憶體分頁。在載入應用程式時程式分頁載入。但是由於沒有MMU管理,所以實際上uCLinux採用實記憶體管理策略。

uCLinux系統對於記憶體的存取是直接的,所 有程式中存取的位址都是實際的實體位址。作業系統對記憶體空間沒有保護,各個行程實際上共享一個運行空間。一個行程在執行前,系統必須為行程分配足夠的連續 位址空間,然後全部載入主記憶體的連續空間。

沒有記憶體保護(Memory Protection)的操作會導致這樣的結果:

即使由無特權的程序來呼叫無效指針,也會觸發一個位址錯誤,並潛在地引起程式崩潰,甚至導致系統的掛起。顯然,在這樣的系統上運行的程式碼必須仔細編程,並深入測試以確保健壯性和安全性。

對於普通的Linux來說,需要運行不同的使用者程序,如果沒有記憶體保護將大大降低系統的安全性和可*性;然而對於嵌入式uClinux系統而言,由於所執行的程序往往是在出廠前已經固化的,不存在危害系統安全的程序侵入的隱患,因此只要應用程式經過較完整的測試,出現問題的機率就可以控制在有限的範圍內。

沒有虛擬記憶體(Virtual Memory)主要導致下面幾個後果:

首先,由核心所載入的進程必須能夠獨立運行,與它們在記憶體中的位置無關。實現這一目標的第一種方法是一旦程式被載入到RAM中,那麼程式的基準位址就「固定」下來;另一種辦法是產生只使用相對尋址的程式碼(稱為“位置無關程式碼” ,Position Independent Code,簡稱PIC)。 uClinux對這兩種模式都支援。

其次,要解決在扁平(flat)的記憶體模型中的記憶體分配和釋放問題。非常動態的記憶體分配會造成記憶體碎片,並可能耗盡系統的資源。對於使用了動態記憶體 分配的那些應用程式來說,增強健全性的一種辦法是用預先分配緩衝區池(Preallocated buffer pool)的辦法來取代malloc()呼叫。

由於uclinux中不使用虛擬內存,進出內存的頁面交換也沒有實現,因為不能保證頁面會被加載到RAM中的相同位置。在普通電腦上,作業系統允 許應用程式使用比實體記憶體(RAM)更大的記憶體空間,這往往是透過在硬碟上設立交換分區來實現的。但是,在嵌入式系統中,通常都用FLASH記憶體來代替 硬碟,很難有效率地實現記憶體頁面交換的訪問,因此,對運行的應用程式都限制其可分配空間不大於系統的RAM空間。  

多重任務並沒有受影響。哪些舊式的、廣泛使用fork()的網路後台程式(daemon)的確是需要修改的。由於子行程運行在和父行程同樣的地 址空間內,在某些情況下,也需要修改兩個行程的行為。

許多現代的程式依賴子進程來執行基本任務,使得即時在進程負載很重時,系統仍可以保持一種「可交互」的狀態,這些程序可能需要實質上的修改來在uClinux下完成同樣的任務。如果一個關鍵的應用程式非常依賴這樣的結構,那就不得不對它重新編寫了。

假設有一個簡單的網路後台程式(daemon),大量使用了fork()。這位daemon總監聽一個知名埠(或套接字)等待網路客戶端來連線。當客戶端連接時,這個daemon給它一個新的連接資訊(新的socket編號),並且呼叫fork()。子進程接下來就會和客戶端在新的socket上進 行連接,而父進程被釋放,可以繼續監聽新的連接。

uClinux 既沒有自動生長的堆疊,也沒有brk()函數,這樣,使用者空間的程式必須使用mmap() 指令來分配記憶體。為了方便,在uclinux的C語言庫中所實現的malloc()實質上就是一個mmap()。在編譯時,可以指定程式的堆疊大小。

最後,uClinux目標板處理器缺乏記憶體管理的硬體單元,使得Linux的系統介面需要做些改變。有可能最大的不同就是沒有fork()和 brk()系統呼叫。呼叫fork()將複製出一個行程來建立一個子程序。在Linux下,fork()是使用copy-on-write頁面實現的。由於 沒有MMU, uclinux不能完整、可*地複製一個進程,也沒有對copy-on-write的存取。為了彌補這個缺陷,uClinux實作了vfork(),當父 程序呼叫vfork()來建立子程序時,兩個程序共享它們的全部記憶體空間,包括堆疊。子進程要麼取代父進程執行(此時父進程已經sleep)直到子進程調 用exitI()退出,要麼呼叫exec()執行一個新的進程,這個時候將產生可執行檔的載入。即使這個進程只是父進程的拷貝,這個過程也不能避免。當 子行程執行exit()或exec()後,子行程使用wakeup把父行程喚醒,父行程繼續往下執行。

通用架構的核心變化:

在uCLinux的發布中,/linux/mmnommu目錄取代了/linux/mm目錄.前者是修改後的記憶體管理子系統被修改,移除了MMU的硬體依賴,並在內核軟體本身提供基本的內管理函數.

很多子系統需要重新修改,添加或重寫.內核和用戶內存分配及釋放進程必須重新實現,對透明互動/頁面調度的支援也被去除. 核心中,加入了支援"核心無關程式碼(PIC)"的程式支援模組,並使用了新的二進位目標程式碼格式,稱扁平格式,用來支援PIC(有非常緊湊的頭部).

核心也提供了支援ELF格式的程式載入模組,用來支援使用固定基準位址的可執行程式.兩種模式各有利弊,傳統的PIC運作快,程式碼緊湊,但有程式碼大小限制.例如Motorola 68K架構的16位元相對跳轉限制了PIC程式不能超過32KB大小,而採用運行期固定基準位址的方法上市的程式碼沒有了大小限制,但當陳旭被核心載入後導致了較多的系統開銷.對於核心開發者來說,uCLinux基本上與Linux沒有區別,唯一的區別就是不能利用MMU提供的記憶體管理.實際上這對核心並沒有影響. Linux下所有標準的可執行檔的格式在uCLinux並不被支援,因為這些格式也用到了虛擬記憶體的一些功能.uCLinux使用的是另外一種扁平格式.扁平格式是一種簡潔高效的可執行檔格式,它值包含可執行的程式碼和資料,還有一些把可執行檔載入到記憶體任意位置所需要的可重定位的資訊.  

總結:在應用程式移植到uClinux,以及自己寫程式碼的過程中,我們將永遠圍繞著這幾個特性來做:

1、在configure時, 如果可能需要在configure時,選上—disable-shared和—enable-static.

2、將原始碼中所有出現的fork()改成vfork();

3、在Makefile中的交叉編譯器和編譯選項,連結選項裡加上-Wl,-elf2flt。儘管這只是一個連結選項,但我 還是小心地在LDFLAGS和CFLAGS, 甚至在CC中指定了該選項。    

推薦學習:Linux影片教學

#

以上是uclinux和linux的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vscode需要什麼電腦配置 vscode需要什麼電腦配置 Apr 15, 2025 pm 09:48 PM

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

vscode 無法安裝擴展 vscode 無法安裝擴展 Apr 15, 2025 pm 07:18 PM

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

vscode 可以用於 mac 嗎 vscode 可以用於 mac 嗎 Apr 15, 2025 pm 07:36 PM

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。

VSCode怎麼用 VSCode怎麼用 Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCode) 是一款跨平台、開源且免費的代碼編輯器,由微軟開發。它以輕量、可擴展性和對眾多編程語言的支持而著稱。要安裝 VSCode,請訪問官方網站下載並運行安裝程序。使用 VSCode 時,可以創建新項目、編輯代碼、調試代碼、導航項目、擴展 VSCode 和管理設置。 VSCode 適用於 Windows、macOS 和 Linux,支持多種編程語言,並通過 Marketplace 提供各種擴展。它的優勢包括輕量、可擴展性、廣泛的語言支持、豐富的功能和版

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode終端使用教程 vscode終端使用教程 Apr 15, 2025 pm 10:09 PM

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

See all articles