1. 程式人生 > >2018-2019-1 20165232 第九周學習總結

2018-2019-1 20165232 第九周學習總結

第九周學習總結

教材內容總結

第九章 虛擬記憶體

9.1 物理定址和虛擬定址

  • 虛擬記憶體主要是一種地址擴充套件技術,主要是建立和管理兩套地址系統:實體地址和虛擬地址。由虛擬地址空間(硬碟上)裝入程序,其實際執行是在實體地址空間(記憶體上)承載程序的執行。虛擬地址空間比實體地址空間要大的多,作業系統同時承擔著管理者兩套地址空間的轉換。image
    主存的每個地址都是唯一的,第一個位元組地址為0,接下來為2,以此類推。CPU使用這種訪問方式就是物理定址。上圖所示就是CPU通過地址匯流排傳遞讀取主存中4號地址開始處的內容並通過資料匯流排傳送到CPU的暫存器中。
  • 但是地址匯流排也不是無限大的,地址匯流排只能最多訪問到4GB的地址內容。於是有了虛擬定址方式。image

    使用虛擬定址的時候,cpu先是生成一個虛擬地址:4100再經過地址翻譯器,將4100翻譯成實體地址。

9.2地址空間

  • 地址空間是一個非負整數的集合{0,1,2,……},一個32位的系統中有:2^32 = 4 294 967 296B(4GB)個有效地址

9.3虛擬儲存器的工作原理

  • 虛擬儲存器的主要思想就是:在主存中快取硬碟上的虛擬頁(pagefile.sys),虛擬頁有三個狀態:未分配、快取的、未快取的。image
    上圖所示的是一個有8個虛擬頁的小虛擬儲存器(建立在硬碟上),虛擬頁0和3還未分配,因此在磁碟上還不存在。虛擬頁1、4和6被快取在右邊的主存中

  • 地址翻譯MMU如何完成虛擬地址到實體地址的轉換

頁表

  1. 頁表是一個存放在記憶體中的資料結構,MMU就是通過頁表來完成虛擬地址到實體地址的轉換。這個資料結構每一個條目稱為PTE(Page Table Entry),由兩部分組成:有效位和n位地址段。有效位如果是1,那麼n位地址就指向已經在記憶體中快取好了的地址;如果為0,地址為null的話表示為分配image
    虛擬頁vp1,2,7,4當前被快取在記憶體中,頁表上有效位設定成1,分別用PTE1,2,4,7表示。VP0和VP5(PTE0、5)未被分配,VP3和VP6被分配並指向虛擬記憶體,但未被快取。
    頁命中
    image
    使用2100虛擬地址來訪問虛擬頁2的內容的時候,就是一個頁命中。地址翻譯將指向PTE2上,由於有效位1,地址翻譯器MMU就知道VP2已經快取在記憶體中了
    image

9.4 虛擬儲存器的作用

  • 虛擬儲存器有諸多的好處,作業系統其實為每個程序提供了一個獨立的頁表,使用不同的頁表也就建立了獨立的虛擬地址空間
    9.5 虛擬儲存器工作原理詳解:地址翻譯
  • 地址翻譯從形式上來說就是建立一個虛擬地址空間到實體地址空間的對映關係,我們前面說過MMU使用的是頁表來實現這種對映。CPU中有一個專門的頁表基址暫存器(PTBR)指向當前頁表
  • 每個虛擬地址由兩部分組成:虛擬頁號(VPN)+虛擬頁偏移量(VPO),當CPU生成一個虛擬地址並傳遞給MMU開始翻譯的時候,MMU利用虛擬地址的VPN來選擇相應的PTE,同時將頁表中的物理頁號(PPN)+虛擬地址的VPO就生成了相應的實體地址。image
  • 提高翻譯速度的方法
  1. 加入快取記憶體
  • 快取記憶體被髮明出來的一個重要原因就是提高對記憶體的訪問速度:快取記憶體被放在儲存器和MMU之間,可以快取頁表條路。image
  1. 加入翻譯後備緩衝器TLB
  • LB是一個小的、虛擬定址的快取,其中每一行都儲存一個PTE塊,高度相連。主要是提供虛擬地址到實體地址的翻譯速度。image
  1. 加入多級頁表

9.8動態儲存分配

  • 動態儲存器分配指的是在程式執行的時候分配額外的儲存空間,分配器維護著虛擬儲存器中的堆實現這種分配。
  1. 顯式分配:程式呼叫malloc和free函式
    image

上週錯題總結

  1. 下面程式碼對於併發程式來說邏輯上是(D)條指令?
for(i=0;i<1000; i++)

    cnt++;

A .
2

B .
3

C .
4

D .
5

E .
6

F .
1

  1. 有關訊號量(semphore),下面說法正確的是(ABC)

A .
訊號量s是一個非負的全域性變數

B .
訊號量只能通過P,V操作來處理

C .
P,V操作確保訊號量s非負

D .
sem_post()完成P(s)的操作

E .
sem_wait()完成V(s)的操作