COMPUTER SYSTEM - Phuong-Giang Nguyen ď Chuong 7 BO NHO tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập...
Chapter 7: 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ý 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 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 length L relocatable object modules L - Return M-1 Module A JMP “L” L - Return L Module B Module B CALL C length M JMP “L+M” load module L M - Return Return LM Module C Module C length N L M N - 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…) 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 2000 int i; goto p1; p1 2250 250 symbolic address relative address physical memory Sinh đòa tuyệt đối vào thời điểm biên dòch Symbolic addresses PROGRAM Absolute addresses JUMP i i Physical memory addresses 1024 1024 JUMP 1424 JUMP 1424 1424 LOAD j DATA j 1424 LOAD 2224 Compile LOAD 2224 Load 2224 Source code Absolute load module 2224 Process image Chuẩn bò sinh đòa vật lý (1) Vào thời điểm biên dòch Compiler sinh đòa tuyệt đối Cần thông tin cho biết load module nạp đâu Không cần linker Loader đơn giản Hiếm dùng (MSDOS COM files) Chuẩn bò sinh đòa vật lý (2) Vào thời điểm link-edit Compiler Sinh đòa tương đối (a.k.a relocatable) cho đơn vò biên dòch Tham chiếu đến đòa Linkage editor Chuyển đổi đòa relocatable sang đòa tuyệt đối Phân giải tham chiếu đến đòa Cần thông tin cho biết linked program nạp đâu Loader đơn giản Yêu cầu phần cứng thấp Một chương trình nạp nơi đặc tả dòch chuyển sau nạp Không dùng nhiều 10 Chuẩn bò sinh đòa vật lý (3) Vào thời điểm nạp Tương tự thời điểm link-edit, không giữ cố đònh đòa bắt đầu Chương trình nạp đâu Chương trình dòch chuyển không tách Chỉ cần phần cứng đơn giản: ghi base/limit Loader thiết lập trò cho ghi base/limit Không dùng phổ biến 11 Sinh đòa vật lý Vào thời điểm thực thi Đòa chuyển đổi động thực thi 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 12 Sử dụng vùng nhớ bớt phí phạm Các kỹ thuật hỗ trợ sử dụng vùng nhớ bớt phí phạm: Dynamic linking Dynamic loading Overlay Swapping 13 Dynamic linking (1) Trong dynamic linking Việc link load module L đến module (external module) thực sau tạo xong L MS Windows: module file dll Unix: module file so (shared library) Load module chứa stub tham chiếu (refer) đến routine external module Khi process gọi routine lần đầu, stub nạp routine vào nhớ (nếu routine chưa nạp trước đó), thay đòa đòa routine, gọi routine để thực thi Các lần gọi routine sau xảy bình thường, không tốn overhead 14 Dynamic linking (2) Nhắc lại static linking 0x08048000 program main: call printf printf: ret copy từ libc 15 Dynamic linking (3) 0x08048000 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 16 Ưu điểm dynamic linking Chương trình thực thi gọi phiên (ví dụ phiên sửa lỗi) external module mà không cần sửa đổi và/hay biên dòch lại Chia sẻ mã (code sharing): cần nạp external module vào nhớ lần Các process sử dụng dynamic link với external module chia sẻ vùng mã external module tiết kiệm không gian nhớ không gian đóa 17 Dynamic linking Các external module thường thư viện cung cấp tiện ích (như libc) Stub cần hỗ trợ OS Kiểm tra xem routine nạp vào nhớ chưa 18 Dynamic loading (1) Chỉ cần gọi đến thủ tục nạp vào nhớ Các thủ tục không gọi đến không chiếm chỗ nhớ Rất hiệu chương trình có khối lượng lớn mã có tần suất sử dụng thấp (ví dụ thủ tục xử lý lỗi) Chính trình tự điều khiển dynamic loading Hệ điều hành cung cấp số thủ tục thư viện hỗ trợ 19 Dynamic loading (2) Các thủ tục để người dùng thực dynamic loading UNIX: dlopen() – Open moät file thư viện dlsym() – Dò tìm ký hiệu file thư viện dlclose() – Close file thư viện 20 Dynamic loading – Ví dụ 21 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” 22 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 23 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 24 Swapping Cơ chế 25 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 liên tục vào nhớ (ngoại trừ dùng kỹ thuật overlay) 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) 26 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 Có thể dùng kết khối (compacting) để 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 27 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 28 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 29 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: chương trình dù lớn hay nhỏ cấp phát trọn partition 30 10 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 31 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 không trống) đủ chứa [best fit] Có hàng đợi cho partition Điểm yếu giải pháp 1: có số hàng đợi trống (vì process với kích thước tương ứng) số hàng đợi dài 32 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 33 11 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 34 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 35 Nhận xét Cả hai giải pháp fixed dynamic partitioning không dùng hệ thống đại 36 12 Chapter Cơ chế phân trang (paging) Cơ chế phân đoạn (segmentation) Segmentation with paging 37 Cơ chế phân trang (1/3) Cơ chế phân trang (paging) cho phép không gian đòa vật lý (physical address space) process không liên tục Bộ nhớ thực chia thành khối cố đònh có kích thước gọi frame Thông thường kích thước frame lũy thừa 2, từ khoảng 512 byte đến 16 MB Nhắc lại, nhớ luận lý (logical memory) hay không gian đòa luận lý tập đòa luận lý trình – Đòa luận lý trình sinh cách dùng indexing, base register, segment register,… 38 Cơ chế phân trang (2/3) Bộ nhớ luận lý chia thành khối cố đònh có kích thước gọi trang nhớ (page) Frame trang nhớ có kích thước Hệ điều hành phải thiết lập bảng phân trang (page table) để chuyển đổi (translate) đòa luận lý thành đòa thực Mỗi process cấp phát bảng phân trang Thiết lập bảng phân trang cho process phần chuyển ngữ cảnh Kỹ thuật phân trang khiến nhớ bò phân mảnh nội, khắc phục phân mảnh ngoại 39 13 Cơ chế phân trang (3/3) frame number page number 0 1 2 3 page table logical memory page page page page physical memory 40 Chuyển đổi đòa paging Đòa luận lý gồm có: Page number, p, mục (index) vào bảng phân trang Mỗi mục (entry) bảng phân trang chứa số frame, gọi số frame cho gọn, chứa trang tương ứng nhớ thực Page offset, d, kết hợp với đòa (base address) frame đòa thực Nếu kích thước không gian đòa ảo 2m kích thước trang 2n ô nhớ (byte hay word tùy theo kiến trúc máy) page number page offset p d n bit m - n bit (đònh vò từ 2m - n - 1) (đònh vò từ 2n - 1) Bảng phân trang có tổng cộng 2m/2n = 2m - n mục 41 Paging hardware f frame physical address logical address CPU p d f f 00…00 d f 11…11 p f Nếu kích thước nhớ thực 2l (byte), mục bảng phân trang có l - n bit để chứa frame number physical memory page table frame number frame offset f, l - n bit d, n bit 42 14 Chuyển đổi đòa nhớ paging Ví dụ: 43 Hiện thực bảng phân trang (1) Bảng phân trang giữ nhớ Mỗi process cấp bảng phân trang Thanh ghi page-table base (PTBR) trỏ đến bảng phân trang Thanh ghi page-table length (PTLR) chứa kích thước bảng phân trang (có thể dùng chế bảo vệ nhớ) 44 Hiện thực bảng phân trang (2) Mỗi truy cập liệu/lệnh cần hai thao tác truy xuất vùng nhớ Dùng page number p làm index để truy xuất mục bảng phân trang nhằm lấy số frame Dùng page offset d để truy xuất liệu/lệnh frame Do đó, thường dùng cache phần cứng có tốc độ truy xuất tìm kiếm cao, gọi ghi kết hợp (associative register) translation look-aside buffers (TLBs) Nguyên lý locality 45 15 TLB TLB tìm kiếm truy xuất liệu với tốc độ cực nhanh Số mục TLB Page number Frame number khoảng 2048 TLB cache bảng phân trang Khi có chuyển ngữ cảnh, TLB bò xóa Khi TLB đầy, thay mục dùng LRU Ánh xạ page number – Nếu page number có TLB (“hit”, trúng) lấy frame number tiết kiệm việc truy cập nhớ để lấy frame number từ bảng phân trang – Ngược lại (“miss”, trật), phải lấy frame number từ bảng phân trang bình thường 46 Paging hardware với TLB 47 Đánh giá hiệu TLB (1/2) • Tính thời gian truy xuất hiệu dụng (Effective access time, EAT) Thời gian tìm kiếm TLB: Thời gian chu kỳ truy xuất nhớ: x Hit ratio : tỉ số số lần page number tìm thấy (hit) TLB số lần truy xuất khởi nguồn từ CPU 01 Tính thời gian cần thiết để truy xuất ô nhớ: Khi page number có TLB (“hit”) + x Khi page number TLB (“miss”) + x + x Thời gian truy xuất hiệu dụng EAT = ( + x) + ( + 2x)(1 – ) = (2 – )x + 48 16 Đánh giá hiệu TLB (2/2) Giả sử (đơn vò thời gian: nano giây) Tìm TLB = 20 Memory access = 100 Ví dụ Ví dụ Hit ratio = 0,8 EAT = (100 + 20) 0,8 + (200 + 20) 0,2 = 1,2 100 + 20 = 140 Hit ratio = 0,98 EAT = (100 + 20) 0,98 + (200 + 20) 0,02 = 1,02 100 + 20 = 122 49 Baûo vệ nhớ Việc bảo vệ nhớ thực cách dùng bit bảo vệ (protection bit) giữ mục bảng phân trang Các bit biểu thò thuộc tính trang read-only, read-write, execute-only Ngoài ra, có valid-invalid bit gắn với mục bảng phân trang; trò bit “valid”: cho biết trang process, trang hợp lệ “invalid”: cho biết trang không process, trang bất hợp lệ 50 Bảo vệ valid-invalid bit 00000 10468 12287 frame valid-invalid number bit v page v page v page v v v page - i page - i page page n Mỗi trang nhớ có kích thước 2K = 2048 ô nhớ Process có kích thước 10.468 phân mảnh nội frame (chứa page 5), đòa ảo > 12287 đòa invalid Dùng PTLR để kiểm tra truy xuất đến bảng phân trang có nằm bảng hay không 51 17 Bảng phân trang mức (1/5) Các hệ thống đại hỗ trợ không gian đòa ảo lớn (232 đến 264), giả sử 232 Giả sử kích thước trang nhớ K (= 212) ô nhớ không gian đòa ảo gồm 232/212 = 220 = M page bảng phân trang có M mục Giả sử mục bảng phân trang gồm byte process cần MB cho bảng phân trang, 100 trình cần… Một giải pháp là, thay dùng bảng phân trang cho process, “paging” bảng phân trang này, sinh bảng phân trang cần thiết bảng phân trang mức (two-level page table) 52 Bảng phân trang mức (2/5) • Ví dụ Một đòa luận lý hệ thống 32-bit với trang nhớ 4K chia thành phần sau: page number offset 20 bit 12 bit Bây giờ, bảng phân trang chia nhỏ nên page number chia nhỏ thành phần, vd page offset Page number: 20 bit Nếu mục dài byte Cần 220 byte = MB cho moãi page table Page offset: 12 bit 10-bit page number 10-bit page offset p1 p2 d 10 bit 10 bit 12 bit Vì vậy, đòa luận lý hình vẽ bên • • p1 : số mục bảng phân trang mức (outer-page table) p2 : số mục bảng phân trang mức 53 Bảng phân trang mức (3/5) n1 bit n2 bit - Có 2n1 mục bảng phân trang mức - Mỗi bảng phân trang mức chứa 2n2 mục bảng phân trang mức 54 18 Bảng phân trang mức (4/5) Sơ đồ chuyển đổi đòa (address-translation scheme) cho kỹ thuật phân trang mức, với 32-bit đòa page table mức 55 Bảng phân trang mức (5/5) Bảng phân trang mức giúp tiết kiệm nhớ: Vùng màu đỏ tương ứng với phần không sử dụng không gian đòa ảo Các mục màu đỏ đánh dấu frame Hình: để dễ thấy, frame cấp cho text, data, stack,… nằm liên tục giống không gian đòa ảo Fig from Gottlieb 56 Bảng phân trang đa mức Ví dụ: Không gian đòa luận lý 64-bit với trang nhớ 4K Bảng phân trang 2-mức lớn! Tương tự bảng phân trang mức, ta có bảng phân trang 3, 4,…, n mức page number page offset 52 12 page numbers page offset 32 10 10 12 … page numbers page offset 42 10 12 page numbers page offset 22 10 10 10 12 Tiết kiệm chổ nhớ cách sinh bảng phân trang mà process cần 57 19 Bảng phân trang băm (1/2) Nhận xét: Phí phạm vùng nhớ cho page table trình truy cập số lượng nhỏ trang Dùng kỹ thuật băm để giảm kích thước bảng phân trang Phổ biến hệ thống có đòa lớn 32 bit Để giải đụng độ lưu, mục bảng băm gắn danh sách liên kết mà phần tử cặp (chỉ số trang, số frame): Chỉ số trang biến đổi qua hàm băm thành hashed value Kế đó, cặp (chỉ số trang, số frame) lưu vào danh sách liên kết mục có số hashed value 58 Bảng phân trang băm (2/2) Giải thuật tìm trang: Chỉ số trang biến đổi thành hashed value số mục cần truy cập bảng băm Sau đó, danh sách liên kết mục, tìm phần tử chứa số trang để trích số frame 59 Chia sẻ trang nhớ Process ed data ed data ed Process ed ed ed ed 6 ed 3 7 data data ed ed ed ed 2 data 3 Process data 10 Bộ nhớ thực 60 20 Phân đoạn (1/3) Dưới góc nhìn user, chương trình cấu thành từ nhiều đơn vò luận lý gọi đoạn (segment) Lệnh: main program, procedure, function Dữ liệu: local variables, global variables, common block, stack, symbol table, arrays,… 61 User view chương trình Thông thường, chương trình biên dòch Trình biên dòch tự động xây dựng segment Ví dụ, trình biên dòch Pascal tạo segment Global variables Procedure call stack Procedure/function code Local variable stack procedure symbol table function sqrt main program Trình loader gán segment số đònh danh riêng 62 Phân đoạn (2/3) Dùng chế phân đoạn (segmentation) quản lý nhớ có hỗ trợ user view Không gian đòa ảo tập đoạn, đoạn có tên kích thước riêng Một đòa luận lý gồm tên đoạn độ dời (offset) bên đoạn (so sánh với phân trang!) Cho phép không gian đòa vật lý cấp cho process không liên tục 63 21 Phân đoạn (3/3) physical memory space logical address space segment segment segment segment 64 Hiện thực phân đoạn Đòa luận lý cặp (segment number, offset) Bảng phân đoạn (segment table): gồm nhiều mục, mục mô tả segment chứa limit, xác đònh kích thước segment base, chứa đòa khởi đầu segment nhớ Segment-table base register (STBR): trỏ đến vò trí bảng phân đoạn nhớ Segment-table length register (STLR): số lượng segment chương trình Một số segment s hợp lệ s < STLR 65 Một ví dụ phân đoạn stack 1400 procedure procedure segment segment function sqrt symbol table segment main program segment segment limit base 1000 1400 400 6300 400 4300 1100 3200 1000 4700 segment table 2400 3200 stack 4300 main 4700 symbol table 5700 6300 logical address space function sqrt physical memory space 66 22 Phần cứng hỗ trợ phân đoạn segment table s limit base CPU s d yes physical memory + no trap; addressing error 67 Phân đoạn: Chuyển đổi đòa Ví dụ 68 Chia sẻ đoạn limit base 25286 43062 4425 68348 editor data segment segment editor segment table process P1 logical address space process P1 68348 72773 editor limit base 25286 43062 8850 90003 data segment 43062 segment logical address space process P2 segment table process P2 data 90003 data 98853 physical memory 69 23 Kết hợp phân trang phân đoạn (1/2) Kết hợp phân trang phân đoạn nhằm tận dụng ưu điểm hạn chế khuyết điểm chúng: Vấn đề phân đoạn: đoạn không nạp vào nhớ, đủ không gian trống, phân mảnh ngoại Ý tưởng giải quyết: paging đoạn, cho phép page đoạn nạp vào frame không cần nằm liên tục 70 Kết hợp phân trang phân đoạn (2/2) • Có nhiều cách kết hợp Một cách đơn giản segmentation with paging Mỗi process cấp: Một bảng phân đoạn Nhiều bảng phân trang: đoạn có bảng phân trang Một đòa luận lý (đòa ảo) bao gồm: segment number: số mục bảng phân đoạn, mục chứa đòa (base address) bảng phân trang cho đoạn page number: số mục bảng phân trang, mục chứa số frame nhớ thực offset: độ dời vò trí ô nhớ frame nói 71 Segmentation with paging (1/3) frame frame frame frame frame (STE: segment table entry PTE: page table entry) frame frame Fig from Gottlieb 72 24 Segmentation with paging (2/3) 73 Segmentation with paging (3/3) Segment base: đòa thực bảng phân trang segment present (hay valid-invalid) bit modified bit tồn bảng phân trang Các thông tin bảo vệ chia sẻ vùng nhớ thường nằm bảng phân đoạn Ví dụ: read-only/read-write bit,… 74 25 ... modules L - Return M-1 Module A JMP “L” L - Return L Module B Module B CALL C length M JMP “L+M” load module L M - Return Return LM Module C Module C length N L M N - Return N - Return Chuyển... kiến trúc máy) page number page offset p d n bit m - n bit (đònh vò từ 2m - n - 1) (đònh vò từ 2n - 1) Bảng phân trang có tổng cộng 2m/2n = 2m - n muïc 41 Paging hardware f frame physical address... không process, trang bất hợp lệ 50 Bảo vệ valid-invalid bit 00000 10468 122 87 frame valid-invalid number bit v page v page v page v v v page - i page - i page page n Mỗi trang nhớ có kích