You are on page 1of 16

1. Bộ nhớ ảo là gì?

1.1. Định nghĩa


- Bộ nhớ ảo là một vùng thuộc không gian lưu trữ của bộ nhớ phụ hệ
thống máy tính (chẳng hạn như ổ cứng HDD hoặc SSD). Nó hoạt động như
thể là một phần của RAM hoặc bộ nhớ chính hệ thống.
- Lý tưởng nhất là khi dữ liệu cần thiết để chạy các ứng dụng được lưu
trữ trong RAM, nơi mà chúng có thể được CPU truy cập nhanh chóng. Nhưng
khi chạy các ứng dụng nặng, hoặc khi chạy nhiều ứng dụng cùng một lúc,
RAM của hệ thống có thể bị đầy.
- Để khắc phục sự cố này, một số dữ liệu lưu trữ trong RAM không
được sử dụng tích cực có thể được tạm thời chuyển sang bộ nhớ ảo (nằm trên
ổ cứng hoặc thiết bị lưu trữ khác). Điều này giúp giải phóng không gian trong
RAM, sau đó có thể được sử dụng để chứa dữ liệu mà hệ thống cần truy cập
sắp xảy ra.
- Bằng cách hoán đổi dữ liệu giữa RAM và bộ nhớ ảo khi không cần
thiết, và trở lại từ bộ nhớ ảo sang RAM khi cần, hệ thống có thể tiếp tục hoạt
động trơn tru với lượng RAM vật lý ít hơn nhiều so với yêu cầu khác.
- Bộ nhớ ảo cho phép hệ thống chạy các ứng dụng lớn hơn hoặc chạy
nhiều ứng dụng hơn cùng lúc mà không bị hết RAM. Cụ thể, hệ thống có thể
hoạt động như thể tổng tài nguyên RAM của nó bằng: dung lượng RAM vật lý
+ dung lượng RAM ảo.
1.2. Tại sao cần có Bộ nhớ ảo?
- Đơn giản vì RAM vật lý rất đắt đỏ nên bộ nhớ ảo được phát triển, mỗi
GB trên RAM đắt hơn nhiều so với các phương tiện lưu trữ như ổ cứng HDD
và SSD. Vì lý do đó, sử dụng kết hợp RAM vật lý và bộ nhớ ảo sẽ ít tốn kém
hơn nhiều so với việc trang bị hệ thống RAM máy tính nhiều hơn.
- Nhờ việc sử dụng bộ nhớ ảo (hoặc tăng bộ nhớ ảo) không bị phát sinh
thêm chi phí (vì sử dụng không gian lưu trữ hiện có), nó cung cấp một cách để
máy tính sử dụng nhiều bộ nhớ hơn so với khả năng thực tế trên hệ thống.
- Mặt khác, tất cả các hệ thống máy tính đều có giới hạn về dung lượng
RAM vật lý có thể được lắp đặt (do phần cứng và phần mềm quy định), sử
dụng bộ nhớ ảo cho phép hệ thống tiếp tục hoạt động vượt quá giới hạn RAM
vật lý đó. Đây thực sự là một lợi ích rất đáng nói của bộ nhớ ảo.
1.3. Sự khác biệt giữa Bộ nhớ ảo và Bộ nhớ vật lý
* Bộ nhớ vật lý thực sự chính là Ram, là một hình thức của kho dữ liệu của
máy tính nó lưu trữ các chương trình đang được thực thi. Ngược lại bộ nhớ ảo
là một kỹ thuật quản lý bộ nhớ nó cho người dùng cảm giác bộ nhớ vật lý như
được mở rộng ra. Như vậy đây là sự khác biệt chính giữa bộ nhớ ảo và bộ nhớ
vật lý.
* Kiểu bộ nhớ :Trong khi bộ nhớ vật lý là bộ nhớ thực còn bộ nhớ ảo chỉ là
bộ nhớ logic
* Tốc độ :Bộ nhớ vật lý nhanh hơn bộ nhớ ảo.
* Kỹ thuật : Bộ nhớ vật lý sử dụng kỹ thuật hoán đổi, bộ nhớ ảo sự dụng kỹ
thuật phân trang.
* CPU :Bộ nhớ vật lý có thể trực tiếp truy cập vào CPU trong khi đó bộ nhớ
ảo lại không thể làm được như vậy.
* Kích cỡ : Bộ nhớ vật lý bị giới hạn bởi kích cỡ của Ram chip. Tuy nhiên
bộ nhớ ảo thì bị giới hạn bởi kích cỡ của ổ cứng.
2. Cách thức hoạt động của bộ nhớ ảo
- Bộ nhớ ảo sử dụng cả phần cứng và phần mềm để hoạt động. Khi một
ứng dụng đang được sử dụng, dữ liệu từ chương trình đó được lưu trữ trong
một địa chỉ vật lý sử dụng RAM. Một đơn vị quản lý bộ nhớ (MMU) ánh xạ
địa chỉ tới RAM và tự động dịch địa chỉ. Ví dụ, MMU có thể ánh xạ một
không gian địa chỉ logic đến một địa chỉ vật lý tương ứng.
- Nếu, tại bất kỳ thời điểm nào, dung lượng RAM cần thiết cho việc gì
đó khẩn cấp hơn, dữ liệu có thể được hoán đổi khỏi RAM và vào bộ nhớ ảo.
Trình quản lý bộ nhớ của máy tính chịu trách nhiệm theo dõi sự thay đổi giữa
bộ nhớ vật lý và bộ nhớ ảo. Nếu cần lại dữ liệu đó, MMU của máy tính sẽ sử
dụng công tắc ngữ cảnh để tiếp tục thực thi.
- Trong khi sao chép bộ nhớ ảo vào bộ nhớ vật lý, Hệ điều hành sẽ chia
bộ nhớ với một số địa chỉ cố định thành các tập trang hoặc tệp hoán đổi. Mỗi
trang được lưu trữ trên một đĩa và khi cần trang, và hệ điều hành của bộ nhớ
ảo sẽ sao chép nó từ đĩa vào bộ nhớ chính và chuyển các địa chỉ ảo thành các
địa chỉ thực.
- Tuy nhiên, quá trình hoán đổi bộ nhớ ảo thành bộ nhớ vật lý diễn ra
khá chậm. Điều này có nghĩa là sử dụng bộ nhớ ảo thường gây ra giảm hiệu
suất đáng kể. Do hoán đổi, máy tính có nhiều RAM hơn được coi là có hiệu
suất tốt hơn.
3. Quản lý bộ nhớ ảo.
* Có 2 kỹ thuật quản lý bộ nhớ ảo:
- Phân trang theo yêu cầu: Tức là phân trang kết hợp với đổi chỗ.
- Phân đoạn theo yêu cầu: Tức là phân đoạn kết hợp với đổi chỗ.
* Trong kỹ thuật bộ nhớ ảo:
- Bộ phận quản lý bộ nhớ không nạp tất cả các trang/đoạn của một tiến
trình vào bộ nhớ để nó hoạt động, mà chỉ nạp các trang/đoạn cần thiết
tại thời điểm khởi tạo. Sau đó, khi cần bộ phận quản lý bộ nhớ sẽ dựa
vào PCT hoặc SCT của mỗi tiến trình để nạp các trang/đoạn tiếp theo.
- Nếu có một trang/đoạn của một tiến trình cần được nạp vào bộ nhớ
trong tình trạng trên bộ nhớ không còn khung trang/phân đoạn trống thì
bộ phận quản lý bộ nhớ sẽ đưa một trang/đoạn không cần thiết tại thời
điểm hiện tại ra bộ bộ nhớ ngoài (swap-out), để lấy không gian nhớ
trống đó nạp trang/đoạn vừa có yêu cầu. Trang/đoạn bị swap out sẽ
được đưa vào tại thời điểm thích hợp hoặc cần thiết sau này (swap-in).
* Để cài đặt được bộ nhớ ảo hệ điều hành cần phải có:
- Một lượng không gian bộ nhớ phụ (đĩa) cần thiết đủ để chứa các
trang/đoạn bị swap out, không gian đĩa này được gọi là không gian
swap.
- Có cơ chế để theo dõi các trang/đoạn của một tiến trình, của tất cả các
tiến trình đang hoạt động trên bộ nhớ chính, là đang ở trên bộ nhớ chính
hay ở trên bộ nhớ phụ. Trong trường hợp này hệ điều hành thường đưa
thêm một bít trạng thái (bit present) vào các phần tử trong PCT hoặc
SCT.
- Dựa vào các tiêu chuẩn cụ thể để chọn một trang nào đó trong số các
trang đang ở trên bộ nhớ chính để swap out trong trường hợp cần thiết.
Các hệ điều hành đã đưa ra các thuật toán cụ thể để phục vụ cho mục
đích này.
3.1. Phân trang theo yêu cầu (Demand Paging).
* Hãy tưởng tượng cách mà một chương trình có thể được nạp từ ổ đĩa
vào bộ nhớ. Một trong các phương án là nạp toàn bộ chương trình vào bộ nhớ
vật lý khi chương trình thực thi. Tuy nhiên, một vấn đề của phương pháp này
là chúng ta có thể không cần toàn bộ chương trình ở trong bộ nhớ lúc đầu. Giả
sử một chương trình bắt đầu với một danh sách các tùy chọn có sẵn để người
dùng lựa chọn. Nếu ta nạp toàn bộ chương trình vào bộ nhớ sẽ dẫn đến việc tải
mã thực thi cho tất cả các tùy chọn, bất kể liệu người dùng có chọn tùy chọn
nào không. Một chiến lược thay thế là chỉ nạp các trang khi chúng được yêu
cầu. Kỹ thuật này được biết đến với tên gọi "phân trang theo yêu cầu" và được
sử dụng phổ biến trong các hệ thống bộ nhớ ảo. Với bộ nhớ ảo được áp dụng
demand paging, các trang được nạp chỉ khi chúng được yêu cầu trong quá
trình thực thi chương trình. Các trang không bao giờ được truy cập sẽ không
bao giờ được nạp vào bộ nhớ vật lý.
3.1. 1. Tổ chức hệ thống của kỹ thuật phân trang.
* Hệ thống phân trang theo
yêu cầu tương tự như hệ thống
phân trang với đổi chỗ trang (hình
bên) và quá trình sẽ nằm trong bộ
nhớ phụ (thường là một đĩa). Khi
chúng ta muốn thực thi một quá
trình, chúng ta đổi chỗ nó vào bộ
nhớ.
* Trong kỹ thuật phân trang đơn, mỗi tiến trình sở hữu một bảng trang
riêng, khi tất cả các trang của tiến trình được nạp vào bộ nhớ chính thì bảng
trang của tiến trình được tạo ra và cũng được nạp vào bộ nhớ (nếu lớn), mỗi
phần tử trong bảng trang chỉ chứa số hiệu của khung trang mà trang tương ứng
được nạp vào. Trong kỹ thuật bộ nhớ ảo cũng vậy, nhưng một phần tử trong
bảng trang sẽ chứa nhiều thông tin phức tạp hơn. Bởi vì trong kỹ thuật bộ nhớ
ảo chỉ có một vài page của tiến trình được nạp vào bộ nhớ chính, do đó cần
phải có một bít để cho biết một page tương ứng của tiến trình là có hay không
trên bộ nhớ chính và một bít cho biết page có bị thay đổi hay không so với lần
nạp gần đây nhất. Cụ thể là nó phải có thêm các bít điều khiển:
- Bít P (Present): Cho biết trang tương ứng đang ở trên bộ nhớ
chính (= 1) hay ở trên bộ nhớ phụ (= 0).

