色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

學習嵌入式Linux內(nèi)存管理的知識

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:李倩 ? 2018-03-23 13:35 ? 次閱讀

這個內(nèi)存管理的知識點還真的需要我們專門的去理解一下,今天大家一起來學習學習嵌入式Linux內(nèi)存管理的知識。

1.不涉及l(fā)inux內(nèi)核的匯編知識,僅C語言層面解析

1.回答:匯編主要處理的是寄存器地址(包括內(nèi)容)的計算,進行一部分的地址轉(zhuǎn)換工作(當然,它是重要的);C語言處理了極大部分的系統(tǒng)內(nèi)存管理工作。

2.虛擬地址、線性地址、物理地址三者映射關系

回答:

1.虛擬地址:程序員(在縮小范圍估計是:應用程序員)直接看到的

2.線性地址:操作系統(tǒng)控制

3.物理地址:CPU內(nèi)存地址(或者外部內(nèi)存)

3.總結(jié)一點:虛擬地址通過段管理機制首先變換成一種中間地址形式--cpu32位的線性地址,然后使用分頁管理機制將此地址映射到物理地址。

例子解析:

一個變量定義在一個進程里面,在程序中使用&操作符獲取的地址(估計是偏移地址),將怎么映射呢?(或者它是什么地址,在進程中的位置如何)

1. 回答:因為,程序使用的都是虛擬地址,所以程序員拿到的變量地址是虛擬地址(它是經(jīng)過編譯器處理過的,并由系統(tǒng)指映射線性地址,分配物理內(nèi)存的)。

2. 同時,一個變量的地址(虛擬地址)是不會改變的(只要程序代碼不改變,或者不在編譯),但是,改變運行(不同的時間,相隔一段時間在運行的話),物理地址是會改變的。正是因為操作系統(tǒng)的內(nèi)存管理作用(線性地址映射到物理地址,是一個動態(tài)的過程)。

malloc函數(shù)從調(diào)用、分配到返回的過程是?

1. 回答:函數(shù)調(diào)用系統(tǒng)函數(shù),系統(tǒng)函數(shù)進入了內(nèi)核態(tài),引起中斷(或其他,異常處理等工作),操作系統(tǒng)得知需要額外的增長空間以提供使用,所以使用分頁機制來映射到可以使用的物理地址(沒有有用數(shù)據(jù),或不被映射),從而使得虛擬地址有了真實的物理地址映射管理,可以正常使用了。

2. malloc實際上,并不是用戶調(diào)用malloc后馬上對物理地址與虛擬地址之間進行映射,只有在用戶對申請的內(nèi)存空間進行讀寫異常操作才會發(fā)生映射。(具體看《注釋》的13.1.6需求加載機制),總結(jié)一句:在實際需要時才加載執(zhí)行文件中頁面的方式。

頁表和頁目錄表存放位置(所處的系統(tǒng)空間)是?

1. 回答:系統(tǒng)初始化過程中,主動往物理內(nèi)存填寫頁表信息。這就是我們操作系統(tǒng)需要做的事情,填寫和修改表的程序代碼的編寫。

線性地址轉(zhuǎn)物理地址是誰來做呢?

1. 回答:設置好頁表信息后,CPU每次訪問內(nèi)存都通過MMU來查表并轉(zhuǎn)換出物理地址。是硬件自動操作。

所謂的內(nèi)存(物理內(nèi)存,或物理地址,或物理空間)是指?

1. 回答:就是內(nèi)存,RAM(rw),而磁盤(或者是其他的硬盤性質(zhì)的存儲介質(zhì))是作為程序或數(shù)據(jù)存儲的空間,它并不參與到與CPU的指令(數(shù)據(jù))傳輸,而是先將它自己的數(shù)據(jù)放到內(nèi)存(也就是RAM,物理內(nèi)存里面),再由內(nèi)存和CPU之間處理。

只是作為一個例子,讓我們假定您的程序正在訪問地址為 629 的內(nèi)存。不過,虛擬內(nèi)存系統(tǒng)不需要將其存儲在位置為 629 的 RAM 中。實際上,它甚至可以不在 RAM 中 —— 如果物理 RAM 已經(jīng)滿了,它甚至可能已經(jīng)被轉(zhuǎn)移到硬盤上!由于這類地址不必反映內(nèi)存所在的物理位置,所以它們被稱為虛擬內(nèi)存。操作系統(tǒng)維持著一個虛擬地址到物理地址的轉(zhuǎn)換的表,以便計算機硬件可以正確地響應地址請求。嵌入式物聯(lián)網(wǎng)等系統(tǒng)學習請加企鵝意義氣嗚嗚吧久零就易,并且,如果地址在硬盤上而不是在RAM 中,那么操作系統(tǒng)將暫時停止您的進程,將其他內(nèi)存轉(zhuǎn)存到硬盤中,從硬盤上加載被請求的內(nèi)存, 然后再重新啟動您的進程。這樣,每個進程都獲得了自己可以使用的地址空間,可以訪問比您物理上安裝的內(nèi)存更多的內(nèi)存。

