Phân trang

Một phần của tài liệu Bài giảng: Cấu trúc máy tính và ghép nối pot (Trang 130 - 135)

c, Liên kết thông qua stack

7.7.2. Phân trang

Phân trang là quá trình thực hiện overlays tự động được quản lý bởi hệ điều hành. Không gian địa chỉ được chia thành từng khối có kích thước bằng nhau

được gọi là từng trang. Dung lượng mỗi trang thông thường là một giá trị số mũ

cơ số 2, chẳng hạn là 210 = 1024 byte. Phân trang làm cho bộ nhớ vật lý có vẻ

lớn hơn thực tế bằng cách ánh xạ không gian địa chỉ thực tế lên không gian địa chỉảo. Các dữ liệu lưu trữ trên không gian địa chỉ ảo thực tế được lưu trữ trên ổ đĩa. Hình 7.17 mô tả quá trình ánh xạ này. 8 trang bộ nhở ảo được ánh xạ lên 4 trang bộ nhớ thực

Hình 7.17. Phương pháp phân trang

Khi CPU cần truy xuất vào một ô nhớ, ô nhớ đó sẽ nằm trong không gian địa chỉ ảo. Trong mô tả hình 7.17, địa chỉ mà CPU có thể truy cập từ 0 đến 8191. Tuy nhiên dữ liệu ở dải địa chỉ trên có một nửa được lưu trữ trên bộ nhớ thật, một nửa nằm trên ổđĩa cứng. Nếu dữ liệu nằm trên bộ nhớ thật, việc truy cập nó sẽ được thực hiện trực tiếp. Nếu dữ liệu không nằm trên bộ nhớ thật, hệ thống sẽ thực hiện quá trình phân trang theo quy trình sau

1. Xác định một trang sẽ bị xóa đi. Nội dung của trang sẽ bị xóa phải được ghi ngược trở lại ổ đĩa cứng bên ngoài nếu nội dung của trang đó có sự

thay đổi.

2. Trang bộ nhớ ảo mà ta muốn truy cập sẽđược xác định trên ổđĩa cứng và ghi vào bộ nhớ thực ở trang bộ nhớ vừa bị xóa đi (trang được xác định ở

mục 1)

3. Cập nhật bảng phân trang page number để ghi lại trang bộ nhớ ảo được ghi lên trang bộ nhớ thật

4. Cập nhật bộ nhớ thực để lấy dữ liệu về hệ thống

Để truy cập không gian địa chỉ bộ nhớ ảo 213 như hình 7.17, CPU sẽ phải cung cấp một giá trị địa chỉ có độ lớn 13 bit. Địa chỉ này được chia làm 2 trường là trường page number có độ dài 3 bit để mã hóa số trang ảo từ page 0 đến page 7. 10 bit còn lại là địa chỉ offset trong trang. Khi hệ điều hành quản lý việc phân trang nhận được địa chỉ này, nó sẽ phân tích thành một địa chỉ có độ dài 13 bit nhưng sẽ có 3 trường. Trường thứ nhất là Present bit có nhiệm vụ xác định xem ô nhớ cần truy xuất có nằm trên bộ nhớ thực (nếu có giá trị 1) hay không (nếu có giá trị 0). Trường thứ 2 là địa chỉ offset trong trang vẫn có độ lớn 10 bit. Trường thứ 3 là trường page frame có nhiệm vụ xác định xem trang đó đang

được lưu trữ trong trang bộ nhớ thực nào. Hệ thống sử dụng một bảng phân trang page table để quản lý việc phân trang này. Với những trang không nằm trên bộ nhớ thực, trường Page frame không có ý nghĩa, thông thường được ký hiệu là “xx”

Để thực hiện việc chuyển đổi từ một địa chỉ ảo (gồm 2 trường) sang địa chỉ truy xuất bộ nhớ thực (gồm 3 trường) như đã nói ở trên, ta sẽ thực hiện như trình bày

ở hình 7.19

Hình 7.19. Quá trình chuyển đổi địa chỉ ảo sang địa chỉ thực

Như trên hình 7.19, ta cần truy cập vào địa chỉ 1001101000101. 3 bit có trọng số lớn nhất (100) sẽ chỉ ra trang ảo mà hệ thống cần truy cập. Giá trị này sẽ được so sánh với bảng phân trang page table để xem trang số 100 = 4 nằm trên bộ nhớ thực hay ảo. Trong trường hợp trên, địa chỉ đó nằm trên bộ nhớ thực ở

trang thực số (11). Giá trị này sẽ tạo thành 2 bit có trọng số lớn nhất trong địa chỉ thực. Trường địa chỉ offset 10 bit ở địa chỉ ảo sẽ được đưa trực tiếp vào địa chỉ offset của địa chỉ vật lý thực. Kết quả ta sẽ truy cập vào địa chỉ

111101000101 để nhận được dữ liệu cần truy cập.

Phân trang theo nhu cầu - demand paging

