Hệ điều hành Linux sửdụng một số kỹ thuật quản lý bộ nhớ để tối ưu hóa việc sử dụng tài nguyên và đảm bảohiệu suất hệ thống.Trong Linux, quản lý bộ nhớ bao gồm các khái niệm như bộ nhớ ả
Trang 2Mục Lục
Lời nói đầu 1
CHƯƠNG I: TỔNG QUAN VỀ BỘ NHỚ TRONG HỆ ĐIỀU HÀNH LINUX 1.Giới thiệu về hệ điều hành LINUX 2
1.1.Hiệu suất, tính linh hoạt và cơ chế quản lý 3
CHƯƠNG II: CƠ CHẾ QUẢN LÝ BỘ NHỚ, ÁNH XẠ BỘ NHỚ, CẤP PHÁT VÀ GIẢI PHÓNG VÙNG NHỚ 2.Quản lý bộ nhớ ảo 4
2.1.Quản lý bộ nhớ vật lý 10
2.1.1.Ánh xạ bộ nhớ (Memory Mapping) 12
2.1.1.1.Cấp phát vùng nhớ 13
CHƯƠNG III: CƠ CHẾ PHÂN TRANG VÀ PHÂN ĐOẠN 3.Cơ chế phân trang 15
3.1.Cơ chế phân đoạn 21
3.1.1.Cơ chế phân mảnh 22
TÀI LIỆU THAM KHẢO 26
Trang 3Lời nói đầu
Hệ điều hành Linux là một trong những hệ điều hành mã nguồn mở phổ biến nhất trênthế giới Được phát triển bởi một cộng đồng lớn các nhà phát triển trên toàn cầu, Linux
đã trở thành một trong những lựa chọn ưa thích của người dùng và các tổ chức, từ các hệthống nhúng đến các máy chủ và máy tính cá nhân
Linux nổi tiếng với tính linh hoạt, độ ổn định và tính bảo mật cao Với sự đa dạng củacác phiên bản và phân phối như Ubuntu, CentOS, Debian, và nhiều hơn nữa, người dùng
có thể tùy chỉnh và điều chỉnh hệ thống của họ theo nhu cầu cụ thể
Một trong những điểm mạnh của Linux là môi trường dòng lệnh mạnh mẽ, cho phépngười dùng tương tác trực tiếp với hệ thống và thực hiện nhiều tác vụ từ cơ bản đếnphức tạp một cách hiệu quả
Quản lý bộ nhớ trong Linux là một khía cạnh quan trọng của hệ điều hành, đặc biệt làvới các hệ thống máy chủ và máy tính có tài nguyên hạn chế Hệ điều hành Linux sửdụng một số kỹ thuật quản lý bộ nhớ để tối ưu hóa việc sử dụng tài nguyên và đảm bảohiệu suất hệ thống
Trong Linux, quản lý bộ nhớ bao gồm các khái niệm như bộ nhớ ảo, bộ nhớ vật lý, swapspace, và các cơ chế như paging và segmentation để quản lý việc truy cập vào bộ nhớ.Linux sử dụng cơ chế điều khiển việc sử dụng bộ nhớ, đảm bảo rằng các tiến trình hoạtđộng một cách hiệu quả mà không làm giảm hiệu suất của hệ thống
Các công cụ quản lý bộ nhớ trong Linux như top, free, và vmstat giúp người quản trị hệthống theo dõi và kiểm soát việc sử dụng bộ nhớ của các tiến trình và ứng dụng, từ đótối ưu hóa hiệu suất và sử dụng tài nguyên một cách hiệu quả nhất
Trang 4CHƯƠNG I: TỔNG QUAN VỀ BỘ NHỚ TRONG HỆ ĐIỀU HÀNH LINUX 1.Giới Thiệu Về Hệ Điều Hành Linux
Linux là một hệ điều hành dạng Unix (Unix-Like Operating System) được thiết kế đểchạy trên máy tính cá nhân, sử dụng bộ vi xử lý trung tâm Intel 80386 trở lên hoặc các
bộ vi xử lý trung tâm tương thích như AMD, Cyrix Phiên bản Linux đầu tiên đượcLinus Torvalds phát triển vào năm 1991, và phiên bản Linux 1.0 ra đời vào năm 1994,sau ba năm phát triển Hệ điều hành này được phát triển và phát hành dưới giấy phépGNU General Public License, cho phép bất kỳ ai cũng có thể tải và xem mã nguồn củaLinux
Ban đầu, Linux được phát triển cho vi xử lý dòng 386, và sau đó đã mở rộng để hỗ trợmột loạt lớn các kiến trúc vi xử lý như x86, x86-64, ARM, PowerPC, và MIPS, giúp nótrở thành một trong những hệ điều hành phổ biến nhất và linh hoạt nhất hiện nay.Linux không chỉ được sử dụng trên máy tính cá nhân mà còn được áp dụng trong mộtloạt các thiết bị nhúng như máy điện thoại di động, máy tính bảng, máy chủ, router, vàcác thiết bị IoT Sự linh hoạt và tính đa dạng của Linux đã đưa nó trở thành một trongnhững lựa chọn hàng đầu cho các ứng dụng từ nhỏ đến lớn, từ cá nhân đến doanhnghiệp
*Hiệu suất, tính linh hoạt và cơ chế quản lý
Các thuộc tính và các phân khúc của Linux được tập trung vào hiệu suất và tính linhhoạt của người sử dụng Hiện nay, các máy tính cá nhân thường được trang bị ít nhất1GB bộ nhớ RAM, trong khi các máy chủ server có thể có hàng GB bộ nhớ Mặc dù có
sự gia tăng về dung lượng bộ nhớ, Linux vẫn giữ được sự hiệu quả trong quản lý bộ nhớ.Linux có một cách tiếp cận rõ ràng trong việc quản lý bộ nhớ Các ứng dụng trên Linuxkhông được phép truy cập trực tiếp vào địa chỉ vật lý của bộ nhớ Thay vào đó, Linux
Trang 5cung cấp cho mỗi tiến trình - được gọi là tiến trình - một mô hình địa chỉ phẳng khôngphân đoạn như DOS Mỗi tiến trình chỉ nhìn thấy một phần của
không gian địa chỉ của nó Hầu hết các phiên bản Unix cung cấp 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 bộ nhớ của tiến trình kháchoặc trên bộ nhớ hệ thống
Trong hầu hết các hệ thống Linux và Unix, con trỏ được sử dụng để trỏ đến một ô nhớ
cụ thể với số bit từ 32 trở lên, cho phép hệ thống định vị đến 4GB bộ nhớ Mô hình bộnhớ phẳng này dễ dàng truy xuất và xử lý hơn so với mô hình phân đoạn
Ngoài ra, một số hệ thống sử dụng mô hình địa chỉ 64 bit, mở ra khả năng mở rộng đếnterabyte trong không gian địa chỉ
Các sơ đồ quản lý bộ nhớ trong Linux bao gồm: phân hoạch cố định, phân hoạch động,swapping, phân trang, phân đoạn và kết hợp phân trang phân đoạn Linux sử dụngswapping, phân trang, phân đoạn và bộ nhớ ảo để quản lý bộ nhớ Các cơ chế này sẽđược thảo luận chi tiết trong các phần tiếp theo để hiểu rõ quá trình quản lý bộ nhớ trong
Trang 6lên đĩa thường chậm hơn khoảng một nghìn lần so với việc sử dụng bộ nhớ thật, vì vậycác chương trình chạy có thể không nhanh như mong đợi Phần của ổ đĩa cứng được sửdụng như là bộ nhớ ảo được gọi là không gian hoán đổi.
Linux có thể sử dụng một tệp thông thường trong hệ thống tệp hoặc một phân vùng đặcbiệt để làm không gian hoán đổi Một phân vùng swap có thể nhanh hơn nhưng lại khóthay đổi kích thước so với việc sử dụng một tệp swap Khi bạn biết mình cần bao nhiêukhông gian hoán đổi, bạn có thể bắt đầu tạo một phân vùng swap Tuy nhiên, nếu bạnkhông chắc chắn, bạn có thể sử dụng một tệp swap trước, sau đó sử dụng hệ thống mộtthời gian để xác định cần bao nhiêu không gian hoán đổi trước khi quyết định tạo phânvùng swap
*Mô hình bộ nhớ ảo
Trước khi tìm hiểu về các phương thức Linux sử dụng để hỗ trợ bộ nhớ ảo, hãy hiểu một
ít về mô hình trừu tượng của nó
Khi bộ xử lý thực thi một chương trình, nó đọc một chỉ lệnh từ bộ nhớ và giải mã nó.Trong quá trình này, nó có thể lấy hoặc lưu trữ dữ liệu từ một vị trí trong bộ nhớ Sau đó,
bộ xử lý thực hiện chỉ lệnh và di chuyển đến chỉ lệnh tiếp theo trong chương trình Do
đó, bộ xử lý luôn truy cập bộ nhớ để lấy hoặc lưu trữ dữ liệu
Tất cả các địa chỉ trong bộ nhớ ảo là địa chỉ ảo, không phải là địa chỉ vật lý Bộ xử lýchuyển đổi các địa chỉ ảo này thành địa chỉ vật lý dựa trên thông tin trong các bảng quản
lý bởi hệ điều hành
Để làm cho việc chuyển đổi này dễ dàng hơn, bộ nhớ ảo và bộ nhớ vật lý được chiathành nhiều phần có kích thước thích hợp gọi là "trang" Tất cả các trang này có cùngkích thước để quản lý dễ dàng Trên Linux, hệ thống Alpha AXP sử dụng trang có kíchthước 8Kbyte, trong khi hệ thống Intel x86 sử dụng trang có kích thước 4Kbyte Mỗi
Trang 7trang được gán một số duy nhất được gọi là "số khung trang" (PFN: Page FrameNumber).
Để chuyển từ địa chỉ ảo sang địa chỉ vật lý, bộ xử lý sử dụng số khung trang ảo như làchỉ mục vào bảng trang của tiến trình Nếu mục tương ứng trong bảng trang là hợp lệ, bộ
xử lý sẽ lấy số khung trang vật lý từ mục này Nếu mục không hợp lệ, tiến trình sẽ truycập vào một vùng không tồn tại của bộ nhớ ảo, và bộ xử lý sẽ báo lỗi trang cho hệ điềuhành
Sau đó, bộ xử lý sẽ nhân số khung trang vật lý với kích thước trang để lấy địa chỉ củatrang cơ sở trong bộ nhớ vật lý Cuối cùng, bộ xử lý sẽ cộng địa chỉ offset để lấy địa chỉcuối cùng của lệnh hoặc dữ liệu cần truy cập
Bằng cách ánh xạ địa chỉ ảo và địa chỉ vật lý như vậy, bộ nhớ ảo có thể được ánh xạ vào
bộ nhớ vật lý của hệ thống một cách linh hoạt Các trang trong bộ nhớ ảo không đượchiển thị trong bộ nhớ vật lý theo một thứ tự nhất định, mà thực sự được xếp đặt linhhoạt
*Sử dụng không gian hoán đổi
Trong hệ điều hành Linux, việc sử dụng không gian hoán đổi là một phương pháp quantrọng để quản lý bộ nhớ khi bộ nhớ vật lý (RAM) không đủ để chứa tất cả các tiến trình
và dữ liệu cần thiết Linux cung cấp hai loại không gian hoán đổi là partition hoán đổi vàtập tin hoán đổi, mỗi loại đều có những đặc điểm và ưu điểm riêng
Một không gian hoán đổi đã khởi tạo sẽ được lấy để sử dụng nhờ lệnh swapon Lệnh nàybáo cho kernel rằng không gian hoán đổi có thể được sử dụng Đường dẫn đến khônggian hoán đổi được cấp như là đối số, vì vậy để bắt đầu hoán đổi trên một file swap tạmthời, bạn có thể sử dụng đoạn lệnh sau :
$ swapon /extra-swap
Trang 8Không gian hoán đổi có thể được sử dụng tự động bằng cách liệt kê chúng trongfile/etc/fstab
/dev/hda8 none swap sw 0 0
/swapfile none swap sw 0 0
Đoạn mã khởi động sẽ chạy lệnh swapon -a, lệnh này sẽ bắt đầu thực hiện hoán đổi trêntất cả các không gian hoán đổi được liệt kê trong file /etc/fstab Do đó lệnh swapon chỉthường được sử dụng khi cần hoán đổi thêm
Bạn có thể quản lý việc sử dụng không gian hoán đổi với lệnh free Nó sẽ cho biết tổng
số không gian hoán đổi được sử dụng
bộ nhớ vật lý để chứa chúng thì chúng sẽ được đưa ra đến một không gian hoán đổikhác Nếu không có đủ bộ nhớ ảo để chứa tất cả các trang, Linux sẽ bắt đầu dừng lại
Trang 9(thrash), sau một khoảng thời gian dài nó sẽ khôi phục nhưng trong lúc ấy hệ thốngkhông thể sử dụng Bạn nên kiểm tra ( bằng lệnh free ) để xem có đủ bộ nhớ trốngkhông trước khi loại bỏ một không gian hoán đổi.
Tất cả không gian hoán đổi được sử dụng tự động nhờ lệnh swapon -a đều có thể đượcloại bỏ với lệnh swapoff -a, lệnh này tìm thông tin trong file /etc/fstab để loại bỏ Còncác không gian hoán đổi được điều khiển bằng tay thì vẫn sử dụng bình thường.Đôi khi
có nhiều không gian hoán đổi được sử dụng mặc dù có nhiều bộ nhớ vật lý trống Điềunày có thể xảy ra nếu tại một thời điểm có nhu cầu về hoán đổi, nhưng sau đó một tiếntrình lớn chiếm nhiều bộ nhớ vật lý kết thúc và giải phóng bộ nhớ Dữ liệu đã đưa ra sẽkhông tự động đưa vào cho đến khi nó cần, vì vậy bộ nhớ vật lý sẽ còn trống trong mộtthời gian dài Bạn không cần phải lo lắng về điều này mà chỉ cần biết điều gì đang xảyra
*Partition Hoán Đổi
Partition hoán đổi là việc dành một phần của ổ cứng để sử dụng làm không gian hoánđổi Trong quá trình cài đặt hệ thống Linux, người dùng có thể chọn tạo một phân vùngđặc biệt để sử dụng làm không gian hoán đổi Điều này cho phép hệ thống truy cậpnhanh chóng vào không gian hoán đổi mà không gây ra chi phí hoặc tốn thời gian choviệc tìm kiếm trong hệ thống tập tin
Ưu điểm:
Hiệu suất cao vì không gian hoán đổi được cấp phát trên một phân vùng riêng biệt
Dễ dàng cấu hình trong quá trình cài đặt hệ thống
Nhược điểm:
Trang 10Cần phải dự đoán trước và cấu hình kích thước phù hợp cho phân vùng hoán đổi, điềunày có thể gây ra lãng phí không gian ổ đĩa nếu kích thước không được ước lượng chínhxác.
*Tập Tin Hoán Đổi
Tập tin hoán đổi là việc sử dụng một tập tin trên hệ thống tập tin để lưu trữ dữ liệu hoánđổi Trong Linux, tập tin hoán đổi thường được tạo ra và quản lý bởi hệ điều hành để sửdụng khi cần thiết
Hiệu suất thấp hơn so với partition hoán đổi do cần thao tác trên hệ thống tập tin
Có thể tạo ra nhiều tập tin hoán đổi nhỏ, dẫn đến hiện tượng phân mảnh (fragmentation)trong hệ thống tập tin.Sử dụng không gian hoán đổi là một phương pháp quan trọngtrong quản lý bộ nhớ của hệ thống Linux Việc lựa chọn giữa partition hoán đổi và tậptin hoán đổi phụ thuộc vào các yếu tố như hiệu suất, linh hoạt và yêu cầu cụ thể của hệthống Bằng cách sử dụng một trong hai loại không gian hoán đổi này, người quản trị cóthể đảm bảo rằng hệ thống sẽ có đủ bộ nhớ để hoạt động một cách hiệu quả và ổn định
*Định vị không gian hoán đổi
Người ta thường nói rằng bạn nên định vị không gian hoán đổi gấp đôi bộ nhớ vật lý,nhưng đây không phải là một quy luật đúng Bạn hãy xem cách làm đúng sau đây :
Trang 11Dự đoán tổng bộ nhớ mà bạn cần Đây là số lượng bộ nhớ lớn nhất mà bạn cần tại mộtthời điểm nào đó, là tổng bộ nhớ cần thiết cho tất cả các chương trình mà bạn muốnchạy cùng một lúc Lệnh free và ps sẽ có ích để đoán lượng bộ nhớ cần dùng.
Cộng thêm một ít vào dự đoán ở bước 1, bởi vì dự đoán về kích thước các chương trình
có thể sai do bạn quên một số chương trình mà bạn muốn chạy, và để chắc chắn bạn nênchuẩn bị một không gian phụ để dùng khi cần Nên định vị dư hơn là thiếu nhưng không
dư nhiều quá sẽ gây lãng phí Bạn cũng nên làm tròn lên thành một số chẵn megabyte.Dựa trên những tính toán trên, bạn biết sẽ cần tổng cộng bao nhiêu bộ nhớ Vì vậy, đểđịnh vị không gian hoán đổi, bạn chỉ cần lấy tổng bộ nhớ sẽ dùng trừ cho bộ nhớ vật lý.Nếu không gian hoán đổi mà bạn đã tính lớn hơn hai lần bộ nhớ vật lý thì bạn nên muathêm RAM, nếu không hiệu năng của máy sẽ thấp
Tốt hơn hết là nên có một vài không gian hoán đổi cho dù theo sự tính toán của bạn làkhông cần Linux sử dụng không gian hoán đổi khá linh hoạt Linux sẽ đưa các trangnhớ không sử dụng ra ngoài cho dù bộ nhớ chưa cần dùng Điều này giúp tránh việc chờđợi hoán đổi khi cần bộ nhớ
2.1.Quản lý bộ nhớ vật lý
*Bộ định vùng
Các bảng trang kernel ánh xạ tối đa bộ nhớ vật lý vào dãy địa chỉ bắt đầu tạiPAGE_OFFSET Các trang vật lý dành cho đoạn mã và dữ liệu kernel sẽ được cáchriêng và không được sử dụng cho mục đích khác Các trang vật lý khác được cung cấpcho bộ nhớ ảo tiến trình, bộ nhớ đệm, và bộ nhớ ảo kernel khi cần thiết Để làm điềunày, chúng ta cần cách để theo dõi trang vật lý nào đang được sử dụng và được sử dụngbởi ai
Trang 12Bộ định vùng (zone allocator) quản lý bộ nhớ vật lý Bất kỳ mã kernel nào cũng có thểgọi tới bộ định vùng thông qua hàm alloc_pages() để nhận một khối gồm 2^n trang đượccấp phát trên một đường biên tương ứng Chúng ta cũng có thể trả khối trang này lại cho
bộ định vùng thông qua hàm free_pages() Số mũ n được gọi là thứ tự của sự định vùng.Các khối không cần phải được giải phóng theo cách mà chúng được cấp phát, nhưngphải được giải phóng chính xác và khung trang đầu tiên của khối phải có một số thamchiếu khác 0 Ví dụ, khi yêu cầu một khối 8 trang, sau đó giải phóng một khối 2 trangtrong khối 8 trang đó, bạn cần tăng biến tham chiếu của trang đầu tiên trong khối 2 trang
đó Lý do là khi bạn định vị một khối 8 trang, chỉ có biến tham chiếu của trang đầu tiêntrong khối được tăng, và đoạn mã giải phóng trang sẽ không giải phóng một trang cóbiến tham chiếu bằng 0, vì vậy biến tham chiếu của các trang khác phải được điều khiểnbằng tay Việc tăng tất cả các biến tham chiếu của các trang trong khối là không cần thiết
và 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 nhau có các thuộc tính khác nhau, phục vụ cho các mục đíchcủa kernel Ví dụ, DMA (Direct Memory Access) cho phép các thiết bị ngoại vi đọc vàviết dữ liệu trực tiếp lên RAM mà không cần sự can thiệp của CPU, và chỉ có thể hoạtđộng với địa chỉ vật lý nhỏ hơn 16MB Một số hệ thống có bộ nhớ vật lý lớn hơn có thểđược ánh xạ từ PAGE_OFFSET đến 4GB, và những trang vật lý này không thể truy cậptrực tiếp vào kernel, vì vậy chúng phải được quản lý theo cách khác Bộ định vùng quản
lý các sự khác biệt như vậy bằng cách chia bộ nhớ thành các vùng và xem mỗi vùng làmột đơn vị cho sự định vị
Cấu trúc dữ liệu root được quản lý bởi bộ định vùng là zone_struct, bao gồm tất cả dữliệu liên quan đến việc quản lý một vùng cụ thể
Trang 13Zonelist_struct bao gồm một mảng các con trỏ zone_struct và một gfp_mask chỉ ra cơchế định vị nào có thể sử dụng zone_list Zone_struct offset chỉ ra địa chỉ offset của nơibắt đầu một vùng trong bộ nhớ vật lý.
2.1.1.Ánh xạ bộ nhớ (Memory Mapping)
Khi một chương trình được thực thi, dữ liệu của nó cần phải được đưa vào không gianđịa chỉ ảo của tiến trình Thay vì thực sự đưa file thực thi vào bộ nhớ vật lý, file này chỉđơn giản được liên kết với không gian địa chỉ ảo của tiến trình Sau đó, dữ liệu củachương trình được mang vào bộ nhớ như một phần của chương trình được tham chiếubởi ứng dụng đang chạy Quá trình liên kết một file vào không gian địa chỉ ảo của tiếntrình được gọi là ánh xạ bộ nhớ
Mỗi không gian địa chỉ ảo của tiến trình được mô tả bằng một cấu trúc dữ liệu được gọi
là mm_struct Cấu trúc này chứa thông tin về file thực thi hiện đang được thực thi và cáccon trỏ đến một số cấu trúc dữ liệu vm_area_struct Mỗi vm_area_struct mô tả một phầncủa không gian bộ nhớ ảo, bao gồm điểm bắt đầu và kết thúc của vùng bộ nhớ, quyềntruy cập của tiến trình đến bộ nhớ đó, và các hoạt động liên quan đến bộ nhớ đó.Các hoạt động này bao gồm việc xử lý khi một tiến trình cố gắng truy cập vào bộ nhớ ảo
mà không có giá trị tương ứng trong bộ nhớ vật lý (qua lỗi trang), được gọi là hoạt độngnopage Hoạt động nopage được sử dụng khi Linux cần các trang của một file thực thitrong bộ nhớ
Khi một file thực thi được ánh xạ vào không gian địa chỉ ảo của tiến trình, một tập hợpcác cấu trúc dữ liệu vm_area_struct được tạo ra Mỗi vm_area_struct mô tả một phầncủa file thực thi, bao gồm mã thực thi, dữ liệu được khởi tạo (các biến), và dữ liệu khôngđược khởi tạo Linux cũng hỗ trợ một số hoạt động bộ nhớ ảo chuẩn khác
2.1.1.1.Cấp phát vùng nhớ