Giáo trình Hệ điều hành - Chương 3: Quản lý bộ nhớ

CHƯƠNG 3.  
QUẢN BỘ NHỚ  
3.0. Quan niệm về quản bộ nhớ  
Một trong các phương tiện điều hành quan trọng bộ nhớ chính. Quản lý tài nguyên bộ  
nhớ một đề tại hữu ích và cấp bách, nó quyết định khả năng hiện hữu của một hệ thống máy  
tính. Theo đó, chúng ta phân biệt ba phạm vi, mà trong đó, các chiến lược khác nhau được sử  
dụng để quản bộ nhớ.  
Các chương trình người sử dụng:  
Nhiệm vụ chính là bao gồm: việc quản một cách tối ưu không gian lưu trữ của tiến trình  
xung quanh các yêu cầu lưu trữ đặc biệt của chương trình. Điều này được thực hiện nhờ các bộ  
phận chương trình (thí dụ điều hành bộ nhớ) hay nhờ các chương trình thu gom rác.  
Bộ nhớ chính:  
Vấn đề chủ yếu là phân bổ tối ưu không gian bộ nhớ chính trên các tiến trình riêng lẻ. Theo  
nguyên tắc chung, nhiệm vụ được trợ giúp nhờ các đơn vị phần cứng chuyên dụng. Đặc biệt,  
trong hệ thống đa vi xử lý, điều quan trọng phải tránh các tranh chấp, nếu nhiều tiến trình  
cùng muốn chiếm một không gian lưu trữ. Trong trường hợp này, các kỹ thuật viên sẽ giúp đỡ  
thêm, như việc truy cập bộ nhớ không đồng dạng (NUMA), thí dụ khi chiếm dụng các bộ vi xử  
lý, nó được tách chia ra trên bộ nhớ cục bộ hay bộ nhớ toàn cục.  
Bộ nhớ quảng đại:  
Việc tách khỏi sự quản lý các files sẽ những files chuyên dụng, với nó, dung lượng  
của file được phân chia và được quản lý. Thí dụ file swap được chuyển dịch trên các tiến trình,  
những tiến trình này không chiếm nhiều không gian bộ nhớ chính.  
Đầu tiên, chúng ta nghiên cứu kỷ thuật trực tiếp che phủ bộ nhớ, mà nó tìm thấy việc ứng  
dụng ở hầu hết các chương trình người sử dụng hoặc các hệ điều hành đơn giản.  
3.1. Che phủ trực tiếp bộ nhớ  
Trong buổi đầu của việc sử dụng máy tính, công việc cụ thể chế ngự chiếc máy tính với  
bộ nhớ của nó cho từng Job. Nhân của hệ điều hành thường bao gồm một sự tổng hợp các thủ  
tục xuất nhập. Đó chính là các thủ tục thư viện mà chúng được gắn thêm vào Job. Nếu người  
ta phải đặt Job trở lại, để đầu tiên thực hiện một Job khác, thì do đó, tất cả các dữ liệu của tiến  
trình được di chuyển trên bộ nhớ quảng đại được phép di chuyển các dữ liệu của tiến trình  
mới từ bộ nhớ quảng đại tới bộ nhớ chính. Tuy nhiên, việc di dịch vào ra này (swapping) cần  
phải thời gian. Nếu chúng ta chấp nhận thời gian truy cập trung bình của ổ đĩa cứng khoảng  
10ms và nếu các dữ liệu chuyển thẳng trực tiếp (DMA-Tranfer) với tỷ lệ vận chuyển khoảng  
500kByte/s, do đó, chúng ta cần 110 ms cho một chương trình có dung lượng 50kB để viết  
chương trình lên đĩa và cùng thời gian đó để lấy một chương trình tương tự từ ổ đĩa, như  
vậy, hợp lại thành 220ms trôi qua cho một công việc bình thường. Việc di chuyển tráo đổi này  
đã hạn chế sự đổi chiều giữa các tiến trình rất mạnh.  
Từ cơ sở này, điều cần thiết là, phải bảo vệ các dữ liệu của nhiều tiến trình tồn tại đồng  
thời ở trong bộ nhớ, tức là, ngay lập tức bộ nhớ phải tồn tại một cách đầy đủ. Tuy nhiên, nó  
cũng dẫn tới một vấn đề, người ta phải phân chia bộ nhớ như thế nào đó, để nhiều tiến trình có  
điều kiện nhận chỗ (?). Câu hỏi này đặt ra không chỉ đối với bộ nhchính, mà tất nhiên cả đối  
với không gian lưu trữ của ổ đĩa cứng, nó còn gọi là không gian tráo đổi (swap space).  
3.1.1. Sắp xếp bởi các bảng cố định  
Cách tốt nhất là, từ hình ảnh thu nhỏ của bộ nhớ, người ta tạo lập thành những bảng che  
phủ bộ nhớ. Mỗi đơn vị của một bảng như vậy (thí dụ Bit) được sắp xếp cho một đơn vị lớn  
hơn (thí dụ một từ 32bit). Nếu một từ bị che phủ, thì do đó, Bit đạt giá trị 1 hay 0.  
Hình 3.1 chỉ ra một sự sắp xếp như vậy. Khi đơn vị bộ nhớ được chọn một đoạn lơn hơn  
(thí dụ 4kB), do đó, việc sắp xếp các khối dữ liệu A,B,C (là những chương trình) được các  
phương tiện điều hành quản lý.  
Một bảng che phủ như thế tự dùng 100 kByte đối với bộ nhớ 3,2 MByte. Nếu một không  
gian trống bị che phủ, do đó, một bảng tổng hợp sẽ được tìm kiếm trên một số lượng phù hợp  
các số 0.  
Hình 3.1 -----------  
3.1.2. Sắp xếp bởi danh sách cụ thể  
Thực chất không gian trống cũng như không gian đã bị che phủ thì hầu như dài hơn sự mô  
tả về chúng như đã nói trên. Điều đó thì có lợi: đáng lẽ một bảng cố định thì phải làm một  
danh sách điền đầy việc che phủ bộ nhớ, nhưng ở đây, chúng được liên kết với nhau trong  
dãy tuần tự của các địa chỉ nhớ (nhờ bộ chỉ thị). Do đó, thí dụ minh họa ở trong hình 3.1 được  
làm sáng tỏ thêm như ở trong hình 3.2 dưới đây.  
Hình 3.2---------------------  
Việc điền vào danh sách bao gồm ba phần: địa chỉ bắt đầu của bộ nhớ, độ dài và chỉ số  
(dấu hiệu chỉ dẫn) cho việc điền thêm kế tiếp.  
Một danh sách che phủ được phân thành 2 danh sách: một danh sách cho khoảng bị che  
phủ việc điền vào của được khai báo nhờ khối điều khiển tiến trình PCB và một danh  
sách chỉ dành cho khoảng chưa được che phủ. Nếu chúng ta sắp xếp danh sách này theo độ lớn  
của khoảng trống thì do đó, một cách bình thường, danh sách đầy đủ không cần phải tìm kiếm.  
Tuy nhiên, qua đó, sự hoà hợp của khoảng trống khoảng giới hạn sẽ bị gây trở ngại. Việc  
khai báo hai lần sẽ tạo ra khả năng tìm kiếm danh sách theo hai hướng.  
Thí dụ về quản lý theo xấp (heap management):  
Việc quản bộ nhớ bằng cách dựa vào danh sách là một thí dụ có ý nghĩa cho việc quản  
bộ nhớ theo xấp; xấp được mỗi chương trình người sử dụng quản lý. Thí dụ ở máy tính  
MODULA-2, điều đó có ý nghĩa để tả việc thực thi các thủ tục  
ALLOCATE()vàDEALLOCATE().Qua việc ghi tên loại, một không gian trống được quản lý,  
mà nó được kết nối với nhau thành một danh sách liên tục và nó được dẫn vào nhờ móc treo  
hay nhờ một chỉ thị có tên rootPtr:  
TYPE  
EntryPtr = POINTER TO EntryHead;  
EntryHead = RECORD  
next : EntryPtr;  
size : CARDINAL;  
END;  
VAR  
rootPtr : EntryPtr;  
nextStart : EntryPtr;  
FirstFree, NoOfEntryHeads : CARDINAL;  
Đầu tiên, mỗi không gian trống được viết đè lên bởi mục nhập (Entry). Một không gian  
trống đối với danh sách thì không thể nhỏ hơn chiều dài TSIZE (EntryHead) của một mục  
nhập. Nếu một không gian trống được ghi, do đó, một mục nhập mới dạng EntryHead được  
thiết lập được treo vào danh sách trống;nếu không gian trống quá nhỏ, khi đó, được bỏ  
qua.  
Một cách đơn giản hơn và nhanh hơn để dẫn tới một danh sách riêng lẻ, đó là danh sách  
của các không gian trống. Tuy vậy, nó thì bảo đảm hơn để dẫn tới một danh sách được che  
phủ, cũng như để thể kiểm tra tình trạng độ lớn của không gian được việc trả lại từ  
không gian đã bị che phủ nhờ vậy, để làm sang tỏ việc lập trình thiếu hụt của chương trình  
người sử dụng. Đặc biệt ở giai đoạn gỡ rối, điều đó thì có lợi; sau đó, một sự kiểm tra có thể  
được ngắt khỏi khi tối ưu thời gian thực hiện ở các giai đoạn muộn hơn.  
3.1.3. Các chiến lược che phủ  
Một cách độc lập với cơ cấu của danh sách che phủ bộ nhớ, những chiến lược khác  
nhau để lựa chọn một cách thích hợp nhất từ vùng nhớ chưa bị che phủ. Mục đích của các  
chiến lược ở chỗ: phải giữ cho được một vùng trống nhỏ, nhưng nó có ý nghĩa rất lớn.  
Sau đây những chiến lược quan trọng:  
FirstFit (đầu tiên vừa đủ):  
Trước hết, vùng trống của bộ nhớ phải đủ lớn để phù hợp cho việc che phủ. Tức là, bao giờ  
cũng còn lại một phần thừa chưa bị che phủ.  
NextFit (kế cạnh vừa đủ):  
Chiến lược FirstFit dẫn tới trong khoảng trống đầu tiên chỉ còn thừa lại một phần nhỏ,  
nhưng phần còn lại này luôn luôn được tìm kiếm trở lại. Để loại bỏ điều này, người ta xuất  
phát giống như chiến lược FirstFit, nhưng ở lần kế tiếp, việc tìm kiếm được tiếp tục tại một vị  
trí và cũng tại đó, người ta ngừng lại.  
BestFit (vừa đủ nhất):  
Danh sách toàn thể cũng như bảng che phủ được tìm kiếm, cho tới khi người ta tìm thấy  
một khoảng thích hợp, lập tức, đủ để tiếp nhận khoảng che phủ.  
WorstFit (đáng vừa đủ):  
Nếu khoảng trống đang tồn tại khoảng lớn nhất được tìm thấy, thì do đó, phần còn lại là  
khả năng nhất đủ lớn.  
QuickFit (vừa đủ để thoát khỏi):  
Đối với mỗi loại che phủ, một danh sách đặc biệt được nói tới. Điều đó cho phép để tìm  
thấy những chỗ trống thích hợp một cách nhanh hơn. Nếu ở trong một hệ thống thông tin có độ  
dại 1kB được gởi đi một cách đều đặn, do đó, nó thì có lợi, để dẫn tới một danh sách đầy đủ  
cho việc che phủ 1kB và để hài lòng khi đạt được mọi sự thăm một cách nhanh chóng và  
không có sự pha trộn.  
Buddy-systems (những hệ thống thân hữu):  
Bây giờ, người ta có thể mở rộng các quan điểm về chiến lược QuickFit, rằng đối với mỗi  
độ lớn bị che phủ, tốt nhất, bộ nhớ được dự đoán một danh sách gồm những độ lớn luỹ  
thừa của cơ số 2 và nó chỉ trao cho mỗi khoảng bộ nhớ một độ lớn cố định. Tất cả các yêu cầu  
phải được thiết lập trên luỹ thừa tiếp theo của cơ số 2. Nếu một không gian nhớ dài 280  
Bytes, tạm diễn giải:  
280 Bytes = 256 + 16 + 8 = 28 + 24 + 23  
thì nó phải được tạo lập trên không gian nhớ 512 = 29. Nếu không có một khoảng nhớ trống  
nào của độ lớn 2k tồn tại, do đó, một đoạn nhớ độ lớn 2k-1 phải được phân thành hai đoạn.  
Cả hai đoạn đối tác thân hữu, được biểu thị một cách chính xác: địa chỉ bắt đầu của chúng  
thì giống hệt cho đến khi kBit trong địa chỉ của chúng. Thí dụ …XYZ0000… và XYZ1000  
là các địa chỉ bắt đầu của đối tác. Điều đó được sử dụng để kiểm tra (từng bước) rất nhanh,  
liệu một khoảng bộ nhđược trở nên trống khi có một đối tác trong bảng che phủ, với  
bảng này, nó có thể làm lan ra với một khoảng lớn gấp đôi.  
Cả hai quá trình, nếu vừa thực hiện việc tìm kiếm một khoảng trống thích hợp (cũng tựa  
như việc bẻ gãy riêng lẻ cần thiết của một đại lượng lớn hơn), thì cũng phải vừa thực hiện việc  
kết hợp chúng lại thành những đại lượng lớn hơn, để đạt được một cách quy nạp nhiều đối tác  
(nhiều luỹ thừa của cơ số 2).  
Đánh giá chiến lược  
Sự mô hình hoá so sánh các chiến lược khác nhau dẫn tới một sự đánh giá chi ly. Điều đã  
nhận ra rằng, chiến lược FirstFit sử dụng không gian thì tốt hơn các chiến lược NextFit và  
WorstFit, và một cách ngẫu nhiên nào đó cũng thể tốt hơn chiến lược BestFit, do vậy, điều  
đó còn hướng tới chỉ để lại một phần rất nhở chưa bị che phủ. Một sự sắp xếp các nhân tử  
trong danh sách theo độ lớn của các dải sẽ làm giảm đi thời gian thực hiện các chiến lược  
BestFit WorstFit.  
Nếu chúng ta biết được nhiều hơn về sự phân bổ các yêu cầu bộ nhớ theo thời gian hay  
theo độ lớn che phủ, do đó, chiến lược QuickFit hay các thuật toán đặc biệt khác có thể đạt  
được các kết quả cao hơn.  
Khả năng hữu hiệu của hệ thống đối tác thân hữu được đánh giá một cách ngắn gọn sự  
tính toán như sau: Nếu chúng ta chấp nhận rằng, tất cả các luỹ thừa 2n độ lớn các khoảng là  
s, chúng được kéo dài với xác xuất như nhau 1/2n (tức là có một cái gì đó xảy ra không chắc  
chắn, nhưng mà, người ta có thể phỏng đoán với một sự chập nhận thuyết phục). Do đó, yêu  
cầu bộ nhớ Sa phải đạt tối thiểu:  
Công thức -----------  
m
m(m 1)  
Vì:  
i   
2
i1  
Đối với sự che phủ thực tế, phải được thiết lập bởi luỹ thừa của cơ số 2, nghĩa là, đáng  
lẽ sự che phủ dạng: 1,2,3,4,5,6,7,8,...,...  
2n  
Chúng ta sử dụng  
Hay  
1,2,4,4,8,8,8,8,...  
2n ,..., 2n  
20,21,22,22,  
23,23,23,23...  
2n,...,2n  
Hay ta nhân được tích:  
21 nhân với 22 nhân với ...  
2n-1  
vậy, sự che phủ trên thực tế mỗi một 2i nhân với 2i+1  
Do đó sự che phủ thực tế trung bình Sb được tính:  
công thức -----------------  
Với điều đó, tỷ lệ tương quan giữa các giá trị trung bình Sa và Sb được xác định:  
Công thức--------  
Kết quả tính toán phỏng đoán của chúng ta cho thấy: Một phần tư của không gian bộ nhớ được  
kéo dài chưa sử dụng. Qua đó, hệ thống đối tác đặc trưng cho một phương pháp che phủ; tuy  
nhiên, phương pháp thì có nhanh, nhưng không hiệu quả lắm. Nguyên nhân là ở chỗ sự phân  
đoạn thô bởi việc tăng gấp đôi không gian bộ nhớ. Nếu người sửa chữa điều đó, thì do đó, hệ  
số sử dụng đối với bộ nhớ được nâng cao, tất nhiên, việc quản sẽ trở nên phức tạp hơn.  
Việc phân mảnh mẫu cắt:  
Tuy rằng, nói chung, nếu những danh sách che phủ tạo lập nên một sự sắp xếp tốt đáp ứng  
mong muốn che phủ tới các khoảng trống của bộ nhớ, thì mặc dù, phương pháp che phủ bộ  
nhớ trực tiếp có khuynh hướng tới việc chia nhỏ bộ nhớ thành nhiều khoảng nhỏ chưa bị che  
phủ. Điều đó xảy ra một cách độc lập, liệu nó có đặt cơ sở cho việc che phủ bộ nhớ bởi mẫu  
cắt hay đặt cơ sở để phân chia bộ nhớ (đối với chương trình tổng thể ở bộ nhớ chính) bởi các  
khoảng trống nằm giữa các chương trình và mẫu cắt bên ngoài. Từ lý do này, việc làm chảy ra  
các khoảng trống một trong các chức năng của việc quản bộ nhớ.  
Đối với vấn đề phân bổ bộ nhớ cho việc nạp các tiến trình của các bộ nhớ quảng đại, rất  
nhiều chiến lược. Nếu đầu tiên chúng ta che phủ bộ nhớ với các tiến trình lớn nhất để sử dụng  
các tiến trình nhỏ làm đầy các chỗ trống, thì do đó, điều này được tổng hợp trong một chiến  
lược định thời, mà nó có ý nghĩa đối lập với chiến lược định thời Job ngắn nhất- trước nhất và  
cũng đảm bảo thời gian làm việc lâu bền một cách đặc biệt.  
Khác biệt với cái đó, người ta có thể đạt được một sự định thời đối với độ lớn của tiến  
trình, trong đó, người ta phân đoạn bộ nhớ tổng cộng thành một số lượng cố đinh các khoảng  
chia có độ lớn khác nhau. Mỗi độ lớn khoảng chia chứa đựng một hang đợi riên lẻ, do đó, các  
bảng sắp xếp bộ nhớ thì cố định một sự phân mảnh sẽ không xuất hiện. Thí dụ, một giải  
pháp như vậy đã tồn tại ở trong hệ điều hành IBM (đa lập trình với sự cố định các con số của  
Job): OS/ MFT đối với hệ điều hành OS/360, đó hệ thống máy tính lớn. Dĩ nhiên, một hệ  
thống cố đinh không thay đổi sẽ mang lại cho nó một khả năng tải tồi các phương tiện điều  
hành.  
3.2. Định vị logic và bộ nhớ ảo  
Vì lý do khi quản bộ nhớ, để loại bỏ việc phải sử dụng xấu bộ nhớ, thì đã những nỗ  
lực khác nhau để tìm thấy những giải pháp mới cho vấn đề này.  
3.2.1. Những vấn đề về bộ nhớ và các giải pháp  
Một giải pháp đối với vấn đề phân bổ bộ nhớ thì bao gồm việc làm gọn nhẹ bộ nhớ trống  
nhờ ghép làm đầy đủ các khoảng trống. Tuy nhiên, giải pháp này cũng rất tiện dụng và kéo dài  
thời gian sử dụng thực tế đối với một phần cứng.  
Sự xử lý các mã chương trình:  
Cho đến đây, vẫn còn một số vấn đề chưa được diễn giải một cách đầy đủ. Đó vấn đề:  
Định vị tuyệt đối. Ở việc kết nối các phần của chương trình dịch, nhà tạo lập đã phân bổ cho  
các lệnh nhảy và các biến tham chiếu một địa chỉ nhớ tuyệt đối rõ ràng, mà ở đó, một địa chỉ  
cơ sở ở trong chương trình được đếm tăng dần, thí dụ bắt đầu từ giá trị 0. Nếu bây giờ người ta  
muốn sử dụng một chương trình ở một khoảng nhkhác với các địa chỉ khác, khi địa chỉ đó đã  
được kết nối,thì do đó, các địa chỉ tham chiếu phải được xử trước đó. Về điều đó, dẫn tới  
những giải pháp khác nhau:  
chương trình đã được tạo lập cần thiết phải chứa đựng chỉ các địa chỉ  
tương đối, thí dụ:  
Địa chỉ = Địa chỉ tuyệt đối - Số đếm của chương trình máy tính PC.  
Điều này thì không phải luôn luôn có thể đối với các kiểu vi xử lý và các lệnh, mà nó kéo  
dài địa chỉ số hoacj trong khoảng thời gian thực thi.  
Ở mỗi chương trình, sự trao đổi thông tin được lưu trữ trên ổ đĩa. Khi nạp ở bộ nhớ  
chính, mỗi địa chỉ tham chiếu phải được trù tính một lần và sau đó phải được ghi chép ở vị trí  
thích hợp. Điều đó được đòi hỏi cho tới khi không gian nhớ được tăng gấp đôi trên bộ nhớ  
quảng đại đối với việc tráo đổi ở trong bộ nhớ, thì điều đó không thích hợp nữa. Ở các máy  
tính nhỏ, thì điều đó thực thi.  
Ở một thanh ghi phần cứng chuyên dụng của CPU, sự trao đổi thông tin tồn tại với tư  
cách là những địa chỉ cơ sở được sử dụng mỗi khi truy cập.  
Để giải quyết vấn đề chi phí gia tăng, bây giờ đối với giải pháp của các vấn đề  
khác, nó phải được mở rộng trên những bình diện tiếp theo.  
Che phủ bổ sung bộ nhớ:  
Một thí dụ cho thấy, những yêu cầu của một tiến trình phải được giải bày như thế nào, nếu tiến  
trình này đã ở tại bộ nhớ chính hoặc nếu sử dụng bộ nhớ bổ sung (?). Cho điều này có  
những giải pháp như sau:  
Tiến trình được đặt tĩnh tại, dung lượng mới của được ghi chép và nó được nạp lưu  
trữ. Ở lần kế tiếp, nếu được sắp xếp vào hàng đợi, khi đó, người ta quan tâm ngay độ lớn  
mới này và tạo cho nó một không gian để thoả mãn các yêu cầu bổ sung. Chiến lược này được  
dùng trong hệ điều hành Unix với các ấn bản cũ.  
Các khoảng trống (phần cắt để bên ngoài) giữa các tiến trình trong bộ nhớ chính  
được cắt nhỏ cho mỗi tiến trình. Do đó, không gian trống được điền đầy từ dưới (với các địa  
chỉ nhỏ) nhờ việc mở rộng các ngăn xếp và lên trên nhờ việc mở rộng xấp(heap).  
Bảo vệ bộ nhớ:  
Vấn đề tiếp theo là ở chỗ, phần xác định của nhân hệ điều hành phải được lưu trữ bền vững  
trên không gian bộ nhớ hay các bộ đệm hệ thống. Phần này không những thể bị phóng  
thích, mà còn có thể bị sử dụng một cách nhầm lẫn bởi các chương trình người sử dụng. Do  
đó, ở các hệ điều hành, các địa chỉ nhớ chuyên dụng (fences, limits) đã được quan tâm phòng  
ngừa, cấm không được vi phạm. Nếu ở bộ vi xử lý có một thanh ghi được lưu ý về điều đó, tức  
là, ở việc định vị, điều đó cũng được quan tâm, do đó các giới hạn không được cố định vào các  
địa chỉ logic.  
Đối với các vấn đề đã được đề cập, dẫn tới những hiểu biết quan trọng: đối với người lập  
trình để thực hiện việc định vị trên máy tính; đối với các chương trình để đạt được sự chờ đợi  
thông suốt. Do vậy, tổng chi phí cho việc định vị ở trên máy tính thì cần phải được giảm thiểu  
một cách có lợi đáng kể cho một kiểu định vị trên bộ nhớ vừa đơn giản vừa rõ ràng, đó kiểu  
định vị trên bộ nhớ ảo.  
3.2.2. Bộ nhớ ảo  
Hình ảnh mong muốn của người lập trình là bộ nhớ (memory), nó bắt đầu với địa chkhông  
(zero) và tiếp tục cho đến tận. Nhưng đáng tiếc, trong thực tế thì không như vậy: hầu hết,  
hệ thống ngắt hệ điều hành được bố trí vài phần dưới các khoảng dải của bộ nhớ. Các  
khoảng bộ nhớ này thì không liên tục, những chương trình khác đang tồn tại ở trong bộ nhớ,  
tức là, những chương trình này khi thì yêu cầu, khi thì trả lại không gian nhớ năng động này.  
Cuối cùng sự việc này còn có vai trò, rằng bộ nhớ chính thì giá thành cao, nhưng lại không thể  
đáp ứng việc dịch vụ đồng thời nhiều chương trình.  
Từ lý do này, một bản phác thảo về bộ nhớ ảo được phát triển, ở đó, những mong muốn  
của người lập trình được ưu tiên như việc nhượng bộ mục đích cho hệ thống nhờ bộ vi xử lý  
phần cứng hay hệ điều hành. Trong hầu hết hệ điều hành ngày nay có hai khả năng dịch vụ,  
với việc quản bộ nhớ, phải được giữ vững bởi phần cứng cả bởi hệ điều hành.  
Nhiều mảnh nhỏ (của khoảng dải bộ nhớ) phải được trình bày đối với chương trình,  
khi mà liệu chúng xuất phát từ một khoảng liên tục bắt đầu với giá trị không (?).  
Nếu chương trình yêu cầu nhiều bộ nhớ tồn tại, thì do đó, nó không phải một  
chương trình đầy đủ, đặc biệt chúng được tráo đổi chỉ đối với khoảng dải nhớ không hoạt động  
trên bộ nhớ thứ cấp (bộ nhớ quảng đại, chẳng hạn ở đĩa từ tính) và sử dụng các dải bộ nhớ sẽ  
trở nên trống.  
Hình 3.3 ở dưới cho thấy: bên trái là dải bộ nhớ ảo (được mong muốn), dải này phản ảnh  
sự quản bộ nhớ đối với chương trình, và bên phải bộ nhớ vật thực.  
Hình 3.3---------------  
Để tạo nên địa chỉ vật lý hay địa chỉ logic, nhiệm vụ được đặt ra là phải tiến hành và thực  
hiện chạy chương trình đối với mỗi tham chiếu bộ nhớ của một đơn vị phần cứng (thí dụ khối  
quản bộ nhớ MMU: Memory Management Unit). Trong nhiều bộ vi xử hiện đại, thí dụ  
các máy tính MC68040 của hảng MOTOROLA, các máy tính Pentium Procesor của hảng  
Intel, thì MMU được chứa đựng trên vĩ mạch vi xử lý (processor- chip).  
Bây giờ những cơ cấu nào cho hình ảnh mong muốn về bộ nhớ ảo trên bộ nhớ tồn tại  
thực (?). Điều đó được nghiên cứu trong mục tiếp theo dưới đây.  
3.3. Quản lý trang  
Một trong các cơ cấu đơn giản để thực thi không gian địa chỉ ảo thì bao gồm việc phân  
đoạn bộ nhớ thành những đơn vị độ lớn bằng nhau: những đơn vị tách chia này gọi là  
những trang (pages). Các độ lớn trang tiện dụng thì khoảng 1kB, 4kB hay 8kB. Địa chỉ và  
trạng thái của mỗi trang được dẫn tới trong một bảng trang (pape table), bảng này tồn tại cho  
mỗi chương trình trong bộ nhớ chính.  
3.3.1. Nguyên tắc hoán vị địa chỉ:  
Để tính toán địa chỉ ảo (được sử dụng trong chương trình) trên địa chỉ vật thực của bộ  
nhớ chính, địa chỉ ảo được chia làm hai phần (xem hình 3.4). Phần chứa đựng các Bit ít ý  
nghĩa (Least Significant Bits: LSB) được gọi độ dịch vị và nó cho thấy khoảng cách tương  
đối của địa chỉ hiện hành tới một địa chỉ cơ sở. Người ta nhận được giá trị của địa chỉ cơ sở,  
mà trong đó, phần thứ hai (bên trái hình 3.4) với các Bit có giá trị cao được sử dụng với tư  
cách một chỉ số (trong thí dụ số 6), nó biểu thị cho việc ghi vào trong bảng kê các trang.  
Việc ghi vào này chứa đựng địa chỉ cơ sở (được tìm thấy). Người ta cũng nhận được địa chỉ  
vật đầy đủ qua sự kết nối của địa chỉ cơ sở với độ lệch offset.  
Hình 3.4-----------------------------  
Hình 3.4 chỉ cho thấy quá trình chuyển đổi này được tả thành hai giai đoạn, tại đó, đối  
với mỗi tiến trình, các bảng trang khác được sử dụng. Do đó, giới hạn giữa strang PageNr và  
độ lệch offset thì trong khoảng các số nhị phân của địa chỉ ảo, phụ thuộc vào mỗi phần  
cứng được sử dụng.  
Người ta lưu ý rằng, bộ nhớ (tồn tại thực ) cũng thể được phân thành các trang (gọi sự  
phân đoạn bộ nhớ: memory - partition), mà ở đây, vị trí và độ lớn hữu hiệu của trang ảo nhờ  
cơ cấu định vị thì độc lập với sự phân chia đó. Khoảng phân đoạn bộ nhớ vật được biểu thi  
là khung trang (pape frame). Để thực hiện việc chuyển nhanh như thể, hầu hết, địa chỉ định  
tiến trình của bảng trang được giữ ở trong một thanh ghi chuyên dụng; tiến trình tổng hợp  
tồn tại ở trong khối điều khiển bộ nhớ MMU. Đối với việc nạp điền thêm trang, hệ điều  
hành có hiệu lực ở mức độ rất cao. Nếu Bit trạng thái của một trang chỉ ra rằng, trong không  
gian của bộ nhớ, đầu tiên trang phải được chuyển vào bộ nhớ quảng đại, do vậy khi đó, khối  
điều khiển bộ nhớ MMU phát sinh ra một tín hiệu lỗi trang (pape fault) có hình dạng của một  
ngắt chương trình (program interrupt). Ngắt này được hệ điều hành quan tâm, cụ thể: ở trong  
lập thức của ngắt (interrupt-routine), hệ điều hành chọn một trang ít được sử dụng, trang này  
được viết trở lại vào ổ đĩa. Cho điều đó, trang đã được dùng để viết vào và bảng được sửa chữa  
cho phù hợp. Tiếp theo, sau khi nhảy trở lại vào ngắt, lệnh máy được nhắc lại với sự hoán vị  
địa chỉ trước đó còn thiếu và sau đó chương trình được thực hiện tiếp tục.  
3.3.2. Phương pháp dịch vị địa chỉ  
Cho đến nay, chúng ta đã lưu ý đến trường hợp ,một địa chỉ bất kỳ của không gian địa chỉ  
ảo được phỏng theo một cách trực tiếp trên một địa chỉ giao dịch của không gian vật lý. Điều  
đó thì không phải luôn luôn có thể. Nếu chúng ta nhận thấy rằng, đối với mỗi trang, một sự  
điền vào bảng trang (page-table) thì rất cần thiết, do đó, dẫn tới một số lượng các địa chỉ  
được điền đầy như sau: giả sử nếu bề rộng tlà 16bit và độ lớn trang là 12 bit, thì do đó 16-12  
=4, tức là ta có 24 =16 lần điền địa chỉ vào khác nhau. Một bảng như vậy thì thật dễ dàng để  
lưu trữ điều khiển. Và do đó, ở các máy tính của bảng Digital, bảng này đã được phổ dụng  
một cách rộng rãi. Bấy giờ đối với từ bề rộng 32 Bit (word-wide) thì điều đã trở nên vô  
cùng khó khăn, nếu chỉ lấy bề rộng từ 20Bit đã tương ứng với 220 ~ 106, tức là có tới một triệu  
lần điền địa chỉ. Ở cấu trúc mới nhất bề rộng từ 64Bit, nếu chỉ lấy bề rộng từ 52 Bit thì đã  
phải cần tới 252 ~ 4.1015 lần điền trang!  
Ở đây vấn đề được nêu lên rằng, đối với không gian địa chỉ ảo, một sự biểu lộ về bộ nhớ  
vật cần thiết phải thực hiện; tuy nhiên, không phải hoàn toàn bộ nhớ nào cũng cho các địa  
chỉ ảo phần lớn nhất. Sự tiến thoái lưỡng nan này chỉ thể được giải quyết trên các phương  
pháp khác nhau.  
Việc giới hạn địa chỉ:  
Ý tưởng đầu tiên mà người ta đưa tới giải pháp cho vấn đề này là ở chỗ làm giới hạn không  
gian nhớ ảo trên một độ lớn lợi nhất. Thí dụ, nếu chúng ta giới hạn không gian địa chỉ 30  
Bit, thì một cái gì đó phù hợp với một bộ nhớ ảo khoảng 1GB trên một tiến trình, do đó, chúng  
ta cần dùng 4kB tương ứng 12 Bit cho sự phân đoạn trang, một trang tương ứng khoảng chừng  
256 ngàn lần ghi vào cho một tiến trình, vậy một cái gì đó nằm trong khoảng thể.  
Tuy nhiên, độ lớn nhất còn phụ thuộc vào độ lớn thực của tiến trình. Đối với hầu hết các  
tiến trình, nó thì quá lớn; không gian của bảng không thể đem dùng: đối với một tiến trình có  
độ lớn khoảng 1GB thì một bảng trang có độ lớn 1MB có thể được đo đạc không đủ cho một  
tiến trình nhỏ với độ lớn 50kB.  
Đối với sự biên dịch (compiler) thì việc giới hạn địa chỉ sẽ không có lợi. Đối với sự phát  
triển các ngăn xếp (stacks) thì có lợi để các ngăn xếp được mở rộng từ các địa chỉ rất cao tới  
các địa chỉ rất thấp để phòng ngừa một chỗ trống lớn giữa ngăn xếp và các địa chỉ thấp nhất  
được thiết lập.  
Các bảng đa mức:  
Từ những lý do vừa nêu, có những điều kiện khác nhau được thực hiện. Một trong các ý  
tưởng quan trọng được thực hiện để giữ thông tin không bị chia cắt. Vấn đề được đặt ra là: liệu  
thông tin nói chung có sử dụng một khoảng bộ nhớ không (?), hay địa chỉ của thông tin có bị  
biến đổi bởi khoảng nhớ như thế nào đó không (?). Do đó, địa chỉ tổng hợp được phân đoạn  
thành nhiều phần như trong thí dụ dưới đây.  
Thí dụ về phân đoạn địa chỉ:  
Nếu ta có bề rộng của từ 32 Bit, độ lớn trang 8kB tương ứng 13 Bit thì sự phân đoạn được  
chỉ ra trên hình 3.5 ở dưới đây.  
Hình 3.5------------  
Bề rộng từ (wordwide) 32 Bit được phân thành 14 Bit cho chưa sử dụng, 3 Bit cho bảng  
1(Tab1), 2 Bit cho bảng 2 (Tab2) và 13 Bit cho dịch vị offset. Nếu một địa chỉ  
4148810~1210248 thì người ta phân thành một chỉ số Index =1 cho bảng 1, một chỉ số Index  
=1 cho bảng 2 và một độ dịch vị offset = 528.  
Mỗi thành phần địa chỉ nhận được những bảng riêng lẻ, ở đó, bảng đối với các địa chỉ  
cao (pape base table) chỉ được lưu ý, liệu đối với địa chỉ ảo này bộ nhớ tồn tại không (?),  
nếu có, thì bảng trang của việc che phủ đặt ở đâu (?). trong hình 3.6, điều đó được chỉ ra  
một bảng hai bậc đối với địa chỉ được phân 2 đoạn, ở đó, sự tìm kiếm được ám chỉ bằng  
những bảng với các mũi tên đậm.  
Mỗi một phần của địa chỉ tác dụng như một chỉ số ở trong một bảng nào đó, mà chúng  
được ám chỉ bằng những mũi tên nét đứt đoạn; độ dịch vị offset là một chỉ số trên trang tồn tại  
thực ở bộ nhớ chính. Vì nếu mỗi địa chỉ thể thuộc một trang, mà nó không trong bộ nhớ  
chính, thì do đó, địa chỉ của bảng đầu tiên cũng thể thuộc một trang, mà nó không trong  
bộ nhớ chính, thì do đó, địa chỉ của bảng đầu tiên cũng thể dẫn tới một trang lỗi. Trong  
trường hợp này, trang được nạp được chứa đựng một bảng mong muốn, và sau đó, nhắc  
lại lệnh một cách mới mẻ, cho tới khi một trang ảo thực thụ được xác định, tồn tại ở trong  
bộ nhớ, địa chỉ vật được xác định, các tế bào nhớ được nhạy đáp.  
Hình 2.6---------------------  
Tương tự, một điều kiện như thế thể tồn tại đối với loại bảng trang hai bậc (như ở các  
máy tính SPARC của hảng SUN) và đối với loại bảng 4 bậc (như ở các máy tính MC68038  
của hảng MOTOROLA), mà ở đó, để tìm kiếm một địa chỉ, một sự trợ giúp của phần cứng kéo  
dài rất lâu, và do đó, việc thực hiện chương trình bị trì hoãn rất mạnh, thí dụ ở máy tính  
MC68030 khoảng 80%.  
Bảng trang đảo ngược:  
Điều này dẫn tới những điều thực nghiệm khác nhau, để rút ngắn việc tìm kiếm lâu nhờ các  
bảng chưa được sử dụng. Con đường dẫn tới là, để thiết lập một bảng với tương đối ít các  
trang nhớ tồn tại thực của bộ nhớ vật lý. Đáng lẽ với tư cách là chìa khoá để viết tất cả địa chỉ  
ảo ở trên trang bên phải, do đó, người ta đã trao đổi bên phải thành trang bên trái và lập danh  
sách theo dãy tuần tự tăng dần từ bên trái với các trang đang tồn tại đến bên phải với các trang  
địa chỉ ảo đã được sắp xếp, gọi bảng trang đảo ngược (inverse page table). Để thay đổi  
việc định vị với một bảng đảo ngược và rút ngắn bớt, người ta phải tìm kiếm tất cả các địa chỉ  
ảo ở bên phải, cho tới khi, người ta tìm thấy trang hiện hành phù hợp, và sau đó, đọc số trang  
vật bên trái. Hình 3.7 là một sự đảo ngược như thế đối với một thí dụ đơn giản của hai tiến  
trình với các bảng riêng lẻ. Chúng ta sẽ thấy thế nào, nếu địa chỉ ảo không đạt một mình, vì  
không gian địa chỉ thì như nhau thí dụ tại trang ảo 0 – 4 . Tuy nhiên, để thể sắp xếp các địa  
chỉ ảo giống nhau một cách rõ ràng cho các trang khác nhau trong bộ nhớ chính, gọi là các  
khung trang thì chỉ số tiến trình phải lấy thêm số tiến trình.  
Kho chứa các bảng liên kết  
các bảng đa mức cũng như ở các bảng trang đảo ngược, vấn đề được đặt ra là: việc đánh  
giá thông tin các bảng để chuyển đổi địa chỉ thì tiêu tốn bao nhiêu thời gian (?). Từ lý do này,  
sẽ trở nên tiện dụng, rằng các việc sắp xếp cuối cùng từ các trang ảo sang các trang thực  
được lưu trữ trong bộ nhớ nhanh, còn gọi bộ nhớ truy cập nhanh (cache), thí dụ ở máy tính  
MC68030. Đầu tiên bộ nhớ nhanh này được tìm kiếm trước khi các bảng được truy cập.  
Bộ nhớ cache được tạo lập theo nguyên tắc truy cập định hướng nội dùng, khi đó cache còn  
được gọi bộ nhớ liên kết; sau khi làm xuất hiện địa chỉ các bảng ảo thì một khoảng thời gian  
đã bị tiêu phí, liệu một sự chuyển chỗ các địa chỉ trang có được lưu trữ (?). Nếu có, thì địa chỉ  
vạt lý có ý nghĩa như thế nào (?). Hình 3.8 cho thấy điều đó bằng một sơ đồ. Các Bít của số  
trang thực được kê khai một cách tổng thể bằng các số thập phân.  
Để đạt được sự đọc chọn bộ tự chỉ thị thời gian, một thiết bị điện tử được tích hợp vào  
nguồn pin của bộ nhớ (còn gọi tế bào nhớ), để so sánh các Bits của địa chỉ ảo (ở đây: tiến  
trình Id=1 và trang ảo =0) với các giá của việc điền vào. Nếu ở việc điền vào, tất cả sự so sánh  
với các Bits yêu cầu mãn, do đó, một cờ hiệu được đặt cho việc này (dấu X trong hình  
vẽ) và giá trị địa chỉ vật lý (dùng để giao dịch) được lựa chọn.  
Hình 3.8-----------------  
Một bộ nhớ liên kết kiểu như thế được biểu thị bộ đệm dịch đổi khoảng nhìn. Bộ nhớ  
nhanh Cache góp phần quan trọng trong việc dịch địa chỉ. Ở một bộ Cache có dung lượng lớn,  
người ta cũng thể loại bỏ các phần cứng dư thừa để chọn lọc các bảng trang. Thật vậy,  
người ta tiến hành việc dịch đổi địa chỉ bằng các phần mềm khi có ít biến cố, tức là khi đó việc  
dịch đổi không cần tới Cache. Tuy nhiên, đối với việc dịch địa chỉ theo cách đó cũng vẫn  
không giảm thiểu một cách mạnh mẽ hiệu dụng của bộ vi xử lý.  
3.3.3. Bộ nhớ cùng nhau sử dụng (shared memory)  
Một điều quan trọng nữa việc cùng nhau sử dụng điều khiển năng động các khoảng  
bộ nhớ nhờ các tiến trình. Điều đó đặc biệt có ý nghĩa: khi các mã được dùng trình biên soạn  
Text hay khi các chương trình của người sử dụng dùng nhiều thư viện (chẳng hạn thư viện của  
ngôn ngữ C). Kể cả các dữ liệu toàn cục cũng có ý nghĩa ở việc xác định các thông số cửa sổ  
của các tiến trình khác nhau trên màn hình.  
Để thể phản ảnh các khoảng của bộ nhớ vật lý xác định ở trong không gian địa chỉ ảo  
của nhiều tiến trình, nhiều biện pháp khác nhau được áp dụng. Biện pháp đầu tiên là, phải tạo  
nên các gọi hệ thống để giải thích một khoảng bộ nhớ của một tiến trình mà nó đóng vai trò  
như một bộ nhớ cùng chia xẻ. Lúc đó, hệ điều hành dùng bộ định danh (call-over) để tham  
chiếu tới tất cả các tiến trình. Thêm vào đó, điều phải được đảm bảo rằng, các trang này thì  
không được dập bỏ, khi một trong các tiến trình kết thúc, tức là khi một trong các tiến trình  
dẫn các trang riêng lẻ vào trong không gian địa chỉ của nó. Đối với việc đồng bộ truy cập dữ  
liệu trên bộ nhớ Cache, các tác vụ cờ hiệu của hệ điều hành cũng cần phải được đặt sẵn sàng.  
Hình 3.9 chỉ ra một tình huống như thế cho ba tiến trình.  
Hình 3.9-------------------  
3.3.4. Bộ nhớ ảo ở Unix và Windows NT:  
Bản phác thảo bộ nhớ ảo được thực thi một cách khác nhau trong các hệ điều hành Unix  
và Windows NT và được thany đổi từ ấn bản này tới ấn bản khác.  
Không gian địa chỉ ở Unix:  
trong hệ điều hành Unix, không gian địa chỉ ảo là 32 Bit tương ứng với dung lượng 4 GB  
Ngoài ra, để đặc trưng cho không gian địa chỉ ảo của một tiến trình có một không gian các  
thanh ghi (register- space) với chiều dài 16 Bit hay 32 Bit. Do vậy, địa chỉ 32 Bit được mở  
rộng thành các địa chỉ dai 48 Bit cũng như 64 Bit, mà ở đây, không gian các thanh ghi có thể  
được quan niệm bộ chỉ thị (pointer) cho một trong các không gian địa chỉ ảo với độ lớn 216.  
Tổng không gian địa chỉ ảo khoảng 4GB được phân bổ thành 4 khoảng riêng lẻ, gọi là các  
cung phần tư (quadrant), tuỳ theo loại máy tính, các cung phần tư này có ý nghĩa riêng. Trong  
các khoảng chia này còn tồn tại những cung nhỏ hơn, gọi là các cung logic xác định (segment)  
hay các khu vực tiến trình (process regions), mà các segment này được điều hành để đặt lên  
những địa chỉ ảo cố định. Đối với mỗi một segment cũng tồn tại một sự điền vào, mà nó dẫn  
tới những thông tin về quy luật truy cập (đọc / viết) số lượng các trang. Đối với mỗi thông  
tin riêng lẻ của các trang với độ lớn 4 kB thì có một sự điền vào ở một cấu trúc dữ liệu trong  
nhân của hệ điều hành: liệu trang đã hợp thể thức chưa, trang trong trạng thái nào và liệu  
trang có được ghi chép trở lại không (?)…Tuy nhiên, việc sắp xếp các segment trong không  
gian địa chỉ ảo của người sử dụng thì file dữ liệu được tả /usr/include/sys/VA s.h và nó  
được chỉ ra trong hình 3.10 ở dưới đây.  
Hình 3.10------------------  
Với các điều đã được trình bày trên, những segment của tiến trình người sử dụng được  
sắp xếp theo các địa chỉ tăng dẫn như sau:  
Cung phần tư thứ I: Với địa chỉ 0 thì các đoạn mã (codesegment) như chương trình  
của người sử dụng được nạp. Những mã này có thể được tạo lập một cách đồng đệ trên địa chỉ  
vật lý, do đó, việc cùng nhau sử dụng chương trình với các tiến trình khác nhau, thí dụ  
trình Editor, là có điều kiện.  
Cung phần tư thứ II:Cung này chứa các đoạn dữ liệu (data-segment) của các dữ liệu  
đã được bắt đầu cũng như chưa được bắt đầu. Tại đây, các heap- segment (các đoạn xấp) có  
thể được phát triển nhờ các dịch vụ hệ thống cbrk() và malloc(). Ngoài ra, cũng tại đây (user  
area), ngữ cảnh của người sử dụng được ghép vào với ngăn xếp nhân và ngăn xếp người sử  
dụng, vậy ngăn xếp thể phát triển một cách năng động ở trạng thái người sử dụng trong  
sự khác biệt với ngăn xếp nhân.  
Cung phần tư thứ III: Ở đây tồn tại các địa chỉ, mà nó được tham chiếu tới các khoảng  
cùng nhau sử dụng của các thư viện với các segment mã và segment dữ liệu cũng như khoảng  
các files được tạo lập trực tiếp (memory mapped files).  
Cung phần tư thứ IV: Tại đây tồn tại các địa chỉ, mà nó chứa đựng các khoảng bộ nhớ  
với các tiến trình khác nhau. trong Unix, đối với mỗi segment của bộ nhớ shared memory có  
một cơ cấu gọi, một segment của các tiến trình khác nhau có thể được tham chiếu tới cơ  
cấu này. Các gọi hệ thống plock() shmct1() cho phép giữ cố định các trang trong bộ nhớ  
và cho phép loại bỏ một sự phí tổn. Điều đó hạn chế được khoảng 75% bộ nhớ trống.  
Ở khoảng địa chỉ cao tồn tại một khoảng, mà nó được phòng ngừa cho việc truy cập đặc  
biệt nhanh trên các thiết bị vào ra (I/O map); các bộ đệm và các thanh ghi của nó có thể được  
chọn hay được tả dưới một tham chiếu địa chỉ, còn gọi là các thiết bị ánh xạ bộ nhớ  
(memory mapped devices). Tất nhiên, tiến trình người sử dụng thông thường không thực hiện  
điều đó với các quy tắc truy cập thông thường, đặc biệt được thực hiện dưới sự điều khiển  
của trạng thái nhân hệ điều hành.  
Không gian địa chỉ ảo Windows NT:  
Hệ điều hành Windows NT được dự định cho một không gian địa chỉ ảo 64 Bit; tuy nhiên,  
không gian này thường được dùng 32 Bit ứng với độ lớn 4 GB. Độ lớn này được phân thành 2  
phần: 2GB cho không gian địa chỉ đối với tiến trình người sử dụng, và 2GB cho không gian  
của các chức năng còn lại. Sự phân chia này được chỉ ra trong hình 3.11 ở dưới.  
Nửa trên của 2GB để lưu trữ nhân hệ thống và các bảng hệ thống, những thứ này có đặc  
điểm nổi bậc thời gian truy cập rất ngắn. tất cả các trang của nhân hệ thống luôn luôn tồn  
tại ở trong bộ nhớ chính và vì đối với hệ điều hành thì không dùng cơ cấu bảo vệ ở việc truy  
cập, cho nên, việc truy cập chỉ đạt được trên địa chỉ nhân. Ở trạng thái nhân, thì 2 Bit cao nhất  
của địa chỉ bị nén lại phần còn lại của địa chỉ ảo được thông dịch thành các địa chỉ vật lý.  
Việc thực thi của hệ điều hành Windows NT phải được khẳng định rằng, rất hiệu quả.  
Ngược lại, cấu trúc trang hay việc quản lý trang làm cho phần bộ nhớ còn lại lâm vào tình  
trạng sút kém, lúc đó, việc quản lý trang được thực hiện bởi sự điều hành bộ nhớ ảo (virtual  
memory manager). Ngoài ra, điều đó được trợ giúp bởi các trang (được định nghĩa bởi phần  
cứng) độ lớn 4kB tới 64kB, bình thường thì dùng 4 kB.  
Hình 3.11-------------------------  
Việc quản bằng bộ nhớ ảo được dự định một bảng có 2 bậc. Bậc đầu tiên chứa đựng  
một thư mục trang, mà thư mục này chứa đựng địa chỉ của các bảng có 2 bậc. Nếu ở việc truy  
cập địa chỉ xẩy ra một lỗi trang, do đó, trang được nạp, mà các bảng còn lỗi thì được chứa  
đựng trong trang này. Ở bảng thứ 2 thì chứa đựng số trang vật lý (pape frame) và kết nối với  
các thông tin tiếp theo như các quy tắc truy cập…  
Đối với bộ nhớ cùng nhau sử dụng (shared memory) có một quy tắc đặc biệt. Đối với các  
số trang vật lý, bảng thứ 2 chứa đựng một chỉ số của một bảng đặc biệt, gọi bảng trang  
nguyên mẫu (prototype page table). Trong bảng này chứa đựng địa chỉ của các trang, mà  
chúng giải thích cho việc sử dụng cùng nhau. Sự khái quát trong sơ đồ định vị yêu cầu việc  
truy cập lần đầu (còn sự tham chiếu trực tiếp vào bộ nhớ Cache hợp với những lần truy cập  
tiếp theo) cho phép có một tổ chức đơn giản của trang. Nếu một trang được giữ trở lại ở bộ  
nhớ quảng đại sau khi nạp, trước đó, được đặt một vị trí khác trong bộ nhớ chính, thì do  
đó, hệ điều hành xem xét tất cả các bảng của các tiến trình và thay đổi địa chỉ vật một cách  
phù hợp, nếu tìm thấy. Điều này loại bỏ được sự điều hành tập trung. Hệ điều hành có thể bị  
giới hạn trên tại các bảng trang nguyên mẫu.  
Các khoảng bộ nhớ thể được một tiến trình là sáng tỏ việc cùng nhau sử dụng bởi các  
tiến trình khác nhau. Do đó, một đối tượng đoạn (section object) được tạo ra để một file đặc  
biệt khảo sát và để dẫn ra các tính chất sau đây:  
Thuộc tính đối tượng (object attribute): Đó độ lớn tối đa, bảo vệ trang, file ảnh xạ  
hay file đánh số trang: Yes/No, địa chỉ bắt đầu giống nhau tại tất cả các tiến trình: Yes/No.  
Các phương pháp đối tượng (objectmethode): Đó là các phương pháp sản sinh, mở,  
nới rộng, chọn mặt cắt, xác định trạng thái…  
Nếu các tiến khác nhau muốn sử dụng một khoảng dữ liệu đã được làm rõ, do đó, chúng  
phải mở đối tượng section (đoạn) lựa chọn một mặt cắt. Mặt cắt này chỉ cho thấy ở trong  
không gian địa chỉ ảo của chúng, liệu nó có phải một mặt cắt bộ nhbình thường hay không  
(?).  
Để quản lý các trang vật lý (page frames), nhân của hệ điều hành Windows NT có một cấu  
trúc dữ liệu đặc biệt, đó cơ sở dữ liệu trang vật lý (page frame database). Đối với mỗi trang  
tồn tại, chúng chứa đựng một sự điền vào, nghĩa là, mỗi số trang trong các bảng của bậc thứ  
2 thì phù hợp với một chỉ số ở trong cơ sở dữ liệu khung trang và ngược lại. Trong sự khác  
biệt với các Bit trạng thái của một trang ảo, ở trong cơ sở dữ liệu khung trang tồn tại những  
thông tin trạng thái của các trang thực, mà chúng chứa đựng một trong các trạng thái sau:  
valid  
zeroed  
free  
trạng thái hợp lệ, tồn tại một sự điền vào thuận lợi các bảng trang;  
trạng thái tự do, nó được bắt đầu với giá trị 0;  
trạng thái trống, nhưng không có giá trị bắt đầu;  
standby là trạng thái chuyển tiếp trang thuộc tiến trình chính thức không nhiều nhưng có  
thể được giữ trở lại;  
modified được tả giống như trạng thái standby;  
bab  
trạng thái chứa đựng lỗi vật lý, không thể sử dụng.  
Bằng cơ cấu gọi ở mỗi lần điền vào, những lần điền vào như nhau được kết nối với nhau  
thành một danh sách. Bên cạnh những trang hợp lệ (valid), còn có năm danh sách còn lại. Cơ  
sở dữ liệu khung trang được các tiến trình sử dụng, và do vậy, đối với hệ thống đa vi xử lý, nó  
được đảm bảo bởi một cờ hiệu spinlock.  
Tuy vậy, chỉ một cờ hiệu cho cấu trúc dữ liệu được sử dụng, do đó, ở tần số đánh số  
trang cao, thì cơ sở dữ liệu khung trang có thể thu nhỏ hiệu suất của hệ thống. Một ấn bản song  
hành với nhiều mặt cắt thì ở việc điều hành song song sẽ nhanh hơn ở việc điều hành đơn điệu,  
tuy nhiên, nó vẫn chưa thực thi.  
3.3.5. Chiến lược thay thế trang:  
Sau khi dịch địa chỉ, nếu dẫn tới một trang cần dùng bị thiếu, do đó, chúng phải được bộ  
nhớ quảng đại đọc được nạp trong bộ nhớ chính vật lý. Bởi vậy, câu hỏi đặt ra là: tại chỗ  
nào và trang tồn tại nào được viết chồng lên (?).  
Nếu chúng ta cần thay tới một trang bình thường hay được dùng, thì chúng ta phải đòi  
trang này đến ngay, và như vậy, thời gian chạy chương trình sẽ gia tăng. vậy, nhiệm vụ của  
một chiến lược tốt phải là: Việc tìm trang để thể thay thế nó, thì người ta không cần để ý tới  
vấn đề này. Người ta có thể tìm thấy một chiến lược thích hợp như thế, đó chiến lược định  
thời đối với một bvi xử lý trao đổi trang, vì bộ vi xử lý này chứa đựng những yêu cầu đối với  
các trang cần dùng trong hàng đợi. Điều đó cho thấy, chiến lược này thì tốt hơn để thoả mãn  
nhanh hơn những yêu cầu về trang. Do đó, công việc đến với chúng ta là, hầu hết các tham  
chiếu chỉ xảy ra một cách cục bộ ở trong một chương trình, do đó, đối với các trang bất kỳ thì  
không có kết quả.  
Dãy các trang tham chiếu cần dùng còn được gọi tắt là dãy tham chiếu (reference string),  
có còn đặc trưng cho con đường của dòng dữ liệu và dòng điều khiển trang khi thực hiện  
chương trình. Nếu chúng ta mong muốn dãy tham chiếu này trong chương trình, do đó,  
chúng ta có thể điều chỉnh việc thay thế trang. Đó cơ sở của chiến lược tối ưu để thay đổi  
trang.  
Chiến lược tối ưu:  
L.A.Belady đã chỉ ra (1966) rằng, những sự thay thế ít nhất được đón nhận khi người ta  
chọn trang, mà muộn nhất, sẽ được dùng sau này. hiình3.12 chỉ ra dãy tham chiếu  
0,1,2,4,0,1,5,6,0,1,2,3,4… cho một bộ nhớ chính chỉ đối với 3 trang có điều kiện.  
Hình 3.12------------------  
Do đó, bảng được đọc như sau: Mỗi một cột chỉ một trạng thái của hệ thống tại một thời  
điểm, ở đó, chỉ số tại thời điểm của một cột được tăng lên từ trái sang phải ở trong bảng.  
Mỗi cột được chia làm 2 phần: Phần trên là số trang của các trang nằm ở trong bộ nhớ chính  
(RAM), còn phần dưới số trang của các trang được nạp trên bộ nhớ quảng đại (ổ đĩa cứng và  
ổ đĩa mềm). Trang cần dùng được ghi vào hang đầu tiên của khoảng bộ nhớ RAM; còn trang  
cần thay đổi được ghi vào hàng đầu tiên của khoảng bộ nhớ quảng đại. Nếu một trang dời chỗ  
lên hang thứ nhất của mỗi dãy, do đó, tất cả các số trang khác được di dịch xuống phía dưới  
còn gọi cơ chế ngăn xếp (stack mechanicmus) cho đến khi các chỗ trống được điền đầy ở  
trong RAM. Những trang mới thay đổi được viết khoanh tròn như ở tron hình 3.12 trên.  
Chiến lược tối ưu này (optimal strategy) chỉ được sử dụng ở những chương trình xác định,  
đối với các chương trình này thì các yêu cầu trang đã rõ. Tuy nhiên, những chương trình  
như thế không có trong thực tế, cho nên, chiến lược chỉ được sử dụnh với tư cách là tham  
chiếu để so sánh với các chiến lược khác ở khả năng hiệu dụng của chúng.  
Với lý do trên, các phép thống thời gian (được chi tiết hoá nhiều hơn hoặc ít hơn) được  
lập nên qua các trang cần dùng và được dùng làm cơ sở cho việc thay thế trang trên cơ sở đánh  
giá của việc thống kê. Một trong các phép đánh giá đơn giản được trợ giúp bởi các Bits trạng  
thái, mà chúng tồn tại bên cạnh thông tin địa chỉ với việc điền vào cho các bảng trang. Người  
ta ký hiệu: với R (referenced) là Bit trang được tham chiếu hay được sử dụng, còn M  
(modified) là Bit trang được điều chỉnh, tức là trang được thay đổi được viết trở lại.  
Nếu trong một khoảng thời gian đều đặn, Bit R được đặt lui nhờ bộ đếm thời gian (tức là  
vượt lên ngăn xếp thời gian), do đó, R=1 chỉ ra rằng, trang phù hợp được sử dụng trong chốc  
lát (nhưng chưa vượt lên ngăn xếp thời gian), và vì vậy, nó thì chưa cần thiết phải thay thế.  
Nếu trang được tham chiếu, do đó, bộ đếm thời gian được đặt trở lại giá trị không. Vì thế, đối  
với mỗi trang, một bộ đếm được sử dụng. Phương pháp này thì hơi đắt, do đó, người ta có thể  
áp dụng cách làm gần đúng là dùng một bộ đếm cho tất cả các Bits này với mỗi chu ký mộ lần.  
Vì không có khoảng thời gian tuyệt đối, chỉ sự khác nhau của trang trong một khoảng là  
cần thiết, do vậy, việc đặt lại các Bits R ở tại các biến cố đặc biệt, thí dụ thể dẫn tới tại một  
lỗi trang.  
Việc sử dụng thông tin cần dùng cho các trang dẫn chúng ta tới những chiến lược sau đây  
để thay đổi trang.  
Chiến lược FIFO:  
Những trang mới tới được sắp xếp vào trong một dãy tuần tự của một bảng phù hợp cho  
sau này của chúng. Nếu chúng ta chọn một trang ở đầu danh sách đại diện cho vieecej thay  
thế, do đó, chúng ta có trang cũ nhất. Nếu chúng ta phỏng đoán rằng, sự thay thế chúng được  
chứa đựng chương trình chính. Cho nên, đối với trang cũ nhất thì còn phải lưu ý thêm trạng  
thái của các Bits R. Nếu R =1, thì trang còn được dùng. Ở sự biến đổi của chiến lược FIFO  
thuần khiết, người ta có thể đặt trang này trở lại cuối danh sách và đặt R=0. Và lúc đó, khi  
trang vừa mới tới, người ta nói rằng: Trang nhận được một dịp may thứ 2, tức là khi đó trang  
tuân theo thuật toán dịp may thứ 2 (second chance algorithmus). Thật vậy, nếu R=0 thì trang  
thay thế, còn khi M=1 thì trang được viết trở lại trước đó.  
Người ta có thể đơn giản hoá phương pháp này, mà ở đó, người ta kết nối danh sách theo  
một vòng xích. Vì chỉ một số lượng trang được xác định tối đa chiếm không gian bộ nhớ  
chính, do vậy độ lớn của vòng xích nói trên không thay đổi. Chỉ sự đánh dấu trang cuối  
cùng được thay đổi mỗi khi thay đổi trang và tiếp diễn sự điền vào vòng xích với các trang  
điền vào, như một bộ chỉ thị giờ, còn gọi cơ cấu giờ (clock algorithmus). Hình 3.13 chỉ ra  
chiến lược FIFO đơn giản ở thí dụ mà chúng ta nêu trên.  
Hình 3.13-----------------  
Trong sự so sánh với chiến lược tối ưu ở trong hình 3.13 ở đây (hình 3.13) có 2 sự thay thế  
trang được dùng để làm đầy trang trong RAM.  
Chiến lược NRU:  
Chiến lược chỉ sử dụng một ít việc thống kê trang hay hoàn toàn không sử dụng cả. Do  
đó, người ta muốn điều đó được làm một cách tốt hơn nhờ các công cụ đơn giản. Với sự trợ  
giúp của hai loại Bits R và M, các trang được chia làm 4 cấp.  
1) R=0, M=0  
2) R=0, M=1  
3) R=1, M= 0  
4) R=1, M=1  
Điều rõ ràng là,các trang thuộc cấp 1 với R=0 và M=0 thì ít được sử dụng nhất, và do đó,  
chúng được thay thế đầu tiên (trước khi các trang được điều chỉnh nhưng không được tham  
chiếu tới cấp 2), mà chúng có thể còn được sử dụng lại. Quan trọng hơn, đó là các trang cấp 3,  
tức là các trang được tham chiếu thực thụ; cũng như thế, khi R=1 và M=1, các trang này được  
tả là trang cấp 4.  
Do đó, một sự quan trọng hay một ưu tiên nào đó đối với trang sẽ khẳng định: Các trang có  
số cấp nhỏ nhất được thay thế đầu tiên. Cách thức này được gọi chiến lược NRU, tức là  
chiến lược mới tới nơi không sử dụng (Not Recently Used-NRU). Hình 3.14 chỉ ra một thí dụ  
về chiến lược NRU.  
Hình 3.14----------------------  
Số lượng các thay thế thì đơn giản trong chiến lược FIFO, các trang thì khác biệt nhau ở  
trong RAM, ngay khi đó, thông tin được sử dụng qua sự tham chiếu trước đây.  
Trong hình 3.14, việc thay thế xảy ra từ yêu cầu của trang 6: Đáng lẽ trang 0 choáng chỗ,  
thì trang 5 được sử dụng ít nhất lại choáng chỗ, do đó, ở các yêu cầu tiếp theo, các trang được  
choáng chỗ nhiều hơn, trừ các trang 0 và 1.  
Chiến lược LRU:  
Một cách chính xác hơn một danh sách FIFO hay một sự tồn tại định lượng thời gian thì  
đã mang một trang tới bộ nhớ một cách không cần thiết. Do đó, tại nhiều trang với R=0 thì  
trang già nhất được xác định và thay thế, gọi chiến lược gần đó là ít nhất được sử dụng  
(Least Recently Used: LRU).  
Một giải pháp phần cứng thể được tả: đó một bộ đếm chạy nhanh, thí dụ bộ đếm  
thời gian để chỉ giờ chỉ ngày tháng năm. Tại mỗi tiếng tích- tắc thì một bậc thời gian được  
đảm nhận một cách tự động bởi việc điền vào bảng của trang đang hoạt động. Tất cả các trang  
không hoạt động thì duy trì một trạng thái cũ. Bấy giờ, nếu trang cũ nhất được tìm thấy, do đó,  
số thời gian nhỏ nhất được tìm thấy ở trong việc điền vào các bảng.  
Nếu không có phần cứng nào được sử dụng, do đó, người ta có thể phỏng trang cũ một  
cách áng chừng nhờ một thanh ghi di dịch trên từng trang. Do đó, Bit R của mỗi trang với tư  
cách là Bit cao nhất của thanh ghi được đặt vào những khoảng thời gian đều đặn và toàn bộ  
sức chứa của thanh ghi được đặt vào những khoảng thời gian đều đặn và toàn bộ sức chứa của  
thanh ghi được dịch chuyển một Bit sang phải (shift right). Hình 3.15 là một thí dụ cho sự di  
dịch sang phải của 3 trang. Thanh ghi di dịch tác dụng như một cửa sổ thời gian đối với sự  
hoạt động của trang, thí dụ với thanh ghi 8 Bit thì nó cách nhau 8 phiên thời gian. Sự di dịch  
sang phải làm ảnh hưởng thông tin các trang cũ. Nếu người ta quan niệm trạng thái của thanh  
ghi di dịch như một con số, do đó, giá trị con số này là lớn nhất, giá trị này cũng đã ghi lại  
tất cả sự hoạt động trong thời gian cuối cùng, giá trị của sự hoạt động này cũng giảm dần theo  
khoảng thời gian gia tăng.  
Hình 3.15-------------------  
Trang để thay thế theo chiến lược LRU chỉ ra con số nhỏ nhất ở trong thanh ghi di dịch.  
Hình 3.16 chỉ ra một thí dụ về chiến lược LRU trình bày trên.  
Hình 3.16------------------  
Tuy nhiên, sơ đồ trong hình 3.16 chưa phản ảnh một cách đầy đủ cơ sở quyết định của vấn  
để: Khi tham chiếu trang thì nó chưa rõ ràng là một sự kiện thông thường của việc thay thế  
trang, do đó, sau đây nghiên cứu tiếp theo chiến lược NRU.  
Chiến lược NFU (Not Frequently Used):  
Để thay thế trang, một chiến lược tiếp theo cho thấy, thường hay được sử dụng nhất. Ở  
đây nó không đo đạt từng thời điểm như ở chiến lược LRU, tại thời điểm đó, trang không nằm  
trong bộ nhớ, đặc biệt trang được dùng trong khoảnh khắc. Thật vậy, đối với mỗi trang,  
một bộ đếm được dẫn ra, mà nó được gia tăng một cách chu kỳ khi sử dụng (r=1). Sau đó,  
trang được đặt với giá trị nhỏ nhất.  
Đối với chiến lược này, vấn đề ở chỗ, các trang được sử dụng mạnh mẽ trước đây, bây  
giờ rất khó khăn choáng chỗ ở trong bộ nhớ chính, vì giá trị con số của chúng thì rất cao. Do  
đó, điều có ý nghĩa là, người ta dự định dùng thêm một cơ cấu làm già để phòng tránh biến cố  
(olding mechanismus).  
Việc áp dụng các chiến lược khác nhau cũng rất khác nhau. Việc lựa chọn chiến lược tốt  
nhất việc thiết kế theo của kỷ thuật viên sẽ trở nên hoàn hảo, nếu chúng ta nhìn nhận một  
cách sâu sắc hơn về các cơ cấu thay thế.  
3.3.6. Mô hình hoá và việc phân tích thay thế trang  
Trong mục này, chúng ta sẽ khảo sát thực nghiệm, để từ việc nghiên cứu tìm thấy mô hình  
đối với các chiến lược đặc điểm của các thuật toán. Do đó, đầu tiên, chúng ta lưu ý đến câu  
hỏi: Thực ra một trang cần thiết phải lớn bao nhiêu (?). Sau đây những chi tiết được trình bày  
để giải quyết câu hỏi vừa nêu.  
Chiều dài trang tối ưu:  
Nếu K là dùng lượng (size) của bộ nhớ chính và s là kích cở của một trang. Ở đây, s không  
phải nói về kích cở phần cứng của trang, mà đặc biệt, s biểu thị kích cở hệ điều hành của một  
trang; vì thế, được áp dụng nhiều trang phần cứng (hardware pages) cho một trang phần  
mềm (software pages).  
Chúng ta nhận thấy rằng:  
+ Chiều dài của dữ liệu được phân chia bằng nhau một cách ngẫn nhiên, do đó, tất cả các  
giá trị của từng lát cắt (mỗi đoạn được phân chia) nằm trong khoảng [0,s]. Thông thường, lát  
cắt trung bình là s/2 đơn vị bộ nhớ, thí dụ các từ (word) trên một tiến trình.  
+ Mỗi bảng trang bậc 1 biểu thị sự điền vào trên mỗi tiến trình là [K/s], mà ở đó, mỗi sự  
điền vào yêu cầu một đơn vị bộ nh(thí dụ một word).  
Do đó, sự tổn thất (V) của các đơn vị bộ nhớ xuất hiện trên mỗi tiến trình với hệ số tổn thất  
fv được biểu thị bằng biểu thức sau:  
V = (K/s + s/2) ~ K fv  
các trang lớn thì một mặt các bảng trang trở nên nhỏ hơn, nhưng mặt khác các lát cắt lại  
trở nên lớn hơn. Ngược lại, ở các trang nhỏ thì lát cắt trở nên nhỏ hơn, nhưng độ lớn của bảng  
lại tăng lên. Vì vậy, giữa hai thái cực, một sự tối thiểu cục bộ. Khi s-> 0 thì chúng ta sẽ  
nhận được một sự tối thiểu của tổn thất, tức xảy ra điều kiện sau đây:  
Công thức -------------------  
với fv =2/sopt  
Trong đó, K và s có thứ nguyên [kByte], fv thứ nguyên [%].  
Thí dụ: Nếu không = 5000kB, thì do đó ta xác định được sopt = 100kB với hệ số tổn thất bộ  
nhớ chính là fv=2%.  
Độ lớn của trang được dùng thực chất ở trong hệ điều hành còn tạo ra nhiều tiêu chuẩn tiếp  
theo. Các trang lớn rất có ý nghĩa đối với lát cắt thời gian, nó sẽ không có lợi những đòi hỏi  
của bộ nhớ bổ sung bị thu hẹp.Nghĩa là, khi lát cắt thời gian lớn thì sẽ không thoả mãn với mô  
hình của một yêu cầu bộ nhớ được phân chia đồng đều trên mỗi trang. Từ lý do vừa nêu, các  
độ lớn trang thường được phân chia nhỏ hơn.  
Đối với độ lớn trang còn có nhiều nhân tố khác, đó thời gian được dùng để nạp một trang  
trên bộ nhớ quảng đại cũng như lát cắt của bộ nhớ quảng đại ở một độ lớn file trung bình.  
Nếu giả sử các files có độ lớn chừng 1kB, do đó, đối với một sự áp dụng hữu hiệu của các bộ  
nhớ quảng đại, độ lớn trang được sử dụng phải nằm trong khoảng đó. Nếu tại một độ lớn file  
trung bình 1kB, chúng ta muốn khẳng định một độ lớn trang khoảng 100kB, khi đó, trung bình  
đối với mỗi file có khoảng 99kB chưa được sử dụng. Đó một khả năng chịu tải quá kém.  
Để đáp ứng được cả hai yêu cầu vừa đơn vị bộ nhớ nhỏ vừa số lượng chuyển đổi  
trang lớn, rất nhiều hệ điều hành đã thử nghiệm để quan tâm tới: nếu file có nhiều trang thì  
độ lớn của trang phải nhỏ.  
Số lượng trang tối ưu:  
Một công việc quan trọng tiếp theo lôi cuốn các nhà quản hệ thống, đó là câu trả lời cho  
câu hỏi: Nhiều tiến trình cần thiết phải được nạp vào bộ nhớ chính như thế nào (?). Điều đó  
cũng phù hợp với câu hỏi: Nhiều trang trên một tiến trình phải được đặt ở chỗ nào trong bộ  
nhớ chính (?).  
Bây giờ chúng ta khảo sát một thí dụ. Chúng ta so sánh thuật toán FIFO đối với một hệ  
thống có 4 trang RAM (bảng phía trái) và một hệ thống có 5 trang RAM (bảng phía phải).  
Hình 3.17-------------------------  
Chúng ta nhìn thấy một nguyên cớ ngẫu nhiên: Ở hệ thống có 4 trang RAM thì chỉ có 7 lần  
thay thế được sử dụng, còn ở hệ thống 5 trang RAM có 8 lần thay thế trang được sử dụng, vậy  
bộ nhớ chính còn có thể được dùng nhiều hơn. Nguyên cớ này làm xuất hiện một thuật  
toán mang tên nhà phát minh L.A.Balady, mà nó có tên gọi thuật toán các kỳ dị Balady.  
Ngược lại chúng ta khảo sát thuật toán LFU trong hình 3.18 ở dưới đây.  
Hình 3.18----------------------  
Việc sử dụng bổ sung bộ nhớ nhờ một trang RAM vẫn không làm thay đổi các trang (khác  
với thuật toán FIFO) nằm ở trong bộ nhớ chính. Điều đó thì cũng logic: Ở chiến lược LFU, các  
trang thường được dùng thì luôn luôn đứng ở phía trên trong danh sách ưu tiên, luôn luôn độc  
lập với việc khi chúng được nạp hay khi chúng trang RAM, và đồng thời, chúng cũng độc  
lập với giới hạn giữa RAM và các ổ đĩa (cứng mềm). Danh sách ưu tiên của chiến lược  
LFU được thực thi với sự trợ giúp của một cơ cấu ngăn xếp: Các trang có ưu tiên cao đứng  
hoàn toàn trên và các trang khác di dịch xuống phía dưới. Trang nào được di dịch ra khỏi  
giới hạn của RAM và các ổ đĩa thì được nạp trên bộ nhớ quảng đại. Các kiểu thuật toán tác  
dụng lên m trang trong bộ nhớ thì độc lập với việc chúng trả lại tham chiếu với m hay m+1  
trang RAM. Chúng có tên là các giải thuật ngăn xếp (stack- algorithsmen). Điều đó chỉ ra  
rằng, giải thuật các kỳ dị Balady không thuộc các thuật toán ngăn xếp vừa nêu. Tập hợp các  
trang được tham chiếu W(t,∆t) thì rất quan trọng (ở đây: t là một thời điểm nào đó, ∆t nhịp  
thời gian), nó còn chứa đựng thêm những trang đặc biệt hay được dùng phía dưới. Nếu  
không có đúng, tiến trình sẽ làm việc kém hiệu quả; do đó, W(t,∆t) được biểu thị tập hợp  
công tác (working set). Tập hợp trung bình working set (W(t,∆t))t đặc trưng cho diễn biến của  
một tiến trình. Người ta lưu ý rằng, định nghĩa này thì khác xa với định nghĩa gốc do P.J.  
Denning nêu ra (1980), mà với điều đó, người ta xác định số lượng tối thiểu các trang, mà đối  
với việc thực hiện một tiến trình thì các trang này rất cần thiết.  
Thí dụ về Tập hợp công tác của P.J. Denning:  
Nếu ở một chương trình chúng ta có các lệnh này:  
MOVE A,B  
MOVE C,D  
Trong đó: A,B,C,D là các biến ở trong các trang khác nhau, do đó, tiến trình chỉ thể làm  
việc, nếu bên cạnh các trang mã (codepages) tiến trình còn có 4 trang tham chiếu địa chỉ được  
sử dụng. Khi tiến trình cần dùng tối thiểu 5 trang, do đó theo P.J.Denning, tạp hợp công tác có  
giá trị w=5 trang, nó thì độc lập khi các trang tiếp theo được sử dụng.  
Trong các bảng nêu trên, việc điền đầy các cột đầu tiên (để sử dụng các trang RAM) thì  
không chỉ ra một cái gì đặc biệt, ở đây, không có trang nào được thay thế. Tuy nhiên, điều  
đó chỉ thể được xảy ra với sự trợ giúp của ngắt lỗi trang (page fault interrupt), nếu không  
còn cái gì khác thì được hệ điều hành đảm nhận phòng ngừa. Việc nạp vào hay việc thay thế  
các trang được biểu thị là yêu cầu thiết đặt trang (demand paging). Ngược lại, người ta có thể  
Tải về để xem bản đầy đủ
doc 39 trang baolam 07/05/2022 6200
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hệ điều hành - Chương 3: Quản lý bộ nhớ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docgiao_trinh_he_dieu_hanh_chuong_3_quan_ly_bo_nho.doc