在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

鴻蒙內(nèi)核源碼分析:內(nèi)存管理在管什么?

鴻蒙系統(tǒng)HarmonyOS ? 來源:my.oschina ? 作者:my.oschina ? 2021-04-24 09:38 ? 次閱讀

請想一個問題,內(nèi)核本身也是程序要在內(nèi)存運行,用戶程序一樣也要在內(nèi)存運行,大家都在一個窩里吃飯,你憑什么就管我了.好像內(nèi)核程序是主子,用戶程序是奴才似的.

哎!其實用戶進程就是內(nèi)核的一個個奴才,被捏的死死的.按不住奴才那這主子就不合格,就不是一個穩(wěn)定系統(tǒng).請想想實際內(nèi)存就這么點大,如何滿足眾多用戶進程的需求?內(nèi)核空間和用戶空間如何隔離? 如何防止訪問亂串? 如何分配/釋放,防止碎片化?空間不夠了又如何置換到硬盤?想想頭都大了。內(nèi)核這當家的主子真是不容易,這些都是他要解決的問題, 但欲戴其冠,必承其重.

先說如果沒有內(nèi)存管理會怎樣?

那就是個奴才們能把主子給活活踩死,想想主奴不分,吃喝拉撒睡都在一起,稱兄道弟的想干啥?沒規(guī)矩不成方圓嘛,這事業(yè)肯定搞不大,單片機時代就是這種情況.裸機編程,指針可以隨便亂飛,數(shù)據(jù)可以隨意覆蓋,沒有劃定邊界,沒有明確職責,沒有特權指令,沒有地址保護,你還想像java開發(fā)一樣,只管new內(nèi)存,不去釋放,應用可以隨便崩但系統(tǒng)跑的妥妥的?想的美!直接系統(tǒng)死機,甚至開機都開不了,主板直接報廢了. 所以不能運行很復雜的程序,盡量可控,而且更是不可能支持應用的動態(tài)加載運行.隊伍大了就不好帶了,方法得換,游擊隊的做法不適合規(guī)模作戰(zhàn),內(nèi)存就需要管理了,而且是 5A級的嚴格管理。

內(nèi)存管理在管什么?

簡單說就是給主子賦能,擁有超級權利,為什么就他有? 因為他先來,掌握了先機.它定好了游戲規(guī)則,你們來玩.有哪些游戲規(guī)則?

第一: 主奴有別,主子即是裁判又是運動員,主子有主子地方,奴才們有奴才們待的地方,主子可以在你的空間走來走去,但你只能在主人劃定的區(qū)域活動.奴才把自己玩崩了也只是奴才狗屁了,但主人和其他人還會是好好的.主子有所有特權,比如某個奴才太囂張了,就直接拖到午門問斬。

第二:奴奴有分,奴才們基本都是平等的,雖有高級和低級奴才區(qū)分,但本質都是奴才。奴才之間是不能隨意勾連,登門問客的,防止一塊搞政變. 他們都有屬于自己的活動空間,而且活動空間還巨大巨大,大到奴才們覺得整個紫荊城都是他們家的,給你這么大空間你干活才有動力,奴才們是鉚足了勁一個個盡情的表演各種劇本,有玩電子商務的,有玩游戲的,有搞直播的等等。。。不愧是紫荊城的主人很有一套,明明只有一個紫禁城,硬被他整出了N個紫荊城的感覺。而且這套駕奴本領還取了個很好聽的名字叫:虛擬內(nèi)存。

看圖:

pIYBAGCDd-2APVJ1AALOmCSjDy4104.png

這是整個紫荊城的全貌圖,里面的內(nèi)核虛擬空間是主人專用的,里面放的是主人的資料,數(shù)據(jù),奴才永遠進不去,kernel heap也是給主人專用的動態(tài)內(nèi)存空間,管理奴才和日常運作開銷很多時候需要動態(tài)申請內(nèi)存,這個是專門用來提供給主人使用的。而所有奴才的空間都在叫用戶空間的那一塊。你沒看錯,是所有奴才的都在那。當然實際情況是用戶空間比圖中的大的多,因為主人其實用不了多少空間,大部分是留給奴才們干活用了,因為篇幅的限制筆者把用戶空間壓縮了下。再來看看奴才空間是啥樣的??磮D

o4YBAGCDd_2ARGmUAAKMc9UqTGQ639.png

