CHƢƠNG 7 QUẢN Lí BỘNHỚ
7.1 Bộnhớ thực
7.1.6 Hợpnhất cỏc vựng trống liền nhau
Để khắc phục tỡnh trạng bộ nhớ bị chia nhỏ chỳng ta cú thể dồn cỏc vựng nhớ trống kề nhau.
Trong đa nhiệm với cỏc phõn đoạn thay đổi, khi một chương trỡnh kết thỳc chỳng ta cú thể kiểm tra xem vựng được giải phúng cú nằm liền kề với vựng trống khỏc khụng? Nếu tồn tại thỡ chỳng ta cú thể hoặc đưa thờm vào danh sỏch cỏc phõn đoạn trống thờm một bản ghi nữa hoặc nối liền với vựng trống liền kề thành một vựng trống. Quỏ trỡnh hợp nhất (nối liền) cỏc vựng trống kề nhau biểu diễn trờn hỡnh 4.1.4.1. Nhờ sự hợp nhất này mà chỳng ta tạo được cỏc vựng nhớ liờn tục với kớch thước lớn nhất cú thể.
7.1.6.1 Dồn bộ nhớ
Như chỳng ta thấy sau khi thực hiện hợp nhất cỏc vựng trống (Holes) liền kề nhau nhỡn tổng thể thỡ trong bộ nhớ vẫn tồn tại cỏc vựng trống – cho dự ớt hơn và kớch thước lớn hơn. Đụi khi chương trỡnh cần thực hiện tiếp theo lại lớn đến mức khụng cú vựng trống nào đủ lớn để nạp cho dự tổng cộng kớch thước cỏc vựng trống vẫn lớn hơn cần thiết.
Vấn đề này được khắc phục nhờ phương phỏp gọi là dồn bộ nhớ (hỡnh 4.1.4.2) và bản chất là chuyển (dồn) tất cả cỏc phõn đoạn đang cú chương trỡnh về một phớa bộ nhớ. Nhờ đú thay vỡ cú nhiều phõn đoạn trống (vựng trống) vụn vặt chỳng ta cú được một vựng trống lớn duy nhất trong bộ nhớ. Khi đú chương trỡnh tiếp theo cú xỏc suất lớn sẽ cú đủ bộ nhớ cần thiết để chạy. Đụi khi phương phỏp 'dồn bộ nhớ' cũn gọi là 'dọn rỏc'.
Tuy cú nhiều ớch lợi nhưng phương phỏp dồn bộ nhớ vẫn cú những nhược điểm nhất định:
- Nú cũng làm hao phớ tài nguyờn hệ thống cú thể được sử dụng vào mục đớch khỏc tốt hơn.
- Vào thời gian dồn bộ nhớ, hệ thống phải dừng tất cả cỏc cụng việc khỏc. Kết quả dẫn tới thời gian khụng thể dự đoỏn trước trong việc phản ứng lại cỏc sự kiện (trả lời user trong chế độ dialog chẳng hạn) và điều đú cú thể khụng chấp nhận được trong cỏc hệ thống thời gian thực.
- Dồn bộ nhớ dịch chuyển cỏc task trong bộ nhớ. Điều đú cú nghĩa là thụng tin về sự phõn bố chương trỡnh phải được lưu lại ở dạng nào đú.
- Trong trường hợp cỏc bài toỏn thực hiện liờn tục thỡ tần số thực hiện thao tỏc dồn bộ nhớ cú thể trở nờn thường xuyờn và hao phớ thực hiện nú cú thể vượt quỏ lợi ớch nú mang lại.
7.1.6.2 Cỏc chiến lƣợc phõn bố
thụng tin trong bộ nhớ
Cỏc chiến lược phõn bố bộ nhớ được ỏp dụng để xỏc định chương trỡnh và dữ liệu sẽ được tiếp tục nạp vào vựng nào của bộ nhớ. Chỳng ta thường gặp 3 chiến lược được biểu diễn trờn hỡnh 7.8.
99
1) Chiến lược 'First Suitable': chương trỡnh sẽ được nạp vào vựng trống gặp đầu tiờn (trong danh sỏch cỏc vựng trống) cú kớch thước đủ lớn. Chiến lược này cú vẻ trực giỏc và thực tế vỡ nú cho phộp tỡm lời giải nhanh nhất.
2) Chiến lược 'Most Suitable': Chương trỡnh được nạp vào vựng trống 'vừa nhất' do đú khụng gian lóng phớ là ớt nhất. Với nhiều người thỡ chiến lược này trực giỏc cú vẻ là đỳng nhất.
3) Chiến lược 'Least Suitable': đầu tiờn thỡ chiến lược này cú vẻ lạ lựng, nhưng xem xột kỹ thỡ nú cũng cú cỏc ưu điểm nhất định. Với chiến lược này chương trỡnh nạp vào vựng trống lớn nhất. Ưu điểm là sau khi đó nạp chương trỡnh, vẫn cũn đủ khụng gian trống tương đối lớn để cú thể nạp thờm chương trỡnh mới khỏ lớn.
Hỡnh 49 Chiến lược MS Hỡnh 48 Chiến lược FS
7.1.7 Phõn trang
Hệ thống theo phương phỏp phõn trang cho phộp khụng gian địa chỉ logic của tiến trỡnh khụng nằm liờn tục trong bộ nhớ vật lý, như thế cú thể tải tiến trỡnh vào bộ nhớ nếu bộ nhớ cũn đủ chỗ. Phõn trang khắc phục được nhiều vấn đề của cỏc phương phỏp quản lý bộ nhớ trước đõy, chẳng hạn phõn mảnh ngoài trờn cả bộ nhớ lẫn ổ cứng ngoài, Hiện tượng phõn mảnh trờn ổ đĩa cũn nghiờm trọng hơn vỡ khú ỏp dụng kỹ thuật thu gọn.
7.1.7.1 Cỏc phƣơng phỏp cơ bản
Bộ nhớ vật lý được chia thành cỏc khung trang cú kớch thước cố định. Bộ nhớ logic cũng được chia thành cỏc trang (page). Kớch thước trang và khung trang bằng nhau. Trước khi thực thi, cỏc trang của tiến trinh nằm trờn ổ đĩa sẽ được tải vào bất kỳ khung trang chưa sử dụng nào của bộ nhớ. Ổ cứng cũng được chia thành cỏc khối cú kớch thước bằng kớch thước khung trang.
Hỡnh 52 minh họa phần cứng hỗ trợ phõn trang. Địa chỉ CPU tạo ra được chia thành hai phần là địa chỉ trang (p) và địa chỉ tương đối trong trang (d). Địa chỉ trang được sử dụng làm chỉ mục đến bảng trang (page table). Bảng trang lưu trữ địa chỉ cơ sở của mỗi trang trong bộ nhớ vật lý. Địa chi cơ sở cộng với địa chi tương đối trong trang tạo ra địa chỉ vật lý (địa chỉ tuyệt đối).
Hỡnh 50 Phần cứng hỗ trợ phõn trang
Kớch thước trang được kiến trỳc phần cứng quy định, thường là lũy thừa của 2, biến thiờn từ 512 byte đến 16MB. Nếu kớch thước khụng gian địa chỉ logic là kớch thước trang là đơn vị (byte hoặc word), thỡ (m - n) bit cao của địa chỉ logic xỏc định số hiệu trang và n bit thấp xỏc định địa chỉ tương đối trong trang (Hỡnh 9.5b). Vớ dụ, xột bộ nhớ ở Hỡnh 9.6b. Gỉa sử trang cú kớch thước 4 byte và khụng gian bộ nhớ vật lý 32 byte (8 trang). Địa chỉ logic 0 ứng với trang 0, địa chỉ tương đối 0. Trong bảng trang, trang 0 ở khung 5. Như vậy, địa chỉ logic 0 ứng với địa chỉ vật lý 20 (5 X 4 + 0). Địa chỉ logic 3 (trang 0, địa chỉ tương đối 3) ứng với địa chỉ vật lý 23 (5 x 4 + 3). Phõn trang là trường hợp tỏi định vị động (phần cứng biến đổi (hay ỏnh xạ) địa chỉ logic với địa chỉ vật lý). Phõn trang tổng quỏt húa kỹ thuật trỡnh bày trong mục 7.9 bằng cỏch sử dụng bảng chứa nhiều thanh ghi tỏi định vị, mỗi thanh ghi ứng với một khung trang. Với phõn trang, hiện tượng phõn mảnh ngoài khụng xuất hiện (bất cứ khung trang tự do nào cũng cú thể được cấp phỏt cho tiến trỡnh). Tuy nhiờn, vẫn cú hiện tượng phõn mảnh trong. Vỡ khung trang là đơn vị cấp phỏt cơ sở, nờn nếu nhu cầu bộ nhớ của một tiến
trỡnh khụng là bội số của kớch thước trang, khung trang cuối cựng cú thể khụng được sử dụng hết.
Vớ dụ, nếu kớch thước trang là 1024 byte thỡ tiến trỡnh 2049 byte sẽ cần 2 trang cộng với 1 byte. Hệ thống vẫn phải cấp phỏt 3 khung trang cho tiến trỡnh, dẫn tới sự phõn mảnh trong trờn khung trang cuối cựng. Nếu kớch thước tiến trỡnh độc lập với kớch thước trang, mức độ phõn mảnh trong trung bỡnh của một tiến trỡnh là một nửa trang. Điều này dẫn đến đề xuất giảm kớch thước trang. Tuy nhiờn, cú thể giảm chi phớ phụ trội để quản lý bảng trang bằng cỏch tăng kớch thước trang. Cũng như vậy, cỏc thao tỏc vào/ra trờn 0 đĩa sẽ hiệu quả hơn nếu khối lượng dữ liệu trao đổi lớn. Khi chuẩn bị thực thi, HĐH kiểm tra kớch thước tiến trỡnh (số lượng trang nhớ). Mỗi trang nhớ cần một khung trang nờn tiến trỡnh n trang cần n khung trang. Lần lượt cỏc trang của tiến trỡnh được nạp vào khung nào đú trong số cỏc khung được cấp phỏt, và số hiệu khung được đặt vào hàng tương ứng trong bảng trang của tiến trỡnh (Hỡnh 7.10a).
Hỡnh 51 Bảng trang
7.1.7.2 Cấp phỏt một vựng nhớ liờn
tục
Khụng chỉ bảo vệ đoạn mó và dữ liệu của HĐH (khụng cho tiến trỡnh người dựng thay đổi) mà HĐH phải đảm bảo tiến trỡnh người dựng khụng thể xõm phạm vào vựng nhớ của nhau. Cú thể thực hiện điều này bằng cỏch sử dụng thanh ghi tỏi định vị và thanh ghi giới hạn (limit register) như minh họa trong Hỡnh 7.10a.
Thanh ghi tỏi định vị chứa giỏ trị địa chỉ vật lý nhỏ nhất, cũn thanh ghi giới hạn chứa địa chỉ logic lớn nhất. Cụng việc ỏnh xạ đó được trỡnh bày trong mục 7.20. Việc bảo vệ được thực hiện bằng cỏch kiểm tra xem địa chỉ logic cú bộ hơn thanh ghi giới hạn khụng. Khi chọn tiến trỡnh A thực thi, trong quỏ trỡnh chuyển ngữ cảnh, bộ điều phối thiết lập thanh ghi tỏi định vị và thanh ghi giới hạn tương ứng với tiến trỡnh A. Vỡ mọi địa chỉ do CPU tạo ra sẽ được kiểm tra, nờn cả bộ nhớ HĐH lẫn chương trỡnh và dữ liệu nhiều người dựng đều được bảo vệ.
7.1.7.3 Cấp phỏt vựng nhớ liờn tục
Để chứa được nhiều tiến trỡnh, hệ thống cú thể chia bộ nhớ ra nhiều phõn vựng cú kớch thước cố định, mỗi phõn vựng chứa duy nhất một tiến trỡnh. Khi phõn vựng rỗi, tiến trỡnh nào đú trong hàng đợi nhập sẽ được cài vào. Nếu tiến trỡnh kết thỳc, phõn vựng tương ứng sẽ được giải phúng để cấp phỏt cho tiến trỡnh khỏc. Phương phỏp cũn được gọi là MFT này lần đầu tiờn được cài đặt trờn HĐH IBM OS/360, sử dụng chủ yếu trờn mụi trường xử lý theo lụ. Tuy nhiờn, nhiều ý tưởng giới thiệu ở đõy cũng cú thể ỏp dụng trong mụi trường chia sẻ thời gian -
mụi trường ỏp dụng phương phỏp quản lý bộ nhớ phõn đoạn HĐH ghi lại thụng tin xỏc định tỡnh trạng cỏc vựng nhớ đó cấp phỏt hay chưa. Tại thời điểm ban đầu, toàn bộ bộ nhớ trong trạng thỏi chưa cấp phỏt, và cú thể xem như một khối nhớ khả dụng lớn. Khi cấp phỏt, HĐH tỡm một khối trổng đủ lớn cho tiến trỡnh. Nếu tỡm thấy, HĐH cấp cho tiến trỡnh một lượng nhớ vừa đủ theo yờu cầu, đồng thời lưu giữ phần bộ nhớ khả dụng cũn lại để đỏp ứng những yờu cầu bộ nhớ trong tương lai.
Hỡnh 52 Vớ dụ cấp phỏt bộ nhớ
Giả sử tại thời điểm (a) hệ thống cú 64MB bộ nhớ, HĐH chiếm 8MB đầu liờn, 56MB dành cho tiến trỡnh người dựng như minh họa trong Hỡnh 7.11. Tại thời điểm (b) xuất hiện tiến trỡnh
P1 cú kớch thước 20MB, P1 được đưa vào bộ nhớ, bộ nhớ trống cũn 36MB. Tại thời điểm (c) tiến trinh P2 cú kớch thước 14MB xuất hiện và được cấp phỏt bộ nhớ. Thời điểm (d) tiến trỡnh P3 đến và được cấp phỏt bộ nhớ, bộ nhớ cũn trống 4MB. Nếu tiến trỡnh P4 với kớch thước 8MB đến thỡ bộ nhớ trống khụng đủ chỗ cho P4. Tuy nhiờn, tại thời điểm (e) tiến trỡnh thời điểm (e) tiến trỡnh P2 kết thỳc và bộ nhớ đủ chỗ chứa P4, do đú tại thời điểm (f), P4 được đưa vào bộ nhớ.
Tiến trỡnh lỳc đầu nằm trong hàng đợi nhập. Dựa trờn nhu cậu sử dụng bộ nhớ của từng tiến trỡnh và tổng lượng bộ nhớ khả dụng, HĐH xỏc định liến trỡnh nào được cấp phỏt bộ nhớ. Kế tiếp, tiến trỡnh được tải vào bộ nhớ và cạnh tranh quyền sử dụng CPU. Khi kết thỳc, tiến trỡnh giải phúng bộ nhớ, phần khụng gian nhớ này lại được HĐH cấp phỏt cho tiến trỡnh khỏc. Tụi bất kỳ thời điểm nào, HĐH cú danh sỏch cỏc khối nhớ khả dụng và hàng đợi nhập. HĐH cú thể sắp xếp hàng đợi nhập theo thuật toỏn điều phối. Bộ nhớ lần lượt được cấp phỏt cho cỏc liến trỡnh cho đến khi khụng thể đỏp ứng
vỡ khụng cú khối nhớ khỏ dụng nào đủ lớn. HĐH cú thể đợi cho đến khi cú khối nhớ khả dụng đủ lớn, hoặc tỡm tiếp trong hàng đợi nhập để lựa chọn tiến trỡnh cú nhu cầu bộ nhớ ớt hơn. Cú thểcú nhiều khoảng trống với kớch cỡ khỏc nhau nằm rải rỏc trong bộ nhớ. Khi cần cấp phỏt, hệ thống tỡm kiếm một khoảng trống đủ lớn để cấp. Khoảng trống này bị tỏch ra, một phần cấp cho tiến trỡnh; phần cũn lại trớ thành khoảng trống mới. Tiến trỡnh khi kết thỳc sẽ giải phúng vựng nhớ được cấpphỏt và vựng nhớ này lại được đỏnh dấu là khoảng trống. Cú thể hẹp nhất hai khoảng trống nằm kề nhau thành khoảng trống lớn hơn.
Tựy theo tiờu chớ nào đú, hệ thống tỡm kiếm trờn tập hợp cỏc khoảng trống để lựa chọn khoảng trống tối ưu
- First-fit: cấp phỏt khoảng trống cú kớch thước đủ lớn đầu tiờn. Việc tỡm kiếm bắt đầu từ khoảng trống đầu tiờn trong danh sỏch, hoặc ngay sau khoảng trống vừa được chọn trước đú. Quỏ trỡnh tỡm kiếm kết thỳc ngay sau khi tỡm thấy.
- Best-fit: Cấp phỏt khoảng trống đủ lớn nhỏ nhất. Phương phỏp này tạo ra khoảng trổng cũn lại nhỏ nhất.
- Worst-fit: Cấp phỏt khoảng trống lớn nhất. Phương phỏp này tạo ra khoảng trống cũn lại lớn nhất.
Cú thể cải tiến hiệu suất tỡm kiếm của Best-fit và Worst-fit bàng cỏch sắp xếp khoảng trống theo kớch thước. Cỏc kết quả mụ phỏng cho thấy thuật toỏn First-fit và Best-fit chạy nhanh và tận dụng bộ nhớ tốt hơn so với Worst-fit. Khụng thuật toỏn nào trong hai thuật toỏn First-fil và Best-fit thực sự vượt trội hơn về khả năng tận dụng bộ nhớ, tuy nhiờn, thuật toỏn First-fit nhỡn chung chạy nhanh hơn Best-fit.
7.1.7.4 Phõn mảnh ngoài và phõn
mảnh trong
Khi nhiều tiến trỡnh được tải vào, rồi sau đú giải phúng bộ nhớ, khụng gian bộ nhớ trống bị phõn thành nhiều mảnh nhỏ. Phõn mảnh ngoài là hiện tượng khi tổng lượng bộ nhớ trống đủ lớn để đỏp ứng một yờu cầu nào đú, nhưng cỏc khoảng trống khụng liờn tục mà rải rỏc trờn toàn bộ nhớ. Xột minh họa trờn Hỡnh 9.4, giả sử sau thời điểm e, cú tiến trỡnh kớch thước 16MB đến, hệ thống cú 2 khoảng trống 14MB và 4MB với tổng dung lượng 18MB, nhưng lại khụng thể cấp phỏt cho tiến trỡnh 16MB. Trong trường họp xấu nhất, giữa mọi cặp tiến trỡnh luụn xuất hiện một khối trống cú kớch thước quỏ bộ. Nếu hợp nhất được tất cả cỏc khoảng trống này thành một khối nhớ trống lớn, hệ thống cú thể cấp phỏt cho nhiều tiến trỡnh. Mức độ phõn mảnh ngoài cũn phụ thuộc vào tổng dung lượng bộ nhớ và kớch thước
trung bỡnh của cỏc tiến trỡnh. Vớ dụ, từ những phõn tớch thống kờ về thuật toỏn first-fit cho thấy, cứ trong N khối nhớ được cấp phỏt thỡ N/2 khối nhớ sẽ khụng sử dụng được do hiện tượng phõn mảnh. Vậy, cú tới 1/3 khụng gian bộ nhớ bị lóng phớ. Dặc điểm này được gọi là luật 50%.Xột một khoảng trổng 8464 byte. Giả sử tiến trỡnh kế tiếp yờu cầu 8462by le bộ nhớ. Nếu cấp phỏt khối nhớ đỳng theo yờu cầu thỡ sẽ thừa ra một khoảng trổng 2 byte. Chi phớ quản lý khoảng trống 2 byte này lớn hơn rất nhiều so với chớnh giỏ trị khoảng trổng 2 byle đem lại. Đõy chớnh là hiện tượng phõn mảnh trong.
Giải phỏp khắc phục hiện tượng phõn mảnh ngoài là thu gọn (compaction): dồn cỏc khoảng trống rải rỏc thành một khoảng lớn. Kỹ thuật này chỉ ỏp dụng được nếu quỏ trỡnh tỏi định vị động được thực hiện ở thời điểm thực thi (vỡ chỉ cần thay đổi giỏ trị thanh ghi tỏi định vị). Trong trường hợp đơn giản, hệ thống dồn tất cả tiến trỡnh về một đầu và dồn tất cả cỏc khoảng trống về đầu kia bộ nhớ để tạo nờn một khoảng trống khả dụng lớn. Đờ giảm chi phớ, cú thể chi thu gọn một phần tạo ra khoảng trống vừa đủ đỏp ứng ngay lập tức yờu cầu của tiến trỡnh nào đú. Cú thể sử dụng hoỏn chuyển cựng với thu gọn. Tiến trỡnh cú thể bị chuyển lừ bộ nhớ chớnh ra ổ cứng và sau đú chuyển về bộ nhớ chớnh. Khi chuyển ra, bộ nhớ do tiến trỡnh chiếm giữ được hệ thống cấp phỏt cho tiến trỡnh khỏc. Tuy nhiờn, khi đưa tiến trỡnh trở lại bộ nhớ chớnh, cú một vấn đề nảy sinh. Nếu sử dụng kỹ thuật tỏi định vị tĩnh, tiến trỡnh phải quay lại đỳng vựng bộ nhớ mà trước đõy nú sử dụng. Như vậy, cú thể một vài tiến trỡnh phải được đưa ra để tạo khoảng trống theo yờu cầu. Nếu sử dụng kỹ thuật tỏi định vị động, tiến trỡnh cú thể được đưa vào bất kỳ vựng nhớ nào. Trong trường hợp này Ỉ IĐI ỉ tỡm một khoảng trống, dựng kỹ thuật thu gọn nếu thấy cần thiết rồi tài tiến trỡnh vào. Một giải phỏp đối với kỹ thuật thu gọn là đưa những tiến trỡnh cần di chuyển ra ngoài, sau đú tải lại vào vị trớ khỏc trong bộ nhớ. Nếu kỹ thuật hoỏn chuyển đó được tớch hợp vào hệ thống thỡ cú thể dễ dàng cài đặt thờm kỹ thuật thu gọn.
7.1.8 Kết hợp phõn đoạn và phõn trang
Phõn đoạn và phõn trang đều cú ưu, nhược điểm riờng. Trờn thực tế, trong cả hai dũng vi xử lý phổ biến nhất hiện nay, dũng Motorola 68000 thiết kế dựa trờn khụng gian địa chỉ phẳng, trong khi dũng Intel 80x86 lại dựa trờn phõn đoạn. Cả hai đều kết hợp cỏc mụ hỡnh bộ nhớ để hướng tới sự
hội tụ giữa phõn đoạn và phõn trang. Cú thể nhỡn thấy sự kết họp này trờn HĐH MULTICS và dũng Intel 380 M LILTICS
Trong MULTICS, địa chỉ logic được tỏch thành số hiệu đoạn 18 bit và