1. Trang chủ
  2. » Công Nghệ Thông Tin

Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux.

34 46 2

Đ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

Tiêu đề Nghiên Cứu Tìm Hiểu Về Quản Lý Bộ Nhớ Trong Trong HĐH Linux
Tác giả Nhóm 04
Người hướng dẫn Ths. Nguyễn Tuấn Tú
Trường học Trường Đại Học Công Nghiệp Hà Nội
Chuyên ngành Công Nghệ Thông Tin
Thể loại bài tập lớn
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 34
Dung lượng 1,27 MB

Cấu trúc

  • CHƯƠNG 1: GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX (6)
    • 1.1. Hệ điều hành Linux (6)
    • 1.2. Tổng quan về quản lí bộ nhớ trong Linux (6)
  • CHƯƠNG 2 CƠ CHẾ QUẢN LÝ BỘ NHỚ CỦA LINUX (8)
    • 2.1. Một mô hình tóm tắt về bộ nhớ ảo (9)
    • 2.2. Lý do yêu cầu phải phân trang (11)
  • CHƯƠNG 3: VÙNG TRUNG GIAN (SWAPPING) (13)
  • CHƯƠNG 4: BỘ NHỚ ẢO DÙNG CHUNG (SHARED (14)
  • CHƯƠNG 5: CACHES (16)
    • 5.1. Vùng bộ đệm (Buffer Cache) (16)
    • 5.2. Vùng trang nhớ (Page Cache) (16)
    • 5.3. Vùng lưu trữ trung gian (Swap Cache) (17)
    • 5.4. Các vùng đệm phần cứng (Hardware Caches) (17)
  • CHƯƠNG 6: CÁC BẢNG QUẢN LÝ TRANG TRONG LINUX18 6.1. Việc phân phối và thu hồi trang (18)
    • 6.2. Việc phân phối trang (19)
    • 6.3. Thu hồi trang đã phân phối (20)
  • CHƯƠNG 7: VẤN ĐỀ ÁNH XẠ BỘ NHỚ (22)
    • 7.1. Yêu cầu đánh số trang (23)
    • 7.2. Vùng trang đệm của Linux (The Linux Page Cache) (25)
    • 7.3. Việc loại bỏ các trang và tráo đổi các trang ra ngoài (26)

Nội dung

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN HỌC OS Tên đề tài Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux Giáo viên Ths Nguyễn Tuấn Tú Nhóm thực hiện Nhóm 04 Lớp IT6025 6(006)K15 Hà Nội, 2022 2 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN MÔN HỌC OS Tên đề tài Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux Giáo viên Ths Nguyễn Tuấn Tú Nhóm thực hiện Nhóm 04 Lớp IT6025 6(006)K15.

GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX

Hệ điều hành Linux

Linux là một hệ điều hành UNIX miễn phí, được phát triển bởi Linus Torvalds vào năm 1991 và hiện nay rất phổ biến Với khả năng đa nhiệm và đa người dùng, Linux có thể hoạt động trên nhiều nền tảng phần cứng khác nhau Hệ điều hành này nổi bật với tính ổn định và linh hoạt, ngày càng được ưa chuộng trên các máy chủ và máy trạm trong mạng máy tính Ngoài ra, Linux cho phép tích hợp dễ dàng với các hệ điều hành khác như Windows, Novell và Apple Đặc biệt, với tính năng mã nguồn mở, Linux mang đến khả năng tùy biến cao, phù hợp với nhiều nhu cầu sử dụng khác nhau.

Tổng quan về quản lí bộ nhớ trong Linux

Bộ nhớ là một tài nguyên thiết yếu trong hệ thống máy tính, nhưng nhu cầu sử dụng vẫn vượt quá khả năng cung cấp Mặc dù máy tính cá nhân hiện nay thường được trang bị dung lượng bộ nhớ lớn, thậm chí các máy chủ server có thể sở hữu hàng gigabyte bộ nhớ, nhưng nhu cầu của người dùng vẫn chưa được đáp ứng đầy đủ.

Có rất nhiều chiến lược quản lí bộ nhớ được nghiên cứu và áp dụng, trong đó chiến lược sử dụng bộ nhớ ảo là hiệu quả nhất.

Giống như các hệ điều hành khác, Linux sử dụng cơ chế bộ nhớ ảo để quản lí tài nguyên bộ nhớ trong máy tính.

Linux quản lý bộ nhớ một cách rõ ràng, ngăn cản các ứng dụng truy cập trực tiếp vào địa chỉ vật lý Hệ điều hành này cung cấp cho các tiến trình một mô hình đánh địa chỉ phẳng, khác với cách phân đoạn trong DOS.

Mỗi tiến trình trong hệ thống chỉ có thể truy cập vào một không gian địa chỉ riêng biệt, giúp bảo vệ bộ nhớ hiệu quả Tất cả các phiên bản của UNIX đều áp dụng cơ chế bảo vệ bộ nhớ, đảm bảo rằng không có tiến trình nào có thể ghi đè lên vùng nhớ của tiến trình khác hoặc vùng nhớ hệ thống Nhờ đó, bộ nhớ được cấp phát cho một tiến trình không thể bị đọc hoặc ghi bởi tiến trình khác, từ đó tránh được xung đột bộ nhớ.

Trong hầu hết các hệ thống Linux, con trỏ là một số nguyên 32 bit, cho phép chỉ định một ô nhớ cụ thể Với kích thước 32 bit, hệ thống có khả năng đánh địa chỉ tối đa lên đến 4GB.

Mô hình bộ nhớ GB với địa chỉ 64 bit cho phép mở rộng không gian địa chỉ lên đến hàng Terabyte, giúp dễ dàng truy xuất và xử lý hơn so với bộ nhớ phân đoạn Để tối ưu dung lượng bộ nhớ, Linux sử dụng chương trình phân trang đĩa, cho phép lưu trữ không gian hoán đổi trên đĩa khi hệ thống cần nhiều bộ nhớ vật lý hơn Mặc dù điều này cho phép chạy nhiều ứng dụng lớn và hỗ trợ nhiều người dùng, việc hoán đổi vẫn chậm hơn so với bộ nhớ vật lý do thời gian truy cập đĩa Ngoài ra, kernel còn cài đặt khối bộ nhớ hợp nhất và bộ đệm đĩa tạm thời, giúp quản lý bộ nhớ trống một cách hiệu quả khi các chương trình lớn đang hoạt động.

CƠ CHẾ QUẢN LÝ BỘ NHỚ CỦA LINUX

Một mô hình tóm tắt về bộ nhớ ảo

Hình 2.1: Mô hình tóm tắt ánh xạ từ bộ nhớ ảo tới bản đồ địa chỉ bộ nhớ vật lý

Khi bộ vi xử lý thực hiện một chương trình, nó sẽ đọc và giải mã các lệnh từ bộ nhớ Trong quá trình giải mã, bộ vi xử lý sẽ truy xuất hoặc lưu trữ nội dung từ các ô nhớ trong bộ nhớ.

Bộ vi xử lý sẽ thực hiện lệnh và sau đó chuyển sang lệnh tiếp theo trong chương trình, đảm bảo rằng nó luôn truy cập bộ nhớ để nhận lệnh hoặc để nhận và lưu trữ dữ liệu.

Trong hệ thống bộ nhớ ảo, địa chỉ ảo được chuyển đổi thành địa chỉ vật lý bởi vi xử lý Quá trình chuyển đổi này yêu cầu bộ nhớ ảo và bộ nhớ vật lý được chia thành các phần có kích thước hợp lý, gọi là các trang.

(pages) Tất cả các trang này có kích thước giống hệt nhau.

VD: Linux trên các hệ thống Alpha AXP sử dụng các trang có dung lượng 8

Trên các hệ thống Intel x86, dung lượng của mỗi trang là 4 KB và mỗi trang được gán một số hiệu khung trang duy nhất.

Trong mô hình đánh số trang, địa chỉ ảo được chia thành hai phần: địa chỉ offset và số hiệu khung trang (PFN) Ví dụ, với kích thước trang là 4 KB, các bit từ 0 đến 11 của địa chỉ ảo đại diện cho địa chỉ offset, trong khi các bit từ 12 trở đi thể hiện số hiệu khung trang ảo Khi bộ vi xử lý xử lý địa chỉ ảo, nó sẽ tách biệt địa chỉ offset và số hiệu khung trang, sau đó chuyển đổi số hiệu khung trang ảo thành số hiệu khung trang vật lý tương ứng, và cuối cùng truy cập địa chỉ offset trong trang vật lý thông qua bảng phân trang.

Mỗi một phần tử trong bảng phân trang gồm các thông tin sau:

- Valid flag: Cờ xác định tính hợp lệ, nhận giá trị 0 hoặc 1.

- Số hiệu khung trang vật lý mà phần tử này đang diễn tả.

Để chuyển đổi từ địa chỉ ảo sang địa chỉ vật lý, bộ vi xử lý cần xác định số hiệu khung trang của địa chỉ ảo và địa chỉ offset trong trang đó Với kích thước trang ảo là 4096 bytes (1000h), địa chỉ 1194h trong không gian địa chỉ ảo của tiến trình sẽ được chuyển đổi thành offset 0194h trong trang ảo có số hiệu khung trang là 1.

Nếu số hiệu khung trang ảo hợp lệ (nhỏ hơn hoặc bằng chỉ số max trong bảng phân trang), bộ vi xử lý sẽ nhận số hiệu khung trang vật lý Ngược lại, nếu chỉ số này không hợp lệ, bộ vi xử lý sẽ chuyển quyền điều khiển cho hệ điều hành để sửa chữa địa chỉ Khi đó, bộ vi xử lý thông báo rằng tiến trình hợp lệ đã cố gắng truy cập địa chỉ ảo nhưng không thể chuyển đổi sang địa chỉ vật lý, dẫn đến tình trạng hỏng trang Hệ điều hành sẽ nhận biết rằng địa chỉ ảo này không hợp lệ, gây ra lỗi trang.

Nếu phần tử cần tìm trong bảng phân trang hợp lệ, bộ vi xử lý sẽ lấy số hiệu khung trang vật lý và nhân với kích thước trang để xác định địa chỉ cơ sở của trang trong bộ nhớ vật lý Sau đó, địa chỉ cơ sở này sẽ được cộng với địa chỉ offset để truy xuất địa chỉ của lệnh hoặc dữ liệu cần thiết.

Số hiệu khung trang ảo của tiến trình là 1, với số hiệu khung trang vật lý tương ứng là 4 Kích thước trang là 4Kb (1000h), do đó địa chỉ cơ sở của trang vật lý là 4000h (4 x 1000h) Khi cộng với địa chỉ offset 0194h, địa chỉ vật lý cuối cùng sẽ là 4194h.

Theo phương pháp trên, bộ nhớ ảo có thể ánh xạ vào các trang vật lý của hệ thống một cách bất kì.

Lý do yêu cầu phải phân trang

Khi bộ nhớ vật lý hạn chế hơn bộ nhớ ảo, hệ điều hành cần tối ưu hóa việc sử dụng bộ nhớ Một giải pháp hiệu quả để tiết kiệm bộ nhớ vật lý là yêu cầu trang, trong đó hệ thống chỉ nạp các trang bộ nhớ ảo mà chương trình đang sử dụng.

Khi một tiến trình cố gắng truy cập vào địa chỉ ảo không tồn tại trong bộ nhớ, bộ vi xử lý sẽ không tìm thấy phần tử tương ứng trong bảng phân trang cho trang ảo đã tham chiếu Ví dụ, nếu không có phần tử nào trong bảng phân trang cho khung trang ảo số 2, khi tiến trình X cố gắng đọc địa chỉ từ khung trang này, bộ vi xử lý sẽ không thể chuyển đổi địa chỉ đó thành địa chỉ vật lý Kết quả là, bộ vi xử lý sẽ thông báo cho hệ điều hành về việc xuất hiện lỗi trang.

Nếu địa chỉ ảo không hợp lệ hoặc không tồn tại, hệ điều hành sẽ chấm dứt tiến trình đó để bảo vệ các tiến trình khác trong hệ thống khỏi bị ảnh hưởng bởi tiến trình không rõ ràng này.

Khi địa chỉ ảo gặp lỗi nhưng vẫn hợp lệ, hệ điều hành cần nạp trang từ đĩa vào bộ nhớ Quá trình này mất thời gian, khiến tiến trình phải chờ cho đến khi trang được nạp xong Sau khi trang ảo được nạp, nó sẽ được ghi vào khung trang vật lý trống, và bảng phân trang sẽ cập nhật chỉ số tương ứng với khung trang ảo Tiến trình sau đó sẽ trở lại trạng thái hoạt động để tiếp tục thực hiện lệnh đã bị tạm dừng Nhờ đó, việc truy cập bộ nhớ ảo có thể tiếp tục, với bộ vi xử lý chuyển đổi địa chỉ ảo thành địa chỉ vật lý để tiến trình tiếp tục thi hành.

Trong quá trình chờ nạp trang, hệ điều hành sẽ lựa chọn và thực thi một tiến trình khác nếu có.

Linux sử dụng kỹ thuật yêu cầu trang để nạp các trang có thể thi hành vào bộ nhớ ảo, mở file chứa lệnh và ánh xạ nội dung vào bộ nhớ ảo thông qua sơ đồ bộ nhớ Chỉ phần đầu tiên của trang được đưa vào bộ nhớ vật lý, và khi lệnh được thi hành, hệ thống sẽ sinh ra lỗi trang Linux sau đó sử dụng sơ đồ bộ để xác định các phần cần nạp để thực hiện lệnh.

VÙNG TRUNG GIAN (SWAPPING)

Khi một tiến trình cần nạp trang ảo vào bộ nhớ vật lý nhưng không có trang vật lý trống, hệ điều hành sẽ phải giải phóng bộ nhớ bằng cách loại bỏ một trang khác Quy trình này được gọi là kỹ thuật đổi trang hay thay trang.

Nếu một trang được loại bỏ khỏi bộ nhớ vật lý và nội dung của nó chưa từng thay đổi, thì không cần ghi lại trang này lên đĩa Để thay đổi trang, chỉ cần loại bỏ nó và khi tiến trình cần sử dụng lại, có thể dễ dàng đưa trang trở lại bộ nhớ từ file ảnh hoặc file dữ liệu.

Khi một trang trong hệ điều hành bị thay đổi, nó sẽ được giữ lại để truy cập sau này, và được gọi là trang dirty Nếu trang này bị di chuyển khỏi bộ nhớ, nó sẽ được ghi vào một file đặc biệt gọi là swap file Việc truy cập vào swap file ảnh hưởng đáng kể đến tốc độ của bộ vi xử lý và bộ nhớ vật lý trong hệ thống.

Nhiều thuật toán đã được áp dụng để giải quyết vấn đề loại bỏ hoặc quản lý swap file Tập hợp các trang mà tiến trình đang sử dụng được gọi là "working set".

Một lược đồ thuật toán hoán đổi hiệu quả cần đảm bảo rằng tất cả các tiến trình đều có working set tối ưu trong bộ nhớ vật lý, nhằm nâng cao hiệu suất hoạt động của hệ thống.

Linux áp dụng kỹ thuật "làm già trang" LRU (Least Recently Used) để xác định trang nào có thể bị loại bỏ khỏi bộ nhớ Mỗi trang trong hệ thống có một "tuổi" nhất định, và tuổi này sẽ thay đổi khi trang được truy cập Khi một trang được truy cập, tuổi của nó giảm xuống, trong khi các trang ít được truy cập sẽ trở nên "già" hơn Nếu một trang không được truy cập trong thời gian dài, nó có thể trở thành trang già nhất Các trang già này thường là ứng cử viên lý tưởng cho quá trình hoán đổi.

BỘ NHỚ ẢO DÙNG CHUNG (SHARED

Việc sử dụng bộ nhớ ảo giúp các tiến trình chia sẻ bộ nhớ một cách hiệu quả Mỗi tiến trình có bảng phân trang riêng để truy cập bộ nhớ, và để hai tiến trình có thể sử dụng chung một trang vật lý, số hiệu khung trang vật lý cần phải được đưa vào cả hai bảng phân trang của chúng.

VD: Hình 1 cho thấy tiến trình X có khung trang ảo 3 và tiến trình Y có khung trang ảo 1 dùng chung trang vật lý 2.

*) Các kiểu địa chỉ vật lý và địa chỉ ảo

Hệ điều hành thường giới hạn việc sử dụng bộ nhớ ảo do việc duy trì các bảng phân trang trong thời gian dài tiêu tốn nhiều tài nguyên máy Mặc dù hầu hết các vi xử lý hiện nay đều hỗ trợ xử lý địa chỉ vật lý và địa chỉ ảo, nhưng việc này vẫn ảnh hưởng đến hiệu suất tổng thể.

Bộ vi xử lý Alpha AXP không sử dụng kiểu địa chỉ vật lý riêng biệt, mà thay vào đó chia không gian nhớ thành nhiều vùng, trong đó có hai vùng được chỉ định để lưu trữ các địa chỉ ảo đã được ánh xạ vật lý Không gian địa chỉ này được gọi là không gian địa chỉ KSEG, bao gồm tất cả các địa chỉ tính từ.

Để thực thi mã trong KSEG hoặc truy cập dữ liệu tại đó, mã cần phải được thực thi ở chế độ hạt nhân Trên hệ điều hành Linux, hạt nhân Alpha sẽ thực hiện từ địa chỉ 0xfffffc0000310000.

CACHES

Vùng bộ đệm (Buffer Cache)

Vùng bộ đệm (Buffer Cache): chứa các bộ đệm dữ liệu (data buffers) được sử dụng bởi các trình điều khiển thiết bị khối.

Các bộ đệm có dung lượng cố định, chẳng hạn như 512 bytes, lưu trữ các khối thông tin được đọc từ hoặc ghi tới thiết bị khối Thiết bị khối là những thiết bị chỉ cho phép truy cập thông qua việc đọc hoặc ghi các khối dữ liệu với kích thước đã được quy định trước, ví dụ như tất cả các ổ đĩa đều thuộc loại thiết bị khối.

Vùng bộ đệm sử dụng định danh thiết bị và số hiệu khối để tìm kiếm dữ liệu Khi dữ liệu được tìm thấy trong vùng bộ đệm, việc truy cập sẽ nhanh chóng hơn so với việc đọc từ thiết bị khối vật lý, như đĩa cứng, vì truy cập ổ đĩa vật lý mất nhiều thời gian.

Vùng trang nhớ (Page Cache)

Vùng trang nhớ được sử dụng để tăng tốc độ truy cập các trang và dữ liệu trên đĩa.

Trang nhớ là một đơn vị lưu trữ các nội dung logic của tệp tin, cho phép truy cập thông qua địa chỉ tệp và offset Khi các trang này được đọc từ đĩa để chuyển vào bộ nhớ, chúng sẽ được ghi vào khu vực trang nhớ.

Vùng lưu trữ trung gian (Swap Cache)

Chỉ có các trang đã bị thay đổi (có kiểu dirty) mới được ghi vào file trung gian (swap file).

Nếu các trang không thay đổi sau khi đã được ghi vào file trung gian, thì trong lần truy cập tiếp theo, chúng không cần phải ghi lại Thay vào đó, các trang này có thể được loại bỏ, giúp tiết kiệm nhiều thao tác không cần thiết với ổ đĩa.

Các vùng đệm phần cứng (Hardware Caches)

Một vùng đệm phần cứng thường được tích hợp trong bộ vi xử lý để lưu trữ các phần tử của bảng quản lý trang Thay vì đọc trực tiếp từ bảng quản lý trang, bộ vi xử lý sẽ chuyển đổi giá trị trong bảng này để lấy địa chỉ các trang cần thiết Hệ thống sử dụng các phần tử được gọi là Translation Look-aside Buffers (TLB) để lưu trữ các bản sao của các phần tử bảng quản lý trang từ một hoặc nhiều tiến trình trong hệ thống.

Khi bộ vi xử lý xử lý địa chỉ ảo, nó sẽ tìm kiếm một phần tử TLB phù hợp Nếu tìm thấy, địa chỉ ảo sẽ được chuyển đổi trực tiếp thành địa chỉ vật lý để thực hiện thao tác dữ liệu Ngược lại, nếu không tìm thấy, bộ vi xử lý sẽ gửi tín hiệu lỗi LTB tới hệ điều hành Hệ điều hành sẽ xử lý lỗi bằng cách tạo một phần tử TLB mới để ánh xạ địa chỉ, xóa phần tử lỗi và cho phép bộ vi xử lý chuyển đổi địa chỉ ảo sang địa chỉ vật lý, từ đó thực hiện thao tác đọc/ghi dữ liệu với bộ nhớ.

Việc sử dụng các vùng đệm trong Linux có nhược điểm là yêu cầu sử dụng nhiều lần và chiếm nhiều không gian bộ nhớ để duy trì Nếu các vùng đệm này xảy ra lỗi, hệ thống có thể gặp tình trạng treo.

CÁC BẢNG QUẢN LÝ TRANG TRONG LINUX18 6.1 Việc phân phối và thu hồi trang

Việc phân phối trang

Linux sử dụng thuật toán Buddy để quản lý việc phân phối và thu hồi các khối trang, nhằm tối ưu hóa việc sử dụng bộ nhớ Thuật toán này phân phối các khối có kích thước là lũy thừa của 2, như 1, 2, 4 trang, miễn là số lượng trang này không vượt quá số trang tự do trong hệ thống Để thực hiện điều này, free_area được sử dụng như một mảng để lưu trữ các khối trang, và hệ thống sẽ duyệt qua free_area để tìm kiếm khối trang phù hợp với yêu cầu.

Mỗi phần tử của free_area chứa sơ đồ các khối đã phân phối và các khối còn trống, cùng với kích thước của các khối được tính bằng đơn vị trang.

Trong mảng có sơ đồ nhớ, các khối được phân loại thành khối tự do và khối đã cấp phát, mỗi khối bao gồm 4 trang Thuật toán sẽ tìm kiếm các khối có kích thước phù hợp với số trang yêu cầu Nếu không tìm thấy khối tự do nào đủ, thuật toán sẽ tiếp tục tìm kiếm các khối có kích thước gấp đôi số trang yêu cầu Quá trình này diễn ra cho đến khi duyệt hết các phần tử trong free_area hoặc tìm được khối thỏa mãn Nếu khối tìm thấy lớn hơn số trang yêu cầu, nó sẽ được tách nhỏ cho đến khi phù hợp Các khối tự do được xếp vào hàng đợi, trong khi các khối đã phân phối cùng trang của chúng sẽ được trả lại cho đối tượng gọi.

Hình 6.2: Cấu trúc dữ liệu free_area

Khi yêu cầu một khối gồm 2 trang, nếu khối đầu chỉ có 1 phần tử, nó sẽ bị bỏ qua Khối thứ hai có kích thước 4 trang sẽ được chọn, bắt đầu từ khung trang số 4 Khối này sẽ được tách thành 2 khối, mỗi khối 2 trang Khối đầu tiên, bắt đầu từ khung trang số 4, sẽ được trả về cho đối tượng gọi khi các trang được phân phối, trong khi khối thứ hai, bắt đầu từ khung trang số 6, sẽ được xếp thành một khối 2 trang vào phần tử 1 của mảng free_area.

Thu hồi trang đã phân phối

Phân phối các khối nhớ lớn có thể gây ra tình trạng phân mảnh bộ nhớ, khi các khối nhớ tự do có kích thước lớn hơn yêu cầu cần được chia nhỏ Để khắc phục điều này, mã lệnh thu hồi trang sẽ kết hợp các khối nhớ nhỏ thành những khối lớn hơn, nhằm tối ưu hóa việc sử dụng bộ nhớ.

Khi một khối gồm các trang tự do được kiểm tra, nó sẽ xem xét khối liền kề có kích thước tương tự để xác định xem có trang nào tự do hay không Nếu có, hai khối này sẽ được gộp lại, tạo thành một khối tự do mới với số lượng trang lớn gấp đôi Mỗi lần hai khối kết hợp, mã thu hồi trang sẽ cố gắng kết hợp thành một khối lớn hơn, dẫn đến việc các khối tự do ngày càng lớn hơn và cuối cùng có thể tạo thành một khối nhớ duy nhất.

Khi khung trang số 1 được giải phóng, nó sẽ kết hợp với khung trang số 0 đã tự do trước đó, tạo thành một khối gồm 2 trang và được xếp vào phần tử số 1 của mảng free_area.

VẤN ĐỀ ÁNH XẠ BỘ NHỚ

Yêu cầu đánh số trang

Khi một file thực thi được ánh xạ vào bộ nhớ ảo của tiến trình, nó có thể bắt đầu thi hành Ngay khi file được nạp vào bộ nhớ, nó sẽ truy cập vào một vùng bộ nhớ ảo không nằm trong bộ nhớ vật lý Nếu tiến trình cố gắng truy cập một địa chỉ ảo mà không có mục hợp lệ trong bảng quản lý trang, bộ vi xử lý sẽ thông báo lỗi trang cho hệ điều hành Linux.

Trong Linux, khi xảy ra lỗi trang, hệ thống cần tìm cấu trúc dữ liệu vm_area_struct để xác định vùng nhớ liên quan Nếu không tìm thấy cấu trúc này cho địa chỉ ảo cụ thể, tiến trình sẽ được xác nhận đã truy cập vào một địa chỉ không hợp lệ Hệ thống sẽ gửi tín hiệu tới tiến trình, và nếu tiến trình không phản hồi đúng cách, nó sẽ bị kết thúc.

Linux sẽ kiểm tra loại lỗi trang xảy ra và xác định xem nó có phù hợp với các kiểu truy cập được phép trong vùng nhớ ảo hay không Nếu tiến trình cố gắng truy cập theo một phương pháp không hợp lệ, chẳng hạn như ghi vào một vùng nhớ mà nó không được phép, thì hệ thống sẽ xử lý lỗi này.

Nếu một phần tử trong bảng phân trang không hợp lệ nhưng không rỗng, điều này có thể xảy ra khi trang do phần tử đó quản lý đang được lưu trữ trong file hoán đổi (swap file) Cụ thể, các phần tử này có bit valid bằng 1 nhưng trường PFN có giá trị khác 0, trong đó trường PFN sẽ chứa thông tin về vị trí lưu trữ trang trong file hoán đổi.

Không phải mọi cấu trúc dữ liệu vm_area_struct đều bao gồm các thao tác bộ nhớ ảo, và một số có thể thiếu thao tác nopage Khi có thao tác nopage cho vùng bộ nhớ ảo, Linux sẽ áp dụng thao tác đó Ngược lại, nếu không có, hệ thống sẽ tạo ra một trang nhớ vật lý mới cùng với một phần tử bảng phân trang hợp lệ.

Thao tác nopage trong Linux được áp dụng cho các tệp thực thi đã được ánh xạ vào bộ nhớ, sử dụng các vùng trang đệm để tải trang yêu cầu vào bộ nhớ vật lý.

Khi một trang được yêu cầu và đưa vào bộ nhớ vật lý, các bảng quản lý trang cần được cập nhật, đặc biệt khi bộ vi xử lý sử dụng chuyển đổi địa chỉ để truy cập bộ đệm Nguyên nhân lỗi trang sẽ được xác định và xử lý, sau đó tiến trình sẽ được kích hoạt lại để tiếp tục thực hiện lệnh đang chạy khi xảy ra lỗi bộ nhớ ảo.

Vùng trang đệm của Linux (The Linux Page Cache)

Hình 7.2: Vùng trang đệm của Linux

Vùng trang đệm trong Linux đóng vai trò quan trọng trong việc tăng tốc độ truy cập file trên đĩa Các file đã được ánh xạ bộ nhớ được đọc theo từng trang, và những trang này được lưu trữ trong vùng trang đệm Vùng trang đệm sử dụng một vector gọi là page_hash_table, trong đó chứa các con trỏ dẫn đến các cấu trúc dữ liệu mem_map_t.

Trong Linux, mỗi tệp tin được xác định bởi một cấu trúc dữ liệu VFS inode, với mỗi VFS inode là duy nhất và chỉ đại diện cho một tệp tin cụ thể Chỉ số trong bảng quản lý trang được lấy từ VFS inode của tệp tin cùng với địa chỉ offset trong tệp.

Khi một trang được đọc từ file ánh xạ bộ nhớ, nó cần được đưa vào bộ nhớ khi được yêu cầu thông qua vùng trang đệm Nếu trang đã có trong vùng trang đệm, một con trỏ tới cấu trúc dữ liệu mem_map_t chứa thông tin của nó sẽ được trả về cho mã xác định lỗi trang Nếu không, trang sẽ được nạp vào bộ nhớ từ hệ thống file lưu trữ, và Linux sẽ phân phối một trang vật lý để đọc trang từ file trên đĩa.

Khi có thể, Linux sẽ bắt đầu đọc trang tiếp theo trong file Nếu tiến trình đang truy cập các trang liên tiếp, trang tiếp theo sẽ được lưu sẵn trong bộ nhớ để chờ tiến trình xử lý.

Theo thời gian, kích thước vùng đệm sẽ tăng lên khi các ảnh được đọc và thực thi Để giảm kích thước vùng đệm, các trang sẽ bị loại bỏ khi chúng đạt "tuổi" lớn nhất.

Việc loại bỏ các trang và tráo đổi các trang ra ngoài

Khi bộ nhớ vật lý giảm, hệ thống quản lý bộ nhớ của Linux phải giải phóng các trang nhớ đang lưu trữ dữ liệu Trình tiện ích tráo đổi của nhân Linux, kswapd, thực hiện nhiệm vụ này.

Trình tiện ích tráo đổi của hạt nhân là một loại tiến trình đặc biệt trong nhân hệ điều hành, hoạt động mà không sử dụng bộ nhớ ảo và chạy ở chế độ hạt nhân trong không gian địa chỉ vật lý Nó chỉ chuyển các trang cần thiết ra swap file của hệ thống, đảm bảo rằng có đủ trang tự do để hệ điều hành quản lý và sử dụng bộ nhớ một cách hiệu quả.

Kswap được khởi tạo tại thời điểm khởi động hệ thống và thực hiện việc tráo đổi trang theo định kỳ nhờ bộ swap timer của hạt nhân.

Khi số đếm thời gian chạy đến không, kswapd sẽ kiểm tra số trang nhớ tự do trong hệ thống để quyết định có nên giải phóng một số trang về trạng thái tự do hay không Nếu số trang nhớ tự do vẫn trong phạm vi cho phép, kswapd sẽ không thực hiện hành động nào và trở về trạng thái sẵn sàng cho đến thời điểm kiểm tra tiếp theo Để thực hiện kiểm tra này, kswapd sẽ nhận giá trị tổng số trang hiện thời đang được ghi ra swap file và lưu trữ giá trị này lại Nếu số trang tự do trong hệ thống thấp hơn mức cho phép, kswapd sẽ cố gắng giảm số trang vật lý đang được sử dụng bởi hệ thống thông qua việc giải phóng các trang nhớ tự do, giảm số trang đang được ghi ra swap file và tối ưu hóa việc sử dụng bộ nhớ.

- Giảm kích thước của bộ đệm và các vùng trang đệm.

- Sử dụng các trang nhớ dùng chung

- Loại bỏ và tráo đổi các trang nhớ.

Khi số trang nhớ tự do trong hệ thống giảm thấp, hệ điều hành sẽ nỗ lực giải phóng 6 trang nhớ trước khi thực hiện lần chạy tiếp theo Nếu không đủ, nó sẽ cố gắng giải phóng 3 trang Quá trình này sẽ được thực hiện liên tục cho đến khi đạt được số trang nhớ tự do cần thiết Kswap sẽ ghi nhớ phương pháp đã sử dụng gần nhất và trong mỗi lần chạy sau, nó sẽ ưu tiên giải phóng các trang nhớ theo cách này.

Sau khi đạt đủ số trang nhớ tự do, kswapd sẽ trở lại trạng thái sẵn sàng cho đến khi số đếm thời gian về không Nếu số trang tự do trong hệ thống vẫn quá thấp, kswapd chỉ duy trì trạng thái sẵn sàng trong nửa thời gian bình thường Khi số trang tự do tăng lên, kswapd sẽ trở lại trạng thái sẵn sàng bình thường.

7.3.1 Phương pháp giảm kích thước các trang và các vùng bộ đệm

Các trang trong vùng trang đệm và bộ đệm là ứng viên lý tưởng để chuyển thành các trang tự do trong vector free_area Vùng trang đệm lưu trữ các trang của các file đã được ánh xạ bộ nhớ, bao gồm cả những trang không còn cần thiết, gây lãng phí bộ nhớ hệ thống Tương tự, các vùng bộ đệm dùng cho việc đọc hoặc ghi dữ liệu đến thiết bị vật lý cũng có thể chứa các bộ đệm dữ liệu không còn giá trị sử dụng.

Khi bộ nhớ vật lý trong hệ thống đạt trạng thái đầy, việc loại bỏ các trang khỏi vùng đệm trở nên dễ dàng hơn vì không cần ghi vào thiết bị vật lý, khác với việc lưu trữ tạm thời trên ổ đĩa Điều này giúp tăng tốc độ hệ thống bằng cách tránh truy cập vào thiết bị vật lý và các tệp đã ánh xạ bộ nhớ Tuy nhiên, việc loại bỏ này có thể làm giảm hiệu quả của tất cả các tiến trình Kswapd liên tục nỗ lực giảm kích thước vùng đệm đã sử dụng bằng cách kiểm tra các trang trong mem_map page vector để chọn ra những trang có thể giải phóng Kích thước khối tính theo trang sẽ lớn nếu kswapd thực hiện tráo đổi mạnh khi số lượng trang tự do trong hệ thống giảm xuống mức nguy hiểm.

Các khối trang được kiểm tra theo kiểu xoay vòng, giúp tối ưu hóa việc ánh xạ bộ nhớ Thuật toán sử dụng trong quá trình này được gọi là thuật toán clock Trong mỗi lần kiểm tra, một số trang trong toàn bộ mem_map page vector sẽ được xem xét đồng thời.

Nếu một trang đã từng được kiểm tra, nó sẽ được kiểm tra lại nếu nằm trong vùng đệm Nếu không thuộc vùng đệm nào, trang tiếp theo trong vector mem_map sẽ được kiểm tra.

Khi tất cả các bộ đệm đã được giải phóng, các trang chứa chúng cũng sẽ được giải phóng Các trang thuộc vùng trang đệm của Linux sẽ được kiểm tra và loại bỏ khỏi vùng trang đệm, trở thành các trang tự do.

Khi đủ trang tự do, kswapd sẽ chờ đến lần chạy tiếp theo để kích hoạt lại Nếu không có trang nào được giải phóng và thuộc bộ nhớ ảo, bảng quản lý trang sẽ không được cập nhật Trong trường hợp không đủ trang lưu trữ dữ liệu để loại bỏ, kswapd sẽ cố gắng tráo đổi một số trang dùng chung.

7.3.2 Phương pháp tráo đổi các trang nhớ dùng chung System V

Bộ nhớ dùng chung System V là một kỹ thuật giao tiếp giữa các tiến trình, cho phép hai hoặc nhiều tiến trình chia sẻ bộ nhớ ảo nhằm truyền tải thông tin hiệu quả.

Bộ nhớ dùng chung System V được mô tả bởi cấu trúc dữ liệu shmid_ds, trong đó có con trỏ tới danh sách các cấu trúc vm_area_struct tương ứng với tiến trình chia sẻ vùng nhớ Các cấu trúc vm_area_struct này xác định vị trí của vùng bộ nhớ chia sẻ System V trong bộ nhớ ảo của tiến trình.

Cấu trúc dữ liệu vm_area_struct trong bộ nhớ chia sẻ System V được liên kết với nhau thông qua các con trỏ vm_next_shared và vm_prev_shared Đồng thời, cấu trúc shmid_ds cũng chứa danh sách các phần tử trong bảng quản lý trang, mô tả các trang nhớ vật lý được ánh xạ bởi trang nhớ ảo.

Kswap sử dụng thuật toán clock khi tráo đổi các trang nhớ dùng chung system

V Nó ghi nhớ các trang thuộc vùng bộ nhớ ảo dùng chung mà nó đã tráo đổi gần đây nhất bằng cách giữ 2 chỉ số, chỉ số đầu tiên là một chỉ số so sánh trong tập các cấu trúc dữ liệu shmid_ds, chỉ số thứ 2 là một chỉ số trong danh sách các phần tử trong bảng quản lý trang cho vùng bộ nhớ chia sẻ system V này.

Ngày đăng: 16/07/2022, 19:44

HÌNH ẢNH LIÊN QUAN

2.1. Một mơ hình tóm tắt về bộ nhớ ảo - Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux.
2.1. Một mơ hình tóm tắt về bộ nhớ ảo (Trang 9)
VD: Hình 1 cho thấy tiến trình X có khung trang ảo 3 và tiến trìn hY có khung trang ảo 1 dùng chung trang vật lý 2. - Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux.
Hình 1 cho thấy tiến trình X có khung trang ảo 3 và tiến trìn hY có khung trang ảo 1 dùng chung trang vật lý 2 (Trang 14)
CHƯƠNG 6: CÁC BẢNG QUẢN LÝ TRANG TRONG LINUX - Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux.
6 CÁC BẢNG QUẢN LÝ TRANG TRONG LINUX (Trang 18)
Hình 6.2: Cấu trúc dữ liệu free_area - Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux.
Hình 6.2 Cấu trúc dữ liệu free_area (Trang 20)
Hình 7.1: Các vùng của bộ nhớ ảo - Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux.
Hình 7.1 Các vùng của bộ nhớ ảo (Trang 22)
Hình 7.2: Vùng trang đệm của Linux - Nghiên cứu tìm hiểu về quản lý Bộ Nhớ Trong trong HĐH Linux.
Hình 7.2 Vùng trang đệm của Linux (Trang 25)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w