Trong môi trường hệ thống này, việc quản lý bộ nhớ đóng một vaitrò cực kỳ quan trọng, ảnh hưởng trực tiếp đến hiệu suất và ổn định của hệ thống.Đề tài nghiên cứu này nhằm tập trung vào v
Trang 1TRƯỜ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 NGUYÊN L䤃Ā HỆ ĐIỀU HÀNH
Tên đề tài: Nghiên cứu tìm hiểu về quản lý Bộ nhớ trong trong HĐH Linux Nhóm thực hiện: Nhóm 4 – Lớp: 20231IT6067013
Giáo viên hướng dẫn: Nguyễn Tuấn Tú
Thành viên trong nhóm: 1 Trần Tuấn Anh - 2022600749
Trang 2Mục lục
DANH MỤC HÌNH ẢNH 5
LỜI MỞ ĐẦU 6
CHƯƠNG 1: KHÁI NIỆM HỆ ĐIỀU HÀNH VÀ HỆ ĐIỀU HÀNH LINUX 7
1.1 Hệ điều hành là gì? 7
1.2 Giới thiệu hệ điều hành Linux 7
CHƯƠNG 2: BỘ NHỚ ẢO 8
2.1 Khái niệm bộ nhớ ảo 8
2.2 Mô hình bộ nhớ ảo 9
2.3 Khái niệm không gian hoán đổi và Tạo không gian hoán đổi 11
2.3.1 Khái niệm không gian hoán đổi 11
2.3.2 Tạo không gian hoán đổi 12
2.4 Sử dụng không gian hoán đổi 13
2.5 Định vị không gian hoán đổi 14
CHƯƠNG 3: CACHES 14
3.1 Linux Page Cache 15
3.2 Bu昀昀er Cache 16
3.3 Page Cache 16
3.4 Swap Cache 16
Trang 33.5 Hardware Cache 17
3.6 Swap Cache 17
CHƯƠNG 4: CƠ CHẾ PHÂN ĐOẠN, PHÂN TRANG 18
4.2 Cơ chế phân trang 19
4.2.1 Nhu cầu phân trang 19
4.2.2 Trang lưu trữ (Page Cache) 20
4.2.3 Bảng trang (Page table) 21
4.2.4 Định vị và giải phóng trang 22
4.2.4.1 Định vị trang 23
4.2.4.2 Giải phóng trang 24
CHƯƠNG 5: CƠ CHẾ QUẢN LÝ BỘ NHỚ VẬT LÝ, ÁNH XẠ BỘ NHỚ 25
5.1 Bộ định vùng 25
5.2 Các vùng 25
5.3 Ánh xạ bộ nhớ 26
CHƯƠNG 6: CẤP PHÁT VÀ GIẢI PHÓNG VÙNG NHỚ 28
6.1 Khái niệm vùng nhớ 28
6.1.1 Một số khái niệm cơ bản về vùng nhớ 28
6.1.2 Các chế độ cấp phát vùng nhớ 28
6.2 Cấp phát vùng nhớ 29
6.2.1 Hàm cấp phát bộ nhớ 29
6.2.2 Thuật toán 33
6.3 Giải phóng vùng nhớ 33
6.4 Truy xuất con trỏ NULL 35
Trang 4KẾT LUẬN 37
Danh Mục Hình Ảnh
HÌNH 2.1 : MÔ HÌNH TRỪU TƯỢNG CỦA SỰ ÁNH XẠ TỪ ĐỊA CHỈ ẢO
ĐẾN ĐỊA CHỈ VẬT LÝ
HÌNH 3.1 LINUX PAGE CACHE
HÌNH 4.1: KERNEL/USER LINEAR ADDRESSES
HÌNH 4.2 MỨC BẢNG TRANG
HÌNH 4.3 CẤU TRÚC DỮ LIỆU CỦA FREE_AREA
HÌNH 5.1 ARES OF VIRTUAL MEMORY
Trang 5Lời mở đầu
Hệ điều hành Linux, với cơ sở mã nguồn mở và tính linh hoạt cao, đã trở
thành một trong những nền tảng quan trọng và phổ biến nhất trong thế giới công
nghệ hiện đại Trong môi trường hệ thống này, việc quản lý bộ nhớ đóng một vai
trò cực kỳ quan trọng, ảnh hưởng trực tiếp đến hiệu suất và ổn định của hệ thống
Đề tài nghiên cứu này nhằm tập trung vào việc hiểu và tối ưu hóa quản lý bộ nhớ
trong hệ điều hành Linux Trải qua nhiều phiên bản và sự phát triển liên tục, Linux
đã có những cải tiến vượt bậc trong cách tiếp cận và sử dụng bộ nhớ của máy tính
Bài báo cáo này sẽ đi sâu vào nghiên cứu cách mà Linux quản lý bộ nhớ, từ cách
thức hoạt động của kernel đến các cơ chế quản lý bộ nhớ ảo, cũng như quản lý bộ
nhớ vật lý và ảo hóa Đồng thời khám phá các công cụ và kỹ thuật tối ưu hóa bộ
nhớ trong Linux để cải thiện hiệu suất, tăng cường khả năng đáp ứng và tối ưu hóa
sử dụng tài nguyên
Nghiên cứu này cũng sẽ đưa ra các phân tích về ưu điểm, nhược điểm cũng như
các thách thức mà việc quản lý bộ nhớ trong Linux đối diện Cuối cùng, mục tiêu
của bài báo cáo là cung cấp cái nhìn sâu rộng hơn về cách Linux quản lý bộ nhớ, từ
đó tạo ra các phương pháp và giải pháp tối ưu hóa để nâng cao hiệu suất và đáng
tin cậy của hệ thống
Trong quá trình làm bài, nhóm tuy đã rất cố gắng nhưng chắc chắn không tránh
khỏi những thiếu sót, rất mong nhận được sự giúp đỡ của thầy để bài viết hoàn
thiện hơn
Trang 6CHƯƠNG 1: KHÁI NIỆM HỆ ĐIỀU HÀNH VÀ HỆ ĐIỀU HÀNH LINUX
1.1 Hệ điều hành là gì?
Hệ điều hành là một bộ chương trình được cài đặt sẵn (dưới dạng các File trên
các vật mang tin: băng từ, đĩa từ) có chức năng: Nhìn nhận theo chức năng này, hệ
điều hành được quan niệm như là một hệ thống quản lý tài nguyên Thoả mãn ở
mức cao nhất yêu cầu đa dạng của người dùng
1.2 Giới thiệu hệ điều hành Linux
Linux là một hệ điều hành máy tính được phát triển từ năm 1991, dựa trên hệ
điều hành Unix và viết bằng ngôn ngữ C Đây là một hệ điều hành được phát hành
miễn phí và có nhiều ưu điểm vượt trội nên thường được sử dụng nhiều hơn
là Windows hay những hệ điều hành nào khác Là một hệ điều hành mã nguồn mở
Linux đã thực sự tạo ra một cuộc cách mạng trong lĩnh vực máy tính với bùng nổ
về số lượng người dùng cũng như sự đánh giá cao về trải nghiệm mà nó đem lại
Dưới đây là một số điểm chính về hệ điều hành Linux:
- Mã nguồn mở: Linux được phát triển theo mô hình mã nguồn mở, điều này
có nghĩa là mã nguồn của nó có sẵn và có thể được sửa đổi, phát triển, và
phân phối lại theo các điều khoản của Giấy phép Công cộng GNU (GNU
General Public License - GPL) Điều này tạo ra một cộng đồng rộng lớn của
các nhà phát triển trên toàn thế giới đóng góp vào việc phát triển và duy trì
hệ điều hành
- Nhân Linux (Linux Kernel): Nhân Linux là phần quan trọng nhất của hệ
điều hành, chịu trách nhiệm cho việc quản lý tài nguyên như bộ nhớ, CPU,
các thiết bị ngoại vi và giao tiếp giữa phần mềm và phần cứng
- Hệ thống tập tin: Linux sử dụng hệ thống tập tin ext4 phổ biến, nhưng cũng
hỗ trợ nhiều loại hệ thống tập tin khác nhau như btrfs, XFS, và nhiều loại
khác
- Giao diện người dùng: Linux có nhiều phiên bản giao diện người dùng,
trong đó có GNOME, KDE, Xfce, và LXQt Mỗi phiên bản có đặc điểm và
phong cách riêng, nhưng đều cung cấp môi trường desktop đầy đủ chức
năng và thân thiện với người dùng
Trang 7- Distributions (Bản phân phối): Có nhiều bản phân phối Linux (distros) khác
nhau, mỗi bản phân phối thường có các đặc điểm, ưu điểm, và mục tiêu sử
dụng cụ thể Ví dụ như Ubuntu, Fedora, Debian, CentOS, và Arch Linux
- Quản lý gói và trình quản lý phần mềm: Hệ điều hành Linux thường sử
dụng các hệ thống quản lý gói như APT (Advanced Package Tool), YUM,
Pacman, để quản lý cài đặt và cập nhật phần mềm
- An ninh và ổn định: Linux nổi tiếng với độ ổn định và bảo mật cao Cộng
đồng mã nguồn mở tích cực theo dõi và vá lỗ hổng an ninh, điều này giúp
tăng cường sự tin tưởng của người dùng
Hệ điều hành Linux đã trở thành một lựa chọn phổ biến cho nhiều môi trường
sử dụng, từ máy tính cá nhân đến máy chủ và thiết bị nhúng, thể hiện tính linh hoạt
và khả năng tùy chỉnh của nó
CHƯƠNG 2: BỘ NHỚ ẢO
2.1 Khái niệm bộ nhớ ảo
Bộ nhớ ảo là một vùng thuộc không gian lưu trữ của bộ nhớ phụ hệ thống
máy tính (chẳng hạn như ổ cứng HDD hoặc SSD) Nó hoạt động như thể là một
phần của RAM hoặc bộ nhớ chính hệ thống
Bộ nhớ ảo sử dụng cả phần cứng và phần mềm để cho phép máy tính bù đắp
sự thiếu hụt bộ nhớ vật lý, tạm thời chuyển dữ liệu từ bộ nhớ truy cập ngẫu nhiên
(RAM) sang ổ lưu trữ Ánh xạ các phần bộ nhớ thành các tệp đĩa cho phép máy
tính coi bộ nhớ phụ như thể nó là bộ nhớ chính
2.2 Mô hình bộ nhớ ảo
Mô hình địa chỉ ảo là một khái niệm quan trọng trong hệ điều hành và kiến
trúc máy tính Nó liên quan đến cách mà bộ xử lý và hệ điều hành quản lý và sử
dụng bộ nhớ Dưới đây là một giải thích cơ bản về mô hình địa chỉ ảo:
1 Địa chỉ Vật lý (Physical Address):
Trang 8 Khái niệm: Là địa chỉ thực tế của ô nhớ trong bộ nhớ vật lý của hệ thống.
Đặc điểm: Mỗi ô nhớ được xác định bằng một địa chỉ vật lý duy nhất,
thường là một con số thập lục phân
2 Địa chỉ Ảo (Virtual Address):
Khái niệm: Được sử dụng trong quá trình thực hiện các thao tác trên bộ nhớ,
không nhất thiết phải trùng với địa chỉ vật lý
Đặc điểm: Địa chỉ ảo được sử dụng bởi các tiến trình và chương trình khi
chúng thao tác với bộ nhớ
3 Đơn vị Quản lý Bộ nhớ (MMU - Memory Management Unit):
Khái niệm: Phần của bộ xử lý hoặc hệ điều hành chịu trách nhiệm chuyển
đổi địa chỉ ảo sang địa chỉ vật lý và ngược lại
Đặc điểm: MMU thực hiện vai trò quan trọng trong quản lý bộ nhớ và giúp
tạo ra không gian địa chỉ ảo
4 Bảng Trang (Page Table):
Khái niệm: Cấu trúc dữ liệu để ánh xạ địa chỉ ảo sang địa chỉ vật lý thông
qua các trang nhỏ
Đặc điểm: Bảng trang giúp hệ thống theo dõi quy hoạch và quản lý bộ nhớ
dựa trên các trang nhỏ này
5 Phân Trang (Paging):
Khái niệm: Kỹ thuật quản lý bộ nhớ trong đó bộ nhớ và đĩa được chia thành
các trang nhỏ cố định
Đặc điểm: Giúp tối ưu hóa việc sử dụng bộ nhớ và quản lý các trang một
cách linh hoạt
6 Chế độ Bảo vệ (Protection Mode):
Khái niệm: Hỗ trợ quản lý quyền truy cập vào các phần khác nhau của bộ
nhớ
Đặc điểm: Đảm bảo an toàn và bảo mật, vì nó ngăn chặn các tiến trình từ
việc ghi vào hoặc thực thi các phần nhất định của bộ nhớ
Trang 9Để cho sự chuyển đổi dễ dàng hơn thì bộ nhớ ảo và bộ nhớ vật lý được chia
thành nhiều khúc có kích thước thích hợp gọi là trang Tất cả các trang này có cùng
kích thước để dễ quản lý Linux trên hệ thống Alpha AXP sử dụng trang 8Kbyte,
còn trên hệ thống Intel x86 là trang 4Kbyte Mỗi trang được cung cấp một số duy
nhất gọi là số khung trang ( PFN : Page Frame Number )
Hình 2.1 : Mô hình trừu tượng của sự ánh xạ từ địa chỉ ảo đến địa chỉ vật lý
Khi vi xử lý cần truy cập một địa chỉ ảo, nó sẽ truy cập bảng trang để tìm
PFN của trang đó Sau đó, nó sẽ sử dụng PFN này để truy cập trang bộ nhớ vật lý
tương ứng
Trong hệ thống bộ nhớ ảo, địa chỉ ảo được chia thành hai phần: phần offset
và phần PFN Phần offset xác định vị trí của dữ liệu hoặc mã trong một trang, còn
phần PFN xác định trang bộ nhớ vật lý mà dữ liệu hoặc mã đó nằm trên đó
Nếu kích thước trang là 4 Kbyte, thì bit 11:0 của địa chỉ ảo chứa phần offset,
còn bit 12 trở lên chứa phần PFN
Khi vi xử lý muốn truy cập một địa chỉ ảo, nó sẽ đọc hai phần này Sau đó,
vi xử lý sẽ sử dụng phần PFN để tìm trang bộ nhớ vật lý tương ứng Cuối cùng, vi
Trang 10xử lý sẽ sử dụng phần offset để truy cập đến vị trí dữ liệu hoặc mã cần thiết trong
trang bộ nhớ vật lý đó
Quá trình chuyển từ địa chỉ ảo sang địa chỉ vật lý được dựa trên các bảng
phân trang Mỗi tiến trình có một bảng phân trang riêng Bảng phân trang chứa
thông tin về việc một trang ảo được ánh xạ đến trang vật lý nào
2.3 Khái niệm không gian hoán đổi và Tạo không gian hoán đổi
2.3.1 Khái niệm không gian hoán đổi
Linux phân chia bộ nhớ truy cập ngẫu nhiên (RAM) thành các ngăn nhớ gọi
là các trang Hoán đổi là quá trình ở đó một trang nhớ được sao chép tới không
gian được cấu hình trước trên ổ cứng (không gian hoán đổi) nhằm giải phóng trang
nhớ đó Kích thước được kết hợp từ bộ nhớ vật lý và không gian hoán đổi là tổng
dung lượng bộ nhớ ảo
Có 2 lý do quan trọng mà cần phải thực hiện việc hoán đổi Trước tiên khi hệ
thống yêu cầu bộ nhớ lớn hơn bộ nhớ vật lý hiện tại đang có thì nhân hệ thống sẽ
được chuyển sang các trang được sử dụng ít hơn và nhường bộ nhớ cho các ứng
dụng đang cần xử lý ngay Thứ hai, số lượng các trang quan trọng được sử dụng
bởi một ứng dụng trong suốt giai đoạn khởi động có thể chỉ được dùng để khởi tạo
rồi sau đó không dùng lại nữa Hệ thống có thể chuyển đổi giữa các trang này và
giải phóng bộ nhớ cho các ứng dụng khác hay thậm chí cho cả cache lưu trữ ổ
Tuy nhiên việc hoán đổi cũng không phải hoàn toàn tốt So với bộ nhớ, các ổ
chạy rất chậm Tốc độ bộ nhớ có thể được đo bằng nano giây (ns) trong khi tốc độ
ổ đo bằng mili giây (ms), do đó truy cập ổ chậm hơn hàng chục nghìn lần truy cập
vào bộ nhớ vật lý Càng thực hiện hoán đổi nhiều thì hệ thống sẽ càng chậm Đôi
khi hoán đổi quá mức hoặc nhiều lần liên tiếp sẽ xảy ra ở một trang được chuyển ra
rồi ngay lập tức lại được chuyển vào rồi lại chuyển ra rồi cứ thế tiếp tục Trong
mỗi trường hợp thì hệ thống sẽ tìm ra các vùng nhớ trống và cùng lúc đưa vào chạy
ứng dụng Trường hợp này chỉ cần thêm RAM
Linux có hai loại không gian hoán đổi: partition hoán đổi và tập tin hoán đổi
Partition hoán đổi là một phần độc lập của ổ cứng được sử dụng chỉ để hoán đổi;
không một tập tin nào khác được lưu trữ ở đây Tập tin hoán đổi là một tập tin đặc
Trang 11biệt trong tập tin hệ thống có khả năng lưu trữ ở mọi nơi trong hệ thống và các tập
tin dữ liệu
2.3.2 Tạo không gian hoán đổi
Một file swap là một tệp thông thường không có đặc điểm đặc biệt đối với
kernel Mục đích duy nhất mà nó mang lại đối với kernel là không chứa bất kỳ
phần nào của nó là không có vùng trống Nó được chuẩn bị để sử dụng với hàm
mkswap() Phải được lưu trữ trên đĩa cục bộ và các bit liên quan đến vùng trống rất
quan trọng
File swap giữ không gian trên đĩa để kernel có thể nhanh chóng truy cập trang
mà không cần thực hiện tất cả các bước cần thiết để định vị sector đĩa cho một tệp
Việc có một vùng trống trong một tệp swap có nghĩa là không có sector đĩa được
định vị, do đó kernel không thể sử dụng tệp đó Để tạo một tệp swap mà không có
Ở đây, /extra-swap là tên của tệp swap và kích thước được chỉ định sau
count= Kích thước tốt nhất là bội số của 4 vì kernel ghi ra các trang nhớ, mỗi
trang có kích thước 4 Kbyte Nếu kích thước không phải là bội số của 4, cặp Kbyte
cuối có thể không được sử dụng
Một phân vùng swap cũng không có gì đặc biệt Bạn tạo nó giống như các
phân vùng khác, sự khác biệt duy nhất là nó được sử dụng như một phân vùng thô
và sẽ không chứa bất kỳ tệp hệ thống nào Phân vùng swap được đánh dấu là loại
82 (Linux swap), điều này giúp việc liệt kê phân vùng rõ ràng hơn mặc dù không
hoàn toàn cần thiết đối với kernel Sau khi bạn tạo một phân vùng swap hoặc một
tệp swap, bạn cần ghi một chữ ký lên đầu của nó Chữ ký này được sử dụng bởi
Trang 12kernel và chứa một số thông tin quản lý Để thực hiện điều này, bạn có thể sử dụng
hàm mkswap() như sau:
$ mkswap /extra-swap 1024
Setting up swapspace, size = 1044480
bytes
$
Chú ý rằng không gian hoán đổi vẫn chưa được sử dụng, tồn tại nhưng kernel
không sử dụng nó để cung cấp bộ nhớ ảo Cẩn thận khi sử dụng mkswap(), vì nó
không kiểm tra xem tệp hoặc phân vùng đã được sử dụng hay chưa Cách tốt nhất
là chỉ sử dụng hàm này khi cài đặt hệ thống của bạn
Trình quản lý bộ nhớ trong Linux giới hạn kích thước của mỗi không gian
hoán đổi là 127MB, nhưng bạn có thể sử dụng đến 8 không gian hoán đổi, tổng
cộng lên đến 1GB Tuy nhiên, giới hạn này có thể thay đổi tùy thuộc vào cấu trúc
của phiên bản kernel Ví dụ, đối với bộ xử lý i386, giới hạn này là 2GB
2.4 Sử dụng không gian hoán đổi
Để sử dụng không gian hoán đổi, bạn cần khởi động nó bằng lệnh swapon
Lệnh này báo cho kernel rằng không gian hoán đổi có thể được sử dụng Đường
dẫn đến không gian hoán đổi được cấp như là đối số Ví dụ, để bắt đầu hoán đổi
trên một file swap tạm thời, bạn có thể sử dụng đoạn lệnh sau:
$ swapon /extra-swap
$
Không gian hoán đổi cũng có thể được sử dụng tự động bằng cách liệt kê nó
trong file /etc/fstab Ví dụ, để sử dụng một phân vùng swap và một file swap tạm
thời, bạn có thể thêm các dòng sau vào file /etc/fstab:
/dev/hda8 none swap sw 0 0
/swapfile none swap sw 0 0
Trang 132.5 Định vị không gian hoán đổi
Cách xác định kích thước không gian hoán đổi
Thông thường, người ta khuyên rằng bạn nên định vị không gian hoán đổi gấp
đôi bộ nhớ vật lý Tuy nhiên, đây không phải là một quy tắc chung đúng cho tất cả
các trường hợp Cách xác định kích thước không gian hoán đổi chính xác hơn là
như sau:
1 Dự đoán tổng bộ nhớ cần thiết Đây là số lượng bộ nhớ lớn nhất mà bạn cần
tại một thờ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ốn chạy cùng một lúc
2 Cộng thêm một ít vào dự đoán ở bước 1 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ên chuẩn bị một không gian phụ để dùng khi cần
3 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ý
4 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 mua thêm RAM Nếu không, hiệu năng của máy sẽ thấp
CHƯƠNG 3: CACHES
Việc chúng ta triển khai hệ thống sử dụng những mô hình lý thuyết như trên,
mặc dù có thể hoạt động, nhưng nhìn chung là không thực sự hiệu quả Hệ quả là
người người thiết kế hệ điều hành và bộ xử lý sẽ gặp khó khăn khi muốn nâng cao
hiệu quả của hệ thống Một cách tiếp cận khác đó chính là duy trì bộ nhớ caches
đối với những thông tin và dữ liệu hữu ích, điều này làm cho việc vận hành hệ
thống nhanh hơn Sau đây là những bộ nhớ cache có trong hệ điều hành Linux
3.1 Linux Page Cache
Trang 14Hình 3.1 Linux Page Cache
Mỗi tệp trong Linux được xác định bởi cấu trúc dữ liệu inode VFS và mỗi
inode VFS là duy nhất và mô tả đầy đủ một và chỉ một tệp Chỉ mục trong bảng
trang được lấy từ inode VFS của tệp và phần bù vào tệp
Bất cứ khi nào một trang được đọc từ tệp ánh xạ bộ nhớ, chẳng hạn như khi
nó cần được đưa trở lại bộ nhớ trong quá trình phân trang theo yêu cầu, trang sẽ
được đọc qua bộ đệm ẩn của trang Nếu trang có trong bộ đệm, một con trỏ đến
cấu trúc dữ liệu mem_map_t đại diện cho nó sẽ được trả về mã xử lý lỗi trang Nếu
không, trang phải được đưa vào bộ nhớ từ hệ thống tệp chứa hình ảnh Linux phân
bổ một trang vật lý và đọc trang đó từ tệp trên đĩa
Nếu có thể, Linux sẽ bắt đầu đọc trang tiếp theo trong tệp Trang này được
đọc trước có nghĩa là nếu tiến trình đang truy cập các trang trong tệp theo thứ tự,
thì trang tiếp theo sẽ được chờ đợi trong bộ nhớ cho tiến trình
Theo thời gian, bộ nhớ cache của trang phát triển khi hình ảnh được đọc và
thực thi Các trang sẽ bị xóa khỏi bộ nhớ cache vì chúng không còn cần thiết,
chẳng hạn như một hình ảnh không còn được sử dụng bởi bất kỳ quá trình nào Vì
Linux sử dụng bộ nhớ, nó có thể bắt đầu chạy chậm trên các trang vật lý Trong
trường hợp này, Linux sẽ giảm kích thước của bộ đệm trang
Trang 153.2 Buffer Cache
Bộ nhớ buffer cache chứa những dữ liệu buffer được sử dụng bởi những
block device driver
Những dữ liệu buffer này có kích thước cố định (ví dụ là 512 bytes) và chứa
những khối thông tin hoặc được đọc từ một block device, hoặc là được ghi vào đó
Một block device chỉ có thể được truy cập bằng việc đọc hoặc việc ghi một khối dữ
liệu có kích thước cố định Tất cả những đĩa cứng là block device
Bộ nhớ buffer cache được đánh số thứ tự thông qua định danh của thiết bị và
số hiệu của desired block, điều này giúp cho việc tìm một block dữ liệu nhanh hơn
Những block device chỉ có thể được truy cập thông qua bộ nhớ buffer cache Nếu
dữ liệu được tìm thấy ở bộ nhớ buffer cache thì chúng ta không cần phải đọc từ
block device vật lý (ví dụ như đĩa cứng) nữa, điều này giúp việc tìm kiếm và đọc
dữ liệu nhanh hơn rất nhiều
3.3 Page Cache
Bộ nhớ page cache được dùng để tăng tốc độ truy nhập ảnh và dữ liệu trên
đĩa
Bộ nhớ page cache được dùng để lưu trữ thông tin logic của một file thuộc 1
trang tại một thời điểm, được truy nhập thông qua file Khi trang được đọc từ đĩa
vào bộ nhớ, trang sẽ được lưu trữ ở bộ nhớ page cache
3.4 Swap Cache
Bộ nhớ swap cache được dùng để chứa những trang bị thay đổi (cách gọi
khác là trang bẩn)
Miễn là những trang không bị thay đổi sau khi được ghi vào swap file, thì
lần tiếp theo, những file này sẽ được đưa ra khỏi swap file Thay vào đó thì các
trang sẽ bị loại bỏ một cách dễ dàng Trong một hệ thống swap mạnh thì cách tiến
hành như trên sẽ giúp loại bỏ những hoạt động không cần thiết và tốn kém trên đĩa
3.5 Hardware Cache
Một bộ nhớ hardware cache được triển khai phổ biến là nằm ở trong bộ xử
lý, 1 cache của Page Table Entries Trong trường hợp này, bộ xử lý không luôn
luôn đọc trực tiếp từ bảng trang, mà thay vào đó là đọc từ caches translations của
Trang 16trang khi bộ xử lý cần Những caches translation của những trang như thế được gọi
là Translation Look-aside Buffers, chúng chứa bản sao lưu trữ của những Page
Table Entries từ một hoặc nhiều bộ xử lý trong hệ thống
Khi có một tham chiếu đến địa chỉ ảo được tạo, bộ xử lý sẽ cố gắng tìm một
sự tương ứng ở trong TLB Nếu bộ xử lý tìm thấy, nó có thể trực tiếp chuyển địa
chỉ aỏ thành địa chỉ vật lý Nếu bộ xử lý không thể tìm thấy sự tương ứng ở trong
TLB, bộ xử lý sẽ yêu cầu hệ điều hành giúp đỡ Hệ điều hành sẽ tạo ra một TLB
mới cho địa chỉ ánh xạ
Hạn chế của việc sử dụng bộ nhớ cache là khi Linux muốn tiết kiệm công
sức, nó phải sử dụng nhiều thời gian và không gian để duy trì những bộ nhớ cache
này, và khi bộ nhớ cache bị hỏng, hệ thống sẽ sập theo
3.6 Swap Cache
Khi hoán đổi các trang vào tệp swap file, Linux tránh ghi các trang nếu
không cần thiết Đôi khi một trang nằm trong cả tệp swap file lẫn trong bộ nhớ vật
lý Điều này xảy ra khi một trang đã được hoán đổi khỏi bộ nhớ sau đó được đưa
trở lại bộ nhớ khi nó được truy cập lại bởi một tiến trình Miễn là trang trong bộ
nhớ không được chỉnh sửa, bản sao trong tệp swap file vẫn valid
Linux sử dụng bộ nhớ swap cache để theo dõi các trang này Bộ nhớ swap
cache chứa danh sách các entry của bảng quản phân trang, mỗi entry chứa thông
tin về mỗi trang vật lý trong hệ thống Entry của bảng quản phân trang cho một
trang đã được hoán đổi sẽ mô tả tệp swap file đang giữ trang đó cùng với vị trí của
nó trong tệp swap file Nếu entry của bộ nhớ swap cache khác 0, nó thể hiện rằng
một trang đang được giữ trong tệp swap file chưa được sửa đổi Nếu trang được
sửa đổi, entry của nó sẽ bị xóa bộ nhớ swap cache
Khi Linux cần hoán đổi một trang vật lý sang tệp swap file, nó sẽ tham khảo
bộ nhớ swap cache và nếu có entry là valid cho trang này, nó không cần ghi trang
ra tệp swap file Điều này là do trang trong bộ nhớ chưa được sửa đổi kể từ lần đọc
cuối cùng từ tệp swap file
Trang 17Các entry trong bộ nhớ swap cache là các entry của bảng quản phân trang cho
các trang được hoán đổi Chúng được đánh dấu là invalid và chứa thông tin cho
phép Linux tìm đúng tệp swap file và đúng trang trong tệp swap file đó
CHƯƠNG 4: CƠ CHẾ PHÂN ĐOẠN, PHÂN TRANG
4.1 Cơ chế phân đoạn
Linux sử dụng cơ chế phân đoạn để phân tách các vùng nhớ đã cấp phát cho
hạt nhân và các tiến trình Hai phân đoạn liên quan đến 3GB đầu tiên (từ 0 đến
0xBFFF FFFF) của không gian địa chỉ tiến trình và các nội dung của chúng có thể
được đọc và chỉnh sửa trong chế độ người dùng và trong chế độ Kernel Hai phân
đoạn liên quan đến GB thứ 4 (từ 0xC000 0000 đến 0xFFFF FFFF) của không gian
địa chỉ tiến trình và các nội dung của nó có thể được đọc và chỉnh sửa duy nhất
trong chế độ Kernel Theo cách này, dữ liệu và mã Kernel được bảo vệ khỏi sự
truy cập không hợp lý của các tiến trình chế độ người dùng
Hình 4.1: Kernel/User Linear addresses
Trang 18Trong Linux, việc sử dụng segment (đoạn) được thực hiện một cách hạn chế.
Linux ưu tiên sử dụng phân trang (paging) hơn là đoạn trong quản lý bộ nhớ vì một
số lý do sau đây:
1 Quản lý bộ nhớ đơn giản hơn: Phân trang giúp quản lý bộ nhớ dễ dàng
hơn bằng cách chia thành các trang nhỏ và quản lý chúng một cách riêng biệt
Ngược lại, việc sử dụng segment yêu cầu quản lý các đoạn lớn hơn, làm tăng độ
phức tạp của việc quản lý bộ nhớ
2 Khả năng di động trên nhiều kiến trúc: Sử dụng phân trang cho phép
Linux dễ dàng di chuyển và chạy trên nhiều kiến trúc khác nhau, bao gồm các kiến
trúc như RISC (Reduced Instruction Set Computer) Trong khi đó, việc sử dụng
segment có thể gây khó khăn trong việc di chuyển và tương thích trên các kiến trúc
khác nhau
Đáng chú ý, trong phiên bản Linux 2.6, segment chỉ được sử dụng khi cần
thiết Điều này cho thấy Linux đánh giá cao sự linh hoạt và hiệu quả của phân
trang trong quản lý bộ nhớ, và chỉ sử dụng segment khi có yêu cầu cụ thể hoặc tình
huống đặc biệt mà phân trang không thể đáp ứng
4.2 Cơ chế phân trang
4.2.1 Nhu cầu phân trang
Vì lượng bộ nhớ vật lý thường hạn chế so với bộ nhớ ảo, hệ điều hành cần
tập trung vào việc tận dụng bộ nhớ vật lý một cách hiệu quả và giảm lãng phí tài
nguyên Một trong những phương pháp quản lý bộ nhớ ảo có thực hiện được điều
này là cơ chế phân trang Cơ chế phân trang giúp tận dụng bộ nhớ vật lý một cách
hiệu quả bằng cách chỉ nạp vào bộ nhớ những trang ảo cần thiết Điều này giúp tiết
kiệt bộ nhớ vật lý và cho phép chạy cùng lúc nhiều chương trình lớn hơn mà không
gây lỗi “thiếu bộ nhớ” (out of memory) Hơn nữa, cơ chế phân trang cũng cho
phép chia sẽ trang giữa các tiến trình, giảm sự lặp lại dữ liệu và tang tốc độ thực thi
chương trình
4.2.2 Trang lưu trữ (Page Cache)
Page cache được sử dụng để lưu trữ các trang dữ liệu từ các tập tin trên hệ
thống tập tin của Linux Khi một tập tin được đọc từ đĩa hoặc ghi vào đĩa, các trang