- Bít M (Modify): Cho biết nội dung của trang tương ứng có bị
thay đổi hay không so với lần nạp gần đây nhất. Nếu nó không bị
thay đổi thì việc phải ghi lại nội dung của một trang khi cần phải
đưa một trang ra lại bộ nhớ ngoài là không cần thiết, điều này
giúp tăng tốc độ trong các thao tác thay thế trang trong khung
trang.

- Các bít điều khiển khác: Các bít này phục vụ cho các mục đích
bảo vệ trang và chia sẻ các khung trang.
3.1.2. Chuyển đổi địa chỉ trong hệ thống phân trang:
* Chương trình của người sử dụng sử dụng địa chỉ logic hoặc virtual
gồm: page number và offset để truy xuất dữ liệu trên bộ nhớ chính. Bộ phận
quản lý bộ nhớ phải chuyển địa chỉ virtual này thành địa chỉ vật lý tương ứng
bao gồm: page number và offset. Để thực hiện việc này bộ phận quản lý bộ
nhớ phải dựa vào bảng trang (PCT)

3.1.2. Lỗi trang (Page fault).


* Khi tiến trình truy cập tới một trang, bit P của trang sẽ được kiểm tra.
* Nếu trang đã ở trong bộ nhớ, việc truy cập diễn ra bình thường.
Ngược lại, nếu trang chưa được nạp vào, lỗi trang sẽ xảy ra.
* Khi xử lý lỗi trang có thể gặp một trong hai tình huống sau:
- Hệ thống còn frame trống (a): Hệ điều sẽ thực hiện các bước sau:
1. Tìm vị trí của page cần truy xuất trên đĩa.
2. Nạp page vừa tìm thấy vào bộ nhớ chính.
3. Cập nhật lại bảng trang (PCT) tiến trình.
4. Tái kích hoạt tiến trình để tiến trình tiếp tục hoạt động.

