Virtual Memory 6: Address Translation

Address translation là cách mà hệ điều hành dịch từ địa chỉ virtual address sang địa chỉ physical address để truy cập đến vùng nhớ thực sự nằm trên RAM

Tình huống:
Hệ điều hành 32 bit quản lý 256 MB RAM và 4kB pages.

Khi đó chúng ta vẫn có 1 entry của Virtual Memory có độ dài 32 bit. Tức là mỗi process sẽ có thể  truy cập tới 4GB bộ nhớ ảo.

Nhưng vì chỉ có 256 MB RAM trên thực tế nên chỉ cẩn 28 bit để quản lý physical address. Vậy làm thế nào để convert từ virtual memory (32 bit) sang Physical Memory (28 bit).

Đó là công việc của Page Table (như đã đề cập ở phần 5)

Mỗi PTE (Page Table Entry) trỏ tới một vùng nhớ rộng 4kB, vậy là cần 12 bit để quản lý 1 page. 12 bit này không cần translate mà sẽ được copy y nguyên từ virtual memory sang physical memory. Người ta gọi là "offset" trong 1 page.

Vậy là còn 20 bit đầu của Virtual memory (32 -12) phải covert sang 16 bit Physical Memory (28 - 12)

Tóm lại
Một địa chỉ được chia làm 2 phần: Page Number + Page offset
Page Number chỉ cho chúng ta đến địa chỉ của Page
Page offset cho chúng ta biết địa chỉ ô nhớ trong 1 Page



Khi nói đến mapping thì 1 page trên virtual memory sẽ được map với 1 page trên physical memory, nên địa chỉ offset không thay đổi. Chúng ta chỉ cần chuyển hóa từ địa chỉ virtual memory page sang thành physical memory page mà thôi.

Có một câu hỏi dành cho các bạn
Tại sao chúng ta lại cần nhiều bit để thể hiện virtual address hơn so với physical address?

  • Tại vì page offset của virtual address và page offset của physical address là khác nhau
  • Dung lượng của Virtual memory lớn hơn physical memory
  • Page table không thể map từ số lượng bit nhỏ sang số lượng bit lớn hơn

Virtual Memory 5: Page tables

Tổng quan
Page table là một bảng mapping giữa Virtual Address (VA) và Physical Address.
Page Table Entry (PTE) là đơn vị của bảng Page, mỗi địa chỉ virtual (VA) sẽ có một PTE

Vậy chúng ta cần bao nhiêu entries (PTE) trong bảng Page Table?

  • Mỗi entry cho 1 byte, 2^32 = 4 tỷ entries
  • Mỗi entry cho 1 word, 2^30 = 1 tỷ entries
Câu trả lời là 2^30 (1 tỷ entries). Mỗi entry cần thể hiện địa chỉ vật lý có độ dài 32 bit, nên mỗi entry tối thiểu là 32 bit. Tổng cộng 1 tỷ entries tốn 1GB  bộ nhớ để lưu trữ cho Page Table, 


Vậy cần phải có một cách nào đó hiệu quả hơn để quản lý mapping. Thay vì map từng địa chỉ vật lý thì Page Table sẽ lưu trữ entry dưới dạng một tập hợp địa chỉ ảo map tới một tập địa chỉ vật lý (coarse-gain). Cách này sẽ giúp giảm số lượng entries của Page Table rất nhiều

Ví dụ

Địa chỉ ảo (VA) từ 0 - 4095 sẽ được map tới địa chỉ vật lý 4096-8191

Một PTE giờ sẽ cover một dải địa chỉ 4KB thay vì 4B như trước, số lượng entries sẽ giảm 1024 lần. Tuy nhiên cái gì cũng có tính hai mặt của nó, số lượng entries giảm đi nhưng đồng thời độ linh động trong việc sử dụng bộ nhớ cũng giảm theo.


Page table giờ được sử dụng như thế nào?


Thay vì map từng địa chỉ VA tới địa chỉ PA, giờ từng block bộ nhớ ảo (4KB) map tới block 4K địa chỉ vật lý.

Mình có câu hỏi dành cho các bạn

Địa chỉ vật lý nào tương ứng với địa chỉ ảo số 4?
  • 4
  • 4096
  • 4100
  • Unknown


Virtual Memory 4: VM hoạt động như thế nào

Virtual Memory hoạt động như thế nào?

Keyword là phân chia vùng nhớ (seperate memory spaces). Từ phía process nhìn memory chính là virtual memory. còn VM quản lý việc cấp phát và sử dụng physical memory ở trên RAM