Khi thực thi một chương trình, không phải chương trình đó nằm trên 1 trang mà thực tế nó có thể nằm trên nhiều trang khác nhau. Vấn đề đặt ra là làm thế nào có thể nạp được trang chứa chương trình cần thực thi vào bộ nhớ thực. Quá trình này thực hiện như sau. Giả sử ban đầu chưa có một nội dung nào của chương trình đã được nạp vào bộ nhớ thực. Khi cần nạp lệnh đầu tiên của chương trình vào hệ thống, CPU sẽđưa ra địa chỉ ô nhớ (nằm trên đĩa cứng) của

lệnh đầu tiên đó. Vì nội dung này không có trong bộ nhớ thực nên sẽ xuất hiện một lỗi fault. Khi phát sinh lỗi này, hệ điều hành sẽ thực hiện ánh xạ trang tương ứng ở bộ nhớ ảo vào một trang trong bộ nhớ chính. Khi đó lỗi trang sẽ được khắc phục. Các lệnh của chương trình nằm trên trang này sẽ được truy cập tiếp tục trong trang bộ nhớ thật này. Trong khi tiếp tục thực thi các lệnh trong chương trình, nếu chương trình cần truy cập vào một trang khác, nó lại phát sinh một lỗi và lỗi này sẽ lại được khắc phục. Tiếp tục như thế, tất cả các trang chứa chương trình được thực thi sẽđược nạp theo nhu cầu vào bộ nhớ chính

Chính sách thay thế trang

Một vấn đề nảy sinh đó là trong trường hợp kích thước chương trình lớn hơn kích thước bộ nhớ chính. Khi đó, bộ nhớ chính không thể chứa toàn bộ chương trình, nó sẽ phải xóa bớt trang không sử dụng để nhường chỗ cho một trang khác để xóa lỗi. Chính sách thay thế trang hay được sử dụng là FIFO hoặc LRU. Chính sách này tương tự như chính sách thay thế trong ánh xạ Cache mà ta đã

đề cập trong chương này

7.7.3. Phân đoạn

Phân đoạn cũng là một phương thức quản lý bộ nhớ của hệ điều hành. Khác với phân trang quản lý bộ nhớ ảo (không gian bộ nhớ ảo), phân đoạn chỉ quản lý bộ

nhớ thực. Nó cũng khác phân trang ở chỗ nó quản lý bộ nhớ theo chức năng chương trình. Một chương trình khi nạp vào bộ nhớ thực sẽ được quản lý theo từng đoạn segment theo chức năng. Đó là các phân đoạn: code segment chứa các lệnh của chương trình, data segment chứa các dữ liệu chương trình, stack segment chứa bộ nhớ stack.

Ngoài cách quản lý như trên, phân đoạn cũng có thể chia bộ nhớ thành từng

đoạn, mỗi đoạn được sử dụng theo mục đích riêng, được truy cập vào bảo vệ

theo từng mức mà hệ điều hành hỗ trợ. Trong ví dụ hình 7.20, hệ điều hành có thể thực hiện phân đoạn bộ nhớ thành 3 phân đoạn. Phân đoạn số 0 là code segment, chỉ chứa các lệnh của chương trình, do đó nó chỉ để chứa các lệnh thực thi, không cho phép xóa mà chỉ cho phép đọc. Phân đoạn số 1 được sử

dụng để chứa các dữ liệu dành cho người dùng số 1. Chỉ người dùng số 1 mới

được phép truy cập và thay đổi các dữ liệu này. Tương tự như vậy là phân đoạn số 2.

Hình 7.20. Ví dụ về phân đoạn

Phân đoạn không giống phân trang. Với phân trang, người sử dụng không cần quan tâm đến nó vì nó được thực hiện hoàn toàn tự động. Ngược lại với phân

đoạn, người sử dụng (ở đây là các lập trình viên) dường như phải chú ý xem

đang tương tác với phân đoạn nào, giới hạn của từng phân đoạn là gì, được phép truy cập hay không. Rất may cho chúng ta, hệ điều hành đã thay chúng ta thực hiện tất cả các nhiệm vụ đó, kể cả việc thay đổi các giá trị phân đoạn hay chuyển đổi các địa chỉ phân đoạn sang địa chỉ vật lý

TỔNG KẾT CHƯƠNG

Bộ nhớ được phân thành nhiều loại khác nhau, trong đó, loại có hiệu suất tốt nhất lại có giá thành đắt nhất, loại có hiệu suất nhỏ nhất, rẻ nhất lại có tính thương mại tốt nhất. Để dung hòa mọi lợi ích, các nhà thiết kế hệ thống đã sử

dụng bộ nhớ Cache và bộ nhớảo

Bộ nhớ Cache nằm trong CPU chứa các khối dữ liệu nhỏ mà hệ thống hay sử

dụng nhất, có khả năng truy xuất với tốc độ cao. Bộ nhớảo lại quản lý vùng nhớ đặt trong các ổđĩa cứng để mở rộng dung lượng nhớ

Cache và bộ nhớ ảo đều được sử dụng trong cùng một hệ thống máy tính nhưng lại phục vụ các mục đích khác nhau. Cache tăng tốc độ truy cập bộ nhớ chính, còn bộ nhởảo mở rộng dung lượng bộ nhớ chính

Một phần của tài liệu Bài giảng: Cấu trúc máy tính và ghép nối pot (Trang 130 - 135)