- Hệ thống không còn frame trống (b):


1. Tìm vị trí của page cần truy xuất trên đĩa.

2. Tìm một page không hoạt động hoặc không thực sự cần thiết tại
thờ điểm hiện tại để đưa nó ra đĩa, lấy frame trống đó để nạp page mà
hệ thống vừa cần truy xuất. Page bị swap out sẽ được hệ điều hành
swap in trở lại bộ nhớ tại một thời điểm thích hợp sau này.
3. Cập nhật PCT của tiến trình có page vừa bị đổi chỗ
4. Nạp trang vừa tìm thấy ở trên (bước 1) vào frame trống ở trên
(bước 2).
5. Cập nhật lại bảng trang (PCT) của tiến trình.
6. Tái kích hoạt tiến trình để tiến trình tiếp tục hoạt động.
3.1.3. Một số vấn đề cần chú ý khi xử lý lỗi trang :
- Nên chọn trang nào trong số các trang trên bộ nhớ chính để đổi chỗ:
- “Neo” một số trang.
- Phải tránh được trường hợp hệ thống xảy ra hiện tượng “trì trệ hệ
thống”.
- Đánh dấu các trang bị thay đổi.

3.1.4. Một số chiến lược đổi trang:


* Đổi trang tối ưu( OPT): thay thế trang mà nó không được dùng cho một
khoảng thời gian lâu nhất. Sử dụng giải thuật thay thế trang đảm bảo tỉ lệ lỗi
trang nhỏ nhất có thể cho một số lượng khung cố định.
* Đổi trang theo nguyên tắc FIFO: Giải thuật thay thế trang đơn giản nhất là
giải thuật FIFO. Giải thuật này gắn với mỗi trang thời gian khi trang đó được
mang vào trong bộ nhớ. Khi một trang phải được thay thế, trang cũ nhất sẽ
được chọn. Chú ý rằng, nó không yêu cầu nghiêm ngặt để ghi thời gian khi
trang được mang vào. Chúng ta có thể tạo một hàng đợi FIFO để quản lý tất cả
trang trong bộ nhớ. Chúng ta thay thế trang tại đầu hàng đợi. Khi trang được
mang vào bộ nhớ, chúng ta chèn nó vào đuôi của hàng đợi.

