Bài giảng hệ điều hành chương 8 memory Bài giảng hệ điều hành chương 8 memory Bài giảng hệ điều hành chương 8 memory Bài giảng hệ điều hành chương 8 memory Bài giảng hệ điều hành chương 8 memory Bài giảng hệ điều hành chương 8 memory
Bộ Nhớ Thực Các kiểu đòa nhớ Chuyển đổi đòa nhớ Overlay swapping Vấn đề cấp phát nhớ liên tục (contiguous memory allocation) Giải pháp fixed partitioning Giải pháp dynamic partitioning Quản lý nhớ Kernel chiếm vùng cố đònh nhớ, vùng lại dành để cấp phát cho process Cấp phát vùng nhớ cho process cho hệ thốâng hoạt động hiệu Vd: Nạp nhiều process vào nhớ tốt để gia tăng mức độ multiprogramming Quản lý nhớ Cấp phát vùng nhớ cho process Bảo vệ: kiểm tra truy xuất nhớ có hợp lệ không Chia sẻ: cho phép process chia sẻ vùng nhớ chung Chuyển đổi đòa luận lý sang đòa vật lý Layout nhớ Operating System Operating System Process A Current Program Process C Process B Uni-programming Multi-programming Các kiểu đòa nhớ (1/2) Đòa vật lý physical (memory) address đòa mà CPU, hay MMU (nếu có), gửi đến nhớ Đòa luận lý (logical address) đòa mà trình sinh Các đòa sinh trình biên dòch (compiler) tương đối hay khả tái đònh vò (relocatable): compiler giả thiết không gian đòa đơn vò biên dòch (compilation unit) đòa tuyệt đối: kết biên dòch nạp vào nhớ để thực thi; dùng Các kiểu đòa nhớ (2/2) Khi lệnh thực thi, đòa luận lý phải chuyển đổi thành đòa vật lý Sự chuyển đổi thường có hỗ trợ phần cứng để đạt hiệu cao Khơng gian nhớ q trình Từ mã nguồn đến file thực thi Linker: kết hợp object module thành file thực thi tái đònh vò đòa tương đối phân giải external reference kết hợp object module thành load module (file nhò phân khả thực thi) System static linking library dynamic linking System library Thực (static) linking Linker chuyển đổi đòa tương đối sang đòa tuyệt đối Module A CALL B L1 Return L1 L length M Module A JMP “L” Module B CALL C M1 length L relocatable object modules Return Module B JMP “L+M” load module L M Return Return LM Module C Module C length N LMN1 Return N Return Chuyển đổi đòa Chuyển đổi đòa chỉ: trình ánh xạ đòa từ không gian đòa sang không gian đòa khác Biểu diễn đòa nhớ Trong source code: symbolic (các biến, hằng, pointer…) Vào thời điểm biên dòch: thường đòa tương đối Ví dụ: a vò trí 14 byte so với vò trí bắt đầu module Thời điểm linking/loading: đòa tuyệt đối int i; goto p1; 2000 250 2250 p1 symbolic address relative address physical memory Sinh đòa vật lý Trong thực thi Đòa chuyển đổi động thực thi Không gian đòa vật lý noncontiguous Cần có phần cứng để chuyển đổi đòa ảo sang đòa vật lý nhanh “Phân trang” (“paging”) “Phân đoạn” (“segmentation”) Rất phổ biến 10 Kỹ thuật overlay (1/2) Chỉ giữ nhớ lệnh liệu cần thiết, giải phóng lệnh/dữ liệu chưa không cần dùng đến Kỹ thuật hữu dụng kích thước process lớn kích thước vùng nhớ cấp cho Quá trình tự điều khiển việc overlay (có hỗ trợ thư viện lập trình) Có thể xem tiền thân kỹ thuật “bộ nhớ ảo” 20 Kỹ thuật overlay (2/2) Pass 70K Pass 80K Symbol table 20K Đơn vò: byte symbol table 20K common routines 30K overlay driver 10K Common routines 30K Assembler Total memory available = 150KB pass 70K nạp thực thi pass 80K 21 Swapping Cơ chế: di chuyển process khỏi nhớ lưu nhớ phụ (swap out) Khi thích hợp, nạp process vào nhớ (swap in) để tiếp tục thực thi Chính sách: Round-robin: swap out P1 (vừa tiêu thụ hết quantum nó), swap in P2 , thực thi P3 ,… Roll out, roll in: dùng đònh thời theo độ ưu tiên (prioritybased scheduling) Process có độ ưu tiên thấp bò swap out nhường chỗ cho process có độ ưu tiên cao vừa đến 22 Swapping Cơ chế 23 Vấn đề cấp phát nhớ liên tục Trong phần lại chương này, mô hình quản lý nhớ mô hình đơn giản [không dùng “bộ nhớ ảo”!] Một process phải nạp hoàn toàn vào nhớ (ngoại trừ dùng kỹ thuật overlay) nằm liên tục (contiguous) Sẽ thảo luận giải pháp cấp phát nhớ sau Phân chia cố đònh (fixed partitioning) Phân chia động (dynamic partitioning) 24 Hiện tượng phân mảnh Phân mảnh ngoại (external fragmentation) Vùng nhớ trống đủ lớn để thỏa mãn yêu cầu cấp phát, lại không liên tục Dùng kết khối (compacting), có thể, để gom lại thành vùng nhớ liên tục Phân mảnh nội (internal fragmentation) Vùng nhớ cấp phát lớn vùng nhớ yêu cầu Ví dụ: cấp khoảng trống 18.464 byte cho process yêu cầu 18.462 byte Thường xảy nhớ thực chia thành khối kích thước cố đònh (fixed-sized block) process cấp phát theo đơn vò khối 25 Phân mảnh nội operating system yêu cầu 18.462 byte (used) hole kích thước 18.464 byte Để tránh overhead quản lý byte, OS cấp phát hẳn khối 18.464 byte cho process dư byte không dùng 26 Fixed partitioning (1) Khi khởi động hệ thống, nhớ chia thành nhiều phần cố đònh rời nhau, gọi partition, có kích thước khác Process có kích thước nhỏ kích thước partition nạp vào partition 27 Giải pháp fixed partitioning (2) Nếu process có kích thước lớn partition phải dùng kỹ thuật overlay Không hiệu bò phân mảnh nội: trình dù lớn hay nhỏ cấp phát trọn partition 28 Chiến lược placement fixed partitioning (1/3) Trường hợp partition có kích thước Nếu partition trống process nạp vào partition Nếu không partition trống, có process bò blocked swap out process nhớ phụ, dành partition cho process 29 Chiến lược placement fixed partitioning (2/3) Trường hợp partition có kích thước không Giải pháp Gán process vào partition nhỏ (trống hay chưa trống) đủ chứa [best fit] Có hàng đợi cho partition Điểm yếu giải pháp: có số hàng đợi trống (vì kích thước partition ‘quá lớn’ process) số hàng đợi dài 30 Chiến lược placement fixed partitioning (3/3) Trường hợp partition có kích thước không Giải pháp Khi cần nạp process vào nhớ chọn partition nhỏ trống đủ chứa [best fit] Chỉ có hàng đợi chung cho partition 31 Giải pháp dynamic partitioning Số lượng vò trí partition không cố đònh partition có kích thước khác Mỗi process cấp phát xác dung lượng nhớ cần thiết Gây tượng phân mảnh ngoại 32 Chiến lược placement dynamic partitioning Quyết đònh cấp phát khối nhớ trống cho process Mục tiêu: giảm chi phí compaction Các chiến lược placement Best-fit: chọn khối nhớ trống nhỏ First-fit: chọn khối nhớ trống phù hợp kể từ đầu nhớ Next-fit: chọn khối nhớ trống phù hợp kể từ vò trí cấp phát cuối Worst-fit: chọn khối nhớ trống lớn 33 Nhận xét Cả hai giải pháp fixed dynamic partitioning không dùng hệ thống đại 34 [...]... Dynamic linking (2) Nhắc lại static linking 0x 080 480 00 program main: call printf printf: ret copy từ libc 13 Dynamic linking (3) 0x 080 480 00 program main: call printf PLT (r/o code) printf: call GOT[5] GOT (r/w data) [5]: dlfixup 0x40001234 libc dlfixup: GOT[5] = &printf call printf printf: ret Fig from M Rosenblum 14 Ưu điểm của dynamic linking Chương trình thực thi có thể gọi phiên bản mới... một thủ tục mới được nạp vào bộ nhớ chính Các thủ tục không được gọi đến sẽ không chiếm chỗ trong bộ nhớ Rất hiệu quả khi chương trình có khối lượng lớn mã có tần suất sử dụng thấp (ví dụ các thủ tục xử lý lỗi) Chính quá trình tự điều khiển dynamic loading Hệ điều hành cung cấp một số thủ tục thư viện hỗ trợ 17 Dynamic loading (2) Các thủ tục để người dùng thực hiện dynamic loading trong... gom lại thành vùng nhớ liên tục Phân mảnh nội (internal fragmentation) Vùng nhớ được cấp phát lớn hơn vùng nhớ yêu cầu Ví dụ: cấp một khoảng trống 18. 464 byte cho một process yêu cầu 18. 462 byte Thường xảy ra khi bộ nhớ thực được chia thành các khối kích thước cố đònh (fixed-sized block) và các process được cấp phát theo đơn vò khối 25 Phân mảnh nội operating system yêu cầu kế tiếp là 18. 462 byte... đơn vò khối 25 Phân mảnh nội operating system yêu cầu kế tiếp là 18. 462 byte (used) hole kích thước 18. 464 byte Để tránh overhead quản lý chỉ 2 byte, OS sẽ cấp phát hẳn khối 18. 464 byte cho process dư ra 2 byte không dùng 26 Fixed partitioning (1) Khi khởi động hệ thống, bộ nhớ chính được chia thành nhiều phần cố đònh rời nhau, gọi là các partition, có kích thước bằng nhau hoặc khác nhau Process... lập trình) Có thể được xem là tiền thân của kỹ thuật “bộ nhớ ảo” 20 Kỹ thuật overlay (2/2) Pass 1 70K Pass 2 80 K Symbol table 20K Đơn vò: byte symbol table 20K common routines 30K overlay driver 10K Common routines 30K Assembler Total memory available = 150KB pass 1 70K nạp và thực thi pass 2 80 K 21 Swapping Cơ chế: di chuyển một process khỏi bộ nhớ chính và lưu trên bộ nhớ phụ (swap out) Khi thích... (symbol) trong file thư viện dlclose() – Close một file thư viện 18 Dynamic loading – Ví dụ 19 Kỹ thuật overlay (1/2) Chỉ giữ trong bộ nhớ những lệnh hoặc dữ liệu cần thiết, giải phóng các lệnh/dữ liệu chưa hoặc không cần dùng đến Kỹ thuật này rất hữu dụng khi kích thước một process lớn hơn kích thước vùng nhớ cấp cho nó Quá trình tự điều khiển việc overlay (có sự hỗ trợ của thư viện lập trình)... (prioritybased scheduling) Process có độ ưu tiên thấp hơn sẽ bò swap out nhường chỗ cho process có độ ưu tiên cao hơn vừa đến 22 Swapping Cơ chế 23 Vấn đề cấp phát bộ nhớ liên tục Trong phần còn lại của chương này, mô hình quản lý bộ nhớ là một mô hình đơn giản [không dùng “bộ nhớ ảo”!] Một process phải được nạp hoàn toàn vào bộ nhớ (ngoại trừ khi dùng kỹ thuật overlay) và nằm liên tục (contiguous)... fixed partitioning (2) Nếu process có kích thước lớn hơn partition thì phải dùng kỹ thuật overlay Không hiệu quả do bò phân mảnh nội: một quá trình dù lớn hay nhỏ đều được cấp phát trọn một partition 28 Chiến lược placement khi fixed partitioning (1/3) Trường hợp các partition có kích thước bằng nhau Nếu còn partition trống process mới sẽ được nạp vào partition đó Nếu không còn partition trống,... khối nhớ trống phù hợp đầu tiên kể từ vò trí cấp phát cuối cùng Worst-fit: chọn khối nhớ trống lớn nhất 33 Nhận xét Cả hai giải pháp fixed và dynamic partitioning hầu như không còn được dùng trong các hệ thống hiện đại 34