CHƯƠNG 3 : ĐIỀU KHIỂN BỘ NHỚ
2. Điều khiển bộ nhớ liên tục theo đa bài toán
2.3. Cách thức Overlay và swapping
a) Cách thức OVERLAY
Trong các trường hợp điều khiển bộ nhớ nói trên, để khắc phục hiện tượng thiếu bộ nhớ khi phân phối liên tục, một số hệ thống cho phép chương trình hoạt động theo chế độ OVERLAY.
Chế độ OVERLAY cho phép tổ chức chương trình thành các đơn vị chương trình và đảm bảo các điều kiện sau:
Phân phối bộ nhớ cho chương trình trong một miền liên tục,
Môdun tải bao gồm một số đơn vị chương trình (segment chương trình) mà các segment chương trình được tải đồng thời (phân phối liên tục). Một số môdun tải có thể được tải vào cùng 1 vùng bộ nhớ. Các môdun tải như vậy được tập hợp trong các File trên đĩa.
Trong tập hợp các mơdun chương trình sẽ nảy sinh quan hệ độc lập/phụ thuộc: sự có mặt của một nhóm mơdun trong bộ nhớ khơng địi hỏi/có địi hỏi
sự có mặt của một nhóm mơdun khác.
Hình 3.3 Cấu trúc chương trình OVERLAY
Trong các mơdun nói trên, có một mơdun ln tồn tại trong q trình chương trình thực hiện: đó là chương trình chính, mọi mơdun chương trình đều phụ thuộc vào nó sẽ được tổ chức dưới dạng hình cây. Hình trên đây (hình 3.3) cho một ví dụ cấu trúc một chương trình: bộ nhớ địi hỏi của môdun A:30KB; B:24KB, C:12KB, D, E, G, H: 12KB; I, J: 6KB. Theo cấu trúc đó: A (mơdun
A B C D E G I J H 30K 24K 12 12 12 12 12 6 6
chính) sử dụng hai mơdun B và C. B và C độc lập nhau: chúng có thể được lưu trữ trên cùng một vùng nhớ. B sử dụng hai môdun độc lập là D và E; C sử dụng hai môdun độc lập là G và H. H sử dụng hai môdun độc lập là I và J.
Như vậy, cây chương trình có gốc B cần 36KB; cây chương trình có gốc C cần 30KB. Vậy chương trình cần vùng nhớ liên tục là 30KB +36KB = 66KB. Trong khi đó nếu khơng sử dụng chế độ overlay, chương trình nói trên cần vùng nhớ liên tục là 30KB +24KB+5*12KB+2*6KB=126KB.
Ví dụ, trong các ngơn ngữ lập trình nói chung cho phép chế độ này. Chẳng hạn, khai báo OVERLAY trong PASCAL, FORTRAN v.v…Cụ thể, trong TP3.0, các môdun overlay được cho vào File cùng phần tên với file chương trình nhưng phần mở rộng là 001, 002 v.v…;Một số phần mềm, có file đi kèm có phần mở rộng OVL, chứa các mơdun cùng mức khi tải vào bộ nhớ trong.
b) Cách thức swapping
Swapping là cách thức hệ thống thực hiện việc chuyển giao nội dung một số phần bộ nhớ ra đĩa từ để giải phóng bộ nhớ cho một yêu cầu phân phối hiện tại. Phần nội dung bộ nhớ được chuyển ra ngoài chứa cả nội dung các chương trình đang tồn tại trong bộ nhớ; sau đó khi chương trình nói trên được chọn thực hiện, thì phần bộ nhớ được đưa từ đĩa từ vào bộ nhớ trong.
Swapping áp dụng chủ yếu cho điều phối bộ nhớ liên tục song trong một số trường hợp cũng được các hệ điều hành hoạt động điều phối bộ nhớ gián đoạn sử dụng.
Về hình thức, có thể coi swapping là một biến thể của overlay: Trong overlay, mơdun chương trình chính thuộc chương trình người dùng cịn trong swapping, mơdun chương trình chính thuộc về hệ điều hành, cịn mơdun overlay là các chương trình người dùng, trong một số trường hợp thì thậm chí đấy là các bộ phận các chương trình người dùng.
Trong các hệ điều hành dùng cách thức swapping, tồn tại một mơdun hệ thống tên là swapper có chức năng như sau:
Chọn quá trình (chương trình người dùng) để đưa ra đĩa từ (swap out) Chọn quá trình để đưa trở lại từ đĩa vào bộ nhớ trong (swap in)
Định vị và quản lý không gian swap (trong bộ nhớ trong cũng như trên đĩa từ).
Swap out
Swapper định hướng chọn quá trình được đưa ra đĩa từ (quá trình bị swap out) là quá trình đang bị đình chỉ mà đang chiếm một vùng nhớ đủ lớn để có thể phân phối bộ nhớ cho quá trình đang được nạp vào bộ nhớ trong.
Trong những q trình thóa mãn điều kiện trên, swapper sẽ chọn lựa q trình có độ ưu tiên thấp nhất, chờ đợi một sự kiện xảy ra chậm và quá trình này thường xuyên bị đình chỉ khi thống kê trong một khoảng thời gian dài. Một số điều cần chú ý khi chọn q trình bị swap out là tính đến là thời gian q trình đó đã tải (hoặc nhận) vào bộ nhớ trong, tính chất thực hiện trong bộ nhớ trong của quá trình đó v.v… Cần tránh trường hợp một q trình vừa bị swap out xong thì lại cần gửi nó vào lại bộ nhớ trong (swap in).
Swap in
Swapper chọn quá trình đang ở bộ nhớ ngoài (do swap out) nhận lại vào bộ nhớ trong phụ thuộc vào một số thông số: thời gian q trình đã ở bộ nhớ ngồi,
độ ưu tiên của q trình v.v… Mục tiêu của cơng việc chọn lựa này là đảm bảo sao cho thời gian dành cho swap out và swap in là ít nhất có thể được.
Định vị và quản lý không gian swap
Các quá trình trong trạng thái swap out được hệ điều hành lưu trữ dưới dạng thực hiện được cùng với dữ liệu có liên quan lên một File trên đĩa được gọi là File swap. Khơng những thế, File này cịn chứa các thuộc tính của q trình bị swap, chẳng hạn như độ ưu tiên của quá trình và yêu cầu bộ nhớ đối với q trình đó. Trong một số trường hợp File như trên còn được gọi là ảnh của
quá trình. Do quá trình khi thực hiện làm thay đổi stack và dữ liệu cho nên ảnh-
dạng đang thực hiện của q trình khác với ảnh lưu trữ thơng thường khi chưa được tải. Nói chung, cũng giống như việc bảo vệ trạng thái quá trình khi chuyển điều khiển, khi swap out, vùng bảo vệ tương ứng với q trình đó cũng được lưu trên ảnh của nó.
Tồn tại hai lựa chọn cơ sở đối với việc định vị File swap: - 1 file swap cho toàn bộ hệ thống
- 1 số file swap chuyên dụng theo quá trình.
Lựa chọn chỉ 1 file swap cho toàn bộ hệ thống: Một file rất lớn được khởi tạo, thường xảy ra tại thời điểm khởi tạo hệ thống, chứa mọi ảnh swap out của mọi quá trình. Nói chung, File swap chung đó đặt trên “bộ nhớ ngồi” tốc độ cao; File đó thường có địa chỉ và độ rộng tĩnh. Một điều quan trọng đối với sự lựa chọn này là kích cỡ của file swap chung đó. Nếu kích cỡ của nó q lớn thì vùng trên “bộ nhớ ngồi” dành cho các mục đích khác sẽ bé, ảnh hưởng đến tốc độ hoạt động chung của hệ thống. Ngược lại, nếu kích cỡ của file nhỏ thì có thể xảy ra tình huống sai sót khi swap out.
Lựa chọn một số file swap chuyên dụng: mỗi một quá trình bị swap out sẽ tương ứng với một file trên bộ nhớ ngoài (nhiều file ảnh). File swap (ảnh của quá trình) được khởi tạo hoặc dạng tĩnh (ngay khi quá trình được nạp vào bộ nhớ trong) hoặc động (khi cần swap out mới tạo file).
Việc swap out và swap in đối với quá trình ảnh hưởng đến thời gian thực hiện quá trình và liên quan đến tốc độ vào ra với bộ nhớ ngoài.