29
Khi tiến trình không có đủ các khung trang để chứa những trang cần thiết cho việc xử lý, thì nó sẽ thường xuyên phát sinh các lỗi trang, vì thế phải dùng đến rất nhiều thời gian sử dụng CPU để thực hiện thay thế trang. Hệ điều hành thấy hiệu quả sử dụng CPU thấp sẽ tăng mức độ đa chương, dẫn đến trì trệ toàn bộ hệ thống. Để ngăn cản tình trạng trì trệ này xảy ra, cần phải cấp cho tiến trình đủ các khung trang cần thiết để hoạt động. Vấn đề là làm sao biết được mỗi tiến trình cần bao nhiêu trang?
3.3.1Mô hình tập làm việc (working set)
4 Tập làm việc của tiến trình tại thời điểm t là tập các trang được tiến trình truy xuất đến trong lần truy cập cuối cùng tính tại thời điểm t.
5 Hình 4.41: mô hình tập làm việc
Gọi WSSi ( , t) là số phần tử của tập working set của tiến trình Pi tại thời điểm t. m là số khung trang trống.
D = WSSi là tổng số khung trang yêu cầu cho toàn hệ thống .
Hệ điều hành giám sát working set của mỗi tiến trình Pi và tại thời điểm t sẽ cấp phát cho tiến trình Pi số khung trang bằng với số phần tử trong tập làm việc (WSSi)(, t-1).
Nếu tổng số khung trang yêu cầu của các tiến trình trong hệ thống vượt quá các khung trang có thể sử dụng (D>m), thì sẽ xảy ra tình trạng hệ thống trì trệ. Khi đó hệ điều hành chọn một
30
tiến trình để tạm dừng, giải phóng các khung trang của tiến trình đã chọn để các tiến trình khác có đủ khung trang hoàn tất công việc.
3.3.2 Cấu trúc chương trình
Số lỗi trang có khi phụ thuộc vào ngôn ngữ lập trình, nên khi lập trình ta cần chú ý để chương trình có thể thực hiện nhanh hơn.
Ví dụ: xét ct sau:
int a[128][128];
for (i=0;
i<128; i++) for (j=0;
j<128; j++)
a[i][j]=0;
Gỉa sử trang có kích thước 128 bytes và tiến trình được cấp 2 khung trang: khung trang thứ nhất chưá mã tiến trình, khung trang còn lại được khởi động ở trạng thái trống . Trong Pascal, C mảng lưu theo hàng, mỗi hàng chiếm 1 trang bộ nhớ, nên số lỗi trang phát sinh là 128. Nhưng trong Fortran mảng lưu theo cột, do đó số lỗi trang sẽ là 128x128=1638.
TÓM TẮT
+ Các vấn đề cần phải giải quyết khi quản lý bộ nhớ là việc chuyển đổi địa chỉ tương đối thành địa chỉ thực, quản lý bộ nhớ đã cấp phát và chưa cấp phát, các kỹ thuật cấp phát bộ nhớ.
+ Việc chuyển đổi địa chỉ tương đối thành địa chỉ thực có thể xảy ra vào một trong những thời
điểm sau: thời điểm biên dịch, thời điểm nạp, thời điểm xử lý.
+ Địa chỉ ảo là địa chỉ do bộ xử lý sinh ra, địa chỉ vật lý là địa chỉ thực trong bộ nhớ. Khi 31
chương trình nạp vào bộ nhớ các địa chỉ tương đối trong chương trình được CPU chuyển thành địa chỉ ảo, khi thực thi, địa chỉ ảo được hệ điều hành kết hợp với phần cứng MMU chuyển thành địa chỉ vật lý .
+ Có hai phương pháp quản lý việc cấp phát bộ nhớ là sử dụng một dãy bit hoặc sử dụng một danh sách liên kết, mỗi nút của danh sách liên kết lưu thông tin một vùng nhớ chứa tiến trình hay vùng nhớ trống giữa hai tiến trình.
+ Để chọn một đoạn trống có thể sử dụng một trong các thuật toán sau :First-fit, Best-fit, Worst- fit
+ Có hai kỹ thuật dùng để cấp phát bộ nhớ cho một tiến trình là Cấp phát liên tục: tiến trình được nạp vào một vùng nhớ liên tục.
Cấp phát không liên tục: tiến trình được nạp vào một vùng nhớ không liên tục
+ Có ba mô hình cấp phát bộ nhớ liên tục là mô hình Linker-Loader hoặc mô hình Base
& Limit. Mô hình Linker-Loader: chương trình được nạp vào một vùng nhớ liên tục đủ lớn để chứa toàn bộ chương trình, hệ điều hành sẽ chuyển các địa chỉ tương đối về địa chỉ tuyệt đối ngay khi nạp chương trình. Mô hình Base & Limit giống như mô hình Linker- Loader nhưng phần cứng cần cung cấp hai thanh ghi, một thanh ghi nền và một thanh ghi giới hạn . Khi một tiến trình được cấp phát vùng nhớ, hệ điều hành cất vào thanh ghi nền địa chỉ bắt đầu của vùng nhớ cấp phát cho tiến trình, và cất vào thanh ghi giới hạn kích thước của tiến trình.
+ Có ba mô hình cấp phát bộ nhớ không liên tục là mô hình phân đoạn, mô hình phân trang và mô hình phân đoạn kết hợp phân trang.
- Mô hình phân đoạn: một chương trình được người lập trình chia thành nhiều phân 32
đoạn, mỗi phân đoạn có ngữ nghĩa khác nhau và hệ điều hành có thể nạp các phân đọan vào bộ nhớ tại các vị trí không liên tục và ghi các vị trí các phân đoạn vào bảng phân đoạn, đồng thời chuyển các địa chỉ tương đối trong chương trình thành các địa chỉ ảo.
Mỗi địa chỉ ảo gồm hai phần (s,d): s là số hiệu phân đoạn , d là địa chỉ tương đối trong phân đoạn s. Mỗi phần tử trong bảng phân đoạn gồm hai phần (base, limit): base là địa chỉ vật lý bắt đầu phân đoạn, limit là chiều dài của phân đoạn.
-Mô hình phân trang: Bộ nhớ vật lý được chia thành các khối có kích thước cố định và bằng nhau gọi là khung trang. Tiến trình cũng được chia thành các khối có cùng kích thước với khung trang và gọi là trang. Khi chương trình được nạp vào bộ nhớ, MMU ghi nhận lại số hiệu khung trang chứa trang vào bảng trang , CPU chuyển địa chỉ tương đối trong chương trình thành địa chỉ ảo. Mỗi địa chỉ ảo có dạng (p,d): p là số hiệu trang, d là địa chỉ tương đối trong trang p. Mỗi phần tử trong bảng trang lưu số hiệu khung trang chứa trang.
-Mô hình phân đoạn kết hợp phân trang:
Một tiến trình gồm nhiều phân đoạn, mỗi phân đoạn được chia thành nhiều trang, lưu trữ vào các khung trang có thể không liên tục.
+ Bộ nhớ ảo là kỹ thuật dùng bộ nhớ phụ lưu trữ tiến trình, các phần của tiến trình được chuyển vào-ra giữa bộ nhớ chính và bộ nhớ phụ để cho phép thực thi một tiến trình mà không cần nạp toàn bộ vào bộ nhớ vật lý. Có hai phương pháp cài đặt kỹ thuật bộ nhớ ảo đó là phân trang theo yêu cầu hoặc phân đoạn theo yêu cầu
-Phân trang theo yêu cầu:
Một tiến trình được chia thành nhiều trang, thường trú trên đĩa cứng và một trang chỉ được nạp vào bộ nhớ chính khi có yêu cầu. Nếu khi nạp trang mà không còn khung trang trống, chọn một khung trang "nạn nhân" và chuyển trang "nạn nhân " ra bộ nhớ phụ , rồi chuyển trang muốn truy xuất từ bộ nhớ phụ vào khung trang trống đã chọn.
33