一個進程被創(chuàng)建,linux系統(tǒng)肯定是分配給他一個0的虛擬地址?

回答:對的,每個進程空間的0x00虛擬地址開始的線性區(qū)都會被映射到一個用戶態(tài)沒有權限訪問的頁上,通過這樣的映射,內(nèi)核可以保證沒有別的頁會映射到這個區(qū)域。

如同IBM:內(nèi)存管理的內(nèi)幕提及到的,malloc內(nèi)部的系統(tǒng)調(diào)用函數(shù),也就是實現(xiàn)malloc的內(nèi)部算法

1. 在mallo從內(nèi)部使用映射函數(shù)(系統(tǒng)調(diào)用),brk()和mmap():鏈接1

為什么進程創(chuàng)建后,子進程會繼承父進程的一部分信息呢?

1. 回答:子進程實際上的父進程的一個拷貝,共同擁有相同的物理頁面,為了節(jié)約空間,子進程以只讀方式共享父進程的物理頁面(同時父進程也把它自己設置為只讀方式),任意一方進行寫操作,就會出現(xiàn)異常(之后就是內(nèi)核處理異常)??偨Y(jié)一句:這樣可以避免不必要的內(nèi)存頁面復制的開銷。

對CPU的內(nèi)存管理(MMU)和linux系統(tǒng)的內(nèi)存管理兩者的理解:

上面的一段話,其實是告訴我們:在CPU提供MMU的情況下(也就是分段、分頁機制),首先是分段機制做第一步的虛擬地址到線性地址轉(zhuǎn)換,然后由操作系統(tǒng)實現(xiàn)(這就是意味著linux系統(tǒng)會有大量的內(nèi)存管理代碼的實現(xiàn)方法)分頁機制(同時選擇CPU某一引腳來決定是否采用分頁機制),直到進程的虛擬地址映射到可用的物理地址上面。

這意味著,從虛擬地址到物理地址的轉(zhuǎn)換情況如下:

至于虛擬內(nèi)存的哪個頁面映射到物理內(nèi)存的哪個頁幀,這是通過頁表(Page Table)來描述的,頁表保存在物理內(nèi)存中,MMU會查找頁表來確定一個虛擬地址應該映射到什么物理地址??偨Y(jié)一下這個過程:

1. 在操作系統(tǒng)初始化或者分配、釋放內(nèi)存時,會執(zhí)行一些指令在物理內(nèi)存中填寫頁表,然后用指令設置MMU,告訴MMU頁表在物理內(nèi)存中的什么位置。

2. 設置好之后, CPU每次執(zhí)行訪問內(nèi)存的指令都會自動引發(fā)MMU做查表和地址轉(zhuǎn)換的操作,地址轉(zhuǎn)換操作完全由硬件完成,不需要用指令控制MMU去做。

MMU除了提供地址轉(zhuǎn)換機制之外,還提供內(nèi)存保護機制,解析如下:

1. 用戶模式和特權(也就是內(nèi)核)模式的區(qū)分

2. 設置每個內(nèi)存頁面的訪問權限(讀、寫、執(zhí)行)

1. 注意:物理內(nèi)存本身是不限制訪問的,正是MMU的內(nèi)存保護機制的作用

具體的處理過程如下:

這樣設定好之后,當CPU要訪問一個VA時, MMU會檢查CPU當前處于用戶模式還是特權模式,訪問內(nèi)存的目的是讀數(shù)據(jù)、寫數(shù)據(jù)還是取指令,如果和操作系統(tǒng)設定的頁面權限相符,就允許訪問,把它轉(zhuǎn)換成PA,否則不允許訪問,產(chǎn)生一個異常(Exception)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5085

    文章

    19138

    瀏覽量

    305706
  • Linux
    +關注

    關注

    87

    文章

    11312

    瀏覽量

    209702