這張圖是第一張圖的局部用戶空間放大圖。里面放的是奴才的私人用品,數(shù)據(jù),task運行棧區(qū),動態(tài)分配內(nèi)存的堆區(qū),堆區(qū)自下而上,棧區(qū)自上而下中間由映射區(qū)(L1,L2表)隔開。這么多奴才在里面不擠嗎?答案是:真不擠 。主人手眼通天,因為用了一個好幫手解決了這個問題,這個幫手名叫MMU(李大總管)

MMU是干什么事的?

看下某度對MMU定義:它是一種負責處理中央處理器CPU)的內(nèi)存訪問請求的計算機硬件。它的功能包括虛擬地址到物理地址的轉換(即虛擬內(nèi)存管理)、內(nèi)存保護、中央處理器高速緩存的控制。通過它的一番操作,把物理空間成倍成倍的放大,他們之間的映射關系存放在頁面中。

好像看懂又好像沒看懂是吧,到底是干啥的?其實就是個地址映射登記中心。記住這兩個字:映射 看下圖

o4YBAGCDeA-ASRt1AAGgDwa5dNs544.png

物理內(nèi)存可以理解為真實世界的紫禁城,虛擬內(nèi)存就是被MMU虛擬出來的比物理頁面大的多的空間。舉例說明大概說明下過程:

有A(廚師),B(文藝青年)兩個奴才來到紫禁城,每個人都很有抱負,主子規(guī)定要先跑去登記處登記活動范圍,領回來一張表叫L1頁表,上面說了大半個紫禁城你可以跑動,都是你的,L1頁表記錄你每個房間的編號。其實奴才們的表都一樣,能跑的范圍也都一樣。 李大總管也有一張私人表叫TLB表,具體玩的呢,看個例子就明白了.

舉例說明

TLB表(李總管的私人表)

真實房間 當前誰在用
7 A
8 C
9 B

李大總管的私人表叫TLB(translation lookaside buffer)可翻譯為“地址轉換后援緩沖器”,也可簡稱為“快表”。從TLB表可以看出,有三個真實的房間, 7,8,9,目前是分配給了A,B,C使用.

奴才們的L1頁表(當然可以有無數(shù)的奴才表,每個奴才人手一張)

虛擬房間 真實房間 作用
A奴才 1 7 廚房拿菜
A奴才 2 8 洗手間
A奴才 3 9 臥室
虛擬房間 真實房間 作用
B奴才 3 8 音樂室
B奴才 1 9 美術室
B奴才 2 7 武術室
模擬一個他們的活動場景:
奴才 動作1 動作2 動作3 動作4
A 廚房拿菜 臥室睡覺 上洗手間
B 武術室 美術室 音樂室

第一: A要去1號間廚房拿菜,提交表給李總管,李總管拿表和自己的表對照,發(fā)現(xiàn)1號虛擬房間對應的是7號真實房間,7號剛好分配給了A用,蓋章同意.A拿到了自己菜.

真實房間 當前誰在用
7 A
8 C
9 B

此時李總管的表沒變化. 第二: B要去2號間練武術,提交表給李總管,李總管拿表和自己的表對照,發(fā)現(xiàn)1號虛擬房間對應的是7號真實房間,7號是A在用,不屬于B,里面放的都還是菜呢,咋辦?簡單,把菜挪出去,把B奴才的武術設備裝進來,更改自己的表變成了

真實房間 當前誰在用
7 B
8 C
9 B

此時李總管的表變了,三個真實房間B用了兩個了. 第三: A要去3號間睡覺了,又提交表給李總管,李總管拿表和自己的表對照,發(fā)現(xiàn)3號虛擬房間對應的是9號真實房間,9號剛好分配給了B用了,此時里面放的還是美術用品呢.咋辦?簡單,挪出去,把A奴才的睡覺設備裝進來,再更改自己的表變成了

真實房間 當前誰在用
7 B
8 C
9 A

此時李總管的表變了,9號給了A了,而8號一直在C手里,因為過程中沒人用到了8號房.但繼續(xù)跑下去肯定會易主.

明白了嗎? 這就是映射的核心思想!對A,B來說,它們只認 1,2,3房間,記得自己的房間是干什么用的就行,完全不必知道背后的7,8,9是誰在用, 用房間之前提交表單就行了,后面的不用管. 而且各自1,2,3可以重新映射到不一樣的房間, A,B映射是完全獨立的,看清沒有它們的123對應的可不都是789的順序.

