Hệ điều hành Linux, với tính năng mạnh mẽ và linh hoạt, đã trở thành nềntảng phổ biến trong nhiều môi trường khác nhau, từ máy chủ đến thiết bị nhúng.Việc hiểu rõ và áp dụng các kỹ thuật
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO THỰC NGHIỆM MÔN HỌC: KIẾN TRÚC MÁY TÍNH VÀ HỆ ĐIỀU HÀNH
ĐỀ TÀI: NGHIÊN CỨU TÌM HIỂU VỀ QUẢN LÝ BỘ NHỚ
TRONG TRONG HỆ ĐIỀU HÀNH LINUX
Giáo viên hướng dẫn: Nguyễn Tuấn Tú
Trang 3LỜI NÓI ĐẦU
Trong bối cảnh phát triển mạnh mẽ của công nghệ thông tin và sự gia tăngkhông ngừng của các ứng dụng và dịch vụ, hệ điều hành đóng vai trò vô cùngquan trọng trong việc quản lý tài nguyên hệ thống, đặc biệt là bộ nhớ Quản lý
bộ nhớ hiệu quả là một yếu tố then chốt để đảm bảo hiệu suất và tính ổn địnhcủa hệ thống
Hệ điều hành Linux, với tính năng mạnh mẽ và linh hoạt, đã trở thành nềntảng phổ biến trong nhiều môi trường khác nhau, từ máy chủ đến thiết bị nhúng.Việc hiểu rõ và áp dụng các kỹ thuật quản lý bộ nhớ trong Linux không chỉ giúptối ưu hóa tài nguyên mà còn nâng cao hiệu suất của các ứng dụng
Mục tiêu của nghiên cứu này là tìm hiểu và phân tích các cơ chế quản lý bộnhớ trong hệ điều hành Linux, từ đó đề xuất các phương pháp cải thiện hiệu quả
sử dụng bộ nhớ
Bài tiểu luận này sẽ được chia thành bảy chương chính:
Chương 1: Tổng quan về quản lý bộ nhớ trong hệ điều hành Linux
Chương 2: Các cấu trúc chương trình.
Chương 3: Cơ chế phân đoạn, phân trang của hệ điều hành Linux.
Chương 4: Caches.
Chương 5: Cơ chế quản lý bộ nhớ ảo.
Chương 6: Cơ chế quản lý bộ nhớ vật lý, ánh xạ bộ nhớ.
Chương 7: Cấp phát và giải phóng vùng nhớ trong Linux.
Với nội dung này, chúng tôi hy vọng sẽ cung cấp cho độc giả một cái nhìntổng quan và chi tiết về quản lý bộ nhớ trong hệ điều hành Linux, đồng thời mở
ra các hướng nghiên cứu và ứng dụng thực tiễn trong việc tối ưu hóa hệ thống Nhóm 4 chân thành cảm ơn!
Trang 4Mục lục
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI 0
KHOA CÔNG NGHỆ THÔNG TIN 0
ĐỀ TÀI 0
ĐỀ TÀI 1
LỜI NÓI ĐẦU 1
Mục lục 2
CHƯƠNG 1: TỔNG QUAN VỀ QUẢN LÝ BỘ NHỚ TRONG HỆ ĐIỀU HÀNH LINUX 4
1.1.Tổng quan về hệ điều hành Linux 4
1.2 Tổng quan về quản lý bộ nhớ trong hệ điều hành Linux 5
1.3 Các khái niệm cơ bản 6
CHƯƠNG 2: CÁC CẤU TRÚC CHƯƠNG TRÌNH 7
2.1 Cấu trúc tuyến tính 7
2.2 Cấu trúc động 7
2.3 Cấu trúc overlay 8
2.4 Cấu trúc phân đoạn 8
2.5 Cấu trúc phân trang 9
CHƯƠNG 3: CƠ CHẾ PHÂN ĐOẠN, PHÂN TRANG CỦA HỆ ĐIỀU HÀNH LINUX 10
3.1 Sự phân đoạn 10
3.2 Trang lưu trữ (page cache) 10
3.3 Bảng trang (page table) 13
3.4.Định vị và giải phóng trang 13
3.4.1 Định vị trang 13
3.4.2 Giải phóng trang 14
CHƯƠNG 4: CACHES 15
4.1 Vùng bộ đệm (Buffer Cache) 15
4.2 Vùng trang nhớ (Page cache) 15
4.3 Vùng lưu trữ trung gian (Swap cache) 15
4.4.Các vùng đệm phần cứng (Hardware caches) 16
Trang 5CHƯƠNG 5: CƠ CHẾ QUẢN LÝ BỘ NHỚ ẢO 17
5.1 Khái niệm bộ nhớ ảo, không gian hoán đổi 17
5.2 Mô hình bộ nhớ ảo 17
5.3.Tạo không gian hoán đổi 19
5.4 Sử dụng không gian hoán đổi 21
5.5 Định vị không gian hoán đổi 22
CHƯƠNG 6: CƠ CHẾ QUẢN LÝ BỘ NHỚ VẬT LÝ, ÁNH XẠ BỘ NHỚ 23
6.1 Quản lý bộ nhớ vật lý 23
6.1.1 Bộ định vùng 23
6.1.2 Các vùng 24
6.2 Ánh xạ bộ nhớ 24
Chương 7: CẤP PHÁT VÀ GIẢI PHÓNG VÙNG NHỚ TRONG LINUX 26
7.1.Cấp phát vùng nhớ 26
7.1.1 Cấp phát vùng nhớ giản đơn 26
7.1.2 Cấp phát vùng nhớ lớn 27
7.1.3 Vùng nhớ được bảo vệ 28
7.1.4 Môt số hàm cấp phát vùng nhớ khác 29
7.2 Giải phóng vùng nhớ 29
7.3.Truy xuất con trỏ NULL 30
KẾT LUẬN 32
TÀI LIỆU THAM KHẢO 33
Trang 6CHƯƠNG 1: TỔNG QUAN VỀ QUẢN LÝ BỘ NHỚ TRONG
HỆ ĐIỀU HÀNH LINUX
1.1.Tổng quan về hệ điều hành Linux
Linux là một hệ điều hành họ UNIX miễn phí được sử dụng rộng rãi hiện nay.Được viết vào năm 1991 bởi Linus Torvard, hệ điều hành Linux đã thu đượcnhiều thành công Là một hệ điều hành đa nhiệm, đa người dùng, Linux có thểchạy trên nhiều nền phần cứng khác nhau Với tính năng ổn định và mềm dẻo,Linux đang dần được sử dụng nhiều trên các máy chủ cũng như các máy trạmtrong các mạng máy tính Linux còn cho phép dễ dàng thực hiện việc tích hợp
nó và các hệ điều hành khác trong một mạng máy tính như Windows, Novell,Apple Ngoài ra, với tính năng mã nguồn mở, hệ điều hành này còn cho phépkhả năng tùy biến cao, thích hợp cho các nhu cầu sử dụng cụ thể
Hình 1.1: hệ điều hành Linux
Chim cánh cụt Tux ở trên, dựa trên một hình ảnh do Larry Ewing tạo ravào năm 1996, biểu trưng và vật may mắn của Linux
- Ưu điểm của Linux:
● Không tốn nhiều chi phí mua bản quyền
Trang 7●Tính bảo mật tương đối cao
●Tính linh hoạt
●Có thể hoạt động trên các máy tính cấu hình yếu
- Nhược điểm của Linux:
●Số lượng ứng dụng được hỗ trợ trên Linux còn hạn chế
●Một số nhà sản xuất không phát triển driver hỗ trợ nền tảng Linux
Thông tin thêm:
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho cácthiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng Android được ra mắt vào năm 2007 với tuyên bố thành lập Liên minh thiết
bị cầm tay mở: một hiệp hội gồm các công ty phần cứng, phần mềm và viễn thông thông với mục tiêu đẩy mạnh các tiêu chuẩn mở cho các thiết bị di động
Và chiếc điện thoại đầu tiên của Android được bán vào tháng 10 năm 2008
Hình 1.2: Logo hệ điều hành Android
1.2 Tổng quan về quản lý bộ nhớ trong hệ điều hành Linux
Trong hệ thống máy tính, bộ nhớ là một tài nguyên khan hiếm Cho dù có baonhiêu bộ nhớ đi chăng nữa thì vẫn không đáp ứng đủ nhu cầu của người sửdụng Các máy tính cá nhân hiện nay đã trang bị ít nhất 128MB bộ nhớ Cácmáy chủ server có thể lên đến hàng gigabyte bộ nhớ Thế nhưng nhu cầu bộ nhớvẫn không được thỏa mãn
Linux có cách tiếp cận và quản lý bộ nhớ rất rõ ràng Các ứng dụng trênLinux không bao giờ được phép truy cập trực tiếp vào địa chỉ vật lý của bộ nhớ.Linux cung cấp cho các chương trình chạy dưới HĐH - còn gọi là tiến trình -một mô hình đánh địa chỉ phẳng không phân đoạn segment: offset như DOS.Mỗi tiến trình chỉ thấy được một vùng không gian địa chỉ của riêng nó Hầu nhưtất cả các phiên bản của UNIX đều cung cấp cách bảo vệ bộ nhớ theo cơ chế bảo
Trang 8hoạt động hoặc vùng nhớ của hệ thống Nói chung, bộ nhớ mà hệ thống cấp phátcho một tiến trình không thể nào đọc hoặc ghi bởi một tiến trình khác Tronghầu hết các hệ thống Linux và UNIX, con trỏ được sử dụng là một số nguyên 32bit trỏ đến một ô nhớ cụ thể Với 32 bit, hệ thống có thể đánh địa chỉ lên đến 4
GB bộ nhớ Ngoài ra, một vài hệ thống còn sử dụng mô hình địa chỉ 64 bit, nhưvậy không gian địa chỉ có thể mở rộng ra đến terabyte
Để tăng dung lượng bộ nhớ sẵn có, Linux còn cài đặt chương trình phân trangđĩa tức là một lượng không gian hoán đổi nào đó có thể phân bố trên đĩa Khi 9
hệ thống yêu cầu nhiều bộ nhớ vật lý, nó sẽ đưa các trang không hoạt động rađĩa, nhờ vậy bạn có thể chạy những ứng dụng lớn hơn và cùng cùng lúc hỗ trợnhiều người sử dụng Tuy vậy, việc hoán đổi không thay được RAM vật lý, nóchậm hơn vì cần nhiều thời gian để truy cập đĩa Kernel cũng cài đặt khối bộnhớ hợp nhất cho các chương trình người sử dụng và bộ đệm đĩa tạm thời (diskcache) Theo cách này, tất cả bộ nhớ trống dành để nhớ tạm và bộ nhớ đệm(cache) sẽ giảm xuống khi bộ xử lý chạy những chương trình lớn
1.3 Các khái niệm cơ bản
Bộ nhớ:
+ Bộ nhớ là trung tâm để điều khiển hệ thống máy tính hiện đại
+ CPU lấy các chỉ thị từ bộ nhớ dựa theo giá trị của thanh đếm chương trình
Bộ nhớ trong là thiết bị lưu trữ mà CPU có thể truy xuất một cách trực tiếp Khi tổ chức một chương trình, sau khi biên dịch chương trình được chuyểnsang ngôn ngữ máy tính, khi đó nó có các địa chỉ tương đối Để tối ưu quá trìnhhoạt động của CPU và tốc độ của máy tính thì một số tiến trình được lưu giữtrong bộ nhớ Hệ điều hành có những vai trò như sau trong việc quản lý bộ nhớchính:
+ Lưu giữ thông tin về các vị trí trong bộ nhớ đã được sử dụng và ai sử dụng.+ Quyết định tiến trình nào được nạp vào bộ nhớ chính khi bộ nhớ có thể sửdụng được
+ Cấp phát và thu hồi bộ nhớ khi cần thiết
Các yêu cầu của quản lý bộ nhớ chính:
+ Phân bổ thời gian nhớ cho các tiến hình hoạt động
+ Thu hồi không gian nhớ khi tiến trình kết thúc hay bị hủy
+ Tổ chức, quản lý được không gian nhớ tự do
Trang 9CHƯƠNG 2: CÁC CẤU TRÚC CHƯƠNG TRÌNH
Cấu trúc chương trình thể hiện cách quản lý bộ nhớ logic Mỗi chương trình
có thể có nhiều Module, các Module có thể giống hoặc khác nhau về cấu trúc
Trong cấu trúc động các Module được biên dịch một cách riêng biệt
Khi thực hiện chương trình hệ thống định vị Module gốc, trong quá trình thựchiện cần tới module nào thì hệ thống xin cấp phát không gian nhớ và nạp tiếpmodule đó Khi hoạt động xong thì giải phóng module khỏi bộ nhớ và thu hồikhông gian nhớ
- Ưu điểm: Nếu tổ chức tốt sẽ tiết kiệm bộ nhớ
- Nhược điểm: Trách nhiệm nạp và xoá các module do người sử dụng đảmnhiệm do đó phải được nêu ngay trong chương trình nguồn do đó kích thướcchương trình lớn và người sử dụng phải nắm vững cấu trúc chương trình và cáccông cụ điều khiển bộ nhớ của OS
Trang 10Chương trình sẽ bị phụ thuộc vào Version của hệ điều hành.
2.3 Cấu trúc overlay
Các Module chương trình sau khi biên dịch được chia thành các mức:
Mức 0: Là mức chứa Module gốc
Mức 1: Chứa các Module được gọi bởi mức 0
Mức 2: Chứa các Module được gọi bởi mức 1
Bộ nhớ cũng được chia thành các mức tương ứng với chương trình Kíchthước mỗi mức trong bộ nhớ bằng kích thước Module lớn nhất của mức chươngtrình tương ứng
Để biên dịch chương trình cấu trúc Overlay người ta cần cung cấp thông tin
về các mức cho trình biên dịch thông qua sơ đồ Overlay
Khi thực hiện chương trình Module gốc được định vị vào bộ nhớ như chươngtrình có cấu trúc tuyến tính Cần tới Module nào thì hệ thống sẽ tìm kiếm trong
sơ đồ Overlay và nạp vào bộ nhớ ở mức tương ứng
- Ưu điểm: Chỉ đòi hỏi người sử dụng cung cấp những thông tin đơn giản Không gắn cố định cấu trúc vào chương trình nguồn
Nếu xây dựng được sơ đồ Overlay hợp lý sẽ tiết kiệm được bộnhớ
- Nhược điểm: Vẫn yêu cầu người sử dụng cung cấp thông tin phụ
Hiệu quả phụ thuộc vào cách tổ chức bố trí các Module
2.4 Cấu trúc phân đoạn
Chương trình sau khi biên dịch, thông tin về các Module được chứa trong mộtbảng điều khiển được gọi là bảng quản lý đoạn (Segment Control Block - SCB).Trong bảng SCB còn chứa các thông tin trợ giúp việc định vị các Module trong
Trang 11Ưu điểm: Không yêu cầu người sử dụng khai báo thêm thông tin.Khi dunglượng bộ nhớ tăng thì tốc độ thực hiện chương trình cũng tăng.
Nhược điểm: Hiệu quả sử dụng bộ nhớ phụ thuộc vào cách phân chia chươngtrình thành các Module độc lập
Chương trình chỉ áp dụng được khi bộ nhớ được quản lý theo kiểu phân đoạn
2.5 Cấu trúc phân trang
Chương trình được biên dịch như cấu trúc tuyến tính sau đó được phân chiathành các phần bằng nhau gọi là trang
Thông tin của các trang được chứa trong một bảng điều khiển được gọi làbảng quản lý trang (Page Control Block - PCB)
Mỗi phần tử trong PCB ứng với một trang trong chương trình của USER
Khi thực hiện dựa vào PCB hệ thống sẽ đưa trang cần thiết vào bộ nhớ
Ưu điểm: Phát huy được hiệu quả sử dụng bộ nhớ
Nhược điểm: Chí áp dụng đối với bộ nhớ được quản lý theo kiểu phân trang
Trang 12CHƯƠNG 3: CƠ CHẾ PHÂN ĐOẠN, PHÂN TRANG CỦA HỆ
ĐIỀU HÀNH LINUX.
3.1 Sự 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 chovùng 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 0xBFFFFFFF) của không gian địa chỉ tiến trình 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 Haiphân đoạn liên quan đến GB thứ 4 (từ 0xC000 0000 đến 0xFFFF FFFF) củakhông gian địa chỉ tiến trình và các nội dung của nó có thể được đọc và chỉnhsửa duy nhất trong chế độ Kernel
Hình 2.1 Cơ chế phân đoạn tách vùng nhớ đã cấp phát cho hạt nhân và tiến
trình.
3.2 Trang lưu trữ (page cache)
Cache là tầng nằm giữa phần quản lý bộ nhớ kernel và phần vào ra củađĩa.Các trang mà kernel hoán đổi không được ghi trực tiếp lên đĩa mà được ghivào cache Khi cần vùng nhớ trống thì kernel mới ghi các trang từ cache ra đĩa
*Vòng đời của một User Page
- Trang P được đọc từ đĩa vào bộ nhớ và được lưu vào page cache Có thểxảy
ra một trong các trường hợp sau:
+Tiến trình A muốn truy cập vào trang P Nó sẽ được trình quản lý lỗi trangkiểm tra xem có tương ứng với file đã được ánh xạ không Sau đó nó được lưu
Trang 13vào page cache và bảng trang tiến trình Từ đây vòng đời của trang bắt đầu trênactive _list, nơi mà nó vẫn được lưu giữ kể cả khi đang được sử dụng.
+Hoặc: Trang P được đọc trong suốt quá trình hoạt động của đâu đọc hoán đổi,
và được lưu vào page cache Trong trường hợp này, lý do mà trang được đọcđơn giản chi vì nó là một phần của cluster trong các khối trên đĩa Một loạt cáctrang liên tiếp nhau trên đĩa sẽ được đọc mà không cần biết các trang này có cầnhay không Chúng ta cũng không cần quan tâm đến việc thông báo cho các trangnày nếu chúng mất đi khi không dùng, vì chúng có thể phục hồi ngay lập tức cho
dù không còn được tham chiếu đến nữa
+Hoặc: Trang P được đọc trong suốt quá trình hoạt động của đầu đọc cluster ánh
xạ bộ nhớ Trong trường hợp này, một chuỗi các trang liền nhau tiếp sau tranglỗi trong file ánh xạ bộ nhớ được đọc Những trang này bắt đầu vòng đời củachúng trong page cache kết hợp với file ánh xạ bộ nhớ và trong active_list
- Trang P được ghi bời tiên trình, do đó có chứa dữ liệu ( dirty ) Lúc này trang
P vẫn ở trên active_list
- Trang P không được sử dụng trong một thời gian Sự kích hoạt định kì của
hàm kswapd0 (kernel swap daemon) sẽ giảm dần biến đếm page->age.Hàmkswapd() sẽ hoạt động nhiều hơn khi nhu cầu về bộ nhớ tăng Thời gian tồn tạicủa trang P sẽ giảm dần xuống 0 (age =0) nếu nó không còn được tham chiếu,dẫn đến sự kích hoạt của hàm re fill inactive()
- Nếu bộ nhớ đã đầy, hàm swap _out sẽ được gọi bởi hàm kswapd() để cố
gắng lấy lại các trang từ không gian địa chỉ ảo của tiến trình A Vì trang P khôngcòn được tham chiếu và có age = 0, nên các mục trong băng trang sẽ bị xóa Tấtnhiên, trong thời gian này sẽ không có tiến trình nào ánh xạ đến.Hàm swap _outthực ra không đưa trang P ra ngoài mà đơn giản là chỉ loại bỏ sự tham chiếu củatiến trình đến trang Nhờ vào page cache và cơ chế swap mà trang sẽ bảo đảmđược ghi lên đĩa khi cần
- Thời gian xử lý ít hay nhiều là tùy thuộc vào nhu cầu sử dụng bộ nhớ
- Tiếp theo, hàm refill inactive scan0 tìm các trang mà có thể đưa đến
inactive_dirtylist Từ khi trang P không được ánh xạ bởi một tiến trình nào và cóage = O thì nó được đưa từ active _list đến inactive_dirty list
- Tiến trình A truy cập vào trang P, nhưng nó hiện không có trong bộ nhớ ảotiến trình các mục trong bảng trang đã bị xóa bởi hàm swap_out() Trình điềukhiển lỗi gọi hàm find_page _nolock() để xác định vị trí trang P trong pagecache Sau khi tìm thầy, các mục trong bảng trang sẽ được phục hồi ngay lập tức
và trang P được đưa đến active_list
Trang 14- Quá trình này mất nhiều thời gian do hàm swap_out() xóa các mục trongbảng trang của tiền trình A, hàm refill inactive scan0 vô hiệu hóa trang P, đưa nóđến inactive _dirty list Việc tốn nhiều thời gian sẽ làm bộ nhớ trở nên chậm
- Hàm page- launder() được kích hoạt để làm sạch các trang dirty Nó tìmtrang
P trong inactive _dirty_list và ghi trang P ra đĩa Sau đó, trang được đưa đếninactive _clean _list Khi hàm page_ launder() thực sự quyết định ghi lên trangthì sẽ thực hiện các bước sau :
+ Khóa trang
+ Gọi phương thức writepage Lời gọi này kích hoạt một vài đoạn mã đặc biệt
để thực hiện ghi lên đĩa ( không đồng bộ) với trang đã bị khóa Lúc này, hàmpage_ launder đã hoàn thành nhiệm vụ, trang vẫn ở trong inactive_dirty_list và
sẽ được mở khóa cho đến khi việc ghi hoàn tất
+ Hàm page launder() được gọi lại để tìm trang clean để đưa nó đếninactive_clean_list, giả sử trong thời gian này không có tiên trình nào thamchiếu đến nó trong page cache
- Hàm page _ launder() thực hiện lại để tìm các trang không sử dụng và clean,đưa chúng đến inactive _clean_list
- Giả sử cần một trang trống riêng lẻ Điều này có thể thực hiện bằng cách lây
lại một trang inactive _clean, trạng P sẽ được chọn Hàm reclaim page() loại bỏtrang P ra khỏi page cacht ( điều này bảo đảm rắng không có tiến trình nào kháctham chiếu đến nó trong quá trình quản lý lỗi trang ), và nó được đưa cho lời gọinhư là một trang trống
Hoặc :
Hàm kreclaimd() cố gắng tạo bộ nhớ trồng Nó giành lại trang P và xóa nó.Đây chỉ là một chuỗi các sự kiện hợp lý : một trang có thể sống trong pagecache trong một thời gian dài, rồi chết đi, rồi lại được phục hồi trở lại, Trang
có thể được phục hồi từ inactive_clean, active lists hay inactive_dirty list Trangchỉ đọc là những trang không phải dirty, vì vậy hàm page launder() có thể đưachúng từ inactive_dirty_list đến inactive_clean _list để làm trống nó
Các trang trong inactive_clean list được kiểm tra định kì nhằm tạo ra các khốinhớ trống lớn liên tiếp nhau để đáp ứng khi có yêu cầu Tôm lại, trangP thựcchất chi là một trang logic, do đó nó được thể hiện bằng một vài trang vật lý cụthể
Trang 153.3 Bảng trang (page table)
Hình 2.2 3 Mức bảng trang
Linux giả sử rằng có 3 mức bảng trang Mỗi bảng trang chứa số khung trangcủa bảng trang ở mức tiếp theo Mỗi trường cung cấp một địa chỉ offset đến mộtbảng trang cụ thể Để chuyển địa chỉ ảo thành địa chỉ vật lý, bộ xử lý phải lấynội dung của các trường rồi chuyển thành địa chỉ offset đến trang vật lý chứabảng trang và đọc số khung trang của bảng trang ở mức tiếp theo Việc này lặplại 3 lần cho đến khi số khung trang của trang vật lý chứa địa chỉ ảo được tìm ra.Trường cuối cùng trong địa chỉ ảo được sử dụng để tìm dữ liệu trong trang Mỗinền mà Linux chạy trên đó phải cung cấp sự chuyển đổi các macro cho phépkernel có thể hiểu được các bảng trang tương ứng trên nền đó Do đó, kernelkhông cần biết định dạng của các mục trong bảng trang cũng như cách sắp xếpcủa nó Điều này giúp cho Linux thành công trong việc sử dụng cùng một đoạn
mã để xử lý các bảng trang đối với bộ xử lý Alpha (có 3 mức bảng trang) và đốivới bộ xử lý Intel x86 (có 2 mức bảng trang)
3.4.Định vị và giải phóng trang
3.4.1 Định vị trang
Linux sử dụng thuật toán Buddy để định vị và giải phóng một cách hiệu quảcác khối của trang Đoạn mã định vị trang xác định một khối của một hay nhiềutrang vật lý Những trang được định vị trong khối có kích thước là lũy thừa của
2 Điều đó có nghĩa là nó có thể định vị một khối gồm 1 trang, 2 trang, 4 trangtrang, Khi có đủ số trang trống trong hệ thống để cấp cho một yêu cầu, đoạn
mã định vị sẽ tìm trong free_area một khối các trang có kích thước như yêu cầu.Mỗi phần tử của free_area ánh xạ đến các khối trang trống có kích thước tươngứng
Trang 16Ví dụ: phần tử thứ 2 của mảng ánh xạ đến các khối gồm 4 trang trống đã đượcđịnh vị.
3.4.2 Giải phóng trang
Việc định vị các khối trang làm cho bộ nhớ bị phân mảnh do các khối tranglớn bị chia nhỏ Đoạn mã giải phóng trang kết hợp các trang lại thành một khốilớn các trang trống bất cứ khi nào có thể Khi có một khối trang trống thì cáckhối lân cận có cùng kích thước được kiểm tra xem có trống không Nếu có thìchúng được kết hợp với nhau để tạo ra một khối trang có kích thước gấp đôi.Đoạn mã giải phóng trang lại tìm cách kết hợp khối mới này với một khối khác.Theo cách này, khối các trang trống sẽ lớn dần
Trang 17CHƯƠNG 4: CACHES
Các phương pháp quản lý bộ nhớ trên tuy vậy lại 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ó khan khi muốnnâ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ệcvận hành hệ thống nhanh hơn Bộ nhớ cache được đặt giữa CPU và bộ nhớchính, nó đóng vai trò làm bộ đệm có tốc độ truy nhập cao Bộ nhớ cache códung lượng nhỏ hơn bố nhớ chính rất nhiều lần, song nó có tốc độ truy nhập caohơn rất nhiều Trong hệ điều hành Linux sử dụng một số loại vùng nhớ đệmcache sau:
và đọc dữ liệu nhanh hơn rất nhiều
VD: Đọc dữ liệu từ đĩa cứng: Khi ứng dụng cần đọc dữ liễu từ đĩa cứng, hệ điềuhành sẽ sử dụng Vùng bộ đệm để lưu trữ các khối dữ liệu được đọc gần đây từđĩa
4.2 Vùng trang nhớ (Page cache)
Vùng trang nhớ đượ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 trangtạ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
VD: Nếu trang dữ liệu không tồn tại trong Vùng trang nhớ, hệ điều hành sẽ thựchiện thao tác đọc từ đĩa cứng và lưu trữ nó trong Vùng trang nhớ