Virtual Address chính là địa chỉ để các chương trình sử dụng, còn physical address là địa chỉ vật lý được gắn trên RAM.

Mỗi chương trình sẽ có thể truy cập vào toàn bộ vùng virtual memory của nó (từ 0 đến 2^32 -1)

Một chương trình truy cập memory như thế nào?

Ví dụ process phải xử lý một lệnh ASM như sau:

ld R3, 1024(R0)
Load giá trị từ vùng nhứ 1024 vào thanh ghi R3. Lúc này process sẽ  truy cập vào thanh ghi 1024 trên virtual memory space. Hệ điều hành sẽ map địa chị 1024 của VM sang địa chỉ vật lý trên RAM và truy cập tới để lấy giá trị. Hệ điều hành sẽ giúp đọc giá trị của vùng nhớ cần truy cập và trả về cho process.



Tương tự như vậy, một lệnh nữa
ld R2, 512(R0)



Nếu trên RAM không có dữ liệu (mapping chỉ ra disk) thì OS (hệ điều hành) sẽ tìm vùng nhớ đó trên disk, load giá trị đó lên RAM và sửa lại bộ mapping. Sau đó thì return lại giá trị cho process


Virtual Memory 3: Virtual Memory là gì

Như đã đề cập đến ở phần trước, đôi khi các hệ thống không có đủ RAM (4GB cho 32 bit Operating System), cho nên việc không có một cơ chế ở giữa để mapping địa chỉ process với địa chỉ memory sẽ khiến cho việc truy cập vào RAM gây ra crash hệ thống

Chính vì vậy chúng ta cần một Virtual Memory nằm giữa các chương trình và RAM. Mục tiêu của virtual memory sẽ giúp chúng ta map địa chỉ của các process với RAM một cách hiệu quả nhất.

Kể từ đây các thao tác trên process sẽ chỉ tác động trực tiếp tới Virtual Memory.

Giải quyết vấn đề thiếu bộ nhớ (RAM)

Giả sử bạn có 1GB RAM trong hệ thống, vậy thì 3GB thông tin còn lại sẽ được lưu trên ổ cứng (disk). Khi bạn truy cập đến một địa chỉ, việc đầu tiên là OS sẽ kiểm tra trên bảng mapping của VM để biết xem địa chỉ vật lý của vùng nhớ bạn muốn truy cập là ở đâu.


Trường hợp đẹp nhất là nó đang được load trên RAM, khi đó thì việc lấy và sử dụng dữ liệu hết sức đơn giản. Mapping giúp truy cập đến vùng nhớ vật lý, process sẽ lấy và sử dụng dữ liệu

Trường hợp kém đẹp hơn là bộ Mapping cho biết vùng nhớ bạn muốn truy cập đang nằm trên ổ cứng, chưa được load vào RAM. Lúc này VM sẽ làm công việc là đưa dữ liệu ít được sử dụng nhất ra khỏi RAM sang ổ cứng (disk) rồi đưa dữ liệu bạn muốn truy cập từ ổ cứng vào RAM cập nhật lại bảng Mapping, đồng thời trả lại dữ liệu cho bạn. Quá trình này sẽ tốn rất nhiều công đoạn và giảm tốc độ xử lý của hệ thóng.

Vì thế một trong những giải pháp để xử lý vấn đề máy chậm là mua thêm RAM

Giải quyết vấn đề thứ hai: tối ưu hóa bộ nhớ

Quay lại vấn đề thứ hai khi chúng ta có đầy đủ 4GB RAM nhưng hệ thống vẫn không thể load được hai chương trình có tổng bộ nhớ là 4GB.

Giờ đây giải pháp VM sẽ giúp chúng ta Map vùng nhớ của các process lên RAM một cách rất linh hoạt



Giải quyết vấn đề thứ 3: bảo vệ bộ nhớ

Giả sử bạn lại có 2 process chạy, process số 1 đang muốn truy cập vào địa chỉ 1024, process số 2 đến lượt mình chạy cũng muốn truy cập vào địa chỉ 1024. Với sự xuất hiện của VM thì các process có các vùng nhớ riêng biệt  trên RAM và không liên quan gì tới nhau.

Việc truy cập tới địa chỉ 1024 chỉ là thao tác trên virtual memory mà thôi. Dữ liệu sẽ được bảo toàn


Welcome to SpicyTweaks.

Copyright © Embedded System Study. Designed by Momizat Team. Powered to Blogger by SpicyTweaks.

Scroll to top