Khái niệm phân đoạn bộ nhớ

Một phần của tài liệu BÀI GIẢNG KIẾN TRÚC MÁY TÍNH VÀ HỆ ĐIỀU HÀNH (Trang 124)

Trong phần này, ta sẽ xem xét một kỹ thuật cấp phát bộ nhớ khác, trong đó mỗi tiến trình được cấp phát những vùng nhớ không nhất thiết nằm gần nhau.

6.2.3.1Khái niệm

Mỗi chương trình bao gồm một số thành phần có ý nghĩa khác nhau: dữ liệu, lệnh, hàm, ngăn xếp.v.v. , Tuy nhiên, khi phân trang, chương trình được chia thành các trang kích thước

0 A.0 1 A.1 2 A.2 3 D.0 4 D.1 5 C.0 6 C.1 7 C.2 8 D.2 9 D.3 10 11 12 13 14 15 Bộ nhớ 0 A.0 1 A.1 2 A.2 0 C.0 1 C.1 2 C.2 0 D.0 1 D.1 2 D.2 3 D3 Không gian nhớ lô gic của các tiến trình A và B: 3 trang

Chương 6 – Các thành phần của hệ điều hành

122

đều nhau, không quan tâm đến tổ chức lôgic và ý nghĩa các thành phần. Bộ nhớ được coi như một khối duy nhất các byte hoặc các từ.

Một cách tổ chức khác cho phép tính tới tổ chức lôgic của chương trình là phân đoạn

(segmentation). Chương trình được chia thành những phần kích thước khác nhau gọi là đoạn (segment) tuỳ theo ý nghĩa của chúng. Chẳng hạn, ta có thể phân biệt:

- Đoạn chương trình, chứa mã toàn bộ chương trình, hay một số hàm hoặc thủ tục của chương trình.

- Đoạn dữ liệu, chứa các biến toàn cục, các mảng.

- Đoạn ngăn xếp, chứa ngăn xếp của tiến trình trong quá trình thực hiện.

Không gian địa chỉ lôgic của tiến trình khi đó sẽ gồm tập hợp các đoạn. Mỗi đoạn tương ứng với không gian địa chỉ riêng, được phân biệt bởi tên và độ dài của mình. Ngoài cách dùng tên, đoạn cũng có thể được đánh số để phân biệt. Mỗi địa chỉ lôgic do CPU sinh ra khi đó sẽ gồm hai phần: số thứ tự của đoạn và độ dịch trong đoạn.

Việc chia chương trình thành các đoạn có thể do người lập trình thực hiện, chẳng hạn khi lập trình bằng assembly, hoặc do chương trình dịch tự của ngôn ngữ bậc cao tự động chia. Người lập trình khi đó cần biết kích thước tối đa được phép của đoạn, ví dụ để không khai báo mảng vượt kích thước tối đa này.

Phân đoạn bộ nhớ giống với phân chương động ở chỗ bộ nhớ được cấp phát theo từng vùng kích thước thay đổi. Tuy nhiên, khác với phân chương động, mỗi chương trình có thể chiếm những đoạn bộ nhớ không nằm liền kề nhau. Mỗi khi có yêu cầu cấp phát bộ nhớ cho các đoạn, thuật toán cấp phát first-fit hoặc best-fit như phân chương động sẽ được sử dụng.

Cũng như phân chương động, phân đoạn không sinh phân mảnh trong nhưng lại tạo phân mảnh ngoài. Mức độ phân mảnh ngoài phụ thuộc vào kích thước trung bình của đoạn. Đoạn càng nhỏ thì phân mảnh ngoài càng giảm. Trường hợp đặc biệt, nếu kích thước đoạn là một byte hay một từ tức là bằng đơn vị thông tin nhỏ nhất được đánh địa chỉ của bộ nhớ thì sẽ hoàn toàn không có phân mảnh ngoài. Tuy nhiên, số lượng đoạn tăng làm tăng kích thước của bảng phân đoạn và tăng thời gian quản lý các đoạn. Kích thước đoạn thường phụ thuộc kích thước bộ nhớ. Bộ nhớ càng lớn thì kích thước đoạn cũng được chọn càng lớn. Nhìn chung, phân mảnh ngoài khi phân đoạn nhỏ hơn phân chương động do tiến trình đã được chia thành các đoạn kích thước nhỏ hơn.

6.2.3.2Kết hợp phân đoạn với phân trang

Để kết hợp các ưu điểm của phân doạn với các ưu điểm của phân trang, các hệ thống tính toán hiện đại thường kết hợp cả hai phương pháp tổ chức bộ nhớ này. Tiến trình bao gồm nhiều đoạn. Mỗi đoạn lại được phân trang. Như vậy mỗi tiến trình có một bảng phân đoạn riêng và mỗi đoạn lại có bảng phân trang riêng của mình.

Để định vị ô nhớ trong phương pháp này, địa chỉ phải gồm ba phần (s,p,o). Phần thứ nhất s là số thứ tự đoạn. s cho phép xác định khoản mục ứng với đoạn trong bảng chia đoạn. Khoản mục chứa con trỏ tới bảng chia trang cho đoạn đó. Số thứ tự trang p cho phép xác định khung trang tương ứng. Độ dịch o sẽ được cộng vào địa chỉ khung để tính ra địa chỉ vật lý.

Một phần của tài liệu BÀI GIẢNG KIẾN TRÚC MÁY TÍNH VÀ HỆ ĐIỀU HÀNH (Trang 124)