* Trang ít được dùng nhất (LRU):


- Sự khác biệt chủ yếu giữa giải thuật FIFO và OPT là FIFO dùng thời
gian khi trang được mang vào bộ nhớ; giải thuật OPT dùng thời gian khi trang
được sử dụng.
- Thay thế trang LRU gắn với mỗi trang thời gian sử dụng cuối cùng
của trang. Khi một trang phải được thay thế, LRU chọn trang không được
dùng trong một khoảng thời gian lâu nhất. Chiến lược này là giải thuật thay
thế trang tối ưu tìm kiếm lùi theo thời gian hơn là hướng tới

* Chiến lược đồng hồ (CLOCK):


- Đây là cải tiến của thuật toán FIFO nhằm tránh thay thế những trang mặc
dù đã được nạp vào lâu nhưng hiện vẫn có khả năng được sử dụng.
- Khi chọn trang, dựa trên hai thông tin. Thứ nhất, đó là thứ tự nạp trang
vào bộ nhớ. Thứ hai, thông tin về việc gần đây trang có được truy cập hay

không.

3.2. Phân đoạn theo yêu cầu (Demand Segmentation).


3.2.1. Tổ chức của hệ thống phân đoạn.
* Sự phân đoạn cho phép người lập trình xem bộ nhớ như bao gồm một
tập các không gian nhớ hoặc các đoạn (segment) có địa chỉ được xác định.
Với bộ nhớ ảo người lập trình không cần quan tâm đến giới hạn bộ nhớ được
đưa ra bởi bộ nhớ chính. Các segment có thể có kích thước không bằng nhau
và được ấn định một cách động. Địa chỉ tham chiếu bộ nhớ trong trường hợp
này bao gồm: Segment Number và Offset.
* Trong kỹ thuật phân đoạn đơn, mỗi tiến trình sở hữu một bảng đoạn
riêng, khi tất cả các đoạn của tiến trình được nạp vào bộ nhớ chính thì bảng
đoạn của tiến trình được tạo ra và cũng được nạp vào bộ nhớ, mỗi phần tử
trong bảng đoạn chứa địa chỉ bắt đầu của đoạn tương ứng trong bộ nhớ chính
và độ dài của đoạn. Trong kỹ thuật bộ nhớ ảo cũng vậy, nhưng một phần tử
trong bảng đoạn sẽ chứa nhiều thông tin phức tạp hơn. Bởi vì trong kỹ thuật
bộ nhớ ảo chỉ có một vài segment của tiến trình được nạp vào bộ nhớ chính,
do đó cần phải có một bít để cho biết một đoạn tương ứng của tiến trình là có
hay không trên bộ nhớ chính và một bít cho biết đoạn có bị thay đổi hay
không so với lần nạp gần đây nhất. Cụ thể là nó phải có thêm các bít điều
khiển:
- Bít P (Present): Cho biết đoạn tưong ứng đang ở trên bộ
nhớ chính (= 1) hay trên bộ nhớ phụ (= 0).
- Bít M (Modify): Cho biết nội dung của đoạn tương ứng có
bị thay đổi hay không so với lần nạp gần đây nhất. Nếu nó
không bị thay đổi thì việc phải ghi lại nội dung của một
đoạn khi cần phải đưa một đoạn ra lại bộ nhớ ngoài là
không cần thiết, điều này giúp tăng tốc độ trong các thao
tác thay thế đoạn.
- Các bít điều khiển khác: Các bít này phục vụ cho các mục
đích bảo vệ trang và chia sẻ các khung trang.
3.2.2. Chuyển đổi địa chỉ trong hệ thống phân đoạn.
* Chương trình của người sử dụng sử dụng địa chỉ logic hoặc virtual
gồm: segment number và offset để truy xuất dữ liệu trên bộ nhớ chính. Bộ
phận quản lý bộ nhớ phải chuyển địa chỉ virtual này thành địa chỉ vật lý tương
ứng bao gồm: segment number và offset. Để thực hiện việc này bộ phận quản
lý bộ nhớ phải dựa vào bảng đoạn (SCT). Vì kích thước của SCT có thể lớn và
thay đổi theo kích thước của tiến trình do đó trong kỹ thuật bộ nhớ ảo hệ điều
hành thường chứa SCT trong bộ nhớ chính và dùng một thanh ghi để ghi địa
chỉ bắt đầu của bộ nhớ nơi lưu trữ SCT của tiến trình khi tiến trình được nạp
vào bộ nhớ chính để chạy. Thành phần segment number của địa chỉ ảo được
dùng để chỉ mục đến bảng đoạn và tìm địa chỉ bắt đầu của segment tương ứng
trong bộ nhớ chính. Giá trị này sẽ được cộng với thành phần Offset có trong
địa chỉ ảo để có được địa chỉ vật lý thực cần tìm

