1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đồ án quản lý bộ nhớ trong linux

27 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 182,47 KB

Nội dung

Quản lý nhớ Linux Lời mở đầu Vài 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 chúng mang lại cho máy tính 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 Nó tương tác tốt với hệ điều hành: Apple , Microsoft Novell Không phải ngẫu nhiên 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ở, sử dụng Linux an toàn ứng dụng Windows Linux đem đến cho lợi ích kinh tế với nhiều phần mềm miễn phí Mã nguồn mở hệ điều hành chương trình Linux tài liệu vơ giá để học hỏi kỹ thuật lập trình vốn tài liệu khơng cơng bố ứng dụng Windows Trong đồ án này, tìm hiểu phần quan trọng hệ điều hành Linux là: quản lý nhớ Linux Một hệ điều hành muốn chạy ổn định phải có chế quản lý nhớ hiệu Cơ chế trình bày cách chi tiết đồ án có kèm theo chương trình minh họa fanguoshou fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux MỤC LỤC Lời mở đầu Chương : MỞ ĐẦU I Giới thiệu hệ điều hành Linux II Tổng quan quản lý nhớ Linux Chương : CƠ CHẾ PHÂN ĐOẠN, PHÂN TRANG I Sự phân đoạn II Sự phân trang Nhu cầu phân trang Trang lưu trữ ( page cache) Bảng trang Định vị giải phóng trang Chương : QUẢN LÝ BỘ NHỚ ẢO, KHƠNG GIAN HỐN ĐỔI I Khái niệm nhớ ảo, khơng gian hốn đổi II Mơ hình nhớ ảo III Tạo khơng gian hốn đổi IV Sử dụng khơng gian hốn đổi V Định vị không gian hoán đổi Chương : CƠ CHẾ QUẢN LÝ BỘ NHỚ VẬT LÝ, ÁNH XẠ BỘ NHỚ I Quản lý nhớ vật lý II Ánh xạ nhớ Chương : CẤP PHÁT VÀ GIẢI PHÓNG VÙNG NHỚ I Cấp phát vùng nhớ Cấp phát vùng nhớ giản đơn Cấp phát vùng nhớ lớn Vùng nhớ bảo vệ Một số hàm cấp phát vùng nhớ khác II Giải phóng vùng nhớ III Truy xuất trỏ NULL Tài liệu tham khảo fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux CHƯƠNG I MỞ ĐẦU I Giới thiệu 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 thành công định 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 cịn 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 Ngồi ra, với tính mã nguồn mở, hệ điều hành cịn cho phép khả tùy biến cao, thích hợp cho nhu cầu sử dụng cụ thể II Tổng quan quản lý nhớ Linux Trong hệ thống máy tính, nhớ tài nguyên khan 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ị 128Mb nhớ Các máy chủ server lên đến hàng gigabyte nhớ Thế nhu cầu nhớ không thỏa mãn 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 - cịn 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 Hầu tất phiên UNIX cung cấp cách bảo vệ nhớ theo chế bảo đảm khơng có 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 khơng thể đọc ghi tiến trình khác Trong hầu hết hệ thống Linux UNIX, 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 Ngồi ra, vài hệ thống cịn sử dụng mơ hình địa 64 bit, khơng gian địa mở rộng đến terabyte Để tăng dung lượng nhớ sẵn có, Linux cịn cài đặt chương trình phân trang đĩa tức lượng khơng gian hố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ờ bạn chạy ứng dụng lớn fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux lúc hỗ trợ nhiều người sử dụng Tuy vậy, việc hốn đổi khơng thay RAM 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 fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux CHƯƠNG II CƠ CHẾ PHÂN ĐOẠN, PHÂN TRANG I Sự phân đoạn Linux sử dụng chế phân đoạn để phân tách vùng nhớ cấp phát cho hạt nhân tiến trình Hai phân đoạn liên quan đến 3GB ( từ đến 0xBFFF FFFF ) không gian địa tiến trình nội dung chúng đọc chỉnh sửa chế độ người dùng chế độ Kernel Hai phân đoạn liên quan đến GB thứ (từ 0xC000 0000 đến 0xFFFF FFFF ) khơng gian địa tiến trình nội dung đọc chỉnh sửa chế độ Kernel Theo cách này, liệu mã Kernel bảo vệ khỏi truy cập khơng hợp lý tiến trình chế độ người dùng GB ->| | Kernel | | | | | Kernel Space (Code + Data/Stack) | GB ->| -| | | | | | | | GB ->| | | | | User Space (Code + Data/Stack) | | | GB ->| | | | | | | | | | Tasks 0x00000000 Kernel/User Linear addresses II Sự phân trang Nhu cầu phân trang Vì có q nhớ vật lý so với nhớ ảo nên HĐH phải trọng để khơng lãng phí nhớ vật lý Một cách để tiết kiệm nhớ vật lý load trang ảo mà sử dụng chương trình thực thi Ví dụ, chương trình sở liệu thực truy vấn vào sở liệu Trong trường hợp khơng phải tồn sở liệu load vào nhớ mà load ghi có liên quan Việc mà load trang ảo vào nhớ chúng truy cập dẫn đến nhu cầu phân trang fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux Trang lưu trữ ( page cache) Cache tầng nằm phần quản lý nhớ kernel phần vào đĩa Các trang mà kernel hốn đổi khơng ghi trực tiếp lên đĩa mà ghi vào cache Khi cần vùng nhớ trống kernel ghi trang từ cache đĩa Đặc tính chung trang danh sách trang theo chuẩn LRU(Least Recently Used : sử dụng thường xuyên nhất) : - active_list : trang có page -> age > 0, chứa khơng chứa liệu, ánh xạ mục bảng trang tiến trình - inactive_dirty_list : trang có page -> age == 0, chứa không chứa liệu, không ánh xạ mục bảng trang tiến trình - inactive_clean_list : vùng có inactive_dirty_list riêng nó, chứa trang clean với age == 0, khơng ánh xạ mục bảng trang tiến trình Trong quản lý lỗi trang, kernel tìm kiếm trang lỗi page cache Nếu lỗi tìm thấy đưa đến active_list để đưa thơng báo * Vịng đời User Page Trang P đọc từ đĩa vào nhớ lưu vào page cache Có thể xảy trường hợp sau : * Tiến trình A muốn truy cập vào trang P Nó trình quản lý lỗi trang kiểm tra xem có tương ứng với file ánh xạ khơng Sau lưu vào page cache bảng trang tiến trình Từ vịng đời trang bắt đầu active_list, nơi mà lưu giữ kể sử dụng : * Trang P đọc suốt trình hoạt động đầu đọc hoán đổi, lưu vào page cache Trong trường hợp này, lý mà trang đọc đơn giản phần cluster khối đĩa Một loạt trang liên tiếp đĩa đọc mà khơng cần biết trang có cần hay không Chúng ta không cần quan tâm đến việc thông báo cho trang chúng khơng dùng, chúng phục hồi cho dù khơng cịn tham chiếu đến : * Trang P đọc suốt trình hoạt động đầu đọc cluster ánh xạ nhớ Trong trường hợp này, chuỗi trang liền tiếp sau trang lỗi file ánh xạ nhớ đọc Những trang bắt đầu vòng đời chúng page cache kết hợp với file ánh xạ nhớ active_list fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux Trang P ghi tiến trình, có chứa liệu ( dirty ) Lúc trang P active_list Trang P không sử dụng thời gian Sự kích hoạt định kì hàm kswapd() (kernel swap daemon) giảm dần biến đếm page->age Hàm kswapd() hoạt động nhiều nhu cầu nhớ tăng Thời gian tồn trang P giảm dần xuống (age == 0) khơng cịn tham chiếu, dẫn đến kích hoạt hàm re_fill inactive() Nếu nhớ đầy, hàm swap_out gọi hàm kswapd() để cố gắng lấy lại trang từ không gian địa ảo tiến trình A Vì trang P khơng cịn tham chiếu có age == 0, nên mục bảng trang bị xóa Tất nhiên, thời gian khơng có tiến trình ánh xạ đến Hàm swap_out thực khơng đưa trang P ngồi mà đơn giản loại bỏ tham chiếu tiến trình đến trang Nhờ vào page cache chế swap mà trang bảo đảm ghi lên đĩa cần Thời gian xử lý hay nhiều tùy thuộc vào nhu cầu sử dụng nhớ Tiếp theo, hàm refill_inactive_scan() tìm trang mà đưa đến inactive_dirty list Từ trang P khơng ánh xạ tiến trình có age == đưa từ active_list đến inactive_dirty list Tiến trình A truy cập vào trang P, khơng có nhớ ảo tiến trình mục bảng trang bị xóa hàm swap_out() Trình điều khiển lỗi gọi hàm find_page_nolock() để xác định vị trí trang P page cache Sau tìm thấy, mục bảng trang phục hồi trang P đưa đến active_list Quá trình nhiều thời gian hàm swap_out() xóa mục bảng trang tiến trình A, hàm refill_inactive_scan() vơ hiệu hóa trang P, đưa đến inactive_dirty list Việc tốn nhiều thời gian làm nhớ trở nên chậm Hàm page_ launder() kích hoạt để làm trang dirty Nó tìm trang P inactive_dirty list ghi trang P đĩa Sau đó, trang đưa đến inactive_clean_list Khi hàm page_ launder() thực định ghi lên trang thực bước sau : - Khóa trang - Gọi phương thức writepage Lời gọi kích hoạt vài đoạn mã đặc biệt để thực ghi lên đĩa ( không đồng ) với trang bị khóa Lúc này, hàm page_ launder() hoàn thành nhiệm vụ, trang inactive_dirty_list mở khóa việc ghi hoàn tất - Hàm page_ launder() gọi lại để tìm trang clean để đưa đến inactive_clean_list, giả sử thời gian khơng có tiến trình tham chiếu đến page cache fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux 10 Hàm page_ launder() thực lại để tìm trang khơng sử dụng clean, đưa chúng đến inactive_clean_list 11 Giả sử cần trang trống riêng lẻ Điều thực cách lấy lại trang inactive_clean, trang P chọn Hàm reclaim_page() loại bỏ trang P khỏi page cache ( điều bảo đảm khơng có tiến trình khác tham chiếu đến q trình quản lý lỗi trang ), đưa cho lời gọi trang trống Hoặc : Hàm kreclaimd() cố gắng tạo nhớ trống Nó giành lại trang P xóa Đây chuỗi kiện hợp lý : trang sống page cache thời gian dài, chết đi, lại phục hồi trở lại, Trang phục hồi từ inactive_clean, active lists hay inactive_dirty list Trang đọc trang khơng phải dirty, hàm page_ launder() đưa chúng từ inactive_dirty_list đến inactive_clean_list để làm trống Các trang inactive_clean list kiểm tra định kì nhằm tạo khối nhớ trống lớn liên tiếp để đáp ứng có yêu cầu Tóm lại, trang P thực chất trang logic, thể vài trang vật lý cụ thể Bảng trang (page table) Hình : mức bảng trang Linux giả sử có mức bảng trang Mỗi bảng trang chứa số khung trang bảng trang mức Hình cách mà địa ảo chia fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux thành trường Mỗi trường cung cấp địa offset đến bảng trang cụ thể Để chuyển địa ảo thành địa vật lý, xử lý phải lấy nội dung trường chuyển thành địa offset đến trang vật lý chứa bảng trang đọc số khung trang bảng trang mức Việc lặp lại lần số khung trang trang vật lý chứa địa ảo tìm Bây giờ, trường cuối địa ảo sử dụng để tìm liệu trang Mỗi mà Linux chạy phải cung cấp chuyển đổi macro cho phép kernel hiểu bảng trang tương ứng Do đó, kernel khơng cần biết định dạng mục bảng trang cách xếp Điều giúp cho Linux thành công việc sử dụng đoạn mã để xử lý bảng trang xử lý Alpha ( có mức bảng trang ) xử lý Intel x86 ( có mức bảng trang ) Định vị giải phóng trang Có nhiều nhu cầu trang vật lý hệ thống Ví dụ, ảnh load vào nhớ, HĐH cần định vị trang Những trang làm trống ảnh xử lý xong khơng cịn load Một công dụng khác trang vật lý chứa cấu trúc liệu cụ thể vể kernel cấu trúc trang Cơ chế cấu trúc liệu sử dụng để định vị giải phóng trang có ý nghĩa vơ quan trọng việc quản lý cách hiệu nhớ ảo Tất trang vật lý hệ thống mô tả cấu trúc liệu mem_map, danh sách gồm cấu trúc liệu mem_map_t khởi tạo lúc khởi động Mỗi mem_map_t mô tả trang vật lý hệ thống Các trường quan trọng có liên quan đến việc quản lý nhớ : - Count : lưu số lượng người sử dụng trang Count > trang chia sẻ nhiều tiến trình - age : trường mô tả "tuổi" trang dùng để định trang bị loại bỏ hay hoán đổi - map_nr : số khung trang vật lý mà mem_map_t mô tả Vector free_area sử dụng đoạn mã định vị trang để tìm làm trống trang Toàn lược đồ quản lý đệm hỗ trợ chế đoạn mã liên quan, cịn kích thước trang chế phân trang vật lý sử dụng xử lý khơng liên quan Mỗi phần tử free_area chứa thông tin khối trang Phần tử thứ mảng mô tả trang đơn lẻ, khối gồm trang tiếp theo, khối gồm trang tiếp theo, tăng theo lũy thừa Phần tử list đứng đầu hàng đợi trỏ đến cấu trúc liệu page mảng mem_map Các khối trống trang xếp Con trỏ map trỏ đến ảnh bitmap để theo dõi nhóm trang định vị theo kích thước Bit thứ N ảnh bitmap thiết lập khối thứ N trang trống fanguoshou Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux Hình cho thấy cấu trúc free_area Phần tử có trang trống ( khung trang số ), phần tử có khối trống gồm trang ( khối khung trang số 4, khối thứ hai khung trang số 56 ) 4.1 Định vị trang Linux sử dụng thuật toán Buddy để định vị giải phóng cách hiệu khối trang Đoạn mã định vị trang xác định khối hay nhiều trang vật lý Những trang định vị khối có kích thước lũy thừa Điều có nghĩa định vị khối gồm trang, trang, trang, Khi có đủ số trang trống hệ thống để cấp cho yêu cầu, đoạn mã định vị tìm free_area khối trang có kích thước yêu cầu Mỗi phần tử free_area ánh xạ đến khối trang trống có kích thước tương ứng Ví dụ, phần tử thứ mảng ánh xạ đến khối gồm trang trống định vị Trước hết, thuật tốn định vị tìm khối trang có kích thước u cầu Nó tìm theo chuỗi trang trống xếp phần tử list free_area Nếu khơng có khối trang trống có kích thước u cầu khối có kích thước ( gấp đơi kích thước yêu cầu ) tìm Tiến trình tiếp tục tất free_area tìm khối trang tìm thấy Nếu khối trang tìm thấy lớn kích thước u cầu phải chia nhỏ có khối kích thước Bởi khối có số trang lũy thừa nên việc chia nhỏ thực cách dễ dàng cách chia đôi khối Phần trống khối đưa vào hàng đợi tương ứng, phần lại cung cấp cho lời gọi Hình : Cấu trúc liệu free_area fanguoshou Trang 10 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux Hình : Mơ hình trừu tượng ánh xạ từ địa ảo đến địa vật lý Trong mơ hình này, địa ảo bao gồm hai phần : địa offset số khung trang ảo Nếu kích thước trang 4Kbyte từ bit 11 đến bit địa ảo chứa địa offset, từ bit 12 trở lên số khung trang ảo Mỗi lần xử lý bắt gặp địa ảo, lấy địa offset số khung trang ảo Bộ xử lý phải chuyển từ số khung trang ảo sang số khung trang vật lý sau truy cập vào vị trí địa offset trang vật lý Để làm điều xử lý sử dụng bảng trang Hình khơng gian địa ảo hai tiến trình X Y, tiến trình có bảng trang riêng Các bảng trang ánh xạ trang ảo tiến trình vào trang vật lý nhớ Khung trang ảo số tiến trình X ánh xạ vào nhớ khung trang vật lý số khung trang ảo số tiến trình Y ánh xạ vào khung trang vật lý số Mỗi mục bảng trang theo lý thuyết chứa thông tin sau : - Cờ hợp lệ : cho biết mục bảng trang có hợp lệ hay khơng - Số khung trang vật lý mà mục mô tả - Thông tin điều khiển truy cập : mô tả trang sử dụng ?, ghi hay khơng ?, có chứa đoạn mã thực thi hay không ? Bảng trang truy cập nhờ sử dụng số khung trang ảo địa offset Khung trang ảo số phần tử số bảng ( bắt đầu phần tử ) fanguoshou Trang 13 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux Để chuyển từ địa ảo sang địa vật lý, xử lý trước hết phải làm việc với số khung trang ảo địa offset trang ảo Xem lại hình giả thiết kích thước trang 0x2000 byte địa 0x2194 khơng gian địa ảo tiến trình Y, xử lý chuyển địa thành địa offset 0x194 vào khung trang ảo số Bộ xử lý sử dụng số khung trang ảo mục vào bảng trang tiến trình để truy xuất vào mục bảng trang Nếu mục bảng trang địa offset hợp lệ xử lý lấy số khung trang vật lý từ mục Nếu mục không hợp lệ tiến trình truy cập vào vùng không tồn nhớ ảo Trong trường hợp này, xử lý làm việc với địa mà chuyển điều khiển cho HĐH để khắc phục lỗi Chúng ta xem cách mà xử lý báo cho HĐH biết tiến trình cố gắng truy cập vào địa ảo không hợp lệ Điều gọi lỗi trang, xử lý chuyển đến HĐH HĐH thông báo địa ảo gây lỗi nguyên nhân lỗi trang Giả sử mục hợp lệ bảng trang, xử lý lấy số khung trang vật lý nhân với kích thước trang để lấy địa trang sở nhớ vật lý Cuối cùng, xử lý cộng gộp vào địa offset để lệnh hay liệu cần dùng Sử dụng lại ví dụ trên, khung trang ảo số tiến trình Y ánh xạ đến khung trang vật lý số bắt đầu 0x8000 ( x 0x2000 ), cộng với địa offset 0x194 cho ta địa vật lý cuối 0x8194 Bằng cách ánh xạ địa ảo địa vật lý này, nhớ ảo ánh xạ vào nhớ vật lý hệ thống theo thứ tự Ví dụ, hình 3, khung trang ảo số tiến trình X ánh xạ đến khung trang vật lý số khung trang ảo số ánh xạ đến khung trang vật lý số cao khung trang ảo số nhớ ảo Điều chứng minh cho kết luận thú vị nhớ ảo : trang nhớ ảo hiển thị nhớ vật lý khơng theo thứ tự III Tạo khơng gian hốn đổi Một file swap file thơng thường, khơng có đặc biệt kernel Điều mà có nghĩa kernel khơng có vùng trống Nó chuẩn bị để sử dụng với hàm mkswap() Nó phải thường trú đĩa cục Bit vùng trống quan trọng File swap dự trữ khơng gian đĩa để kernel đưa trang ngồi nhanh chóng mà khơng phải thực tất fanguoshou Trang 14 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux bước cần thiết định vị disk sector cho file Bởi vùng trống file có nghĩa khơng có disk sector định vị nên kernel khơng thể sử dụng file Cách tốt để tạo file swap mà khơng có vùng trống thực đoạn lệnh sau : $ dd if=/dev/zero of=/extra-swap bs=1024 count=1024 1024+0 records in 1024+0 records out $ Trong đó, /extra-swap tên file swap kích thước cho sau count= Kích thước tốt bội số kernel ghi trang nhớ, trang có kích thước Kbyte Nếu kích thước khơng phải bội số cặp Kbyte cuối khơng sử dụng Một phân vùng swap khơng có đặc biệt Bạn tạo giống phân vùng khác, khác sử dụng phân vùng thơ, khơng chứa file hệ thống Phân vùng swap đánh dấu loại 82 ( Linux swap ), điều giúp cho việc liệt kê phân vùng rõ ràng khơng hồn tồn cần thiết kernel Sau bạn tạo phân vùng swap phân vùng swap, bạn cần ghi chữ ký lên nơi bắt đầu Chữ ký sử dụng kernel chứa số thông tin việc quản lý Đoạn lệnh để làm việc hàm mkswap(), sử dụng sau : $ mkswap /extra-swap 1024 Setting up swapspace, size = 1044480 bytes $ Chú ý khơng gian hốn đổi chưa sử dụng, tồn kernel khơng sử dụng để cung cấp nhớ ảo Bạn nên cẩn thận sử dụng hàm mkswap() khơng kiểm tra file hay phân vùng sử dụng chưa Bạn dễ dàng ghi đè lên file hay phân vùng quan trọng với hàm mkswap() Tốt hết bạn nên sử dụng hàm cài đặt lên hệ thống bạn Trình quản lý nhớ Linux giới hạn kích thước khơng gian hốn đổi 127MB Tuy nhiên bạn sử dụng lúc tới khơng gian hốn đổi nên tổng kích thước lên đến 1GB Điều khơng cịn đúng, với phiên kernel giới hạn thay đổi tùy thuộc vào cấu trúc Ví dụ xử lý i386 giới hạn 2GB fanguoshou Trang 15 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux IV Sử dụng khơng gian hốn đổi Một khơng gian hoán đổi khởi tạo lấy để sử dụng nhờ lệnh swapon Lệnh báo cho kernel khơng gian hốn đổi sử dụng Đường dẫn đến khơng gian hốn đổi cấp đối số, để bắt đầu hốn đổi file swap tạm thời, bạn sử dụng đoạn lệnh sau : $ swapon /extra-swap $ Không gian hốn đổi sử dụng tự động cách liệt kê chúng file /etc/fstab /dev/hda8 none swap sw 0 /swapfile none swap sw 0 Đoạn mã khởi động chạy lệnh swapon -a, lệnh bắt đầu thực hoán đổi tất khơng gian hốn đổi liệt kê file /etc/fstab Do lệnh swapon thường sử dụng cần hốn đổi thêm Bạn quản lý việc sử dụng khơng gian hốn đổi với lệnh free Nó cho biết tổng số khơng gian hốn đổi sử dụng $ free total used free shared buffers Mem: 15152 14896 256 12404 2528 -/+ buffers: 12368 2784 Swap: 32452 6684 25768 $ Một khơng gian hốn đổi bị loại bỏ lệnh swapoff Thơng thường không cần phải dùng lệnh ngoại trừ khơng gian hốn đổi tạm thời Bất kì trang sử dụng khơng gian hốn đổi đưa vào trước Nếu khơng có đủ nhớ vật lý để chứa chúng chúng đưa đến khơng gian hốn đổi khác Nếu khơng có đủ nhớ ảo để chứa tất trang, Linux bắt đầu dừng lại (thrash), sau khoảng thời gian dài khơi phục lúc hệ thống sử dụng Bạn nên kiểm tra ( lệnh free ) để xem có đủ nhớ trống khơng trước loại bỏ khơng gian hốn đổi Tất khơng gian hốn đổi sử dụng tự động nhờ lệnh swapon -a loại bỏ với lệnh swapoff -a, lệnh tìm thơng tin file /etc/fstab để loại bỏ Cịn khơng gian hốn đổi điều khiển tay sử dụng bình thường fanguoshou Trang 16 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux Đơi có nhiều khơng gian hốn đổi sử dụng có nhiều nhớ vật lý trống Điều xảy thời điểm có nhu cầu hốn đổi, sau tiến trình lớn chiếm nhiều nhớ vật lý kết thúc giải phóng nhớ Dữ liệu đưa không tự động đưa vào cần, nhớ vật lý trống thời gian dài Bạn không cần phải lo lắng điều mà cần biết điều xảy V Định vị khơng gian hốn đổi Người ta thường nói bạn nên định vị khơng gian hốn đổi gấp đôi nhớ vật lý, quy luật Bạn xem cách làm sau : + Dự đoán tổng nhớ mà bạn cần Đây số lượng nhớ lớn mà bạn cần thời điểm đó, tổng nhớ cần thiết cho tất chương trình mà bạn muốn chạy lúc Lệnh free ps có ích để đốn lượng nhớ cần dùng + Cộng thêm vào dự đốn bước 1, dự đốn kích thước chương trình sai bạn qn số chương trình mà bạn muốn chạy, để chắn bạn nên chuẩn bị không gian phụ để dùng cần Nên định vị dư thiếu khơng dư nhiều q gây lãng phí Bạn nên làm tròn lên thành số chẵn megabyte + Dựa tính tốn trên, bạn biết cần tổng cộng nhớ Vì vậy, để định vị khơng gian hốn đổi, bạn cần lấy tổng nhớ dùng trừ cho nhớ vật lý + Nếu khơng gian hốn đổi mà bạn tính lớn hai lần nhớ vật lý bạn nên mua thêm RAM, khơng hiệu máy thấp Tốt hết nên có vài khơng gian hốn đổi cho dù theo tính tốn bạn khơng cần Linux sử dụng khơng gian hốn đổi linh hoạt Linux đưa trang nhớ khơng sử dụng ngồi cho dù nhớ chưa cần dùng Điều giúp tránh việc chờ đợi hoán đổi cần nhớ fanguoshou Trang 17 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux CHƯƠNG IV CƠ CHẾ QUẢN LÝ BỘ NHỚ VẬT LÝ, ÁNH XẠ BỘ NHỚ I Quản lý nhớ vật lý Bộ định vùng Các bảng trang kernel ánh xạ tối đa nhớ vật lý vào dãy địa bắt đầu PAGE_OFFSET Các trang vật lý chiếm đoạn mã liệu kernel dành riêng không sử dụng cho mục đích khác Các trang vật lý khác định vị cho nhớ ảo tiến trình, nhớ đệm, nhớ ảo kernel, cần Để làm điều này, phải có cách theo dõi trang vật lý sử dụng sử dụng Bộ định vùng ( zone allocator ) quản lý nhớ vật lý Bất kì mã kernel gọi tới định vùng thông qua hàm alloc_pages() cấp khối gồm 2n trang canh đường biên tương ứng Chúng ta chuyển khối trang lại cho định vùng nhờ hàm free_pages() Số mũ n gọi thứ tự định vùng Các khối khơng cần phải giải phóng giống cách mà chúng xác định, phải giải phóng xác, khung trang khối phải có số tham chiếu khác Ví dụ, bạn yêu cầu khối trang, sau giải phóng khối trang khối trang đó, muốn làm điều trước hết bạn phải tăng biến tham chiếu trang khối trang Lý bạn định vị khối trang, có biến tham chiếu trang khối tăng, mặt khác đoạn mã giải phóng trang khơng giải phóng trang có biến tham chiếu 0, nên biến tham chiếu trang khác phải điều khiển tay Việc tăng tất biến tham chiếu trang khối không cần thiết đồng thời làm tăng kích thước đoạn mã định vị trang Các vùng Các dãy trang vật lý khác có thuộc tính khác nhau, phục vụ cho mục đích kernel Ví dụ, DMA ( Direct Memory Access ) cho phép thiết bị ngoại vi đọc viết liệu trực tiếp lên RAM mà khơng có can thiệp CPU, làm việc với địa vật lý nhỏ 16MB Một vài hệ thống có nhớ vật lý nhiều ánh xạ PAGE_OFFSET 4GB, trang vật lý truy cập trực tiếp đến kernel, chúng phải quản lý theo cách khác Bộ định vùng quản lý khác cách chia nhớ thành vùng xem vùng đơn vị cho định vị fanguoshou Trang 18 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux Cấu trúc liệu root quản lý định vùng zone_struct, gồm tập hợp tất liệu liên quan đến việc quản lý vùng cụ thể Zonelist_struct bao gồm mảng trỏ zone_struct gfp_mask chế định vị sử dụng zone_list Zone_struct offset địa offset nơi bắt đầu vùng nhớ vật lý II Ánh xạ nhớ (mm3 - Memory Mapping) Khi ảnh thực hiện, nội dung phải đưa vào không gian địa ảo tiến trình File thực thi khơng thực mang vào nhớ vật lý, mà thay vào đơn liên kết đến nhớ ảo tiến trình Sau ảnh mang vào nhớ phần chương trình tham chiếu ứng dụng chạy Sự liên kết ảnh vào khơng gian địa ảo tiến trình gọi ánh xạ nhớ Hình : Areas of Virtual Memory fanguoshou Trang 19 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux Mỗi nhớ ảo tiến trình miêu tả cấu trúc liệu mm_struct Cấu trúc chứa thông tin ảnh thực thi trỏ đến số cấu trúc liệu vm_area_struct Mỗi cấu trúc liệu vm_area_struct mô tả điểm bắt đầu kết thúc khu vực nhớ ảo, quyền truy cập tiến trình đến nhớ hoạt động nhớ Các hoạt động tập hợp thường trình (routine) mà Linux phải sử dụng xử lý khu vực nhớ ảo Ví dụ, hoạt động nhớ ảo thực hiệu chỉnh tiến trình tìm cách truy cập vào nhớ ảo mà khơng có giá trị tương ứng nhớ vật lý ( thông qua lỗi trang ) Hoạt động hoạt động nopage Hoạt động nopage sử dụng Linux yêu cầu trang ảnh thực thi nhớ Khi ảnh thực thi ánh xạ vào địa ảo tiến trình, tập hợp cấu trúc liệu vm_area_struct thực Mỗi cấu trúc liệu vm_area_struct mô tả phần ảnh thực thi, đoạn mã thực thi, liệu khởi tạo ( biến ), liệu không khởi tạo, Linux hỗ trợ số hoạt động nhớ ảo chuẩn fanguoshou Trang 20 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux CHƯƠNG V CẤP PHÁT VÀ GIẢI PHÓNG VÙNG NHỚ I Cấp phát vùng nhớ Cấp phát vùng nhớ giản đơn Vùng nhớ giản đơn vùng nhớ có kích thước nhỏ kích thước nhớ vật lý Chúng ta cấp phát vùng nhớ cho tiến trình dựa vào hàm malloc() thư viện C chuẩn void *malloc(size_t size); Không giống DOS Windows, sử dụng hàm này, không cần phải khai báo thư viện malloc.h size : kích thước vùng nhớ muốn cấp phát, size có kiểu size_t Thực size_t định nghĩa kiểu ngun khơng dấu unsigned int Ví dụ : memory1.c #include #include #include #define Kich_thuoc(1024*1024) //1 Mb nhớ /* -*/ int main( ){ char *some_memory; int megabyte=Kich_thuoc; int exit_code=EXIT_FAILURE; some_memory=(char*) malloc(megabyte); if(some_memory != NULL){ sprintf(some_memory,"Cap phat vung nho gian don "); printf("%s",some_memory); exit_code=EXIT_SUCCESS; } exit(exit_code) } Chương trình yêu cầu hàm malloc( ) cấp phát trả trỏ trỏ đến vùng nhớ MB Chương trình kiểm tra trỏ Null để đảm bảo hàm malloc( ) cấp phát thành công Tiếp theo chuỗi "Cap phat vung nho gian don" đặt vào phần đầu vùng nhớ Tuy chuỗi " Cap phat vung nho gian don" không chiếm hết MB vùng nhớ hàm malloc( ) cấp phát vùng nhớ kích cỡ chương trình u cầu Hàm malloc( ) trả trỏ *void( trỏ dạng tổng quát), chương trình cần phải chuyển trỏ dạng char* để truy cập đến vùng nhớ theo dạng chuỗi kí tự Hàm malloc( ) bảo đảm vùng nhớ cấp phát fanguoshou Trang 21 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Quản lý nhớ Linux dãy byte xếp liền Vì lý này, định nghĩa kiểu trả trỏ liệu Cấp phát vùng nhớ lớn Vùng nhớ lớn có kích thước vượt kích thước thật nhớ vật lý Do chưa biết hệ thống có chấp nhận hay khơng nên q trình xin cấp phát, hệ thống ngắt ngang nhớ cạn kiệt Ví dụ : memory2.c #include #include #include #define Kich_thuoc(1024*1024) //1 Mb nhớ /* -*/ int main( ){ char *some_memory; size_t size_to_allocate= Kich_thuoc; int megs_obtained=0; while( megs_obtainde

Ngày đăng: 01/11/2022, 15:32

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w