原文標題:嵌入式Linux內(nèi)存管理的一些知識點總結(jié)

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式系統(tǒng)的知識學習及誤區(qū)

    本內(nèi)容介紹了嵌入式系統(tǒng)的知識學習及誤區(qū),具體包括嵌入式系統(tǒng)的知識體系,嵌入式系統(tǒng)的
    發(fā)表于 11-03 16:32 ?1952次閱讀

    嵌入式Linux應用開發(fā)詳解 光盤

    第2章,主要介紹嵌入式Linux的基本知識和如何配置嵌入式Linux開發(fā)環(huán)境;第二篇為系統(tǒng)篇,包括第3-7章,主要介紹了uClinux操作系
    發(fā)表于 06-02 10:26

    嵌入式Linux學習步驟

    API 了解Linux系統(tǒng)任務管理機制 熟悉進程間通信的幾種方式 熟悉嵌入式Linux中的任務間同步與通信編寫一個簡單的管道程序?qū)崿F(xiàn)文件傳輸 編寫一個使用共享
    發(fā)表于 03-24 10:41

    成為一名嵌入式Linux開發(fā)工程師需要學習哪些知識?

    ,調(diào)試器GDB和 Make 項目管理工具, Shell Makefile腳本編寫等知識,嵌入式開發(fā)環(huán)境的搭建?! ∪?b class='flag-5'>Linux系統(tǒng)編程  重點學習
    發(fā)表于 11-13 10:04

    嵌入式Linux內(nèi)存管理的一些知識點總結(jié)

    這個內(nèi)存管理知識點還真的需要我們專門的去理解一下,今天大家一起來學習學習嵌入式
    發(fā)表于 03-24 09:31

    嵌入式Linux學習步驟

    調(diào)度 管道 信號 共享內(nèi)存 任務管理 API 了解Linux系統(tǒng)任務管理機制 熟悉進程間通信的幾種方式 熟悉嵌入式
    發(fā)表于 07-03 00:56

    嵌入式Linux內(nèi)存管理知識

    這個內(nèi)存管理知識點還真的需要我們專門的去理解一下,今天大家一起來學習學習嵌入式
    發(fā)表于 02-03 06:30

    嵌入式Linux內(nèi)存管理知識

    這個內(nèi)存管理知識點還真的需要我們專門的去理解一下,今天大家一起來學習學習嵌入式
    發(fā)表于 03-04 06:22

    嵌入式Linux中的內(nèi)存管理是什么

    點擊 嵌入式 Linux 中的內(nèi)存管理
    發(fā)表于 11-05 07:01

    如何使用嵌入式內(nèi)存分配管理技術

    嵌入式---內(nèi)存分配管理嵌入式內(nèi)存一般都非常的小,最進在學習LWIP協(xié)議棧的移植,在正點原子的
    發(fā)表于 12-17 06:41

    嵌入式Linux內(nèi)存管理知識匯總

    這個內(nèi)存管理知識點還真的需要我們專門的去理解一下,今天大家一起來學習學習嵌入式
    發(fā)表于 04-09 05:58 ?1030次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>的<b class='flag-5'>知識</b>匯總

    嵌入式linux學習誤區(qū)

      隨著計算機嵌入式的普遍應用,越來越多的人選擇投向嵌入式領域,但嵌入式學習有接一些誤區(qū),接下來尚觀教育小編分析一下同學們的幾種常見的嵌入式
    發(fā)表于 08-30 17:04 ?500次閱讀

    嵌入式Linux學習基本框架

    前言這篇文章簡單我們來一起梳理嵌入式Linux的一些知識,方便于一些想跟我一樣想要由單片機進階到嵌入式Linux的朋友做一些參考
    發(fā)表于 11-01 17:37 ?7次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>學習</b>基本框架

    嵌入式Linux(基礎篇)】從標準Linux嵌入式Linux + 嵌入式Linux知識架構(gòu)

    主要介紹了GNU/Linux的誕生,標準Linux是如何應用在嵌入式系統(tǒng)中的,最后講述了嵌入式Linux
    發(fā)表于 11-02 09:51 ?34次下載
    【<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>(基礎篇)】從標準<b class='flag-5'>Linux</b>到<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> + <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>知識</b>架構(gòu)

    嵌入式 Linux 中的內(nèi)存管理

    點擊 嵌入式 Linux 中的內(nèi)存管理
    發(fā)表于 11-02 10:36 ?12次下載
    <b class='flag-5'>嵌入式</b> <b class='flag-5'>Linux</b> 中的<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>
    主站蜘蛛池模板: 成人免费看片又大又黄| 毛片免费大全| 少妇高潮A片特黄久久精品网| 抽插性奴中出乳精内射| 色99蜜臀AV无码| 国产视频精品在线偷拍| 亚洲性无码AV久久成人| 快播最新电影网站| 超碰97人在线视频| 午夜性伦鲁啊鲁免费视频| 精品无码乱码AV| 99热这里只有精品88| 午夜福到在线4国产| 久久精品中文字幕有码日本| 91久久精品国产亚洲| 色尼玛亚洲| 久久免费视频在线观看6| yellow在线中文| 亚洲人精品午夜射精日韩| 男人把女人桶到爽免费看视频 | 亚洲理论在线a中文字幕| 老子午夜伦不卡电影院| 国产成人小视频在线观看| 与邻居换娶妻子2在线观看| 日韩美女爱爱| 老师的快感电影完整版| 国产99在线视频| 中文字幕不卡一区二区三区| 天天操夜夜噜| 欧美乱妇狂野欧美在线视频| 国产一区二区青青精品久久| 99久久国语露脸精品国产| 亚洲精品白色在线发布| 人人舔人人爱| 毛片免费观看的视频在线| 国产这里有精品| 嘟嘟嘟WWW在线观看视频高清| 中国大陆一级毛片免费| 亚洲91av| 色狠狠色狠狠综合天天| 嫩草伊人久久精品少妇AV网站|