3.2.3. Một số thuật lợi của phân đoạn không gian địa chỉ.
1. Nó đơn giản để điều khiển các cấu trúc dữ liệu lớn dần (growing)
trong quá trình hoạt động của hệ thống. Nếu người lập trình không biết trước
dữ liệu sẽ lớn đến chừng nào tại thời điểm chạy thì việc ấn định kích thước
của động cho segment mang lại nhiều thuận lợi cho người lập trình.
2. Nó cho phép các chương trình không phụ thuộc vào sự thay đổi vào
sự biên dịch lại. Nó không yêu cầu thiết lập lại toàn bộ chương trình khi
chương trình được liên kết hoặc được nạp trở lại. Việc này chỉ có thể thực
hiện bằng cách sử dụng nhiều phân đoạn (Multiple Segment).
3. Nó thích hợp với chiến lược chia sẻ segment giữa các tiến trình.
Người lập trình có thể đặt một chương trình tiện ích hoặc một bảng dữ liệu
thường sử dụng vào một segment mà có thể được tham chiếu bởi nhiều tiến
trình khác nhau.
4. Nó thích hợp với chiến lược bảo vệ bộ nhớ. Bởi vì một segment có
thể được sinh ra để chứa một tập xác định các thủ tục hoặc dữ liệu, sau đó
người lập trình hoặc người quản trị hệ thống có thể gán quyền truy cập với các
độ ưu tiên thích hợp nào đó

