Vm-Smalltables Vietnamese Translated

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 18

20

Phân trang: Bảng nhỏ hơn

Bây giờ chúng ta giải quyết vấn đề thứ hai mà quá trình phân trang gây
ra: bảng trang quá lớn và do đó tiêu tốn quá nhiều bộ nhớ. Hãy bắt đầu
với một bảng trang tuyến tính. Như bạn có thể nhớ lại1, các bảng trang
tuyến tính trở nên đẹp hơn
to lớn. Giả sử lại không gian địa chỉ 32 bit byte), với 4KB (212 byte)
(232
trang và một mục nhập bảng trang 4 byte. Do đó, không gian địa chỉ có khoảng
chừng
32
một triệu trang ảo trong đó (2 2Nhân
12 với kích thước mục nhập bảng trang và
bạn sẽ thấy bảng trang của chúng ta có kích thước 4MB. Hãy nhớ rằng: thông
thường chúng ta có một bảng trang cho mỗi quy trình trong hệ thống! Với hàng
trăm quy trình hoạt động (không phải là điều hiếm trên một hệ thống hiện đại),
chúng ta sẽ phải cấp phát hàng trăm megabyte bộ nhớ chỉ cho bảng trang! Kết
quả là, chúng ta đang tìm kiếm một số kỹ thuật để giảm gánh nặng nặng này. Có
rất nhiều kỹ thuật, vì vậy hãy bắt đầu. Nhưng trước tiên, hãy xem điểm quan
trọng của chúng ta:

CRUX: LÀM THẾ NÀO ĐỂ LÀM CHO BẢNG TRANG NHỎ HƠN?
Bảng trang dựa trên mảng đơn giản (thường được gọi là bảng trang
tuyến tính) quá lớn, chiếm quá nhiều bộ nhớ trên các hệ thống thông
thường. Làm thế nào chúng ta có thể làm cho bảng trang nhỏ hơn?
Những ý tưởng chính là gì? Những không hiệu quả phát sinh như một
kết quả của các cấu trúc dữ liệu mới này là gì?

20.1 Giải pháp đơn giản: Trang lớn hơn.


Chúng ta có thể giảm kích thước bảng trang trong một cách đơn
giản: sử dụng trang lớn hơn. Lấy không gian địa chỉ 32 bit của chúng ta
một lần nữa, nhưng lần này giả sử có trang 16KB. Do đó, chúng ta sẽ có
một VPN 18 bit cộng với một offset 14 bit. 18
suming cùng kích thước cho mỗi PTE (4 byte), chúng ta hiện có 2 mục nhập
bảng trang trang tuyến của chúng tôi và do đó có tổng kích thước là 1MB cho mỗi
bảng trang, một yếu tố.
1Hoặc có thể là không; việc phân trang này đang trở nên quá mức kiểm soát, phải không? Tuy nhiên, luôn đảm bảo bạn hiểu rõ vấn đề mà bạn đang giải
quyết trước khi chuyển sang giải pháp; thực sự, nếu bạn hiểu vấn đề, bạn thường có thể suy ra giải pháp một cách tự nhiên. Ở đây, vấn đề nên rõ ràng: bảng
trang tuyến tính đơn giản (dựa trên mảng) quá lớn.

1
2 PAGING: SMALLER TABLES

NGOÀI LỀ: NHIỀU KÍCH THƯỚC TRANG


Lưu ý rằng nhiều kiến trúc (ví dụ: MIPS, SPARC, x86-64) hiện đã hỗ trợ
nhiều kích thước trang. Thông thường, kích thước trang nhỏ (4KB hoặc
8KB) được sử dụng. Tuy nhiên, nếu một ứng dụng "thông minh" yêu
cầu, một trang lớn duy nhất (ví dụ: kích thước 4MB) có thể được sử
dụng cho một phần cụ thể của không gian địa chỉ, cho phép các ứng
dụng như vậy đặt một cấu trúc dữ liệu thường xuyên sử dụng (và lớn)
trong một không gian như vậy trong khi chỉ sử dụng một mục TLB duy
nhất. Việc sử dụng trang lớn như vậy là phổ biến trong các hệ thống
quản lý cơ sở dữ liệu và các ứng dụng thương mại cao cấp khác. Tuy
nhiên, lý do chính để sử dụng nhiều kích thước trang không phải là để
tiết kiệm không gian bảng trang, mà là để giảm áp lực lên TLB, cho
phép một chương trình truy cập nhiều hơn vào không gian địa chỉ của
nó mà không gặp quá nhiều lỗi TLB. Tuy nhiên, như các nhà nghiên
cứu đã chỉ ra [N+02], việc sử dụng nhiều kích thước trang làm cho bộ
quản lý bộ nhớ ảo của hệ điều hành phức tạp hơn đáng kể, và do đó,
trang lớn đôi khi được sử dụng dễ dàng nhất bằng cách xuất một giao
diện mới cho các ứng dụng để yêu cầu trang lớn trực tiếp.

giảm bốn lần kích thước bảng trang (không ngạc nhiên, sự giảm này
chính xác phản ánh sự tăng gấp bốn lần kích thước trang).
Vấn đề chính của phương pháp này, tuy nhiên, là các trang lớn dẫn
đến lãng phí bên trong mỗi trang, một vấn đề được biết đến là sự phân
mảnh nội bộ (vì lãng phí nằm bên trong đơn vị phân bổ). Do đó, các
ứng dụng cuối cùng sẽ phân bổ các trang nhưng chỉ sử dụng một ít
mảnh nhỏ của mỗi trang, và bộ nhớ nhanh chóng đầy với những trang
quá lớn này. Do đó, hầu hết các hệ thống sử dụng kích thước trang
tương đối nhỏ trong trường hợp thông thường: 4KB (như trong x86)
hoặc 8KB (như trong SPARCv9). Vấn đề của chúng ta sẽ không được
giải quyết đơn giản như vậy, tiếc thay.

20.2 Phương pháp kết hợp: Trang và Đoạn


Khi bạn có hai phương pháp hợp lý nhưng khác nhau trong cuộc
sống, bạn luôn nên xem xét sự kết hợp của cả hai để xem liệu bạn có thể
đạt được tốt nhất từ cả hai thế giới. Chúng ta gọi sự kết hợp như vậy là
một phương pháp lai. Ví dụ, tại sao chỉ ăn sô cô la hoặc bơ đậu phộng
đơn thuần khi bạn có thể kết hợp cả hai trong một chiếc bánh Reese's
Peanut Butter Cup ngon lành [M28]?
Nhiều năm trước, những người sáng tạo của Multics (đặc biệt là Jack
Dennis) đã tình cờ tìm ra một ý tưởng như vậy trong việc xây dựng hệ
thống bộ nhớ ảo của Multics [M07]. Cụ thể, Dennis đã có ý tưởng kết
hợp trang và đoạn nhằm giảm thiểu chi phí bộ nhớ của bảng trang.
Chúng ta có thể thấy tại sao điều này có thể hoạt động bằng cách xem
xét một bảng trang tuyến tính điển hình chi tiết hơn. Giả sử chúng ta có
một không gian địa chỉ trong đó các phần đã sử dụng của heap và stack
là nhỏ. Ví dụ, chúng ta sử dụng một không gian địa chỉ nhỏ chỉ có 16KB
với các trang 1KB (Hình 20.1); bảng trang cho không gian địa chỉ này
được thể hiện trong Hình 20.2.
OPERATING
SYSTEMS WWW.OSTEP.ORG
[VERSION 1.10]
PHÂN TRANG: BẢNG NHỎ 3
HƠN SMALLER TABLES

Không gian Địa chỉ ẢoBộ nhớ Vật lý


mã 0 0
1 1
2 2
3 3
heap 4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14
stack 14
15 15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Hình 20.1: Một Không gian Địa chỉ Ảo 16KB với Trang 1KB

PFN hợp lệ bảo vệ hiện tại bẩn


10 1 r-x 1 0
- 0 — - -
- 0 — - -
- 0 — - -
23 1 rw- 1 1
- 0 — - -
- 0 — - -
- 0 — - -
- 0 — - -
- 0 — - -
- 0 — - -
- 0 — - -
- 0 — - -
- 0 — - -
28 1 rw- 1 1
4 1 rw- 1 1
Hình 20.2: Bảng Trang Cho Không Gian Địa Chỉ 16KB.
Ví dụ này giả định trang mã duy nhất (VPN 0) được ánh xạ vào
trang vật lý số 10, trang heap duy nhất (VPN 4) được ánh xạ vào trang
vật lý số 23, và hai trang stack ở cuối không gian địa chỉ (VPNs 14 và...

©
© 2008–23, ARPACI- 2008–
DUSSEAU 2008–23, ARPACI- 23,
ARPA
4 PAGING: SMALLER TABLES

15) được ánh xạ vào các trang vật lý 28 và 4, tương ứng. Như bạn có thể
thấy từ hình ảnh, hầu hết bảng trang không được sử dụng, đầy các mục
không hợp lệ. Thật lãng phí! Và điều này chỉ đối với một không gian địa
chỉ nhỏ 16KB. Hãy tưởng tượng bảng trang của một không gian địa chỉ
32-bit và tất cả không gian lãng phí tiềm năng trong đó! Thực ra, đừng
tưởng tượng một điều như vậy; nó quá ghê rợn.
Do đó, phương pháp lai của chúng tôi: thay vì có một bảng trang
duy nhất cho toàn bộ không gian địa chỉ của quá trình, tại sao không có
một bảng trang cho mỗi đoạn logic? Trong ví dụ này, chúng ta có thể có
ba bảng trang, một cho mã, heap và stack của không gian địa chỉ.
Bây giờ, hãy nhớ rằng với phân đoạn, chúng ta có một thanh ghi cơ
sở cho biết nơi mỗi phân đoạn sống trong bộ nhớ vật lý, và một thanh
ghi giới hạn cho biết kích thước của phân đoạn đó. Trong hệ thống lai
của chúng ta, chúng ta vẫn có những cấu trúc đó trong MMU; ở đây,
chúng ta sử dụng thanh ghi cơ sở không để trỏ đến phân đoạn chính mà
để giữ địa chỉ vật lý của bảng trang của phân đoạn đó. Thanh ghi giới
hạn được sử dụng để chỉ ra cuối của bảng trang (tức là số trang hợp lệ
mà nó có).
Hãy làm một ví dụ đơn giản để làm rõ. Giả sử có một không gian địa
chỉ ảo 32 bit với các trang 4KB và một không gian địa chỉ được chia
thành bốn đoạn. Chúng ta chỉ sử dụng ba đoạn cho ví dụ này: một đoạn
cho mã, một đoạn cho heap và một đoạn cho stack.
Để xác định địa chỉ tham chiếu đến đoạn nào, chúng ta sẽ sử dụng
hai bit đầu của không gian địa chỉ. Hãy giả sử 00 là đoạn không sử
dụng, 01 là đoạn mã, 10 là đoạn heap và 11 là đoạn stack. Do đó, một
địa chỉ ảo có dạng như sau:
33222222222211111111110000000000
10987654321098765432109876543210
Seg VPN Offset

Trong phần cứng, giả sử rằng có ba cặp cơ sở/giới hạn, mỗi cặp cho
mã, heap và stack. Khi một quá trình đang chạy, thanh ghi cơ sở cho
mỗi đoạn này chứa địa chỉ vật lý của một bảng trang tuyến tính cho
đoạn đó; do đó, mỗi quá trình trong hệ thống hiện có ba bảng trang liên
quan. Trong quá trình chuyển ngữ cảnh, các thanh ghi này phải được
thay đổi để phản ánh vị trí của các bảng trang của quá trình mới đang
chạy.
Khi xảy ra TLB miss (giả sử có TLB được quản lý bởi phần cứng, tức
là phần cứng chịu trách nhiệm xử lý TLB miss), phần cứng sử dụng các
bit đoạn (SN) để xác định cặp base và bounds nào được sử dụng. Sau
đó, phần cứng lấy địa chỉ vật lý trong đó và kết hợp với VPN như sau
để tạo thành địa chỉ của mục bảng trang (PTE).
SN = (Địa chỉ ảo & SEG_MASK) >> SN_SHIFT VPN = (Địa chỉ ảo
& VPN_MASK) >> VPN_SHIFT Địa chỉ của PTE = Base[SN] + (VPN
*sizeof(PTE))
Chuỗi này sẽ trông quen thuộc; nó hoàn toàn giống như những gì
chúng ta đã thấy trước đây với bảng trang tuyến tính. Sự khác biệt duy
nhất, tất nhiên, là việc sử dụng một trong ba thanh ghi cơ sở đoạn thay
vì chỉ sử dụng một thanh ghi cơ sở bảng trang duy nhất.

OPERATING
SYSTEMS WWW.OSTEP.ORG
[VERSION 1.10]
PHÂN TRANG: BẢNG NHỎ 5
HƠN SMALLER TABLES

MẸO: SỬ DỤNG LOẠI LAI


Khi bạn có hai ý tưởng tốt và có vẻ đối lập, bạn luôn nên xem xét xem
có thể kết hợp chúng thành một loại lai để đạt được tốt nhất từ cả hai
thế giới. Loại cây ngô lai, ví dụ, được biết đến là mạnh mẽ hơn bất kỳ
loài tự nhiên nào. Tất nhiên, không phải tất cả các loại lai đều là ý tưởng
tốt; hãy xem Zeedonk (hoặc Zonkey), một con lai giữa ngựa vằn và lừa.
Nếu bạn không tin rằng một sinh vật như vậy tồn tại, hãy tìm hiểu và
chuẩn bị bị kinh ngạc.

Sự khác biệt quan trọng trong phương pháp lai của chúng tôi là sự
hiện diện của một thanh ghi giới hạn cho mỗi đoạn; mỗi thanh ghi giới
hạn chứa giá trị của trang hợp lệ tối đa trong đoạn. Ví dụ, nếu đoạn mã
đang sử dụng ba trang đầu tiên của nó (0, 1 và 2), bảng trang đoạn mã chỉ
có ba mục được cấp phát cho nó và thanh ghi giới hạn sẽ được đặt thành
3; việc truy cập bộ nhớ vượt quá cuối đoạn sẽ tạo ra một ngoại lệ và có thể
dẫn đến kết thúc quá trình. Theo cách này, phương pháp lai của chúng tôi
tiết kiệm bộ nhớ đáng kể so với bảng trang tuyến tính; các trang chưa
được cấp phát giữa ngăn xếp và vùng nhớ không cần thiết không còn
chiếm không gian trong bảng trang (chỉ để đánh dấu chúng là không hợp
lệ).
Tuy nhiên, như bạn có thể nhận thấy, phương pháp này không phải
là không có vấn đề. Đầu tiên, nó vẫn yêu cầu chúng ta sử dụng phân
đoạn; như chúng ta đã thảo luận trước đây, phân đoạn không linh hoạt
như chúng ta muốn, vì nó giả định một mẫu sử dụng cụ thể của không
gian địa chỉ; nếu chúng ta có một vùng nhớ heap lớn nhưng rải rác, ví
dụ, chúng ta vẫn có thể gặp phải nhiều lãng phí bảng trang. Thứ hai,
phương pháp lai này gây ra sự phân mảnh bên ngoài trở lại. Trong khi
hầu hết bộ nhớ được quản lý theo đơn vị kích thước trang, bảng trang
giờ đây có thể có kích thước tùy ý (theo bội số của PTE). Do đó, việc tìm
không gian trống cho chúng trong bộ nhớ phức tạp hơn. Vì những lý do
này, mọi người tiếp tục tìm cách cải thiện cách triển khai bảng trang
nhỏ hơn.

20.3 Bảng Trang Đa Cấp


Một phương pháp khác không dựa vào phân đoạn nhưng giải quyết
cùng vấn đề: làm thế nào để loại bỏ tất cả các vùng không hợp lệ trong
bảng trang thay vì giữ chúng trong bộ nhớ? Chúng ta gọi phương pháp
này là bảng trang đa cấp, vì nó biến bảng trang tuyến tính thành một cái
gì đó giống như một cây. Phương pháp này rất hiệu quả đến mức nhiều
hệ thống hiện đại sử dụng nó (ví dụ, x86 [BOH10]). Bây giờ chúng tôi mô
tả phương pháp này chi tiết.
Ý tưởng cơ bản đằng sau bảng trang đa cấp rất đơn giản. Đầu tiên,
chia nhỏ bảng trang thành các đơn vị có kích thước bằng kích thước
trang; sau đó, nếu một trang hoàn chỉnh của các mục bảng trang (PTE)
không hợp lệ, không cấp phát trang đó của bảng trang. Để theo dõi xem
một trang của bảng trang có hợp lệ (và nếu hợp lệ, nó ở đâu trong bộ
nhớ), sử dụng một cấu trúc mới, gọi là thư mục trang. Do đó, thư mục
trang có thể được sử dụng để cho bạn biết trang của bảng trang ở đâu,
©
© 2008–23, ARPACI- 2008–
DUSSEAU 2008–23, ARPACI- 23,
ARPA
6 PAGING: SMALLER TABLES
hoặc rằng toàn bộ trang của bảng trang không chứa trang hợp lệ nào.

OPERATING
SYSTEMS WWW.OSTEP.ORG
[VERSION 1.10]
PHÂN TRANG: BẢNG NHỎ 7
HƠN SMALLER TABLES

Bảng Trang Tuyến Tính Bảng Trang Đa Cấp

PTBR 201 PDBR 200


valid

valid

valid
prot

prot
PFN PFN PFN
1 rx 12 1 201 1 rx 12

PFN 200

PFN 201
PFN 204 PFN 203 PFN 202 PFN 201
1 rx 13 0 - 1 rx 13
0 - - 0 - 0 - -
1 rw 100 1 204 1 rw 100
0 - -
0 - - Bảng Thư Mục
- Trang [Trang 1 của PT: Chưa Được
0 -
- Cấp Phát]
0 -
0 - -
0 - -
0 - - [Trang 2 của PT: Chưa Được
0 - - Cấp Phát]
0 - - 0 - -

PFN 204
0 - - 0 - -
1 rw 86 1 rw 86
1 rw 15 1 rw 15

Hình 20.3: Bảng trang tuyến tính (Trái) và đa cấp (Phải)


Hình 20.3 cho thấy một ví dụ. Ở bên trái của hình là bảng trang
tuyến tính cổ điển; mặc dù hầu hết các vùng giữa không gian địa chỉ
không hợp lệ, chúng ta vẫn cần phải cấp phát không gian bảng trang
cho những vùng đó (tức là hai trang giữa của bảng trang). Ở bên phải là
một bảng trang đa cấp. Bảng chỉ mục chỉ đánh dấu hai trang của bảng
trang là hợp lệ (trang đầu tiên và cuối cùng); do đó, chỉ có hai trang đó
của bảng trang tồn tại trong bộ nhớ. Và do đó, bạn có thể thấy một cách
để hình dung những gì một bảng đa cấp đang làm: nó chỉ làm cho một
phần của bảng trang tuyến tính biến mất (giải phóng những khung đó
cho các mục đích khác), và theo dõi những trang của bảng trang được
cấp phát với bảng chỉ mục.
Bảng thư mục trang, trong một bảng hai cấp đơn giản, chứa một mục
cho mỗi trang của bảng trang. Nó bao gồm một số mục bảng thư mục
trang (PDE). Một PDE (tối thiểu) có một bit hợp lệ và một số khung
trang (PFN), tương tự như một PTE. Tuy nhiên, như đã gợi ý ở trên, ý
nghĩa của bit hợp lệ này hơi khác: nếu PDE hợp lệ, điều đó có nghĩa là ít
nhất một trong các trang của bảng trang mà mục này trỏ tới (qua PFN)
là hợp lệ, tức là ít nhất một PTE trên trang đó mà PDE này trỏ tới, bit
hợp lệ trong PTE đó được đặt thành một. Nếu PDE không hợp lệ (tức
bằng không), phần còn lại của PDE không được xác định.
Bảng trang đa cấp có một số lợi thế rõ ràng so với các phương pháp
chúng ta đã thấy cho đến nay. Đầu tiên, và có lẽ rõ ràng nhất, bảng trang
đa cấp chỉ phân bổ không gian bảng trang tỷ lệ với lượng không gian địa
chỉ bạn đang sử dụng; do đó nó thường gọn nhẹ và hỗ trợ không gian địa
chỉ thưa thớt.
Thứ hai, nếu được xây dựng cẩn thận, mỗi phần của bảng trang trí
vừa vặn trong một trang, làm cho việc quản lý bộ nhớ dễ dàng hơn; hệ
điều hành chỉ cần lấy trang trống tiếp theo khi cần phân bổ hoặc mở
rộng một trang.

©
© 2008–23, ARPACI- 2008–
DUSSEAU 2008–23, ARPACI- 23,
ARPA
8 PAGING: SMALLER TABLES

TIP: HIỂU VỀ SỰ ĐÁNH ĐỔI THỜI GIAN-KHÔNG GIAN.


Khi xây dựng một cấu trúc dữ liệu, người ta luôn nên xem xét sự đánh
đổi thời gian-không gian trong quá trình xây dựng. Thông thường, nếu
bạn muốn làm cho việc truy cập vào một cấu trúc dữ liệu cụ thể nhanh
hơn, bạn sẽ phải trả một khoản phạt về sử dụng không gian cho cấu
trúc đó.
Bảng. So sánh điều này với một bảng trang tuyến tính đơn giản (không
phân trang), đó chỉ là một mảng các PTE được chỉ mục bởi VPN; với
cấu trúc như vậy, toàn bộ bảng trang tuyến tính phải nằm liền kề trong
bộ nhớ vật lý. Đối với một bảng trang lớn (ví dụ 4MB), việc tìm một
mảnh không gian vật lý liền kề trống đủ lớn như vậy có thể là một
thách thức khá lớn. Với cấu trúc đa cấp, chúng ta thêm một cấp độ gián
tiếp thông qua việc sử dụng bảng chỉ mục, nó trỏ đến các phần của
bảng trang; sự gián tiếp đó cho phép chúng ta đặt các trang bảng trang
ở bất kỳ vị trí nào trong bộ nhớ vật lý mà chúng ta muốn.
Cần lưu ý rằng việc sử dụng bảng đa cấp có một chi phí; khi xảy ra
TLB miss, cần hai lần tải từ bộ nhớ để lấy thông tin dịch đúng từ bảng
trang (một lần cho bảng thư mục trang và một lần cho PTE chính), khác
với chỉ cần một lần tải với bảng trang tuyến tính. Do đó, bảng đa cấp là
một ví dụ nhỏ về sự đánh đổi thời gian-không gian. Chúng ta muốn có
bảng nhỏ hơn (và đã có), nhưng không phải miễn phí; mặc dù trong
trường hợp thông thường (TLB hit), hiệu suất rõ ràng là giống nhau,
nhưng TLB miss lại gánh chịu một chi phí cao hơn với bảng nhỏ này.
Một điểm tiêu cực rõ ràng khác là sự phức tạp. Cho dù đó là phần
cứng hay hệ điều hành xử lý việc tra cứu bảng trang (khi có TLB miss),
việc này không thể phủ nhận là phức tạp hơn so với việc tra cứu bảng
trang tuyến tính đơn giản. Thường chúng ta sẵn lòng tăng độ phức tạp
để cải thiện hiệu suất hoặc giảm chi phí; trong trường hợp của bảng đa
cấp, chúng ta làm cho việc tra cứu bảng trang trở nên phức tạp hơn để
tiết kiệm bộ nhớ quý giá.

Một ví dụ chi tiết đa cấp.


Để hiểu ý tưởng đằng sau bảng trang đa cấp tốt hơn, hãy làm một ví dụ.
Hãy tưởng tượng một không gian địa chỉ nhỏ có kích thước 16KB, với
các trang có kích thước 64 byte. Do đó, chúng ta có một không gian địa
chỉ ảo 14 bit, với 8 bit cho VPN và. 8
6 bit cho phần dịch chuyển. Một bảng trang tuyến tính sẽ có 2 (256) mục, ngay cả.
nếu chỉ một phần nhỏ không gian địa chỉ được sử dụng. Hình 20.4
(trang 8) trình bày một ví dụ về không gian địa chỉ như vậy.
Trong ví dụ này, các trang ảo 0 và 1 dành cho mã, các trang ảo 4 và 5
dành cho heap, và các trang ảo 254 và 255 dành cho ngăn xếp; các trang
còn lại của không gian địa chỉ không được sử dụng.
Để xây dựng bảng trang hai cấp cho không gian địa chỉ này, chúng
tôi bắt đầu với bảng trang tuyến tính đầy đủ và chia nó thành các đơn
vị có kích thước trang. Hãy nhớ lại bảng đầy đủ của chúng ta (trong ví
dụ này) có 256 mục; giả sử mỗi PTE là 4 byte
2Ở đây, chúng tôi đang đưa ra một số giả định, tức là tất cả các bảng trang đều nằm trong bộ nhớ vật lý (tức là chúng không được hoán đổi sang đĩa);
chúng tôi sẽ sớm nới lỏng giả định này.
OPERATING
SYSTEMS WWW.OSTEP.ORG
[VERSION 1.10]
PHÂN TRANG: BẢNG NHỎ 9
HƠN SMALLER TABLES

Không có gì mã số
0000 0001 mã số
0000 0010 (miễn phí)
0000 0011 (miễn phí)
0000 0100 đống
đống
0000 0101
(miễn phí)
Không có gì
(miễn phí)
0000 0111

Không có gì cả. ... tất cả miễn phí ...

Một một một một một một một không không.


Một một một một một một một không một.
Một một một một một một một không.
1111 1111

©
© 2008–23, ARPACI- 2008–
DUSSEAU 2008–23, ARPACI- 23,
ARPA
10 PAGING: SMALLER TABLES
(miễn phí)
(miễn phí)
ngăn xếp
ngăn xếp

Hình 20.4: Một không gian địa chỉ 16KB với trang 64 byte.

Do đó, bảng trang của chúng ta có kích thước 1KB (256 × 4 byte). Với
trang có kích thước 64 byte, bảng trang 1KB có thể chia thành 16 trang
64 byte; mỗi trang có thể chứa 16 PTEs.
Cái mà chúng ta cần hiểu bây giờ là cách sử dụng một VPN để truy
cập trước vào thư mục trang và sau đó vào trang của bảng trang. Hãy
nhớ rằng mỗi cái đều là một mảng các mục; do đó, tất cả những gì
chúng ta cần làm là tìm cách xây dựng chỉ mục cho mỗi cái từ các phần
của VPN.
Hãy trước tiên chỉ mục vào thư mục trang. Bảng trang của chúng ta
trong ví dụ này nhỏ: 256 mục nhập, phân bố trên 16 trang. Thư mục
trang cần một mục nhập cho mỗi trang của bảng trang; do đó, nó có 16
mục nhập. Kết quả là, chúng ta cần bốn bit của VPN để chỉ mục vào thư
mục; chúng ta sử dụng bốn bit đầu của VPN như sau:
VPN khoảng cách

13 12 11 10 9 8 7 6 5 4 3 2 1 0

Trang chỉ mục thư mục


Một khi chúng ta trích xuất chỉ mục thư mục trang (PDIndex) từ VPN,
chúng ta có thể sử dụng nó để tìm địa chỉ của mục thư mục trang (PDE)
với một phép tính đơn giản: PDEAddr = PageDirBase + (PDIndex.
* Kích thước của PDE)). Điều này dẫn đến bảng chỉ mục
trang của chúng ta, chúng ta hiện tại xem xét để tiến xa
hơn trong quá trình dịch.
Nếu mục nhập của bảng trang được đánh dấu là không hợp lệ,
chúng ta biết rằng quyền truy cập là không hợp lệ và do đó ném ra một
ngoại lệ. Tuy nhiên, nếu PDE hợp lệ, chúng ta cần làm việc nhiều hơn.
Cụ thể, chúng ta phải lấy mục nhập bảng trang (PTE) từ trang của bảng
trang được chỉ định bởi mục nhập bảng trang này. Để tìm PTE này,
chúng ta phải chỉ mục vào phần còn lại của bảng trang bằng cách sử
dụng các bit còn lại của VPN:

OPERATING
SYSTEMS WWW.OSTEP.ORG
[VERSION 1.10]
PHÂN TRANG: BẢNG NHỎ 11
HƠN SMALLER TABLES
VPN bù lại

13 12 11 10 9 8 7 6 5 4 3 2 1 0

Trang chỉ mục thư mục Trang chỉ mục bảng

Trang chỉ mục bảng trang (PTIndex cho ngắn gọn) sau đó có thể
được sử dụng để chỉ mục vào bảng trang chính nó, cho chúng ta địa chỉ
của PTE của chúng ta.
PTEAddr = (PDE.PFN << SHIFT) + (PTIndex* kích thước của PTE
Lưu ý rằng số khung trang nhận được từ mục thư mục trang phải
được dịch trái vào vị trí trước khi kết hợp với chỉ mục bảng trang để tạo
thành địa chỉ của PTE.
Để xem xem tất cả điều này có hợp lý không, chúng ta sẽ điền vào
một bảng trang đa cấp với một số giá trị thực tế và dịch một địa chỉ ảo
duy nhất. Hãy bắt đầu với bảng trang cho ví dụ này (phía trái của Hình
20.5).
Trong hình vẽ, bạn có thể thấy rằng mỗi mục lục thư mục trang
(PDE) mô tả một số thông tin về một trang của bảng trang cho không
gian địa chỉ. Trong ví dụ này, chúng ta có hai vùng hợp lệ trong không
gian địa chỉ (ở đầu và cuối), và một số ánh xạ không hợp lệ ở giữa.
Trong trang vật lý số 100 (số khung vật lý của trang 0 của bảng
trang), chúng ta có trang đầu tiên của 16 mục bảng trang cho 16 VPN
đầu tiên trong không gian địa chỉ. Xem Hình 20.5 (phần giữa) để biết
nội dung của phần này của bảng trang.
Trang này của bảng trang chứa các ánh xạ cho 16 VPN đầu tiên;
trong ví dụ của chúng ta, VPN 0 và 1 là hợp lệ (đoạn mã), như.

Trang SáchTrang của PT (@PFN:100)Trang của PT (@PFN:101)


PFN hợp lệ PFN hợp lệ bảo vệ PFN hợp lệ bảo vệ
100 1 10 1 r-x — 0 —
— 0 23 1 r-x — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — — 0 —
— 0 80 1 rw- — 0 —
— 0 59 1 rw- — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — — 0 —
— 0 — 0 — 55 1 rw-
101 1 — 0 — 45 1 rw-

Figure 20.5: Một Thư Mục Trang Và Các Mảnh Của Bảng Trang

©
© 2008–23, ARPACI- 2008–
DUSSEAU 2008–23, ARPACI- 23,
ARPA
12 PAGING: SMALLER TABLES

MẸO: HÃY CẨN TRỌNG VỚI SỰ PHỨC TẠP


Nhà thiết kế hệ thống nên cẩn trọng khi thêm sự phức tạp vào hệ thống
của họ. Những gì một nhà xây dựng hệ thống tốt làm là triển khai hệ
thống ít phức tạp nhất để đạt được nhiệm vụ hiện tại. Ví dụ, nếu không
gian đĩa rất dồi dào, bạn không nên thiết kế một hệ thống tệp tin mà
làm việc chăm chỉ để sử dụng ít byte nhất có thể; tương tự, nếu bộ xử lý
nhanh, việc viết một mô-đun trong hệ điều hành sạch sẽ và dễ hiểu hơn
là viết mã được tối ưu hóa CPU nhất, được lắp ráp bằng tay cho nhiệm
vụ hiện tại. Hãy cẩn trọng với sự phức tạp không cần thiết, trong mã
được tối ưu hóa sớm hoặc các hình thức khác; những phương pháp như
vậy làm cho hệ thống khó hiểu, khó bảo trì và khó gỡ lỗi. Như Antoine
de Saint-Exupery đã viết: "Sự hoàn hảo cuối cùng được đạt được không
phải khi không còn gì để thêm vào, mà khi không còn gì để lấy đi."
Nhưng ông không viết: "Nó dễ dàng hơn nhiều để nói về sự hoàn hảo
hơn là thực sự đạt được nó."

là 4 và 5 (đống). Do đó, bảng có thông tin ánh xạ cho từng trang đó. Các
mục còn lại được đánh dấu không hợp lệ.
Trang hợp lệ khác của bảng trang được tìm thấy bên trong PFN 101.
Trang này chứa ánh xạ cho 16 VPN cuối cùng của không gian địa chỉ;
xem Hình 20.5 (phải) để biết chi tiết.
Trong ví dụ, VPN 254 và 255 (ngăn xếp) có ánh xạ hợp lệ. Hy vọng
rằng những gì chúng ta có thể thấy từ ví dụ này là có thể tiết kiệm được
bao nhiêu không gian với cấu trúc được lập chỉ mục nhiều cấp. Trong ví
dụ này, thay vì phân bổ đầy đủ 16 trang cho một bảng trang tuyến tính,
chúng tôi chỉ phân bổ ba trang: một cho thư mục trang và hai cho các
đoạn của bảng trang có ánh xạ hợp lệ. Mức tiết kiệm cho không gian địa
chỉ lớn (32 bit hoặc 64 bit) rõ ràng có thể lớn hơn nhiều.
Cuối cùng, hãy sử dụng thông tin này để thực hiện một bản dịch.
Đây là một địa chỉ liên quan đến byte thứ 0 của VPN 254: 0x3F80, hoặc.
11 1111 1000 0000 trong hệ nhị phân.
Hãy nhớ rằng chúng ta sẽ sử dụng 4 bit đầu của VPN để chỉ mục vào
bảng trang. Do đó, 1111 sẽ chọn mục cuối cùng (mục thứ 15, nếu bạn
bắt đầu từ mục thứ 0) của bảng trang phía trên. Điều này đưa chúng ta
đến một trang hợp lệ của bảng trang nằm tại địa chỉ 101. Sau đó, chúng
ta sử dụng 4 bit tiếp theo của VPN (1110) để chỉ mục vào trang đó của
bảng trang và tìm PTE mong muốn. 1110 là mục gần cuối cùng (mục
thứ 14) trên trang, và cho chúng ta biết rằng trang 254 của không gian
địa chỉ ảo của chúng ta được ánh xạ tại trang vật lý 55. Bằng cách ghép
nối PFN=55 (hoặc hex 0x37) với offset=000000, chúng ta có thể tạo thành
địa chỉ vật lý mong muốn và gửi yêu cầu đến hệ thống bộ nhớ:
PhysAddr = (PTE.PFN << SHIFT) + offset.
= 00 1101 1100 0000 = 0x0DC0.
Bạn nên hiểu cách xây dựng một bảng trang hai cấp, sử dụng một
thư mục trang để trỏ đến các trang của bảng trang. Rất tiếc, công việc
của chúng ta vẫn chưa hoàn thành. Như chúng ta sẽ thảo luận sau đây,
đôi khi hai cấp bảng trang không đủ!

OPERATING
SYSTEMS WWW.OSTEP.ORG
[VERSION 1.10]
PHÂN TRANG: BẢNG NHỎ 13
HƠN SMALLER TABLES

Hơn Hai Cấp Độ


Trong ví dụ của chúng ta cho đến nay, chúng ta đã giả định rằng bảng
trang đa cấp chỉ có hai cấp: một thư mục trang và sau đó là các phần
của bảng trang. Trong một số trường hợp, một cây sâu hơn là có thể (và
thực sự cần thiết).
Hãy lấy một ví dụ đơn giản và sử dụng nó để chỉ ra tại sao một bảng
đa cấp sâu hơn có thể hữu ích. Trong ví dụ này, giả sử chúng ta có một
không gian địa chỉ ảo 30 bit và một trang nhỏ (512 byte). Do đó, địa chỉ
ảo của chúng ta có một thành phần số trang ảo 21 bit và một thành phần
lệch 9 bit.
Nhớ mục tiêu của chúng ta trong việc xây dựng một bảng trang đa
cấp: để làm cho mỗi phần của bảng trang vừa với một trang duy nhất.
Cho đến nay, chúng ta chỉ xem xét bảng trang chính; tuy nhiên, nếu
bảng trang con trở nên quá lớn thì sao?
Để xác định số cấp độ cần thiết trong một bảng đa cấp để tất cả các
phần tử của bảng trang vừa với một trang, chúng ta bắt đầu bằng cách
xác định số lượng mục bảng trang vừa trong một trang. Với kích thước
trang là 512 byte và giả sử kích thước PTE là 4 byte, bạn sẽ thấy rằng
bạn có thể vừa 128 PTE trên một trang duy nhất. Khi chúng ta truy cập
vào một trang của bảng trang. chúng ta có thể kết luận rằng chúng ta sẽ
cần 7 bit ít quan trọng nhấtnhật ký2128) củaVPN như một chỉ số
VPN lùi

29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Chỉ số thư mục trang chỉ số trang

Điều bạn cũng có thể nhận thấy từ sơ đồ trên là có bao nhiêu bit 14
còn lại vào (lớn) thư mục trang: 14. Nếu thư mục trang của chúng ta có 2
mục (và PDE 4 byte), nó không chỉ trải dài trên một trang mà là 128, và
mục tiêu của chúng ta là làm cho mỗi phần của bảng trang đa cấp vừa
với một trang biến mất.
Để khắc phục vấn đề này, chúng ta xây dựng một cấp độ cây nữa,
bằng cách chia thư mục trang thành nhiều trang, sau đó thêm một thư
mục trang khác lên trên đó, để trỏ đến các trang của thư mục trang. Do
đó, chúng ta có thể chia địa chỉ ảo của chúng ta như sau:
VPN offset

29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Chỉ số PD 0 Chỉ số PD 1 Chỉ số bảng trang

Bây giờ, khi chỉ mục thư mục trang cấp cao, chúng ta sử dụng các bit
trên cùng của địa chỉ ảo (Chỉ số PD 0 trong sơ đồ); chỉ số này có thể
được sử dụng để lấy mục thư mục trang từ thư mục trang cấp cao. Nếu
hợp lệ, mức thứ hai của thư mục trang được tham khảo bằng cách kết
hợp số khung vật lý từ PDE cấp cao và
©
© 2008–23, ARPACI- 2008–
DUSSEAU 2008–23, ARPACI- 23,
ARPA
14 PAGING: SMALLER TABLES

1 VPN = (Địa chỉ ảo & VPN_MASK) >> SHIFT


2 (Thành công, Mục TLB) = TLB_Lookup(VPN)
3 if (Thành công == Đúng)// TLB Hit
4 if (CanAccess(TlbEntry.ProtectBits) == Đúng)
5 Offset= Địa chỉ ảo & OFFSET_MASK
6 PhysAddr = (TlbEntry.PFN << SHIFT) | Offset
7 Register = AccessMemory(PhysAddr)
8 else
9 RaiseException(PROTECTION_FAULT)
10 else// TLB Miss
11 // trước tiên, lấy mục thư mục trang
12 PDIndex = (VPN & PD_MASK) >> PD_SHIFT
13 PDEAddr = PDBR + (PDIndex * sizeof(PDE))
14 PDE= AccessMemory(PDEAddr)
15 if (PDE.Valid == Sai)
16 RaiseException(SEGMENTATION_FAULT)
17 else
18 // PDE hợp lệ: bây giờ lấy PTE từ bảng trang
19 PTIndex = (VPN & PT_MASK) >> PT_SHIFT
20 PTEAddr = (PDE.PFN<<SHIFT) + (PTIndex*sizeof(PTE))
21 PTE= AccessMemory(PTEAddr)
22 if (PTE.Valid == False)
23 RaiseException(SEGMENTATION_FAULT)
24 else if (CanAccess(PTE.ProtectBits) == False)
25 RaiseException(PROTECTION_FAULT)
26 else
27 TLB_Insert(VPN, PTE.PFN, PTE.ProtectBits)
28 RetryInstruction()
Hình 20.6: Quy trình điều khiển Bảng trang đa cấp
phần tiếp theo của VPN (PD Index 1). Cuối cùng, nếu hợp lệ, địa chỉ
PTE có thể được hình thành bằng cách sử dụng chỉ số bảng trang kết
hợp với địa chỉ từ PDE cấp hai. Uff! Đó là một công việc rất nhiều. Và
tất cả chỉ để tìm kiếm một cái gì đó trong một bảng trang đa cấp.

Quá trình dịch: Nhớ TLB


Để tóm tắt quá trình dịch địa chỉ sử dụng bảng trang đa cấp hai cấp,
chúng tôi một lần nữa trình bày quy trình điều khiển dưới dạng thuật
toán (Hình 20.6). Hình minh họa những gì xảy ra trong phần cứng (giả
sử có TLB được quản lý bởi phần cứng) sau mỗi tham chiếu bộ nhớ.
Như bạn có thể thấy từ hình, trước khi bất kỳ quá trình truy cập
bảng trang đa cấp phức tạp nào xảy ra, phần cứng sẽ kiểm tra TLB; khi
trúng, địa chỉ vật lý được hình thành trực tiếp mà không cần truy cập
vào bảng trang, giống như trước đây. Chỉ khi có TLB miss, phần cứng
mới cần thực hiện việc tìm kiếm đa cấp đầy đủ. Trên con đường này,
bạn có thể thấy chi phí của bảng trang hai cấp truyền thống của chúng
tôi: hai lần truy cập bộ nhớ bổ sung để tìm kiếm một bản dịch hợp lệ.

OPERATING
SYSTEMS WWW.OSTEP.ORG
[VERSION 1.10]
PHÂN TRANG: BẢNG NHỎ 15
HƠN SMALLER TABLES

20.4 Bảng trang nghịch đảo


Một tiết kiệm không gian cực kỳ cực đại trong thế giới của bảng
trang được tìm thấy với bảng trang nghịch đảo. Ở đây, thay vì có nhiều
bảng trang (một cho mỗi quy trình của hệ thống), chúng tôi giữ một
bảng trang duy nhất có một mục cho mỗi trang vật lý của hệ thống.
Mục cho chúng ta biết quy trình nào đang sử dụng trang này và trang
ảo nào của quy trình đó ánh xạ vào trang vật lý này.
Tìm mục đúng bây giờ chỉ là việc tìm kiếm qua cấu trúc dữ liệu này.
Việc quét tuyến tính sẽ tốn kém, do đó thường xây dựng một bảng băm
trên cấu trúc cơ bản để tăng tốc việc tìm kiếm. PowerPC là một ví dụ về
kiến trúc như vậy [JM98].
Nói chung hơn, bảng trang nghịch đảo minh họa những gì chúng tôi
đã nói từ đầu: bảng trang chỉ là cấu trúc dữ liệu. Bạn có thể làm nhiều
điều điên rồ với cấu trúc dữ liệu, làm cho chúng nhỏ hơn hoặc lớn hơn,
làm cho chúng chậm hơn hoặc nhanh hơn. Bảng trang đa cấp và bảng
trang nghịch đảo chỉ là hai ví dụ trong số rất nhiều điều mà bạn có thể
làm.

20.5 Đưa bảng trang vào đĩa


Cuối cùng, chúng tôi thảo luận về việc nới lỏng một giả định cuối
cùng. Cho đến nay, chúng tôi đã giả định rằng bảng trang nằm trong bộ
nhớ vật lý do hạt nhân sở hữu. Ngay cả khi chúng tôi có nhiều mẹo để
giảm kích thước của bảng trang, tuy nhiên, vẫn có khả năng chúng có
thể quá lớn để vừa với bộ nhớ một lần. Do đó, một số hệ thống đặt bảng
trang như vậy vào bộ nhớ ảo của hạt nhân, cho phép hệ thống đẩy một
số bảng trang này vào đĩa khi áp lực bộ nhớ trở nên hơi chật chội.
Chúng tôi sẽ nói thêm về điều này trong một chương tương lai (cụ thể
là nghiên cứu trường hợp về VAX/VMS), sau khi chúng tôi hiểu rõ hơn
về cách di chuyển các trang vào và ra khỏi bộ nhớ.

20.6 Tóm tắt


Chúng tôi đã thấy cách xây dựng bảng trang thực sự; không nhất
thiết chỉ là các mảng tuyến tính mà là các cấu trúc dữ liệu phức tạp hơn.
Những sự đánh đổi mà các bảng như vậy đưa ra nằm trong thời gian và
không gian - bảng càng lớn, việc xử lý TLB miss càng nhanh, cũng như
ngược lại - và do đó, sự lựa chọn đúng của cấu trúc phụ thuộc mạnh mẽ
vào ràng buộc của môi trường cụ thể.
Trong một hệ thống có hạn chế bộ nhớ (như nhiều hệ thống cũ), các cấu
trúc nhỏ có ý nghĩa; trong một hệ thống có một lượng bộ nhớ hợp lý và với
khối lượng công việc sử dụng một số lượng lớn trang một cách tích cực,
một bảng lớn hơn có thể là sự lựa chọn đúng. Với TLB được quản lý bởi
phần mềm, toàn bộ không gian của các cấu trúc dữ liệu mở ra cho niềm
vui của nhà phát triển hệ điều hành (gợi ý: đó là bạn). Cấu trúc mới nào
bạn có thể nghĩ ra? Vấn đề nào chúng giải quyết? Hãy nghĩ về những câu
hỏi này khi bạn đi vào giấc ngủ và mơ những giấc mơ lớn mà chỉ nhà phát
triển hệ điều hành mới có thể mơ thấy.

©
© 2008–23, ARPACI- 2008–
DUSSEAU 2008–23, ARPACI- 23,
ARPA
16 PAGING: SMALLER TABLES

Tài liệu tham khảo


[BOH10] "Computer Systems: A Programmer's Perspective" của Randal E. Bryant và David
R. O'Hallaron. Addison-Wesley, 2010. Chúng tôi vẫn chưa tìm thấy một tài liệu tham khảo
đầu tiên tốt cho bảng trang đa cấp. Tuy nhiên, cuốn sách tuyệt vời này của Bryant và
O'Hallaron đi sâu vào chi tiết của x86, một hệ thống sớm sử dụng các cấu trúc như vậy. Đây
cũng chỉ là một cuốn sách tuyệt vời để có.
[JM98] "Virtual Memory: Issues of Implementation" của Bruce Jacob, Trevor Mudge. IEEE
Computer, tháng 6 năm 1998. Một cuộc khảo sát xuất sắc về một số hệ thống khác nhau và
cách tiếp cận của chúng đối với việc ảo hóa bộ nhớ. Có đủ chi tiết về x86, PowerPC, MIPS và
các kiến trúc khác.
[LL82] "Quản lý Bộ nhớ Ảo trong Hệ điều hành VAX/VMS" bởi Hank Levy, P. Lipman. IEEE
Computer, Tập 15, Số 3, Tháng 3 năm 1982. Một bài báo tuyệt vời về một bộ quản lý bộ nhớ
ảo thực tế trong một hệ điều hành cổ điển, VMS. Thật tuyệt vời đến mức chúng ta sẽ sử
dụng nó để xem xét lại tất cả những gì chúng ta đã học về bộ nhớ ảo cho đến nay vài chương
sau đây.
[M28] "Reese's Peanut Butter Cups" bởi Mars Candy Corporation. Xuất bản tại các cửa hàng
gần bạn. Có vẻ như những món quà tuyệt vời này được phát minh vào năm 1928 bởi Harry
Burnett Reese, một người nông dân chăn nuôi và người quản lý giao nhận cho Milton S.
Hershey. Ít nhất, đó là những gì nó nói trên Wikipedia. Nếu đúng, Hershey và Reese có lẽ
ghét nhau như bất kỳ hai ông trùm thanh sô cô la nào khác.
[N+02] "Hỗ trợ Hệ điều hành Trong suốt và Thực tế cho Trang siêu" bởi Juan Navarro,
Sitaram Iyer, Peter Druschel, Alan Cox. OSDI '02, Boston, Massachusetts, Tháng 10 năm
2002. Một bài báo hay cho thấy tất cả những chi tiết bạn phải làm đúng để tích hợp các trang
lớn, hoặc trang siêu, vào một hệ điều hành hiện đại. Không dễ dàng như bạn nghĩ, tiếc là.
[M07] "Multics: Lịch sử" Có sẵn tại:
http://www.multicians.org/history.html.Trang web tuyệt vời này cung cấp một
lượng lớn thông tin về hệ thống Multics, chắc chắn là một trong những hệ thống có ảnh hưởng nhất
trong lịch sử HĐH. Trích dẫn từ đó: "Jack Dennis của MIT đã đóng góp ý tưởng kiến trúc có ảnh
hưởng cho sự ra đời của Multics, đặc biệt là ý tưởng kết hợp phân trang và phân đoạn." (từ Mục
1.2.1)

