中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

做網(wǎng)站還 淘寶百度引擎的搜索方式是什么

做網(wǎng)站還 淘寶,百度引擎的搜索方式是什么,做網(wǎng)上購物網(wǎng)站,網(wǎng)站開發(fā)私人培訓虛擬內(nèi)存 單片機的 CPU 是直接操作內(nèi)存的「物理地址」 在這種情況下,要想在內(nèi)存中同時運行兩個程序是不可能的 操作系統(tǒng)是如何解決這個問題呢? 關鍵的問題是這兩個程序都引用了絕對物理地址,而這正是我們最需要避免的。 可以把進程所使用的…
  • 虛擬內(nèi)存

    • 單片機的 CPU 是直接操作內(nèi)存的「物理地址」

    • 在這種情況下,要想在內(nèi)存中同時運行兩個程序是不可能的

    • 操作系統(tǒng)是如何解決這個問題呢?

      • 關鍵的問題是這兩個程序都引用了絕對物理地址,而這正是我們最需要避免的。

      • 可以把進程所使用的地址「隔離」開來,即讓操作系統(tǒng)為每個進程分配獨立的一套「虛擬地址」

      • 人人都有,大家自己玩自己的地址就行,互不干涉

      • 前提每個進程都不能訪問物理地址,至于虛擬地址最終怎么落到物理內(nèi)存里,對進程來說是透明的,操作系統(tǒng)已經(jīng)把這些都安排的明明白白了。

      • 操作系統(tǒng)會提供一種機制,將不同進程的虛擬地址和不同內(nèi)存的物理地址映射起來。

      • 如果程序要訪問虛擬地址的時候,由操作系統(tǒng)轉(zhuǎn)換成不同的物理地址,這樣不同的進程運行的時候,寫入的是不同的物理地址,這樣就不會沖突了

        • 我們程序所使用的內(nèi)存地址叫做虛擬內(nèi)存地址(Virtual Memory Address

        • 實際存在硬件里面的空間地址叫物理內(nèi)存地址(Physical Memory Address)。

      • 進程持有的虛擬地址會通過 CPU 芯片中的內(nèi)存管理單元(MMU)的映射關系,來轉(zhuǎn)換變成物理地址,然后再通過物理地址訪問內(nèi)存

    • 操作系統(tǒng)是如何管理虛擬地址與物理地址之間的關系?

      • 主要有兩種方式,分別是內(nèi)存分段內(nèi)存分頁

  • 內(nèi)存分段

    • 程序是由若干個邏輯分段組成的,如可由代碼分段、數(shù)據(jù)分段、棧段、堆段組成。

    • 不同的段是有不同的屬性的,所以就用分段(Segmentation)的形式把這些段分離出來。

    • 分段機制下,虛擬地址和物理地址是如何映射的?

      • 虛擬地址由兩部分組成,段選擇因子和段內(nèi)偏移量。

        • 段選擇子就保存在段寄存器里面。段選擇子里面最重要的是段號,用作段表的索引。段表里面保存的是這個段的基地址、段的界限和特權等級等。

        • 虛擬地址中的段內(nèi)偏移量應該位于 0 和段界限之間,如果段內(nèi)偏移量是合法的,就將段基地址加上段內(nèi)偏移量得到物理內(nèi)存地址。

      • 知道了虛擬地址是通過段表與物理地址進行映射的,分段機制會把程序的虛擬地址分成 4 個段,每個段在段表中有一個項,在這一項找到段的基地址,再加上偏移量,于是就能找到物理內(nèi)存中的地址

      • 分段的辦法很好,解決了程序本身不需要關心具體的物理內(nèi)存地址的問題,但它也有一些不足之處

        • 第一個就是內(nèi)存碎片的問題。

        • 第二個就是內(nèi)存交換的效率低的問題。

        • 內(nèi)存分段會出現(xiàn)內(nèi)存碎片嗎?

          • 內(nèi)部內(nèi)存碎片外部內(nèi)存碎片

          • 內(nèi)存分段管理可以做到段根據(jù)實際需求分配內(nèi)存,所以有多少需求就分配多大的段,所以不會出現(xiàn)內(nèi)部內(nèi)存碎片。

          • 但是由于每個段的長度不固定,所以多個段未必能恰好使用所有的內(nèi)存空間,會產(chǎn)生了多個不連續(xù)的小物理內(nèi)存,導致新的程序無法被裝載,所以會出現(xiàn)外部內(nèi)存碎片的問題。

          • 解決「外部內(nèi)存碎片」的問題就是內(nèi)存交換。

            • 先寫到硬盤上再重新寫回內(nèi)存,這樣可以把內(nèi)存的位置集中,去掉碎片

        • 分段為什么會導致內(nèi)存交換效率低的問題?

          • 對于多進程的系統(tǒng)來說,用分段的方式,外部內(nèi)存碎片是很容易產(chǎn)生的,產(chǎn)生了外部內(nèi)存碎片,那不得不重新 Swap 內(nèi)存區(qū)域,這個過程會產(chǎn)生性能瓶頸。

          • 因為硬盤的訪問速度要比內(nèi)存慢太多了,每一次內(nèi)存交換,我們都需要把一大段連續(xù)的內(nèi)存數(shù)據(jù)寫到硬盤上。

          • 如果內(nèi)存交換的時候,交換的是一個占內(nèi)存空間很大的程序,這樣整個機器都會顯得卡頓。

  • 內(nèi)存分頁

    • 分段的好處就是能產(chǎn)生連續(xù)的內(nèi)存空間,但是會出現(xiàn)「外部內(nèi)存碎片和內(nèi)存交換的空間太大」的問題。

    • 當需要進行內(nèi)存交換的時候,讓需要交換寫入或者從磁盤裝載的數(shù)據(jù)更少一點,這樣就可以解決問題了。這個辦法,也就是內(nèi)存分頁(Paging)。

    • 分頁是把整個虛擬和物理內(nèi)存空間切成一段段固定尺寸的大小。

    • 這樣一個連續(xù)并且尺寸固定的內(nèi)存空間,我們叫頁(Page)。在 Linux 下,每一頁的大小為 4KB。

    • 頁表是存儲在內(nèi)存里的,內(nèi)存管理單元 (MMU)就做將虛擬內(nèi)存地址轉(zhuǎn)換成物理地址的工作。

    • 當進程訪問的虛擬地址在頁表中查不到時,系統(tǒng)會產(chǎn)生一個缺頁異常,進入系統(tǒng)內(nèi)核空間分配物理內(nèi)存、更新進程頁表,最后再返回用戶空間,恢復進程的運行。

    • 分頁是怎么解決分段的「外部內(nèi)存碎片和內(nèi)存交換效率低」的問題?

      • 采用了分頁,頁與頁之間是緊密排列的,所以不會有外部碎片。

      • 內(nèi)存分頁機制會有內(nèi)部內(nèi)存碎片

      • 如果內(nèi)存空間不夠,操作系統(tǒng)會把其他正在運行的進程中的「最近沒被使用」的內(nèi)存頁面給釋放掉,也就是暫時寫在硬盤上,稱為換出(Swap Out

      • 一旦需要的時候,再加載進來,稱為換入

      • 一次性寫入磁盤的也只有少數(shù)的一個頁或者幾個頁,不會花太多時間,內(nèi)存交換的效率就相對比較高。

      • 只有在程序運行中,需要用到對應虛擬內(nèi)存頁里面的指令和數(shù)據(jù)時,再加載到物理內(nèi)存里面去。

    • 分頁機制下,虛擬地址和物理地址是如何映射的?

      • 在分頁機制下,虛擬地址分為兩部分,頁號和頁內(nèi)偏移。

      • 頁號作為頁表的索引,頁表包含物理頁每頁所在物理內(nèi)存的基地址,這個基地址與頁內(nèi)偏移的組合就形成了物理內(nèi)存地址

      • 對于一個內(nèi)存地址轉(zhuǎn)換,其實就是這樣三個步驟

        • 把虛擬內(nèi)存地址,切分成頁號和偏移量;

        • 根據(jù)頁號,從頁表里面,查詢對應的物理頁號;

        • 直接拿物理頁號,加上前面的偏移量,就得到了物理內(nèi)存地址。

    • 簡單的分頁有什么缺陷嗎?

      • 有空間上的缺陷。

      • 因為操作系統(tǒng)是可以同時運行非常多的進程的,那這不就意味著頁表會非常的龐大。

    • 多級頁表

      • 要解決上面的問題,就需要采用一種叫作多級頁表(Multi-Level Page Table)的解決方案。

      • 對于單頁表的實現(xiàn)方式,在 32 位和頁大小 4KB 的環(huán)境下,一個進程的頁表需要裝下 100 多萬個「頁表項」,并且每個頁表項是占用 4 字節(jié)大小的,于是相當于每個頁表需占用 4MB 大小的空間。

      • 把這個 100 多萬個「頁表項」的單級頁表再分頁,將頁表(一級頁表)分為 1024 個頁表(二級頁表),每個表(二級頁表)中包含 1024 個「頁表項」,形成二級分頁。

        • 分了二級表,映射 4GB 地址空間就需要 4KB(一級頁表)+ 4MB(二級頁表)的內(nèi)存,這樣占用空間不是更大了嗎?

          • 我們應該換個角度來看問題,還記得計算機組成原理里面無處不在的局部性原理么?

          • 如果使用了二級分頁,一級頁表就可以覆蓋整個 4GB 虛擬地址空間,但如果某個一級頁表的頁表項沒有被用到,也就不需要創(chuàng)建這個頁表項對應的二級頁表了,即可以在需要時才創(chuàng)建二級頁表

          • 那么為什么不分級的頁表就做不到這樣節(jié)約內(nèi)存呢?

            • 頁表一定要覆蓋全部虛擬地址空間,不分級的頁表就需要有 100 多萬個頁表項來映射,而二級分頁則只需要 1024 個頁表項(此時一級頁表覆蓋到了全部虛擬地址空間,二級頁表在需要時創(chuàng)建)。

          • 對于 64 位的系統(tǒng),兩級分頁肯定不夠了,就變成了四級目錄,分別是:

            • 全局頁目錄項 PGD(Page Global Directory);

            • 上層頁目錄項 PUD(Page Upper Directory);

            • 中間頁目錄項 PMD(Page Middle Directory);

            • 頁表項 PTE(Page Table Entry);

    • TLB

      • 多級頁表雖然解決了空間上的問題,但是虛擬地址到物理地址的轉(zhuǎn)換就多了幾道轉(zhuǎn)換的工序,這顯然就降低了這倆地址轉(zhuǎn)換的速度,也就是帶來了時間上的開銷。

      • 程序是有局部性的

      • 利用這一特性,把最常訪問的幾個頁表項存儲到訪問速度更快的硬件。在 CPU 芯片中,加入了一個專門存放程序最常訪問的頁表項的 Cache,這個 Cache 就是 TLB(Translation Lookaside Buffer) ,通常稱為頁表緩存、轉(zhuǎn)址旁路緩存、快表等。

        • 在 CPU 芯片里面,封裝了內(nèi)存管理單元(Memory Management Unit)芯片,它用來完成地址轉(zhuǎn)換和 TLB 的訪問與交互。

        • 有了 TLB 后,那么 CPU 在尋址時,會先查 TLB,如果沒找到,才會繼續(xù)查常規(guī)的頁表。

  • 段頁式內(nèi)存管理

    • 內(nèi)存分段和內(nèi)存分頁并不是對立的,它們是可以組合起來在同一個系統(tǒng)中使用的,那么組合起來后,通常稱為段頁式內(nèi)存管理。

    • 段頁式內(nèi)存管理實現(xiàn)的方式:

      • 先將程序劃分為多個有邏輯意義的段,也就是前面提到的分段機制;

      • 接著再把每個段劃分為多個頁,也就是對分段劃分出來的連續(xù)空間,再劃分固定大小的頁

    • 地址結(jié)構就由段號、段內(nèi)頁號和頁內(nèi)位移三部分組成。

    • 用于段頁式地址變換的數(shù)據(jù)結(jié)構是每一個程序一張段表,每個段又建立一張頁表,段表中的地址是頁表的起始地址,而頁表中的地址則為某頁的物理頁號

    • 段頁式地址變換中要得到物理地址須經(jīng)過三次內(nèi)存訪問

      • 第一次訪問段表,得到頁表起始地址;

      • 第二次訪問頁表,得到物理頁號;

      • 第三次將物理頁號與頁內(nèi)位移組合,得到物理地址。

    • 增加了硬件成本和系統(tǒng)開銷,但提高了內(nèi)存的利用率

  • Linux內(nèi)存布局

    • 頁式內(nèi)存管理的作用是在由段式內(nèi)存管理所映射而成的地址上再加上一層地址映射。

    • 邏輯地址和線性地址

      • 程序所使用的地址,通常是沒被段式內(nèi)存管理映射的地址,稱為邏輯地址;

      • 通過段式內(nèi)存管理映射的地址,稱為線性地址,也叫虛擬地址;

      • 邏輯地址是「段式內(nèi)存管理」轉(zhuǎn)換前的地址,線性地址則是「頁式內(nèi)存管理」轉(zhuǎn)換前的地址。

    • Linux 內(nèi)存主要采用的是頁式內(nèi)存管理,但同時也不可避免地涉及了段機制。

    • Linux 內(nèi)核所采取的辦法是使段式映射的過程實際上不起什么作用

    • Linux 系統(tǒng)中的每個段都是從 0 地址開始的整個 4GB 虛擬空間(32 位環(huán)境下),也就是所有的段的起始地址都是一樣的。這意味著,Linux 系統(tǒng)中的代碼,包括操作系統(tǒng)本身的代碼和應用程序代碼,所面對的地址空間都是線性地址空間(虛擬地址),這種做法相當于屏蔽了處理器中的邏輯地址概念,段只被用于訪問控制和內(nèi)存保護。

    • Linux 的虛擬地址空間是如何分布的?

      • 虛擬地址空間的內(nèi)部又被分為內(nèi)核空間和用戶空間兩部分

        • 32 位系統(tǒng)的內(nèi)核空間占用 1G,位于最高處,剩下的 3G 是用戶空間;

        • 64 位系統(tǒng)的內(nèi)核空間和用戶空間都是 128T,分別占據(jù)整個內(nèi)存空間的最高和最低處,剩下的中間部分是未定義的。

      • 內(nèi)核空間與用戶空間的區(qū)別

        • 進程在用戶態(tài)時,只能訪問用戶空間內(nèi)存;

        • 只有進入內(nèi)核態(tài)后,才可以訪問內(nèi)核空間的內(nèi)存;

      • 每個虛擬內(nèi)存中的內(nèi)核地址,其實關聯(lián)的都是相同的物理內(nèi)存這樣,進程切換到內(nèi)核態(tài)后,就可以很方便地訪問內(nèi)核空間內(nèi)存。

      • 用戶空間分布

        • 代碼段,包括二進制可執(zhí)行代碼;

        • 數(shù)據(jù)段,包括已初始化的靜態(tài)常量和全局變量;

        • BSS 段,包括未初始化的靜態(tài)變量和全局變量;

        • 堆段,包括動態(tài)分配的內(nèi)存,從低地址開始向上增長;

        • 文件映射段,包括動態(tài)庫、共享內(nèi)存等,從低地址開始向上增長;

        • 棧段,包括局部變量和函數(shù)調(diào)用的上下文等。棧的大小是固定的,一般是 8 MB。當然系統(tǒng)也提供了參數(shù),以便我們自定義大小;

http://m.risenshineclean.com/news/63614.html

相關文章:

  • 瀏陽做網(wǎng)站的公司價格我贏seo
  • 做自媒體有哪些素材網(wǎng)站廣州品牌營銷服務
  • 怎樣在網(wǎng)站上做營業(yè)執(zhí)照公示滕州今日頭條新聞
  • 網(wǎng)站設計標準尺寸電商平臺開發(fā)需要多少錢
  • 濰坊網(wǎng)站建設價格深圳百度推廣客服
  • wordpress后臺管理面板的主題搜索引擎優(yōu)化論文
  • java 做直播網(wǎng)站有哪些軟件有哪些最新app推廣項目平臺
  • 廈門市網(wǎng)站建設寧波專業(yè)seo服務
  • wordpress頁面添加圖片優(yōu)化排名案例
  • 石家莊做網(wǎng)站多少錢百度注冊頁面
  • 深圳做棋牌網(wǎng)站建設哪家公司收費合理網(wǎng)絡營銷外包
  • 廣州網(wǎng)絡推廣有限公司滎陽seo推廣
  • 自己怎么做網(wǎng)站賣車bt種子bt天堂
  • 電子政務網(wǎng)站建設公司排行榜引擎搜索網(wǎng)站
  • 物理結(jié)構網(wǎng)站怎么看app的下載網(wǎng)址
  • 網(wǎng)站建設新聞資訊無錫seo網(wǎng)站排名
  • 電腦視頻制作軟件seo在線優(yōu)化
  • qq開放平臺網(wǎng)站開發(fā)申請不通過的原因制作網(wǎng)站推廣
  • 什么網(wǎng)站可以做美食寧波網(wǎng)絡營銷推廣咨詢報價
  • 深圳網(wǎng)站營銷推廣公司電話網(wǎng)絡推廣怎么找客戶資源
  • 保康縣城鄉(xiāng)建設路網(wǎng)站怎么有自己的網(wǎng)站
  • 網(wǎng)站建設的客戶在哪里山西seo關鍵詞優(yōu)化軟件搜索
  • 深圳網(wǎng)站建設(信科網(wǎng)絡)大數(shù)據(jù)營銷軟件
  • jizhicmsseo排名是什么意思
  • 在常熟市公司網(wǎng)站建設哪家好蘇州seo安嚴博客
  • 長沙網(wǎng)頁設計工資一般多少企業(yè)seo如何優(yōu)化
  • 請人做網(wǎng)站得多少錢雅詩蘭黛網(wǎng)絡營銷策劃書
  • 網(wǎng)站開發(fā)者取色工具ai智能搜索引擎
  • 地圖網(wǎng)站怎么做的廣告投放平臺
  • 洛陽做網(wǎng)站的百度上海分公司