4. Lợi ích của việc sử dụng bộ nhớ ảo


a) Các giải thuật quản lý bộ nhớ trong là cần thiết vì các chỉ thị đang được
thực thi phải ở trong bộ nhớ vật lý. Tiếp cận đầu tiên để thoả mãn yêu cầu này
các lệnh phải đặt trong bộ nhớ vật lý. Tuy nhiên điều này lại làm cho chương
trình bị giới hạn kích thước với kích thước của bộ nhớ vật lý.
- Trên thực tế, việc kiểm tra các chương trình thực cho chúng ta thấy
rằng, trong nhiều trường hợp, toàn bộ chương trình là không cần thiết. Thậm
chí trong những trường hợp toàn bộ chương trình được yêu cầu nhưng không
phải tất cả chương trình được yêu cầu cùng một lúc.
- Lợi ích khi thực thi chương trình chỉ một phần chương trình ở trong bộ
nhớ:
 Một chương trình sẽ không còn bị hạn chế bởi dung lượng
bộ nhớ vật lý khả dụng. Người dùng sẽ có thể viết chương
trình cho một không gian địa chỉ ảo cực lớn, đơn giản hóa
tác vụ lập trình.
 Bởi vì mỗi chương trình người dùng có thể chiếm ít bộ nhớ
vật lý hơn, nhiều chương trình có thể được chạy cùng một
lúc, với mức tăng tương ứng về mức sử dụng CPU nhưng
không tăng thời gian phản hồi hoặc thời gian quay vòng.
 Cần ít yêu cầu I/O hơn để tải hoặc trao đổi. chương trình
chạy nhanh hơn
- Do đó, việc chạy một chương trình không hoàn toàn nằm trong bộ nhớ
sẽ có lợi cho cả hệ thống và người dùng.
b) Bộ nhớ ảo liên quan đến việc tách bộ nhớ logic nguười dùng khỏi bộ nhớ
vật lý. Sự tách biệt này cho phép cung cấp một bộ nhớ ảo cực lớn cho các lập
trình viên khi chỉ có một bộ nhớ vật lý nhỏ hơn.
- Bộ nhớ ảo làm cho nhiệm vụ kết hợp chương trình dễ dàng hơn nhiều,
lập trình viên không còn phải lo lắng về dung lượng bộ nhớ vật lý khả dụng;
thay vào đó, có thể tập trung vào vấn đề được lập trình.
- Không gian địa chỉ ảo bao gồm các lỗ hổng được gọi là không gian địa
chỉ thưa thớt. các lỗ hổng có thể được lấp đầy nếu chúng ta muốn liên kết
động các thư viện (hoặc có thể là các đối tượng )khác trong khi thực hiện
chương trình.
c) Ngoài việc tách bộ nhớ logic khỏi bộ nhớ vật lý, bộ nhớ ảo cho phép các tệp
và bộ nhớ được chia sẻ bởi hai hoặc nhiều tiến trình thông qua chia sẻ trang,
nó mang lợi ích sau:
- Các thư viện hệ thống có thể được chia sẻ bởi một số quy trình thông
qua ánh xạ đối tượng được chia sẻ vào một không gian địa chỉ ảo.

- Bộ nhớ ảo cho phép một tiến trình tạo một vùng bộ nhớ mà nó có thể
chia sẻ với một tiến trình khác. Các tiến trình chia sẻ vùng này coi nó là một
phần của không gian địa chỉ ảo của chúng
- Tăng tốc độ tạo quy trình.
5. Hạn chế:
- Bộ nhớ ảo sẽ xử lý và truy cập lâu hơn so với bộ nhớ vật lý.
- Sẽ tốn nhiều thời gian để tải các ứng dụng được lưu trữ ảo khi máy
tính chuyển đổi giữa bộ nhớ ảo và bộ nhớ vật lý.
- Những máy có ram thấp có thể bị giật, đó là khi máy liên tục chuyển
đổi giữa bộ nhớ ảo vả bộ nhớ vật lý. Điều này có thẻ làm chậm máy tính, gây
ra sự chạm trễ về hiệu suất.
- Làm giảm dung lượng ổ cứng khả dụng và làm giảm tuổi thọ của ổ
cứng.
- Làm giảm tính ổn định của hệ thống và hệ suất tổng thể.

