Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

Cơ chế bộ nhớ ảo

E-mail Print PDF

Trong kiến trúc ARM, từ những dòng ARM9 trở lên đều được trang bị khối MMU (Memory Management Unit) để thực hiện việc quản lý bộ nhớ theo cơ chế bộ nhớ ảo.

Đây là một cơ chế rất quan trọng giúp cho hệ điều hành có thể quản lý bộ nhớ, cho phép nhiều chương trình có thể chạy đồng thời mà không bị xung đột không gian địa chỉ bộ nhớ (address space) cũng như cho phép những chương trình có kích thước lớn hơn kích thước bộ nhớ vật lý (physical memory) vẫn có thể chạy được bình thường. Những chức năng nâng cao này chúng ta không thể tìm thấy ở trong các vi điều khiển mức thấp và trung bình như 8051, ATMEGA8/16, PIC16, PIC18 hay thậm chí cả các vi điều khiển chạy core ARM7. Sau đây, chúng tôi xin giới thiệu tới các bạn chi tiết cơ chế bộ nhớ ảo cũng như cách thức làm việc của khối MMU để các bạn hiểu rõ và có thể vận dụng tốt nhất vào trong quá trình xây dựng và phát triển hệ thống nhúng của mình.

1. Định nghĩa cơ chế bộ nhớ ảo
Ý tưởng cơ bản của cơ chế bộ nhớ ảo đó chính là mỗi chương trình sẽ có một không gian bộ nhớ riêng (address space), không gian bộ nhớ đó sẽ được chia nhỏ thành nhiều phần gọi là các trang nhớ (pages). Mỗi trang nhớ là một dải địa chỉ liên tục thường có kích thước là 4KB (tương ứng địa chỉ offset từ 0->4095). Các trang nhớ này sẽ được ánh xạ vào bộ nhớ chính trong quá trình thực thi tuy nhiên không nhất thiết tất cả các trang nhớ của chương trình phải nằm trong bộ nhớ chính. Khi chương trình cần truy xuất một trang nhớ đã nằm trong bộ nhớ chính, không gian địa chỉ bộ nhớ ảo của trang nhớ đó sẽ được ánh xạ sang không gian địa chỉ của bộ nhớ chính. Nếu trang nhớ đó chưa nằm trong bộ nhớ chính, hiện tượng này chúng ta gọi là lỗi trang (Page fault), khối MMU sẽ báo cho hệ điều hành để hệ điều hành tiến hành nạp trang tương ứng từ bộ nhớ ngoài (ví dụ: ổ cứng) và tiến hành thực thi lại lệnh trước đó.

2. Sơ đồ chức năng và cơ chế làm việc của khối MMU
Chúng ta cùng xem xét một ví dụ cụ thể, giả sử chương trình cần thực hiện một lệnh hợp ngữ sau đây

MOV R1, 1000

Lệnh này có chức năng đọc nội dung ô nhớ có địa chỉ 1000 (địa chỉ trong không gian địa chỉ của chương trình chúng ta goi là địa chỉ ảo (virtual address), không phải địa chỉ vật lý) vào thanh ghi R1.
Trong trường hợp này, khi CPU phát địa chỉ 1000, địa chỉ đó sẽ được đưa qua khối MMU để tiến hành bước phân giải địa chỉ để chuyển địa chỉ này sang thành địa chị vật lý, địa chỉ này sẽ được phát lên đường bus địa chỉ để đọc dữ liệu tại ô nhớ tương ứng.

Chắc chắn các bạn sẽ đặt câu hỏi là vậy địa chỉ vật lý tương ứng với địa chỉ ảo 1000 là bao nhiêu? Để chuyển đổi địa chỉ, MMU cần có một bảng trang (page table). Bảng trang chứa thông tin ánh xạ từ các trang (pages) của không gian bộ nhớ ảo sang các khung trang của không gian bộ nhớ vật lý (page frame, một khung trang có kích thước bằng một trang trong không gian bộ nhớ ảo) .

Để hiểu rõ hơn những khái niệm này, chúng tôi xin lấy một ví dụ là một máy tính có 16-bit địa chỉ, cho phép quản lý 64KB tuy nhiên máy tính đó chỉ có 32KB bộ nhớ vật lý. (Chúng tôi lấy ví dụ với các con số tương đối nhỏ để chúng ta dễ dàng tính toán, các bạn hoàn toàn có thể xem xét cụ thể với các máy tính sử dụng vi điều khiển lõi ARM với không gian địa chỉ 32-bit -> quản lý được 4GB bộ nhớ). Dưới đây là minh họa bảng trang cho hệ thống máy tính này:

 


Hình 1. Minh họa bảng trang (Page Table)

 


Hình 2. Sơ đồ hoạt động của một khối MMU quản lý 16 trang, 4KB/1 trang


Ở Hình 1, địa chỉ bộ nhớ ảo 1000 tương ứng với trang 0 trong không gian bộ nhớ ảo, trang này đã được nạp vào trang 2 trong không gian bộ nhớ vật lý, bởi vậy địa chỉ vật lý sẽ được tính như sau:

Physical Address=Virtual Address + Base address of Page frame=1000 + 8192 (địa chỉ bắt đầu của trang 2 của bộ nhớ vật lý)=9192

Hình 2 là sơ đồ bên trong của một khối MMU quản lý 16 trang, mỗi trang có kích thước là 4 KB. Trong hình này chúng ta có thể thấy quá trình làm việc của MMU để phân giải địa chỉ ảo 8196 (0010000000000100). Địa chỉ ảo 16 bit được tách thành 2 phần:

  • 4 bit cao để xác định số trang.
  • 12 bit thấp để xác định địa chỉ lệch (offset) trong trang đó.

Số trang sẽ được sử dụng để kiểm tra thông tin trong bảng trang (page table) từ đó xác định xem trang đó đã được nạp vào bộ nhớ chính chưa (kiểm tra bit bên phải, nếu bit bằng 1 chứng tỏ trang đó đã được nạp sẵn, nếu bằng 0 -> Page fault). Trong trường hợp này trang 2 đã được nạp vào trang 6 (110) trong bộ nhớ chính, MMU sẽ tiến hành sao chép 3 bit tương ứng với số trang trong bộ nhớ chính (110) vào 3 bit đầu của địa chỉ ảo để biến thành địa chỉ vật lý. Địa chỉ này sẽ được phát lên đường Bus địa chỉ cho phép đọc/ghi ô nhớ trong bộ nhớ chính.

Lưu ý: Ví dụ trên giúp chúng ta hiểu được cơ chế hoạt động của khối MMU. Thực tế với các hệ thống 32 bit và 64 bit, do không gian bộ nhớ khi đó sẽ rất lớn nên người ta cần thêm một số giải pháp để tăng tốc độ phân giải địa chỉ, các bạn có thể tìm hiểu thêm khái niệm về khối TLB (Translation Lookaside Buffers). Khối này hoạt động giống như một dạng bộ nhớ Cache.

 

Trên đây là giới thiệu cơ bản về cơ chế bộ nhớ ảo và cách thức làm việc của khối MMU để thực thi cơ chế này. Làm chủ cơ chế này sẽ giúp các bạn tự tin hơn khi làm việc với các hệ nhúng mức cao cũng như tiếp cận với các công việc phức tạp hơn trong quá trình phát triển hệ thống nhúng ví dụ làm sao để chính sửa mã nguồn và cài đặt một hệ điều hành hoàn toàn mới lên hệ thống nhúng của bạn.

Tác giả: thuanpv

Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn

đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON

  HotLine: 0972 800 931 Ms Duyên

 

 

 

 

 

Related Articles

Chat Zalo