OPERATING
SYSTEMS WWW.OSTEP.ORG
[VERSION 1.10]
PHÂN TRANG: BẢNG NHỎ 17
HƠN SMALLER TABLES

Bài tập về nhà (Mô phỏng)


Bài tập nhỏ vui nhộn này kiểm tra xem bạn có hiểu cách một bảng
trang đa cấp hoạt động như thế nào. Và có thể không ngạc nhiên,
chương trình được gọi là: paging-multilevel-translate.py; xem README
để biết chi tiết.

Câu hỏi
1. Với một bảng trang tuyến tính, bạn cần một thanh ghi duy nhất
để xác định bảng trang, giả sử phần cứng thực hiện việc tìm kiếm
khi có lỗi TLB. Bạn cần bao nhiêu thanh ghi để xác định một bảng
trang hai cấp? Một bảng ba cấp?
2. Sử dụng trình giả lập để thực hiện việc dịch các giá trị ngẫu nhiên
0, 1 và 2, và kiểm tra câu trả lời của bạn bằng cờ -c. Cần bao nhiêu
tham chiếu bộ nhớ để thực hiện mỗi tìm kiếm?
3. Dựa trên hiểu biết của bạn về cách bộ nhớ cache hoạt động, bạn
nghĩ tham chiếu bộ nhớ đến bảng trang sẽ hoạt động như thế nào
trong bộ nhớ cache? Liệu chúng có dẫn đến nhiều lần trúng cache
(và do đó truy cập nhanh)? Hay nhiều lần không trúng (và do đó
truy cập chậm)?

©
© 2008–23, ARPACI- 2008–
DUSSEAU 2008–23, ARPACI- 23,
ARPA

You might also like