6. Tổng kết
Bộ nhớ ảo là một kỹ thuật cho phép chúng ta ánh xạ một không gian địa chỉ
logic lớn vào một bộ nhớ vật lý nhỏ hơn. Bộ nhớ ảo cho phép chúng ta chạy
các tiến trình cực kỳ lớn và tăng độ đa nhiệm, tăng sử dụng CPU. Hơn nữa, nó
giúp các nhà lập trình ứng dụng không phải lo lắng về sẵn có bộ nhớ. Ngoài
ra, với bộ nhớ ảo, một số tiến trình có thể chia sẻ thư viện và bộ nhớ của hệ
thống.
Bộ nhớ ảo thường được thực hiện bằng phân trang theo yêu cầu. Phân trang
theo yêu cầu không đưa trang vào bộ nhớ cho đến khi trang đó được tham
chiếu. Việc tham chiếu đầu tiên gây ra lỗi trang cho hệ điều hành. Nhân hệ
điều hành sẽ tra bảng nội bộ để xác định trang đó được đặt ở đâu trên khối lưu
trữ. Sau đó, nó tìm một khung trống và đọc trang vào từ khối lưu trữ. Bảng
trang được cập nhật để phản ánh sự thay đổi này, và chỉ thị gây ra lỗi trang
được khởi động lại. Phương pháp này cho phép một tiến trình chạy ngay cả
khi toàn bộ hình ảnh bộ nhớ của nó không nằm trong bộ nhớ chính cùng lúc.
Miễn là tỷ lệ lỗi trang đủ thấp, hiệu suất là chấp nhận được.
Chúng ta có thể sử dụng phân trang theo yêu cầu để giảm số khung được cấp
cho một tiến trình. Sắp xếp này có thể tăng độ đa nhiệm (cho phép nhiều tiến
trình có sẵn để thực thi cùng một lúc) và trong lý thuyết ít nhất là tăng sử dụng
CPU của hệ thống. Nó cũng cho phép các tiến trình được chạy ngay cả khi yêu
cầu bộ nhớ của chúng vượt quá tổng bộ nhớ vật lý có sẵn. Những tiến trình
như vậy chạy trong bộ nhớ ảo.
Nếu yêu cầu bộ nhớ tổng vượt quá khả năng của bộ nhớ vật lý, thì có thể cần
thay thế các trang từ bộ nhớ để giải phóng khung cho các trang mới. Các thuật
toán thay thế trang khác nhau được sử dụng. Thay thế trang theo FIFO dễ lập
trình nhưng mắc phải sự bất thường Belady. Thay thế trang tối ưu đòi hỏi có
kiến thức về tương lai. Thay thế trang LRU là một xấp xỉ của thay thế trang tối
ưu, nhưng ngay cả việc thực hiện nó cũng có thể khó khăn.
Ngoài ra đối với giải thuật thay thế trang, chính sách cấp phát khung trang
được yêu cầu. Cấp phát có thể cố định, đề nghị thay thế trang cục bộ, hay đề
nghị thay thế toàn cục. Theo đó, mỗi quá trình nên được cấp phát đủ các
khung cho tập làm việc hiện hành của nó. Nếu một quá trình không có đủ bộ
nhớ cho tập làm việc của nó, nó sẽ bị trì trệ. Cung cấp đủ khung cho mỗi quá
trình để tránh trì trệ có thể yêu cầu đổi chỗ và lập lịch tiến trình.
Ngoài ra, để yêu cầu chúng ta giải quyết các vấn đề chính của thay thế trang
và cấp phát khung trang, thiết kế hợp lý hệ thống phân trang yêu cầu chúng ta
xem xét kích thước trang, nhập/xuất, khoá, phân lại trang, tạo quá trình, cấu
trúc chương trình, sự trì trệ,.. Bộ nhớ ảo có thể được xem như một cấp của cơ
chế phân cấp trong các cấp lưu trữ trong hệ thống máy tính

You might also like