上面的1,2,3就叫虛擬地址,也叫線性地址. 而789就是物理地址. 如此只有三個房間都可以給很多很多的奴才使用,讓他們覺得這三個房間都是自己的. 完美!!! 當然AB也可以有自己虛擬地址789,例如

虛擬房間 真實房間 作用
A奴才 1 7 廚房拿菜
A奴才 2 8 洗手間
A奴才 3 9 臥室
A奴才 7 19 洗澡
A奴才 8 88 去皇上寢宮偷看
A奴才 9 45 御膳房

編輯:hfy

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

    評論

    相關推薦

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-移植前準備之git管理內(nèi)核源碼

    我們前邊已經(jīng)介紹過Git工具,是一個非常實用的代碼管理工具。如果驗證編譯出的內(nèi)核能夠正常啟動,就可以將源碼用git工具管理起來。可以清楚的了解源碼
    發(fā)表于 01-23 10:51

    飛凌嵌入式ElfBoard ELF 1板卡-移植前準備之git管理內(nèi)核源碼

    我們前邊已經(jīng)介紹過Git工具,是一個非常實用的代碼管理工具。如果驗證編譯出的內(nèi)核能夠正常啟動,就可以將源碼用git工具管理起來??梢郧宄牧私?b class='flag-5'>源碼
    發(fā)表于 01-22 10:39

    使用DevEco Studio高效解決鴻蒙原生應用內(nèi)存問題

    鴻蒙原生應用開發(fā)過程中,可能由于種種原因導致應用內(nèi)存未被正常地使用或者歸還至操作系統(tǒng),從而引發(fā)內(nèi)存異常占用、內(nèi)存泄漏等問題,最終導致應用卡
    的頭像 發(fā)表于 01-16 14:44 ?184次閱讀

    OpenHarmony源碼編譯后燒錄鏡像教程,RK3566鴻蒙開發(fā)板演示

    本文介紹瑞芯微主板/開發(fā)板編譯OpenHarmony源碼后燒錄鏡像的教程,觸覺智能Purple Pi OH鴻蒙開發(fā)板演示。搭載了瑞芯微RK3566四核處理器,樹莓派卡片電腦設計,支持開源鴻蒙OpenHarmony3.2-5.0系
    的頭像 發(fā)表于 12-30 10:08 ?164次閱讀
    OpenHarmony<b class='flag-5'>源碼</b>編譯后燒錄鏡像教程,RK3566<b class='flag-5'>鴻蒙</b>開發(fā)板演示

    Linux下如何管理虛擬內(nèi)存 使用虛擬內(nèi)存時的常見問題

    Linux系統(tǒng)中,虛擬內(nèi)存管理是操作系統(tǒng)內(nèi)核的一個重要功能,負責管理物理內(nèi)存和磁盤上的交換空間
    的頭像 發(fā)表于 12-04 09:19 ?626次閱讀

    內(nèi)存管理的硬件結構

    常見的內(nèi)存分配函數(shù)有malloc,mmap等,但大家有沒有想過,這些函數(shù)在內(nèi)核中是怎么實現(xiàn)的?換句話說,Linux內(nèi)核內(nèi)存管理是怎么實現(xiàn)的
    的頭像 發(fā)表于 09-04 14:28 ?387次閱讀
    <b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>的硬件結構

    鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)板

    P13_vendor和device目錄介紹 P14_內(nèi)核編譯腳本構建分析 P15_內(nèi)核移植 P16_內(nèi)核移植優(yōu)化 P17_配置電源管理芯片
    發(fā)表于 07-23 10:44

    歡創(chuàng)播報 華為宣布鴻蒙內(nèi)核已超越Linux內(nèi)核

    1 華為宣布鴻蒙內(nèi)核已超越Linux內(nèi)核 ? 6月21日,在華為開發(fā)者大會上, HarmonyOS NEXT(鴻蒙NEXT)——真正獨立于安卓和iOS的
    的頭像 發(fā)表于 06-27 11:30 ?898次閱讀

    ESP-IDF內(nèi)核中的內(nèi)存管理如何驗證?

    請教一下,ESP-IDF 內(nèi)核中的內(nèi)存管理如何驗證
    發(fā)表于 06-19 06:30

    AOSP源碼定制-內(nèi)核驅動編寫

    有時候為了分析一些殼的檢測,需要在內(nèi)核層面對讀寫相關的操作進行監(jiān)控,每次去修改對應的內(nèi)核源碼編譯重刷過于耗時耗力,這里就來嘗試編寫一個內(nèi)核
    的頭像 發(fā)表于 04-23 11:15 ?1392次閱讀
    AOSP<b class='flag-5'>源碼</b>定制-<b class='flag-5'>內(nèi)核</b>驅動編寫

    Linux內(nèi)核內(nèi)存管理內(nèi)核非連續(xù)物理內(nèi)存分配

    的主要優(yōu)點是避免了外部碎片,而缺點是需要修改內(nèi)核頁表。顯然,非連續(xù)內(nèi)存區(qū)域的大小必須是4096的倍數(shù)。Linux使用非連續(xù)物理內(nèi)存區(qū)的場景有幾種:(1)為swap區(qū)分配數(shù)據(jù)結構;(2)為模塊分配空間
    的頭像 發(fā)表于 02-23 09:44 ?1070次閱讀
    Linux<b class='flag-5'>內(nèi)核</b><b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>之<b class='flag-5'>內(nèi)核</b>非連續(xù)物理<b class='flag-5'>內(nèi)存</b>分配

    Linux內(nèi)核內(nèi)存管理之ZONE內(nèi)存分配器

    內(nèi)核中使用ZONE分配器滿足內(nèi)存分配請求。該分配器必須具有足夠的空閑頁幀,以便滿足各種內(nèi)存大小請求。
    的頭像 發(fā)表于 02-21 09:29 ?948次閱讀

    鴻蒙內(nèi)核源碼分析:MMU 協(xié)處理器

    1、 ARM C15 協(xié)處理器 ARM 嵌入式應用系統(tǒng)中, 很多系統(tǒng)控制由 ARM CP15 協(xié)處理器來完成的。CP15 協(xié)處理器包含編號 0-15 的 16 個 32 位的寄存器。例如,ARM
    的頭像 發(fā)表于 02-20 14:28 ?663次閱讀
    <b class='flag-5'>鴻蒙</b>輕<b class='flag-5'>內(nèi)核</b><b class='flag-5'>源碼</b><b class='flag-5'>分析</b>:MMU 協(xié)處理器

    鴻蒙內(nèi)核源碼分析:Newlib C

    使用 Musl C 庫的時候,內(nèi)核提供了基于 LOS_XXX 適配實現(xiàn) pthread、mqeue、fs、semaphore、time 等模塊的 posix 接口(//kernel/liteos_m
    的頭像 發(fā)表于 02-18 15:41 ?788次閱讀
    <b class='flag-5'>鴻蒙</b>輕<b class='flag-5'>內(nèi)核</b><b class='flag-5'>源碼</b><b class='flag-5'>分析</b>:Newlib C

    鴻蒙開發(fā)者預覽版如何?

    24年的華為鴻蒙發(fā)布會中表示。預覽版已經(jīng)向開發(fā)者開放申請,首批支持的機型有三款分別為華為 Mate 60、華為Mate 60 Pro、華為Mate X5。 其HarmonyOS NEXT去除
    發(fā)表于 02-17 21:54
    主站蜘蛛池模板: 四虎最新免费网址 | 国模大尺度人体一区 | 亚洲综合色色图 | 国产亚洲卡二卡3卡4卡乱码 | 午夜片在线 | 高清视频在线播放 | 第四色亚洲色图 | 色色色爱 | 国产精品青草久久久久福利99 | 欲色综合 | 五月激情综合丁香色婷婷 | 久久久久久久久国产 | 欧美xx高清 | 天天插天天射天天操 | 精品国产污污免费网站入口 | 国产成人综合一区人人 | 亚洲成人激情片 | 一级片影院 | 久久精品国产大片免费观看 | 四虎永久免费网站 | 毛片天天看 | 国产免费啪啪 | 精品一区二区国语对白 | 欧美人与z0zoxxxx特 | 午夜 福利 视频 | 人人成人免费公开视频 | 亚洲va久久久噜噜噜久久狠狠 | 三级不卡 | 99青草青草久热精品视频 | 免费一区二区视频 | 日本一区二区在线不卡 | www.夜夜骑| 夜夜操夜夜| 女人张开腿双腿让男人桶 | 美女国产| 99久久香蕉国产综合影院 | h网站免费在线观看 | 久热久操 | 毛片你懂的 | 国产免费午夜 | 亚洲资源在线播放 |