Linux là một hệ điều hành họ UNIX miễn phí được sử dụng rộng rãi hiện nay. Được viết vào năm 1991 bởi Linus Toward, hệ điều hành Linux đã thu được nhiều thành công. Là một hệ điều hành đa nhiệm, đa người dùng, Linux có thể chạy trên nhiều nền phần cứng khác nhau. Với tính năng ổn định và mềm dẻo, Linux đang dần được sử dụng nhiều trên các máy chủ cũng như các máy trạm trong các mạng máy tính. Linux còn cho phép dễ dàng thực hiện việc tích hợp nó và các hệ điều hành khác trong một mạng máy tính như Windows, Novell, Apple ... Ngoài ra, với tính năng mã nguồn mở, hệ điều hành này còn cho phép khả năng tùy biến cao, thích hợp cho các nhu cầu sử dụng cụ thể.
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN - - BÁO CÁO BÀI TẬP LỚN MÔN HỌC NGUYÊN LÍ HỆ ĐIỀU HÀNH Tên đề tài: Nghiên cứu tìm hiểu quản lý Bộ Nhớ Trong HĐH Linux Nhóm thực hiện: Nhóm 04 – Lớp: ĐH Kỹ thuật phần mềm 2-K9 Thành viên nhóm: Nguyễn Qúy Dương Tào Hoài Dương Lưu Đức Minh Tạ Văn Quang Giáo viên hướng dẫn: GV.Vương Quốc Dũng LỜI MỞ ĐẦU Linux hệ điều hành mã nguồn mở phổ biến toàn giới Nhiều năm qua, Linux thực tạo cách mạng lĩnh vực máy tính Sự phát triển mà Linux mang lại thật đáng kinh ngạc: hệ điều hành đa nhiệm, đa người dùng Linux chạy nhiều vi xử lý khác như: Intel , Motorola , MC68K , Dec Alpha… Ngoài Linux tương tác tốt với hệ điều hành của: Apple , Microsoft Novell Vì ưu điểm mà ngành công nghệ thông tin Việt Nam chọn Linux làm hệ điều hành cho chương trình ứng dụng chủ đạo kinh tế quốc phòng Với mã nguồn mở, việc sử dụng Linux an toàn với ứng dụng Windows Linux đem đến cho lợi ích kinh tế với nhiều phần mềm miễn phí Giống hệ điều hành khác, Linux phải có chế phương pháp khai thác sử dụng tài nguyên máy hiệu quả, đặc biệt tài nguyên nhớ Trong đồ án này, em trình bày phần quan trọng hệ điều hành Linux hệ điều hành khác là: chế quản lý nhớ Linux CHƯƠNG 1: GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX 1.1 Hệ điều hành Linux Linux hệ điều hành họ UNIX miễn phí sử dụng rộng rãi Được viết vào năm 1991 Linus Toward, hệ điều hành Linux thu nhiều thành công Là hệ điều hành đa nhiệm, đa người dùng, Linux chạy nhiều phần cứng khác Với tính ổn định mềm dẻo, Linux dần sử dụng nhiều máy chủ máy trạm mạng máy tính Linux cho phép dễ dàng thực việc tích hợp hệ điều hành khác mạng máy tính Windows, Novell, Apple Ngoài ra, với tính mã nguồn mở, hệ điều hành cho phép khả tùy biến cao, thích hợp cho nhu cầu sử dụng cụ thể 1.2 Tổng quan quản lí nhớ Linux Trong hệ thống máy tính, nhớ tài nguyên quan trọng Cho dù có nhớ không đáp ứng đủ nhu cầu người sử dụng Các máy tính cá nhân trang bị dung lượng nhớ lớn Thậm chí máy chủ server có đến hàng gigabyte nhớ Thế nhu cầu nhớ không thỏa mãn Có nhiều chiến lược quản lí nhớ nghiên cứu áp dụng, chiến lược sử dụng nhớ ảo hiệu Giống hệ điều hành khác, Linux sử dụng chế nhớ ảo để quản lí tài nguyên nhớ máy tính Linux có cách tiếp cận quản lý nhớ rõ ràng Các ứng dụng Linux không phép truy cập trực tiếp vào địa vật lý nhớ Linux cung cấp cho chương trình chạy HĐH - gọi tiến trình - mô hình đánh địa phẳng không phân đoạn segment:offset DOS Mỗi tiến trình thấy vùng không gian địa riêng Tất phiên UNIX cung cấp cách bảo vệ nhớ theo chế bảo đảm tiến trình ghi đè lên vùng nhớ tiến trình khác hoạt động vùng nhớ hệ thống Nói chung, nhớ mà hệ thống cấp phát cho tiến trình đọc ghi tiến trình khác-tránh khả xung đột nhớ Trong hầu hết hệ thống Linux, trỏ sử dụng số nguyên 32 bit trỏ đến ô nhớ cụ thể Với 32 bit, hệ thống đánh địa lên đến GB nhớ Mô hình nhớ phẳng dễ truy xuất xử lý nhớ phân đoạn segment:offset Ngoài ra, vài hệ thống sử dụng mô hình địa 64 bit, không gian địa mở rộng đến hàng Terabyte Để tăng dung lượng nhớ sẵn có, Linux cài đặt chương trình phân trang đĩa tức lượng không gian hoán đổi phân bố đĩa Khi hệ thống yêu cầu nhiều nhớ vật lý, đưa trang không hoạt động đĩa, nhờ ta chạy ứng dụng lớn lúc hỗ trợ nhiều người sử dụng Tuy vậy, việc hoán đổi không thay nhớ vật lý, chậm cần nhiều thời gian để truy cập đĩa Kernel cài đặt khối nhớ hợp cho chương trình người sử dụng đệm đĩa tạm thời (disk cache) Theo cách này, tất nhớ trống dành để nhớ tạm nhớ đệm (cache) giảm xuống xử lý chạy chương trình lớn CHƯƠNG : CƠ CHẾ QUẢN LÝ BỘ NHỚ CỦA LINUX Hệ thống quản lý nhớ thành phần quan trọng hệ điều hành Máy tính có nhu cầu cần nhiều không gian nhớ không gian nhớ nhớ vật lý tồn hệ thống Nhiều chiến lược phát triển để khắc phục vấn đề đa số thành công sử dụng nhớ ảo Bộ nhớ ảo làm cho hệ thống có nhiều không gian nhớ không gian nhớ thực tế cách chia sẻ tiến trình tiến trình cần nhớ Bộ nhớ ảo làm cho không gian nhớ máy tính ta rộng mở Hệ thống quản lý nhớ cung cấp: Không gian địa rộng (Large Address Spaces) Bộ nhớ ảo có không gian nhớ lớn nhiều lần nhớ vật lý hệ thống Vấn đề bảo vệ nhớ (Protection) Mỗi tiến trình hệ thống có không gian địa riêng Các không gian địa tiến trình hoàn toàn tách biệt tiến trình chạy ảnh hưởng đến tiến trình khác Cũng vậy, kỹ thuật nhớ ảo phần cứng cho phép vùng nhớ chống lại ghi đè Kỹ thuật bảo vệ mã lệnh liệu không bị ghi đè tiến trình không hợp lệ Bản đồ nhớ (Memory Mapping) Bản đồ nhớ sử dụng để ánh xạ file liệu file ảnh vào tiến trình đánh địa không gian nhớ Nội dung file liên kết trực tiếp với không gian địa tiến trình Phân phối nhớ vật lý hợp lý (Fair Physical Memory Allocation) Hệ thống quản lý nhớ cho phép tiến trình chạy hệ thống chia sẻ nhớ vật lý hệ thống cách hợp lý Chia sẻ nhớ ảo (Shared Virtual Memory) Mặc dù nhớ ảo cho phép tiến trình có không gian địa riêng, xong nhiều ta cần tiến trình để chia sẻ nhớ 2.1 Một mô hình tóm tắt nhớ ảo Hình Mô hình tóm tắt ánh xạ từ nhớ ảo tới đồ địa nhớ vật lý Khi vi xử lý thi hành chương trình, đọc lệnh từ nhớ giải mã Trong giải mã lệnh, lấy cất nội dung ô nhớ nhớ Bộ vi xử lý sau thi hành lệnh chuyển đến lệnh chương trình, đảm bảo vi xử lý luôn truy cập nhớ để nhận lệnh nhận cất liệu Trong hệ thống nhớ ảo, tất địa ảo chuyển đổi thành địa vật lý vi xử lý Để thực việc chuyển đổi này, nhớ ảo nhớ vật lý chia thành phần có kích thước hợp lý gọi trang (pages) Tất trang có kích thước giống hệt VD: Linux hệ thống Alpha AXP sử dụng trang có dung lượng KB hệ thống Intel x86 sử dụng trang có dung lượng KB Mỗi trang đánh số với số nhất, gọi số hiệu khung trang (page frame number PFN) Trong mô hình đánh số trang này, địa ảo gồm phần: địa offset số hiệu khung trang (PFN) VD: Nếu cỡ trang KB, địa ảo bit 0÷11 địa ảo thể địa offset, bit từ bit 12 đến bit cao cho biết số hiệu khung trang ảo Mỗi vi xử lý xử lí địa ảo tách riêng địa offset số hiệu khung trang, chuyển đổi số hiệu khung trang ảo thành số hiệu khung trang vật lý phù hợp truy cập vào địa offset trang vật lý nhờ bảng phân trang Mỗi phần tử bảng phân trang gồm thông tin sau: - Valid flag: Cờ xác định tính hợp lệ, nhận giá trị - Số hiệu khung trang vật lý mà phần tử diễn tả - Thông tin điều khiển truy cập trang Để chuyển đổi địa ảo sang địa vật lý, vi xử lý phải tính toán số hiệu khung trang địa ảo địa offset trang ảo Giả sử kích thước trang ảo 1000h bytes (là 4096 bytes theo hệ thập phân) địa có giá trị 1194h không gian địa ảo tiến trình địa chuyển đổi thành địa offset 0194h thuộc trang ảo có số hiệu khung trang Nếu số hiệu khung trang ảo hợp lệ (nhỏ số max bảng phân trang) vi xử lý nhận số hiệu khung trang vật lý phần tử Ngược lại, số số vùng không tồn nhớ ảo, vi xử lý thực chuyển đổi quyền điều khiển tới hệ điều hành để hệ điều hành sửa chữa lại địa chỉ: vi xử lý thông báo cho hệ điều hành tiến trình hợp lệ cố gắng truy cập địa ảo chuyển đổi địa vật lý hợp lệ, địa coi hỏng trang hệ điều hành thông báo địa ảo không hợp lệ Đây lỗi trang Nếu phần tử cần tìm bảng phân trang hợp lệ, vi xử lý lấy số hiệu khung trang vật lý nhân với kích thước trang kết làm địa sở (địa đầu) trang nhớ vật lý Sau cộng địa sở với địa offset để địa lệnh liệu cần truy cập VD: số hiệu khung trang ảo tiến trình 1, theo giá trị phần tử tương ứng bảng phân trang ta có số hiệu khung trang vật lý 4, kích thước trang 4Kb (1000h) địa sở trang vật lý 4000h (4 x 1000h), cộng với địa offset 0194h địa vật lý 4194h Theo phương pháp trên, nhớ ảo ánh xạ vào trang vật lý hệ thống cách 2.2 Lý yêu cầu phải phân trang Khi có không gian nhớ vật lý không gian nhớ ảo, hệ điều hành phải cân nhắc để sử dụng hiệu nhớ Một phương pháp để tiết kiệm nhớ vật lý yêu cầu trang Theo hệ thống nạp trang nhớ ảo truy cập mà sử dụng chương trình thi hành Khi tiến trình cố gắng truy cập tới địa ảo không thời nhớ, hay vi xử lý tìm thấy phần tử bảng phân trang ứng với trang ảo tham chiếu VD hình phần tử bảng phân trang ứng với số hiệu khung trang ảo nên tiến trình X cố gắng đọc địa từ số hiệu khung trang ảo này, vi xử lý chuyển đổi địa thành địa vật lý Lúc vi xử lý thông báo với hệ điều hành xuất lỗi trang *) Nếu địa ảo lỗi địa không hợp lệ (hay không tồn tại), hệ điều hành kết thúc để bảo vệ tiến trình khác hệ thống không bị ảnh hưởng tiến trình không minh bạch *) Nếu địa ảo lỗi địa hợp lệ trang mà đưa nhớ, hệ điều hành phải nạp trang phù hợp vào nhớ từ đĩa Việc truy cập đĩa nhiều thời gian tiến trình phải đợi trang nạp Sau trang ảo nạp ghi vào khung trang vật lý trống phần tử bảng phân trang có số giống số hiệu khung trang ảo nhận số hiệu trang vật lý vừa phân phối cho Sau tiến trình chuyển trở lại trạng thái hoạt động để thực tiếp lệnh bị tạm dừng lỗi nhớ xuất Việc truy cập nhớ ảo tiếp tục thực hiện, vi xử lý thực việc chuyển đổi địa ảo thành địa vật lý, tiến trình tiếp tục thi hành * Trong thời gian chờ nạp trang có tiến trình khác chạy hệ điều hành lựa chọn số chúng thi hành Linux sử dụng kỹ thuật yêu cầu trang để nạp trang thi hành vào nhớ ảo Bất lệnh thi hành, file chứa mở nội dung ánh xạ vào nhớ ảo Điều thực sơ đồ nhớ (memory mapping) Tuy nhiên, có phần trang đưa vào nhớ vật lý Khi thi hành lệnh, hệ thống sinh lỗi trang Linux sử dụng sơ đồ để định phần nạp để thi hành CHƯƠNG 3: VÙNG TRUNG GIAN (SWAPPING) Nếu tiến trình cần nạp trang ảo vào nhớ vật lý sẵn trang vật lý tự cho nó, hệ điều hành phải cấp phát nhớ cho trang cách loại bỏ trang khác khỏi nhớ vật lý, gọi kỹ thuật đổi trang hay thay trang Nếu trang bị loại bỏ khỏi nhớ vật lý thuộc nội dung file ảnh file liệu chưa bị thay đổi trang không cần phải ghi lại lên đĩa Để đổi trang cần loại bỏ trang tiến trình cần lần nữa, việc đưa trang trở lại nhớ từ file ảnh liệu Tuy nhiên, trang bị thay đổi, hệ điều hành phải giữ nội dung trang để truy cập sau Kiểu trang gọi trang dirty, bị di chuyển khỏi nhớ ghi vào loại file đặc biệt swap file (file trao đổi) Việc truy cập tới swap file liên quan nhiều tới tốc độ vi xử lý nhớ vật lý hệ thống Nhiều thuật toán sử dụng để giải vấn đề loại bỏ đưa swap file Tập hợp trang mà tiến trình sử dụng gọi working set (tập trang làm việc) Một lược đồ thuật toán hoán đổi hiệu phải đảm bảo tất tiến trình có working set hiệu nhớ vật lý Linux sử dụng kỹ thuật “làm già trang” LRU (Least Recently Used - sử dụng gần nhất) để lựa chọn trang đưa khỏi nhớ Theo đó, trang hoạt động hệ thống có “tuổi”, “tuổi” trang thay đổi trang truy cập Khi trang truy cập, tuổi trở nên trẻ hơn, trang truy cập già lâu không truy cập trở thành trang già Các trang già đối tượng tốt cho việc hoán đổi 10 Hình Cấu trúc liệu free_area Ví dụ, hình khối gồm trang yêu cầu, khối đầu có phần tử bị bỏ qua, khối thứ có kích thước trang chọn (bắt đầu khung trang số 4) Nó tách làm khối khối trang Khối khung trang số trả cho đối tượng gọi trang phân phối khối thứ bắt đầu khung trang số xếp thành khối gồm trang vào phần tử mảng free_area 6.3 Thu hồi trang phân phối Việc phân phối khối nhớ gồm nhiều trang dẫn đến phân mảnh nhớ khối nhớ tự có số trang lớn yêu cầu phải tách thành khối nhỏ Mã lệnh thu hồi trang gộp khối có số trang nhỏ thành khối có số trang tự lớn Bất khối gồm trang tự kiểm tra khối liền kề có kích thước tương tự xem trang có tự hay không, tự do, gộp với khối tạo thành khối tự có số lượng trang lớn gấp đôi Mỗi lần khối kết hợp lại thành khối có số trang tự lớn mã thu hồi trang cố gắng kết hợp khối thành khối lớn so với thời điểm Theo phương 17 pháp này, khối gồm trang tự ngày lớn nhớ trở thành khối nhớ Ví dụ, hình khung trang số vừa giải phóng (được trả lại thành tự do), kết hợp với với khung trang số tự xếp hàng vào phần tử số mảng free_area khối gồm trang 18 CHƯƠNG 7: VẤN ĐỀ ÁNH XẠ BỘ NHỚ Khi trang thi hành, nội dung phải truy cập thông qua không gian địa ảo tiến trình File thi hành thực không đưa vào nhớ vật lý mà liên kết với nhớ ảo tiến trình Khi phần chương trình chạy, trang đưa vào nhớ từ file thi hành Việc liên kết file vào không gian địa ảo gọi ánh xạ nhớ Hình Các vùng nhớ ảo Mỗi nhớ ảo tiến trình diễn tả cấu trúc liệu mm_struct Cấu trúc chứa thông tin file thời thi hành có trỏ trỏ tới cấu trúc liệu vm_area_struct, cấu trúc liệu diễn tả vị trí bắt đầu kết thúc nhớ ảo tiến trình có quyền truy cập tới vùng nhớ thao tác với chúng Các thao tác tập thủ tục mà Linux phải sử dụng tác động tới vùng nhớ ảo 19 Khi tiến trình cố gắng truy cập nhớ ảo địa nhớ thực tế không tồn nhớ vật lý (trường hợp truy cập bị lỗi trang), thao tác với vùng nhớ ảo thực hiện, thao tác gọi thao tác nopage Thao tác nopage sử dụng yêu cầu Linux đánh số trang file thi hành nhớ Khi file có khả thi hành ánh xạ vào địa ảo tiến trình, tập cấu trúc liệu vm_area_struct tạo Mỗi cấu trúc liệu vm_area_struct diễn tả phần file có khả thi hành: mã có khả thi hành, liệu ban đầu (biến), v.v Linux hỗ trợ số thao tác nhớ ảo chuẩn cấu trúc liệu vm_area_struct tạo, tập chuẩn thao tác với nhớ ảo gắn kết với chúng 7.1 Yêu cầu đánh số trang Một file có khả thi hành ánh xạ vào nhớ ảo tiến trình, thi hành Ngay file vừa nạp vào nhớ, truy cập vùng nhớ ảo không thuộc nhớ vật lý Khi tiến trình truy cập địa ảo mà phần tử bảng quản lý trang hợp lệ, vi xử lý báo với Linux có lỗi trang Linux phải tìm cấu trúc liệu vm_area_struct diễn tả vùng nhớ xuất lỗi trang Nếu cấu trúc liệu vm_area_struct chứa địa ảo đó, tiến trình xác nhận truy cập địa không hợp lệ Linux chuyển tín hiệu tới hệ điều hành, tiến trình phản hồi hợp lệ, bị kết thúc Tiếp theo Linux kiểm tra kiểu lỗi trang xảy có với kiểu truy cập phép vùng nhớ ảo không Nếu tiến trình truy cập theo phương pháp không hợp lệ, ghi tới vùng mà phép đọc, gây lỗi nhớ Nếu Linux xác định lỗi trang lỗi hợp lệ, bắt đầu xử lý lỗi Nếu phần tử bảng phân trang không hợp lệ không rỗng, thời trang phần tử quản lý lưu trữ swap file, phần tử có bit valid trường PFN có giá trị khác Trong trường hợp trường PFN chứa thông tin vị trí lưu trữ trang swap file 20 Không phải tất cấu trúc liệu vm_area_struct có tập thao tác nhớ ảo, chí cấu trúc liệu thao tác nopage Nếu có thao tác nopage cho vùng nhớ ảo này, Linux sử dụng Nếu không, trang nhớ vật lý phần tử bảng phân trang hợp lệ tạo cho Thao tác nopage Linux sử dụng cho file có khả thi hành ánh xạ nhớ sử dụng vùng trang đệm để nạp trang yêu cầu vào nhớ vật lý Bất lúc trang yêu cầu đưa vào nhớ vật lý, bảng quản lý trang cần cập nhật, đặc biệt vi xử lý sử dụng việc chuyển đổi địa để duyệt đệm dự trữ Lúc xác định nguyên nhân lỗi trang xử lý lỗi, tiến trình kích hoạt lại thực tiếp lệnh chạy lúc nhớ ảo bị lỗi 7.2 Vùng trang đệm Linux (The Linux Page Cache) Hình Vùng trang đệm Linux Vai trò vùng trang đệm Linux làm tăng tốc độ truy cập tới file đĩa Các file ánh xạ nhớ đọc trang thời điểm trang lưu trữ vùng trang đệm Vùng trang đệm có vector page_hash_table, có trỏ trỏ tới cấu trúc liệu mem_map_t 21 Mỗi file Linux định danh cấu trúc liệu VFS inode, VFS inode diễn tả file Chỉ số bảng quản lý trang bắt nguồn từ VFS inode file địa offset file Khi trang đọc từ file ánh xạ nhớ, cần đưa vào nhớ yêu cầu, trang đọc thông qua vùng trang đệm Nếu trang có sẵn vùng trang đệm, trỏ trỏ tới cấu trúc liệu mem_map_t chứa thông tin trả cho mã xác định lỗi trang Nếu không trang phải nạp vào nhớ từ hệ thống file lưu trữ Linux phân phối trang vật lý đọc trang từ file đĩa Nếu thực được, Linux bắt đầu việc đọc trang file Nếu tiến trình truy cập chuỗi trang file, trang đợi sẵn nhớ chờ tiến trình xử lý Theo thời gian vùng trang đệm trở nên lớn ảnh đọc thi hành Các trang loại bỏ khỏi vùng đệm chúng có “tuổi” lớn để giảm kích thước vùng trang đệm 7.3 Việc loại bỏ trang tráo đổi trang Khi nhớ vật lý trở nên đi, hệ thống quản lý nhớ Linux phải cố gắng giải phóng trang nhớ vật lý lưu trữ liệu Công việc thực trình tiện ích tráo đổi nhân Linux (kswapd) Trình tiện ích tráo đổi hạt nhân kiểu đặc biệt tiến trình, đoạn mã nhân HĐH Các đoạn mã hạt nhân tiến trình nhớ ảo, chúng chạy chế độ hạt nhân không gian địa vật lý Trình tiện ích đưa trang cần tráo đổi swap file hệ thống Vai trò đảm bảo có đủ trang tự hệ thống có đủ để giúp cho hệ điều hành thực quản lý sử dụng nhớ hiệu Kswap khởi tạo thời điểm khởi động hệ thống thực việc tráo đổi trang theo định kỳ nhờ swap timer hạt nhân Tại thời điểm số đếm thời gian chạy đến không, kswapd xem xét xem số trang nhớ tự hệ thống để định giải phóng số trang trạng thái tự 22 hay không Chừng mà số trang nhớ tự hệ thống trì phạm vi cho phép, kswapd không làm Nó trở trạng thái sẵn sàng thời điểm số đếm thời gian không Để kiểm tra kswapd nhận giá trị tổng số trang thời ghi swap file Nó lưu trữ giá trị tổng lại, giá trị tăng thời điểm trang xếp hàng đợi để ghi swap file, giảm thời điểm việc ghi tới thiết bị swap (ví dụ ổ cứng chứa swap file) hoàn thành Nếu số trang tự hệ thống thấp mức cho phép, kswapd cố gắng giảm số trang vật lý sử dụng hệ thống theo cách sau: - Giảm kích thước đệm vùng trang đệm - Sử dụng trang nhớ dùng chung - Loại bỏ tráo đổi trang nhớ Nếu số trang nhớ tự hệ thống thấp HĐH cố gắng giải phóng trang nhớ trước chạy lần Nếu không cố gắng giải phóng trang Mỗi cách cố gắng thực có đủ số trang nhớ tự cần thiết Kswap nhớ cách mà sử dụng sau cùng, lần chạy cố gắng thử giải phóng trang nhớ việc sử dụng phương pháp sau Sau có đủ trang nhớ tự do, kswapd lần quay trạng thái sẵn sàng thời điểm mà số đếm thời gian không Nếu nguyên nhân đó, số trang tự hệ thống thấp trạng thái sẵn sàng khoảng thời gian nửa khoảng thời gian trạng thái sẵn sàng thông thường Một số trang tự lớn trở lại giá trị bình thường 7.3.1 Phương pháp giảm kích thước trang vùng đệm Các trang lưu giữ vùng trang đệm (page caches) vùng đệm (buffer caches) đối tượng phù hợp để trở thành trang tự free_area vector Vùng trang đệm chứa trang file ánh xạ nhớ chứa trang không cần thiết trang làm đầy nhớ hệ thống Tương tự vậy, vùng đệm cho việc đọc ghi liệu tới thiết bị vật lý, chứa đệm liệu không cần thiết 23 Khi nhớ vật lý hệ thống bắt đầu chạy trạng thái đầy, việc loại bỏ trang khỏi vùng đệm tương đối dễ không yêu cầu ghi tới thiết bị vật lý (Không giống trang lưu trữ tạm ổ đĩa) Việc loại bỏ có ưu điểm truy cập tới thiết bị vật lý file ánh xạ nhớ (2 việc làm cho hệ thống chạy chậm hơn) Tuy việc loại bỏ trang khỏi vùng đệm làm cho tất tiến trình trở nên hiệu kswapd cố gắng làm giảm kích thước vùng đệm sử dụng Nó kiểm tra trang khối nhớ mem_map page vecto Để chọn trang giải phóng khỏi nhớ vật lý Kích thước khối tính theo trang lớn kswapd thực việc tráo đổi mạnh (trường hợp số lượng trang tự hệ thống thấp đến mức nguy hiểm) Các khối gồm nhiều trang kiểm tra theo kiểu xoay vòng, lần trang khối khác kiểm tra tối thiểu hóa việc ánh xạ nhớ Thuật toán sử dụng gọi thuật toán clock Tại thời điểm, vài trang toàn mem_map page vector kiểm tra Nếu trang kiểm tra kiểm tra lại lưu trữ vùng trang đệm vùng đệm Nếu trang không thuộc vùng đệm trang mem_map page vector kiểm tra Nếu tất đệm giải phóng trang chứa chúng giải phóng Các trang kiểm tra thuộc vùng trang đệm Linux loại bỏ khỏi vùng trang đệm trở thành trang tự Khi có đủ trang tự kswapd đợi lần chạy để kích hoạt trở lại Khi trang giải phóng phần nhớ ảo (chúng trang cất giữ) không cập nhật bảng quản lý trang Nếu đủ trang lưu trữ liệu để loại bỏ cố gắng tráo đổi vài trang dùng chung 7.3.2 Phương pháp tráo đổi trang nhớ dùng chung System V 24 Bộ nhớ dùng chung System V kỹ thuật liên lạc tiến trình bên cho phép nhiều tiến trình dùng chung nhớ ảo để chuyển giao thông tin chúng với Mỗi vùng nhớ dùng chung System V diễn tả cấu trúc liệu shmid_ds Cấu trúc chứa trỏ trỏ tới danh sách cấu trúc liệu vm_area_struct ứng với tiến trình chia sẻ vùng nhớ nhớ ảo Các cấu trúc liệu vm_area_struct chứa vị trí vùng nhớ chia sẻ system V nhớ ảo tiến trình Mỗi cấu trúc liệu vm_area_struct cho nhớ chia sẻ system V liên kết với cấu trúc liệu vm_area_struct khác việc sử dụng trỏ vm_next_shared vm_prev_shared Cấu trúc liệu shmid_ds chứa danh sách phần tử bảng quản lý trang diễn tả trang nhớ vật lý ánh xạ trang nhớ ảo dùng Kswap sử dụng thuật toán clock tráo đổi trang nhớ dùng chung system V Nó ghi nhớ trang thuộc vùng nhớ ảo dùng chung mà tráo đổi gần cách giữ số, số số so sánh tập cấu trúc liệu shmid_ds, số thứ số danh sách phần tử bảng quản lý trang cho vùng nhớ chia sẻ system V Khi số hiệu khung trang vật lý tương ứng với trang nhớ ảo nhớ chia sẻ (số hiệu có bảng phân trang tất tiến trình chia sẻ vùng nhớ ảo này), kswapd phải thay đổi tất bảng phân trang để trang nhớ không nhớ lưu lại swap file Đối với trang dùng chung tráo đổi, kswapd tìm phần tử bảng quản lý trang (chứa tập bảng quản lý trang tiến trình chia sẻ) Nếu phần tử hợp lệ, chuyển thành không hợp lệ giảm tổng số người sử dụng trang này(giá trị count) Nếu giá trị count trang sau tất bảng quản lý trang tiến trình chia sẻ bị thay đổi, trang dùng chung ghi swap file Phần tử bảng quản lý trang ứng với cấu trúc liệu shmid_ds cho vùng nhớ chia sẻ system V thay phần tử quản lý trang tráo đổi Thông tin phần tử bảng quản lý trang tráo đổi sử dụng lại trang đưa trở lại vào nhớ vật lý 25 7.3.3 Phương pháp tráo đổi loại bỏ trang Trình tiện ích tráo đổi xem xét tiến trình hệ thống cách để tìm đối tượng phù hợp để tráo đổi Các đối tượng tốt tiến trình tráo đổi (có số tiến trình không thể) đối tượng có nhiều trang tráo đổi loại bỏ khỏi nhớ Khi liệu chúng lấy lại, trang tráo đổi nhớ vật lý ghi vào swap file hệ thống Nhiều nội dung file có khả thi hành nạp dễ dàng đọc lại từ file Ví dụ, lệnh có khả thi hành không bị thay đổi không ghi tới swap file Khi chúng tham chiếu lại tiến trình, chúng đưa trở lại nhớ từ file * Các trang bị tráo đổi loại bỏ chúng bị khóa nhớ Thuật toán tráo đổi Linux sử dụng trang “già” Mỗi trang có giá trị truyền vào kswapd để kswapd biết trang có thuộc diện bị tráo đổi hay không Độ già trang tuỳ thuộc vào việc truy cập sử dụng trang, kswapd tráo đổi trang già Các trang kiểu Dirty trang tráo đổi Linux sử dụng bit xác định cấu trúc PTE để diễn tả trang có kiểu dirty Tuy tất trang dirty ghi tới swap file vùng nhớ ảo tiến trình có thao tác tráo đổi phương thức sử dụng riêng Mặt khác, trình tiện ích tráo đổi định trang swap file để ghi trang tới thiết bị tráo đổi Phần tử bảng quản lý trang thay phần tử mà đánh dấu invalid chứa thông tin vị trí trang swap file Đó địa offset swap file nơi cất trang dấu hiệu thông báo swap file sử dụng Nếu đủ số trang tiến trình tráo đổi, trang tráo đổi hay trang bị loại bỏ, trình tiện ích tráo đổi quay lại trạng thái sẵn sàng Nó xem xét tiến trình hệ thống Trình tiện ích tráo đổi thực tráo đổi trang vật lý tiến trình hệ thống trở lại trạng thái cân Phương pháp tối ưu nhiều với việc tráo đổi toàn tiến trình Khi trang tráo đổi swap file, Linux tránh việc cố gắng ghi trang không thể, việc gây tượng trang vừa 26 swap file vừa nhớ vật lý Điều xảy trang tráo đổi khỏi nhớ lại nạp lại vào nhớ truy cập tiến trình khác Linux sử dụng vùng đệm tráo đổi để kiểm soát file Vùng đệm tráo đổi danh sách phần tử bảng quản lý trang, phần tử tương ứng với trang vật lý hệ thống Nếu phần tử vùng đệm tráo đổi khác 0, trang lưu giữ swap file chưa bị thay đổi Nếu sau trang bị thay đổi (bị ghi), phần tử quản lý bị đẩy khỏi vùng đệm tráo đổi Các phần tử vùng đệm tráo đổi phần tử thuộc bảng quản lý trang cho trang bị tráo đổi Chúng chứa thông tin cho phép Linux tìm swap file trang swap file cách xác 7.4 Việc tráo đổi trang nạp Các trang kiểu dirty ghi swap file cần đến lần nữa, ví dụ ứng dụng ghi tới vùng nhớ ảo mà nội dung lưu trữ trang vật lý lúc trước tráo đổi Việc truy cập trang thuộc nhớ ảo không lưu trữ nhớ vật lý nguyên nhân gây lỗi trang Mã xử lý lỗi trang tìm kiếm phần tử bảng quản lý trang địa ảo lỗi Nếu phần tử mà tìm thấy cho biết trang tráo đổi nhớ, Linux phải tráo đổi trang trở lại nhớ vật lý Linux cần thông tin vị trí swap file chứa phần tử cần tìm để nạp lại trang vào nhớ vật lý Nó phân phối trang vật lý tự nạp trang tráo đổi trở lại nhớ từ swap file Thông tin cho biết trang nằm swap file lấy từ phần tử quản lý trang có thuộc tính invalid bảng quản lý trang Nếu việc truy cập với thao tác ghi nguyên nhân gây lỗi trang trang bị bỏ lại vùng đệm tráo đổi phần tử quản lý trang bị loại bỏ quyền ghi Về sau trang ghi lên, lỗi trang khác xảy ra, lúc trang đánh dấu dirty, phần tử quản lý bị đẩy khỏi vùng đệm tráo đổi Nếu trang không 27 ghi tới cần tráo đổi lần nữa, Linux ngăn ngừa việc ghi trang tới swap file trang tồn swap file Nếu việc truy cập thao tác ghi khiến trang nạp lại vào nhớ từ swap file, bị di chuyển khỏi vùng đệm tráo đổi phần tử quản lý bảng quản lý trang đánh dấu dirty thêm quyền cho phép ghi file 28 Kết luận Qua phần tập trình bày tài liệu này, ta nắm nguyên lí chế quản lý nhớ hệ điều hành Linux mức độ Từ giúp hiểu phần cách vận hành hoạt động hệ thống hệ điều hành Linux Tài liệu mang đến phần kiến thức nhỏ đầy đủ giúp em tự tin nghiên cứu sâu vấn đề quản lý nhớ không hệ điều hành Linux mà hệ điều hành khác Tài liệu chủ yếu nghiên cứu hệ thống nhớ ảo, kỹ thuật quản lý nhớ hiệu thông dụng không áp dụng riêng với Linux Phần tập mang tính chất nghiên cứu nên không trình bày sâu em cố gắng tóm lược lại vấn đề để hiểu cách hoạt động nhớ hệ thống sử dụng hệ điều hành Linux như: địa ảo, địa vật lý, loại bảng phân trang, đệm, vùng đệm cache,… Qua thấy tầm quan trọng việc quản lý nhớ sử dụng hiệu tài nguyên hệ thống cách hợp lý Em xin chân thành cảm ơn! 29 CHƯƠNG 1: GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX .3 1.1 Hệ điều hành Linux 1.2 Tổng quan quản lí nhớ Linux CHƯƠNG : CƠ CHẾ QUẢN LÝ BỘ NHỚ CỦA LINUX 2.1 Một mô hình tóm tắt nhớ ảo 2.2 Lý yêu cầu phải phân trang CHƯƠNG 3: VÙNG TRUNG GIAN (SWAPPING) 10 CHƯƠNG 4: BỘ NHỚ ẢO DÙNG CHUNG (SHARED VIRTUAL MEMORY) 11 CHƯƠNG 5: CACHES 13 CHƯƠNG 6: CÁC BẢNG QUẢN LÝ TRANG TRONG LINUX 15 6.1 Việc phân phối thu hồi trang 15 6.2 Việc phân phối trang .16 6.3 Thu hồi trang phân phối .17 CHƯƠNG 7: VẤN ĐỀ ÁNH XẠ BỘ NHỚ .19 7.1 Yêu cầu đánh số trang .20 7.2 Vùng trang đệm Linux (The Linux Page Cache) 21 7.3 Việc loại bỏ trang tráo đổi trang .22 7.3.1 Phương pháp giảm kích thước trang vùng đệm .23 7.3.2 Phương pháp tráo đổi trang nhớ dùng chung System V 24 7.3.3 Phương pháp tráo đổi loại bỏ trang 26 7.4 Việc tráo đổi trang nạp 27 Kết luận .29 30 Tài liệu tham khảo bài: -Homepage: -https://www.kernel.org -Understanding The Linux Virtual Memory Manager -http://www.tldp.org/LDP/tlk/mm/memory.html -Giáo trình hệ điều hành Linux Unix 31 [...]... hành Linux Tài liệu đã mang đến 1 phần kiến thức tuy nhỏ nhưng khá đầy đủ và căn bản có thể giúp em tự tin khi nghiên cứu sâu hơn trong vấn đề quản lý bộ nhớ không chỉ của hệ điều hành Linux mà còn cả các hệ điều hành khác Tài liệu này chủ yếu nghiên cứu về hệ thống bộ nhớ ảo, một kỹ thuật quản lý bộ nhớ rất hiệu quả và thông dụng không chỉ áp dụng riêng với Linux Phần bài tập này chỉ mang tính chất nghiên. .. tới một vùng trong bộ nhớ ảo mà nội dung của nó đã được lưu trữ trong một trang vật lý lúc trước đã được tráo đổi ra ngoài Việc truy cập một trang thuộc bộ nhớ ảo không được lưu trữ trong bộ nhớ vật lý là nguyên nhân gây ra lỗi trang Mã xử lý lỗi trang tìm kiếm phần tử trong bảng quản lý trang đối với địa chỉ ảo lỗi Nếu phần tử mà nó tìm thấy cho biết trang đã tráo đổi ra ngoài bộ nhớ, Linux phải tráo... chân thành cảm ơn! 29 CHƯƠNG 1: GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX .3 1.1 Hệ điều hành Linux 3 1.2 Tổng quan về quản lí bộ nhớ trong Linux 3 CHƯƠNG 2 : CƠ CHẾ QUẢN LÝ BỘ NHỚ CỦA LINUX 5 2.1 Một mô hình tóm tắt về bộ nhớ ảo 6 2.2 Lý do yêu cầu phải phân trang 8 CHƯƠNG 3: VÙNG TRUNG GIAN (SWAPPING) 10 CHƯƠNG 4: BỘ NHỚ ẢO DÙNG CHUNG (SHARED VIRTUAL MEMORY)... đã được ánh xạ vào một bộ nhớ ảo của tiến trình, nó có thể được thi hành Ngay khi file vừa được nạp vào bộ nhớ, nó sẽ truy cập một vùng bộ nhớ ảo không thuộc bộ nhớ vật lý Khi tiến trình truy cập một địa chỉ ảo mà không có một phần tử trong bảng quản lý trang hợp lệ, bộ vi xử lý sẽ báo với Linux rằng có một lỗi trang Linux phải tìm cấu trúc dữ liệu vm_area_struct diễn tả vùng nhớ xuất hiện lỗi trang... phải tráo đổi trang này trở lại bộ nhớ vật lý Linux cần các thông tin vị trí swap file chứa phần tử cần tìm để nạp lại trang vào bộ nhớ vật lý Nó phân phối một trang vật lý tự do và nạp trang đã tráo đổi ra ngoài trở lại bộ nhớ từ swap file Thông tin cho biết trang này nằm đâu đó trong swap file được lấy từ phần tử quản lý trang có thuộc tính invalid trong bảng quản lý trang Nếu việc truy cập với thao... khiến trang được nạp lại vào bộ nhớ từ swap file, nó sẽ bị di chuyển khỏi vùng đệm tráo đổi và phần tử quản lý nó trong bảng quản lý trang được đánh dấu là dirty và sẽ được thêm quyền cho phép ghi file 28 Kết luận Qua phần bài tập được trình bày trên tài liệu này, ta đã nắm được các nguyên lí trong cơ chế quản lý bộ nhớ của hệ điều hành Linux ở một mức độ căn bản Từ đó giúp hiểu được một phần cách vận... tác nopage cho vùng bộ nhớ ảo này, Linux sẽ sử dụng nó Nếu không, một trang nhớ vật lý mới và một phần tử bảng phân trang hợp lệ sẽ được tạo ra cho nó Thao tác nopage của Linux được sử dụng cho các file có khả năng thi hành đã ánh xạ bộ nhớ và nó sử dụng các vùng trang đệm để nạp trang yêu cầu vào bộ nhớ vật lý Bất cứ lúc nào trang được yêu cầu đã đưa vào bộ nhớ vật lý, các bảng quản lý trang cần được... Khi bộ nhớ vật lý trở nên ít đi, hệ thống con quản lý bộ nhớ của Linux phải cố gắng giải phóng các trang nhớ vật lý đang lưu trữ dữ liệu Công việc này thực hiện bởi trình tiện ích tráo đổi của nhân Linux (kswapd) Trình tiện ích tráo đổi của hạt nhân là một kiểu đặc biệt của tiến trình, một đoạn mã trong nhân HĐH Các đoạn mã hạt nhân là các tiến trình không có bộ nhớ ảo, chúng chạy ở chế độ hạt nhân trong. .. của việc sử dụng các vùng đệm là Linux phải sử dụng nhiều lần và nhiều không gian nhớ cho việc duy trì các vùng đệm này và nếu các vùng đệm này bị lỗi, hệ thống sẽ bị treo 14 CHƯƠNG 6: CÁC BẢNG QUẢN LÝ TRANG TRONG LINUX Hình 2 Các bảng quản lý trang 3 mức Linux áp dụng các bảng quản lý trang 3 mức Số hiệu khung trang của 1 bảng quản lý trang đều chứa thông tin bảng quản lý trang ở mức tiếp theo Để chuyển... thủ tục mà Linux phải sử dụng khi tác động tới vùng nhớ ảo này 19 Khi tiến trình cố gắng truy cập bộ nhớ ảo nhưng địa chỉ nhớ thực tế không tồn tại trong bộ nhớ vật lý (trường hợp truy cập bị lỗi trang), nếu một trong các thao tác với vùng nhớ ảo được thực hiện, thao tác này gọi là thao tác nopage Thao tác nopage được sử dụng khi yêu cầu Linux đánh số các trang của một file thi hành trong bộ nhớ Khi một