<strike id="xh1ss"><address id="xh1ss"></address></strike>
  1. <legend id="xh1ss"></legend>
  2. 更多課程 選擇中心

    嵌入式培訓
    達內IT學院

    400-111-8989

    嵌入式技術盲點:MMU與多線程解析

    • 發布:嵌入式培訓
    • 來源:嵌入式教程
    • 時間:2018-01-23 15:09

    這些天需要評估一些硬件環境,和機頂盒公司的朋友接觸時,突然發現自己在一個技術上的盲點:MMU(Memory ManageUnit)與多進程。

    大學時,就聽過MMU,但當時只是在助教那絮絮叨叨的講解中得知這東西大概和內存有關。后來嘗試自己寫個類Linux(是想顯示自己多牛B,后來才發現自己多水)。終于在分段和分頁部分又見到MMU。大概理解了它是CPU提供的一種能力,通過它,就可以實現virtualmemory。可以以頁面為單位將數據在硬盤和RAM之間交換。換句話說,它通過分段(X86)和分頁將虛擬地址,線形地址,物理地址對應起來。讓每個應用程序以為自己有很大內存可用。當某個應用程序真正運行時,對應頁才會調入內存。所以,在virtualmemory的情況下,虛擬地址不是被直接送到內存地址總線上,而是送到存儲器管理單元MMU,把虛擬地址映射為物理地址。

    所以直觀的認為,ARM7中很多型號,因為沒有MMU,所以沒有所謂virtualmemory.所以其線性地址與物理地址是一一對應的。所有程序跑在同一地址空間中。

    今天和機頂盒公司的朋友交流中,突然聽到因為他們某些產品不支持MMU,所以無法支持多進程。我一下無法將這兩者對應起來。只好問了問Google老師。才明白過來:

    MMU的功能:

    1、將虛擬地址映射為物理地址

    現代的多用戶多進程操作系統,需要MMU, 才能達到每個用戶進程都擁有自己獨立的地址空間的目標。使用MMU,操作系統劃分出一段地址區域, 在這塊地址區域中, 每個進程看到的內容都不一定一樣。例如MICROSOFTWINDOWS操作系統將地址范圍4M-2G劃分為用戶地址空間,進程A在地址0X400000(4M)映射了可執行文件,進程B同樣在地址0X400000(4M)映射了可執行文件,如果A進程讀地址0X400000,讀到的是A的可執行文件映射到RAM的內容,而進程B讀取地址0X400000時,則讀到的是B的可執行文件映射到RAM的內容。

    這很好理解,因為A,B進程看到的都是虛擬地址,虛擬地址需要對應到線性地址,再映射到物理地址中。(注:線性地址好像是x86分段概念中獨有的)。所以每個進程中看到的某個線性地址,經過MMU轉換,最終這個地址根本不在同一個頁中。所以不相同。

    如果有了硬件MMU,可以為每個進程建立一個獨立空間的頁表項,調度時就可以方便的切換。

    2.提供硬件機制的內存訪問授權:

    這一塊就不是很清楚,記得這是在GDT,LDT中保護的啊。

    CPU與MMU:

    x86系統的CPU,基本全部包括MMU。 (它好像有個特有的分段機制)

    ARM出品的CPU,MMU作為一個協處理器存在。根據不同的系列有不同搭配。需要查詢DATASHEET才可知道是否有MMU。如果有的話,一定是編號為15的協處理器。可以提供32BIT共4G的地址空間。

    ARM7 沒有沒有MMU, 但ARM9 將MMU包到核中去了。

    uclinux,uc/os-II與MMU:

    uclinux中MM部分作了很大修改,uClinux針對noMMU處理器開發,所以被迫使用一種flat方式的內存管理模式,啟動新的應用程序時系統必須為應用程序分配存儲空間,并立即把應用程序加載到內存。缺少了MMU的內存重映射機制,uClinux必須在可執行文件加載階段對可執行文件reloc處理,使得程序執行時能夠直接使用物理內存。

    uc/os-II則根本沒有進程概念,只有Task,在Task開始工作時,已經將物理內存分配給它了。

    回歸主題:

    如果某個CPU不支持MMU,則對應OS(例如:ucLinux)則無法做到將幾個程序所用頁面分別從硬盤到RAM的交換。并且每個程序在啟動時,就需要給它分配足RAM。

    補充:

    現代OS是利用MMU的特性才能達到每個用戶進程都擁有自己獨立的地址空間的目標。沒有MMU,這些OS就無法實現這個基本功能。于是就有了uclinux這樣的針對NoMMU的OS。

    另外,類似UC/OS-II這樣的操作系統。則將OS與Task合為一體,共用同一個地址空間。也無所謂內核空間和用戶空間。所以如果你認為它也可也叫多進程,這也算可以吧。

    當然,公平的說,MMU并不完全是多進程的必備條件,只是幫助OS實現多進程。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:利用超標量混合信號處理器解決嵌入式挑戰
    下一篇:嵌入式開發工程師進階學習路線解析

    裸編程怎么做?裸編程具體做法

    嵌入式編程中你必須知道的小知識

    嵌入式C語言編程小知識總結

    有哪些工具可以讓嵌入式開發事半功倍?

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    黄色一级全祼,欧美一级aa片,一级毛卡片,一级特黄大片,三级片视频 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>