SlideShare a Scribd company logo
1 of 25
1
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
*****  *****
BÁO CÁO BÀI TẬP LỚN:
Hệ điều hành
ĐỀ TÀI: TÌM HIỂU LINUX PAGE CACHE
Giảng viên hướng dẫn:PGS.TS Hàn Huy Dũng
Sinh viên thực hiện:
Nguyễn Văn Bình- 20182382
Lê Trần Huy- 20182581
Phạm Trọng Huy Hoàng- 20182546
2
Lời nói đầu
Linux là tên gọi của một hệ điều hành máy tính mã nguồn mở và cũng là tên hạt nhân của
hệ điều hành. Phiên bản linux đầu tiên do linus torvalds viết vào năm 1991, lúc ông còn
là một sinh viên đại học Helsinki tại Phần Lan. Ông làm việc một cách hăng say trong
vòng 3 năm liên tục và cho ra đời phiên bản Linux 1.0 vảo năm 1994. Bộ phận chủ yếu
này được phát triển và tung ra trên thị trường dưới bản quyền GNU General Public
License. Do đó mà bất cứ ai cũng có thể tải và xem mã nguồn của Linux. Vài năm qua,
Linux đã thực sự tạo ra một cuộc cách mạng trong lĩnh vực máy tính. Sự phát triển và
những gì chúng mang lại cho máy tính thật đáng kinh ngạc: một hệ điều hành đa nhiệm,
đa người dùng. Linux có thể chạy trên nhiều bộ vi xử lý khác nhau như: Intel, Motorola,
MC68K, Dec Alpha. Nó tương tác tốt với các hệ điều hành:Apple, Mcrosoft và Novell.
Không phải ngẫu nhiên mà ngành công nghê thông tin Việt Nam trong Linux làm hệ điều
hành nền cho các chương trình ứng dụng chủ đạo về kinh tế và quốc phòng. Với mã
nguồn mở, sử dụng Linux an toàn hơn các ứng dụng Windows. Linux đem đến cho chúng
ta lợi ích về kinh tế với rất nhiều phần mềm miễn phí. Mã nguồn mở của hệ điều hành và
cac chương trình trên Linux là tài liệu vô giá để chúng ta học hỏi về kỹ thuật lập trình
vốn là những tài liệu không được công bố đối với các ứng dụng Windows. Trong đồ án
này, chúng ta sẽ tìm hiểu một phần rất quan trọng trong hệ điều hành Linux đó là: quản
lý bộ nhớ trong Linux. Một hệ điều hành muốn chạy ổn định thì phải có một cơ chế quản
lý bộ nhớ hiệu quả. Cơ chế này sẽ được trình bày một cách chi tiết trong đồ án và có kèm
theo các chương trình minh họa. Trong quá trình tìm bài tuy có nhiều cố gắng nhưng
không thể tránh được những sai sót, nhóm em hy vọng nhận được những nhận xét của
thầy để đề tài được hoàn thành tốt
3
Mục lục
Lời nói đầu……………………………………………………………………..2
Chương 1. Tại sao cần bộ nhớ ảo.......................................................................4
Chương 2. Nguyên lý hoạt động của bộ nhớ ảo……………………………….7
Chương 3. Tìmhiểu các giải thuật thay thế trang……………………………10
3.1.FIFO……………………………………………………………….10
3.2.OPT………………………………………………………………..11
3.3.LRU………………………………………………………………..12
3.4.So sánh các giải thuật thay thế trang………………………………12
Chương 4. Memory Mapping………………………………………………..15
4.1. Private mapping…………………………………………………..15
4.2. Anonymous mapping……………………………………………..15
Chương 5. Page Cache……………………………………………………….16
5.1.Định nghĩa…………………………………………………………16
5.2. Bộ đệm trang giải quyết những vấn đề gì…………………………16
5.3. Cơ chế hoạt động………………………………………………….17
5.4. Kiểm tra và điều khiển bộ nhớ cached trên Linux với vmtouch….19
Tài liệu tham khảo……………………………………………………………24
4
Chương 1. Tại sao cần bộ nhớ ảo
Khi mà chưa có sự tồn tại của bộ nhớ ảo, toàn bộ hệ thống Linux sẽ dùng
chung một không gian địa chỉ, được mapping thẳng vào bộ nhớ vật lý RAM,
vào các thiết bị ngoài như VGA, PCI… Chúng ta gọi hệ thống đó là hệ
thống single address space – Hệ thống không gian địa chỉ chung.
Những vấn đề gặp phải với hệ thống sử dụng bộ nhớ chung:
Vấn đề 1: Hệ thống có bộ nhớ vật lý ít hơn không gian địa chỉ của nó
Vấn đề 2: Phân mảnh bộ nhớ chung
Vấn đề 3: Vấn đề nhiều chương trình trong hệ thống sử dụng chung bộ nhớ
Vấn đề 4: Toàn bộ hệ thống có thể bị crash vì chỉ một chương trình chạy sai
Vấn đề 1: Hệ thống có bộ nhớ vật lý ít hơn không gian địa chỉ của nó
Điều gì sẽ xảy ra khi hệ thống MIPS 32 bit có không gian địa chỉ 4GB, nhưng
bộ nhớ vậy lý thực tế chỉ có 1GB (30 bit)?
Có hai trường hợp xảy ra, người lập trình cần phải biết hệ thống chỉ có 1GB
bộ nhớ, và sẽ viết chương trình mà không truy cập tới các địa chỉ nằm ngoài
vùng 1GB. Trường hợp còn lại, người lập trình không có thông tin, chương
trình có thể truy cập vào vùng nhớ ngoài 1GB, và hệ thống bị crash.
Đứng trên góc độ phát triển phần mềm, rất khó để chương trình biết được hệ
thống đang thực sự có bao nhiêu GB bộ nhớ vật lý. Đặc biệt ngày nay, với
việc phần mềm được phát triển độc lập và gần như không phụ thuộc vào phần
cứng (game, ứng dụng…), hệ thống có bộ nhớ sử dụng chung sẽ không đáp
ứng được.
5
Vấn đề 2: Phân mảnh bộ nhớ chung
Thứ tự các chương trình khi chạy trong hệ thống
1. Chương trình A chạy, chiếm 1GB bộ nhớ, hệ thống còn 3GB bộ nhớ trống.
2. Chương trình B chạy, chiếm 2GB bộ nhớ, hệ thống còn 1GB bộ nhớ trống.
3. Chương trình A kết thúc, giải phóng 1GB bộ nhớ. Hệ thống còn 2GB bộ nhớ
trống, còn đủ cho chương trình C chạy.
4. Chương trình C muốn chạy, hệ thống cònđủ 2GB bộ nhớ trống, nhưng bộ nhớ
bịphân mảnh, do đó C không thể tìm ra đủ 2GB bộ nhớ liền mạch => C không
thể chạy.
Như vậy, việc phân mảnh bộ nhớ trong trong quátrình chương trình chạy cũng
là một vấn đề đối với hệ thống dùng chung không gian địa chỉ.
Vấn đề 3: Vấn đề nhiều chương trình trong hệ thống sử dụng chung bộ nhớ
Trong một hệ thống sử dụng chung bộ nhớ, tất cả các chương trình đều có thể
truy cập tới mọi địa chỉ trong không gian bộ nhớ, dẫn đến việc hệ thống sẽ
không có cơ chế bảo vệ việc truy cập những phần không gian bộ nhớ sử dụng
chung giữa các chương trình.
Việc sử dụng bộ nhớ chung giữa các chương trình có thể giải thích dễ hiểu
hơn bằng ví dụ sau:
Chúng ta có chương trình A và chương trình B cùng chạy đồng thời trong hệ
thống. A thực hiện ghi giá trị 10 vào ô nhớ có địa chỉ 1024, sau đó B cũng
thực hiện việc ghi giá trị 11 vào ô nhớ có địa chỉ 1024.
6
Kết thúc quá trình trên, chương trình B đã thay đổi giá trị bộ nhớ tại địa chỉ
1024, điều này ảnh hưởng trực tiếp thay đổi quá trình thực thi của chương
trình A. Trong một hệ thống thực tế, chương trình A có thể bị chạy sai do bộ
nhớ bị corrupted hoặc thậm chí là crash.
Vấn đề 4: Toàn bộ hệ thống có thể bị crash vì chỉ một chương trình chạy sai
Như chúng ta thấy trong các hệ thống ngày nay, một chương trình ứng dụng
chạy bị lỗi, crash, toàn bộ hệ thống vẫn có thể tiếp tục chạy một cách bình
thường. Tuy nhiên, với hệ thống bộ nhớ sử dụng chung, chương trình ứng
dụng khi chạy (ví dụ game) cũng có thể truy cập vào vùng nhớ củacác chương
trình hệ thống (ví dụ phần vùng nhớ của hệ điều hành – kernel), điều này dẫn
tới việc nếu chương trình ứng dụng đó thực thi lỗi, nó có thể gây crash cho cả
hệ thống.
Cả bốn vấn đề trên đòi hỏi cần có một phương thức quản lý bộ nhớ khác, để
đảm bảo các chương trình chạy trong hệ thống có thể hoạt độnghiệu quả, đảm
bảo tính an toàn dữ liệu (tránh việc truy cập bộ nhớ lẫn nhau của các chương
trình), đảm bảo tính an toàn của hệ thống (đảm bảo các chương trình hệ thống
– kernel không bị can thiệp bởi các chương trình ở tần user space).
7
Chương 2.Nguyên lý hoạt động của bộ nhớ ảo
Bộ nhớ ảo – virtual memory tồn tại như một lớp trung gian giữa chương trình
(CPU) và bộ nhớ vật lý của hệ thống. Thay vì truy cập địa chỉ vật lý, chương trình
truy cập bộ nhớ ảo, từ bộ nhớ ảo, sẽ có cơ chế để mappingsang bộ nhớ vật lý.
Việc chuyển đổi – mapping địa chỉ ảo sang địa chỉ vật lý có tác dụng là việc
chương trình không cần quan tâm có bao nhiêu bộ nhớ vật lý trong hệ thống, cũng
như không quan tâm nó cần phải truy cập chính xác vào địa chỉ vậy lý nào.
Chương trình khi chạy được quyền truy cập vào tất cả các địa chỉ trong không gian
bộ nhớ ảo (4G không gian địa chỉ với hệ thống 32 bit), việc chuyển đổi sang địa
chỉ vật lý sao cho đúng được thực hiện bởi lớp MAPPING.
Ngoài ra, như đã đề cập ở phần trước, bộ nhớ ảo giải quyết hầu hết các vấn đề gặp
phải với hệ thống không gian bộ nhớ chung.
Quay lại vấn đề, hệ thống 32bit không gian địa chỉ 4G, nhưng chỉ có 1G bộ nhớ vật
lý (RAM), chương trình sẽ bị crash nếu truy cập địa chỉ ngoài vùng địa chỉ vật lý.
Bộ nhớ ảo và lớp MAPPING xử lý vấn đề này bằng cách, thay vì mapping vào bộ
nhớ vật lý RAM, chúng ta có thể mapping vào ổ đĩadisk, hoặc bất kì thiết bị lưu
trữ nào khác. Cơ chế này còngọi là cơ chế swap bộ nhớ mà chúng ta có thể nghe
nói tới trước đây, việc máy tính sử dụng ổ cứng khi bộ nhớ RAM đã hết.
Trong hình 2, lớp MAPPING khi đã map hết 1G bộ nhớ vật lý, sẽ thực hiện map
các địa chỉ cònlại trong không gian địa chỉ ảo 4G sang ổ đĩa ngoài (ở đây là map
địa chỉ 5 và 6 sang địa chỉ của ổ đĩa)=> chương trình sẽ không bị crash nếu nó cần
dùng nhiều hơn 1G bộ nhớ vật lý. Tất nhiên, việc sử dụng ổ đĩa disk thay vì RAM
8
sẽ khiến hiệu năng chương trình giảm đi, do việc đọc/ghi ổ đĩabao giờ cũng chậm
hơn rất nhiều việc đọc/ghitrên RAM.
Trở lại với ví dụ, chúng ta có 3 chương trình cần chạy: chương trình A cần 1GB,
chương trình B cần 2GB, chương trình C cần 2GB.
Chương trình A và B cùng chạy, chiếm 3G bộ nhớ. Sau đó A thoát ra, hệ thống có
2G bộ nhớ trống, nhưng bị phân mảnh. Chương trình C khi đó không thể chạy dù
hệ thống có đủ bộ nhớ cho C.
Hệ thống bộ nhớ ảo cũng giải quyết được vấn đề đó. Mỗi một chương trình khi
chạy sẽ có một bộ mapping riêng và không gian địa chỉ ảo riêng. Đứng trên góc
nhìn của chương trình, nó chỉ quan tâm đến địa chỉ ảo, nên bộ nhớ của nó là luôn
liền mạch. Việc mapping giữa không gian địa chỉ ảo của từng chương trình vào bộ
nhớ vật lý sẽ được thực điện độc lâp, và invisible– không nhìn thấy được đối với
chương trình.
Vấn đề nhiều chương trình trong hệ thống sử dụng chung bộ nhớ xảy ra khi hai
chương trình cùng truy cập vào một địa chỉ vật lý giống nhau, do hai chương trình
hoạt động độc lập, chúng có thể truy cập vào bất kì địa chỉ nào chúng muốn.
Vấn đề này cũng được giải quyết dễ dàng bằng việc sử dụng bộ nhớ ảo:
Trong hệ thống bộ nhớ ảo, mỗi chương trình có không gian địa chỉ và bộ mapping
riêng biệt, có nghĩa là, đứng trên góc độ chương trình, nó “nhìn”toàn bộ bộ nhớ là
của nó – vì thực tế nó sử dụng địa chỉ ảo, không phải địa chỉ vật lý.
Ví dụ: hai chương trình cùng truy cập vào địa chỉ 1024. A ghi giá trị 10 vào địa chỉ
1024, B ghi giá trị 11 cũng vào địa chỉ 1024. Tuy nhiên crash không xảy ra, do
9
MAPPING đã map 1024 của A vào địa chỉ 2048 vật lý, map 1024 của B vào địa
chỉ vật lý 3072
Vấn đề này cũng được khắc phục với hệ thống bộ nhớ ảo. Các chương trình có
không gian địa chỉ và mapping khác nhau, nên về cơ bản, các chương trình sẽ có
không gian địa chỉ vật lý khác nhau. Việc một chương trình chạy sai không ảnh
hưởng tới toàn bộ hệ thống.
Ngoài việc cung cấp không gian địa chỉ riêng biệt cho các chương trình, hệ thống
bộ nhớ ảo còncó thể hỗ trợ cơ chế “shared memory” – bộ nhớ sử dụng chung giữa
các chương trình
Cơ chế shared memoryđược bộ nhớ ảo thực hiện rất đơn giản: mapping địa chỉ
của các chương trình khác nhau vào chung một địa chỉ vật lý.
Bộ MAPPING sẽ thực hiện việc map hai địa chỉ của hai chương trình A, B vào
chung một địa chỉ vật lý, ở đây là 1024-A và 2048-B vào địa chỉ vật lý 3072.
10
Chương 3
Trong hệ điều hành sử dụng phân trang để quản lý bộ nhớ, cần có một thuật
toán thay thế trang để quyết định trang nào cần được thay thế khi có trang mới.
Page Fault - Lỗi trang xảy ra khi chương trình đang chạy truy cập trang bộ nhớ
được ánh xạ vào không gian địa chỉ ảo, nhưng không được tải trong bộ nhớ vật
lý.
Vì bộ nhớ vật lý thực tế nhỏ hơn nhiều so với bộ nhớ ảo, lỗi trang xảy ra. Trong
trường hợp lỗi trang, Hệ điều hành có thể phải thay thế một trong các trang hiện
có bằng trang mới cần thiết. Các thuật toán thay thế trang khác nhau đề xuất các
cách khác nhau để quyết định trang nào sẽ thay thế. Mục tiêu của tất cả các
thuật toán là giảm số lượng lỗi trang.
3.1 FIFO
Cần biết được: Số khung trang, tình trạng ban đầu, chuỗi tham chiếu.
Hướng tiếp cận: Ghi nhận thời điểm một trang được mang vào bộ nhớ chính.
Khi cần thay thế trang, trang ở trong bộ nhớ lâu nhất sẽ được chọn.
Ví dụ: Sử dụng 3 khung trang, ban đầu cả 3 đều trống, chuỗi tham chiếu:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
Ta có được bảng sau với * là các lỗi trang(page fault).
11
Nhận xét:
 Mặc dù FIFO đơn giản và dễ dàng, nhưng nó không phải lúc nào cũng tối ưu,
hoặc thậm chí không hiệu quả.
 Một hiệu ứng thú vị có thể xảy ra với FIFO là nghichlýBelady, trongđó tăng
số lượng khung hình có sẵn thực sựcó thể làm tăngsố lượng lỗi trang xảy ra!
Ví dụ, hãy xem xét biểu đồ sau đây dựa trên chuỗi trang (1, 2, 3, 4, 1, 2, 5, 1,
2, 3, 4, 5) :
3.2.OPT
Thay thế trang nhớ được tham chiếu trễ nhất trong tương lai.
12
Ví dụ: cho chuỗi : 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 với 3 khung trang, ban
đầu đều trống.
3.3.LRU
Thay thế trang nhớ được tham chiếu trễ nhất trong quá khứ.
Ví dụ: cho chuỗi : 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
3.4 So sánh các giải thuật thay thế trang
13
Giải thuật FIFO OPT LRU
Ưu điểm Nó đơn giản và dễ
hiểu và dễ thực hiện.
Sự phức tạp
ít hơn và dễ
thực hiện.
Cấu trúc dữ
liệu được sử
dụng là dễ
dàng và nhẹ
Thay thế trang ít
được sử dụng gần
đây nhất, do đó
không có Anomaly
của Belady.
Dễ dàng chọn trang
bị lỗi và đã không
được sử dụng trong
một thời gian dài.
Nhược điểm Hiệu quả của quy
trình thấp.
Khi chúng ta tăng số
lượng khung hình
trong khi sử dụng
FIFO, chúng ta đang
cung cấp nhiều bộ
nhớ hơn cho các quy
trình. Vì vậy, lỗi
trang sẽ giảm, nhưng
ở đây các lỗi trang
đang tăng lên. Vấn đề
OPT là
hoàn hảo,
nhưng
không thể
trong
thực tế vì
hệ điều
hành
không thể
biết các
yêu cầu
Nó đòi hỏi cấu
trúc dữ liệu bổ
sung phải được
thực hiện và hỗ
trợ phần cứng
rất cao.
14
này được gọi là
nghịch lý Belady.
trong
tương lai.
Xử lý lỗi
rất khó
khăn
15
Chương 4.Memory mapping
4.1.Private mapping: Sự thay đổinội dung của vùng nhớ mapping không được
nhìn thấy bởi tiến trình khác. Nếu là file mapping, nội dung của file cũng
sẽ không thay đổi. Kernel làm được việc này bằng kỹ thuật copy-on-write.
Nghĩa là trước khi thay đổi thì 2 tiến trình chia sẻ vùng nhớ mapping, nhưng
nếu 1 tiến trình thay đổi nội dung vùng nhớ đó, kernel trước hết sẽ tạo ra 1 bản
copycủa các trang thay đổiđó trên vùng nhớ riêng biệt của bộ nhớ ảo. Vì vậy,
kỹ thuật mapping với quyền private còn được gọi là copy-on-write mapping.
4.2 Anonymous mapping: Kỹ thuật này tạo ra vùng nhớ ánh xạ không map với
1 file cụ thể nào. Vì vậy, nội dung của vùng nhớ sau đó sẽ không được tải vào
từ file nào mà sẽ được khởi tạo giá trị 0.
Vùng nhớ ánh xạ của tiến trình này có thể được chia sẻ với vùng nhớ ánh xạ
của tiến trình khác (cùng trỏ đến các vùng nhớ giống nhau trên RAM). Khi 2
hoặc nhiều tiến trình cùng chia sẻ vùng nhớ ánh xạ, tiến trình này có thể nhìn
thấy sự thay đổicủa vùng nhớ khi tiến trình khác thay đổihay không phụ thuộc
vào việc chế độ mapping là private hay shared.
16
Chương 5.Page Cache
5.1.Định nghĩa:
Page Cache(Bộ đệm trang )là bộ đệm đĩa chính được sử dụng bởi nhân
Linux. Trong hầu hết các trường hợp, hạt nhân đề cập đến bộ đệm trang khi
đọc từ hoặc ghi vào đĩa. Các trang mới được thêm vào bộ đệm trang để đáp
ứng các yêu cầu đọc của quy trình Chế độ người dùng. Nếu trang chưa có
trong bộ đệm, một mục mới sẽ được thêm vào bộ đệm và chứa đầy dữ liệu
đọc từ đĩa. Nếu có đủ bộ nhớ trống, trang được lưu trong bộ nhớ cache trong
một khoảng thời gian không xác định và sau đó có thể được sử dụng lại bởi
các quy trình khác mà không cần truy cập đĩa.
Tương tự, trước khi ghi một trang dữ liệu vào thiết bị khối, hạt nhân sẽ xác
minh xem trang tương ứng đã được đưa vào bộ đệm chưa; nếu không, một
mục mới sẽ được thêm vào bộ đệm và chứa đầy dữ liệu sẽ được ghi trên
đĩa. Quá trình truyền dữ liệu I / O không bắt đầu ngay lập tức: quá trình cập
nhật đĩa bị trì hoãn trong vài giây, do đó tạo cơ hội cho các tiến trình sửa đổi
thêm dữ liệu được ghi (nói cách khác, hạt nhân thực hiện các hoạt động ghi
hoãn lại).
5.2. Bộ đệm trang giải quyết những vấn đề gì
Bộ nhớ cache trên đĩalà một cơ chế phần mềm cho phép hệ thống giữ trong RAM
một số dữ liệu thường được lưu trữ trên đĩa, để có thể nhanh chóng thỏa mãn truy
cập nhanh hơn vào dữ liệu đó mà không cần truy cập vào đĩa.
Bộ nhớ đệm trên đĩa rất quan trọng đối với hiệu suất hệ thống, bởi vì việc truy cập
lặp lại vào cùng một dữ liệu đĩalà phổ biến. Quy trình chế độ người dùng tương
tác với đĩađược quyền yêu cầu đọc hoặc ghi dữ liệu đĩagiống nhau nhiều lần.
Hơn nữa, các quy trình khác nhau cũng có thể cần xử lý cùng một dữ liệu đĩatại
các thời điểm khác nhau. Ví dụ: bạn có thể sử dụng lệnh cp để sao chép tệp văn
bản, sau đó gọi trình soạn thảo ưa thích của bạn để sửa đổi tệp đó.
17
Tóm lại mục đíchchính là cải thiện độ trễ IO của các hoạt động đọc và ghi
5.3.Cơ chế hoạt động
Đọc yêu cầu
(1)Khi một ứng dụng không gian người dùng muốn đọc dữ liệu từ đĩa, nó sẽ
yêu cầu hạt nhân cung cấp dữ liệu bằng cách sử dụng các lệnh gọi hệ
thống đặc biệt như read(),pread(),mmap()…
(2)Hạt nhân Linux sẽ kiểm tra xem các trang có trong Page Cache hay không
và ngay lập tức trả chúng về trình gọi nếu có. Như bạn có thể thấy kernel đã
thực hiện hoạt động 0 đĩa trong trường hợp này.
(3)Nhưng nếu không có trang nào như vậy trong Page Cache, kernel cần tải
chúng từ đĩa. Để làm được điều đó, nó phải tìm một vị trí trong Bộ đệm
trang cho các trang được yêu cầu. Nếu không có bộ nhớ trống (trong cgroup
hoặc hệ thống của người gọi), quá trình lấy lại bộ nhớ phải được thực
18
hiện. Sau đó, hạt nhân lên lịch cho hoạt động IO của đĩa đọc, lưu trữ các
trang đíchtrong bộ nhớ và cuối cùng trả về dữ liệu được yêu cầu từ Bộ đệm
trang cho tiến trình đích. Bắt đầu từ thời điểm này, bất kỳ yêu cầu nào trong
tương lai để đọc phần này của tệp (bất kể từ quy trình hoặc nhóm nào) sẽ
được xử lý bởi Bộ đệm trang mà không có bất kỳ IOP đĩanào cho đến khi
các trang này chưa bị loại bỏ.
Viết yêu cầu
(I) Khi một chương trình không gian người dùng muốn ghi một số dữ
liệu vào đĩa, nó cũng sử dụng một loạt các cuộc gọi tổng hợp, ví dụ :
write(),pwrite(),writev()…Một sự khác biệt lớn so với việc đọc là ghi
thường nhanh hơn, vì các hoạt động IO trên đĩathực không được thực
hiện ngay lập tức. Tuy nhiên, điều này chỉ đúng nếu hệ thống hoặc
một nhóm không có vấn đề về áp suất bộ nhớ và có đủ trang miễn phí
(chúng ta sẽ nói về quá trình loại bỏ sau). Vì vậy, kernel thường chỉ
cập nhật các trang trong Page Cache. Điều này làm cho đường ống ghi
về bản chất là không đồng bộ. Người gọi không biết khi nào trang
thực sự xảy ra, nhưng nó biết rằng các lần đọc tiếp theo sẽ trả về dữ
liệu mới nhất. Page Cache bảo vệ tính nhất quán của dữ liệu trên tất cả
các quy trình và nhóm. Những trang như vậy, chứa dữ liệu chưa được
xóa, có một cái tên đặc biệt: trang bẩn .
(II) Nếu dữ liệu của tiến trình không quan trọng, nó có thể dựa vào hạt
nhân và quá trình xả của nó, cuối cùng vẫn giữ dữ liệu vào đĩavật
lý. Nhưng nếu bạn phát triển một hệ thống quản lý cơ sở dữ liệu (ví
dụ: đốivới các giao dịch tiền), bạn cần viết giấy bảo đảm để bảo vệ hồ
sơ của mình khỏi bị mất điện đột ngột. Đối với những tình huống như
vậy, Linux cung cấp fsync() và fdatasync() các mysync() cuộc gọi hệ
19
thống sẽ chặn cho đến khi tất cả các trang bẩn của tệp được cam kết
vào đĩa.
Viết yêu cầu
Ví dụ:
dd if=/dev/zero of=/tmp/test.txt bs=1M count=10 && grep -i dirty
/proc/meminfo && sync && grep -i dirty /proc/meminfo
• Lệnh đầu tiên ghi 1 file có kích thước 10MB
• Như ta thấy thì dữ liệu của file được đánh dấu là dirty trong page cached
bằng cách kiểm tra trong lệnh số 2, ở đây là 712 kB được đánh dấu là dirty
• Lệnh số 3 giúp ta buộc sync dữ liệu từ page cached vào đĩa
• Lệnh số 4 kiểm tra lại trong page cached xem có dữ liệu nào được đánh dấu
dirty hay không, như ta thấy thì không còn(lưu ý là có thể >0 kB do có các
tiến trình khác)
5.4.Kiểm tra và điều khiển bộ nhớ cached trên Linux với vmtouch
Muốn biết là trong Memory của mình đang cached những file nào, một file cụ thể
nào đó có được cached trong memory hay không hoặc cached bao nhiêu phần. Hoặc
bạn muốn load/warm-up data của bạn từ đĩavào Memory trước khi có một tiến trình
nào đó đọc/ghi ...
20
Có một công cụ khá thú vị tên là vmtouch, công cụ này cung cấp các chức năng
 Check xem một file có được cached hay không?
 "Nói" với HĐH cached hoặc xóa một file khỏi memory
 "Nói" với HĐH lock 1 file trong memory, không cho tự động xóa khỏi
memory
 ...
Chuẩn bị 1 số file text để thử
Sau khi chạy lệnh check số dòng của file thì file đã được cached lên memory rồi
nên sẽ phải flush cached đi. Thao tác này sẽ lặp đi lặp lại để đảm bảo kết quả
chính xác.
VD1:Kiểm tra xem file t1400k.txt có được cached trong memory hay không?
21
=>0%, không có gì trên memory cả vì có flush cache ở trên
Load file vào memory và kiểm tra bộ nhớ
Tốn 0.051s để đọc toàn bộ file này
Khi không có cached
22
Tốn 1.100s để đọc toàn bộ file này.
Sau khi thử với nhiều file với số lượng dòng khác nhau sẽ thu được bảng số liệu
sau:
23
Biểu đồ tốc độ đọc file khi có và không có cached
Nhận xét:
Ưu điểm:
1. Tăng tốc độ truy cập dữ liệu
Nếu dữ liệu có thể được lưu trữ trong bộ nhớ, thì truy cập tiếp theo không cần
phải thông qua đĩa I / O , chỉ cần bộ nhớ cache trực tiếp .
Bởi vì truy cập bộ nhớ nhanh hơn nhiều so với truy cập đĩa. Vì vậy, tăng tốc
truy cập dữ liệu là lợi thế lớn của bộ nhớ cache
2. Giảm tần số I/O, Cải thiện hiệu suất đĩa I/O thông lượng hệ thống
Nhược điểm:
24
1. Nhược điểm trực tiếp nhất là nhu cầu chiếm thêm không gian bộ nhớ vật
lý, Khi thiếu vật lý, nó có thể dẫn đến hoạt độnghoán đổi thường xuyên, Cuối
cùng, đĩa của hệ thống I / O Load tăng lên.
2. Một nhược điểm khác là nó không cung cấp quản lý tốt cho API lớp ứng
dụng. Ngay cả khi lớp ứng dụng muốn tối ưu hóa Bộ nhớ cache.Việc sử dụng
chúng cũng khó khăn.
Tài liệu tham khảo
1.https://vimentor.com/vi/lesson/bo-nho-ao-virtual-memory-1
2.https://vimentor.com/vi/lesson/chuyen-doi-dia-chi-bo-nho-ao-address-
translation
3. https://biriukov.dev/docs/page-cache/0-linux-page-cache-for-sre/
25
4.https://kipalog.com/posts/Kiem-tra-va-dieu-khien-bo-nho-cached-tren-
Linux-voi-vmtouch

More Related Content

What's hot

Tieu luan hdh_quan_ly_bo_nho_trong_windows__1724
Tieu luan hdh_quan_ly_bo_nho_trong_windows__1724Tieu luan hdh_quan_ly_bo_nho_trong_windows__1724
Tieu luan hdh_quan_ly_bo_nho_trong_windows__1724kien12f3
 
Hướng dẫn sử dụng hệ điều hành Ubuntu
Hướng dẫn sử dụng hệ điều hành UbuntuHướng dẫn sử dụng hệ điều hành Ubuntu
Hướng dẫn sử dụng hệ điều hành UbuntuQuang Ngoc
 
Tìm hiểu về Linux
Tìm hiểu về LinuxTìm hiểu về Linux
Tìm hiểu về LinuxNhan Nguyen
 
60318032 baigiang-ktmt-2010
60318032 baigiang-ktmt-201060318032 baigiang-ktmt-2010
60318032 baigiang-ktmt-2010Em Cu
 
Chương II: Hệ điều hành
Chương II: Hệ điều hànhChương II: Hệ điều hành
Chương II: Hệ điều hànhSunkute
 
Giới thiệu các hệ điều hành trong dự án Ubuntu
Giới thiệu các hệ điều hành trong dự án UbuntuGiới thiệu các hệ điều hành trong dự án Ubuntu
Giới thiệu các hệ điều hành trong dự án UbuntuThức Nguyễn Văn
 
Bài 10: Khái niệm về hệ điều hành
Bài 10: Khái niệm về hệ điều hànhBài 10: Khái niệm về hệ điều hành
Bài 10: Khái niệm về hệ điều hànhChâu Trần
 
cấu trúc máy tính Chuong2
cấu trúc máy tính Chuong2cấu trúc máy tính Chuong2
cấu trúc máy tính Chuong2Thay Đổi
 
XÂY DỰNG MẠNG LINUX PHỤC VỤ TÍNH TOÁN
XÂY DỰNG MẠNG LINUX PHỤC VỤ TÍNH TOÁNXÂY DỰNG MẠNG LINUX PHỤC VỤ TÍNH TOÁN
XÂY DỰNG MẠNG LINUX PHỤC VỤ TÍNH TOÁNLE The Vinh
 
Tin hoc dai_cuong_9517
Tin hoc dai_cuong_9517Tin hoc dai_cuong_9517
Tin hoc dai_cuong_9517tienhien110293
 
[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử líHong Phuoc Nguyen
 
lop 10 bái 10 khai niem hdh
lop 10 bái 10 khai niem hdhlop 10 bái 10 khai niem hdh
lop 10 bái 10 khai niem hdhvitvit1992
 
Lớp 6: Bai 4 may tinh va phan mem may tinh
Lớp 6: Bai 4 may tinh va phan mem may tinhLớp 6: Bai 4 may tinh va phan mem may tinh
Lớp 6: Bai 4 may tinh va phan mem may tinhHeo_Con049
 

What's hot (18)

Tieu luan hdh_quan_ly_bo_nho_trong_windows__1724
Tieu luan hdh_quan_ly_bo_nho_trong_windows__1724Tieu luan hdh_quan_ly_bo_nho_trong_windows__1724
Tieu luan hdh_quan_ly_bo_nho_trong_windows__1724
 
Hướng dẫn sử dụng hệ điều hành Ubuntu
Hướng dẫn sử dụng hệ điều hành UbuntuHướng dẫn sử dụng hệ điều hành Ubuntu
Hướng dẫn sử dụng hệ điều hành Ubuntu
 
Tìm hiểu về Linux
Tìm hiểu về LinuxTìm hiểu về Linux
Tìm hiểu về Linux
 
60318032 baigiang-ktmt-2010
60318032 baigiang-ktmt-201060318032 baigiang-ktmt-2010
60318032 baigiang-ktmt-2010
 
Chương II: Hệ điều hành
Chương II: Hệ điều hànhChương II: Hệ điều hành
Chương II: Hệ điều hành
 
Giới thiệu các hệ điều hành trong dự án Ubuntu
Giới thiệu các hệ điều hành trong dự án UbuntuGiới thiệu các hệ điều hành trong dự án Ubuntu
Giới thiệu các hệ điều hành trong dự án Ubuntu
 
Bài giảng
Bài giảngBài giảng
Bài giảng
 
Bài 10: Khái niệm về hệ điều hành
Bài 10: Khái niệm về hệ điều hànhBài 10: Khái niệm về hệ điều hành
Bài 10: Khái niệm về hệ điều hành
 
cấu trúc máy tính Chuong2
cấu trúc máy tính Chuong2cấu trúc máy tính Chuong2
cấu trúc máy tính Chuong2
 
XÂY DỰNG MẠNG LINUX PHỤC VỤ TÍNH TOÁN
XÂY DỰNG MẠNG LINUX PHỤC VỤ TÍNH TOÁNXÂY DỰNG MẠNG LINUX PHỤC VỤ TÍNH TOÁN
XÂY DỰNG MẠNG LINUX PHỤC VỤ TÍNH TOÁN
 
Tin hoc dai_cuong_9517
Tin hoc dai_cuong_9517Tin hoc dai_cuong_9517
Tin hoc dai_cuong_9517
 
HDH
HDHHDH
HDH
 
[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí
 
lop 10 bái 10 khai niem hdh
lop 10 bái 10 khai niem hdhlop 10 bái 10 khai niem hdh
lop 10 bái 10 khai niem hdh
 
Lớp 6: Bai 4 may tinh va phan mem may tinh
Lớp 6: Bai 4 may tinh va phan mem may tinhLớp 6: Bai 4 may tinh va phan mem may tinh
Lớp 6: Bai 4 may tinh va phan mem may tinh
 
Bai10 bai giang
Bai10 bai giangBai10 bai giang
Bai10 bai giang
 
Bai10 bai giang
Bai10 bai giangBai10 bai giang
Bai10 bai giang
 
Chuong 1 tongquan
Chuong 1 tongquanChuong 1 tongquan
Chuong 1 tongquan
 

Similar to Báo cáo hdh

C 3. Quản lý bộ nhớ full.pdf
C 3. Quản lý bộ nhớ full.pdfC 3. Quản lý bộ nhớ full.pdf
C 3. Quản lý bộ nhớ full.pdfLmTrn286060
 
Giaotrinh hedieuhanh
Giaotrinh hedieuhanhGiaotrinh hedieuhanh
Giaotrinh hedieuhanhHai Nguyen
 
Quan ly bo nho ngoai trong linux
Quan ly bo nho ngoai trong linuxQuan ly bo nho ngoai trong linux
Quan ly bo nho ngoai trong linuxThu Lam
 
Google chrome os (perfect version)
Google chrome os (perfect version)Google chrome os (perfect version)
Google chrome os (perfect version)En Tj Pj
 
Bat dau voi Raspberry Pi (demo)
Bat dau voi Raspberry Pi (demo)Bat dau voi Raspberry Pi (demo)
Bat dau voi Raspberry Pi (demo)Thien Ta
 
He dieu hanh
He dieu hanhHe dieu hanh
He dieu hanhVNG
 
Tổng quan về Hệ điều hành
Tổng quan về Hệ điều hànhTổng quan về Hệ điều hành
Tổng quan về Hệ điều hànhPhamTuanKhiem
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTÓc Đỏ XuÂn
 
Bai 10 khai niem ve he dieu hanh1
Bai 10 khai niem ve he dieu hanh1Bai 10 khai niem ve he dieu hanh1
Bai 10 khai niem ve he dieu hanh1THPT Le Hong Phong
 
120 cau mon quan tri mang public_sv
120 cau mon quan tri mang public_sv120 cau mon quan tri mang public_sv
120 cau mon quan tri mang public_svTin Thấy
 
Tìm Hiểu Giải Pháp Ảo Hóa Mã Nguồn Mở KVM Và Triển Khai Thử Nghiệm
Tìm Hiểu Giải Pháp Ảo Hóa Mã Nguồn Mở KVM Và Triển Khai Thử Nghiệm Tìm Hiểu Giải Pháp Ảo Hóa Mã Nguồn Mở KVM Và Triển Khai Thử Nghiệm
Tìm Hiểu Giải Pháp Ảo Hóa Mã Nguồn Mở KVM Và Triển Khai Thử Nghiệm nataliej4
 
Tin hoc va hoc duong lan 1/2011/ www.BinhSon.net
Tin hoc va hoc duong lan 1/2011/ www.BinhSon.netTin hoc va hoc duong lan 1/2011/ www.BinhSon.net
Tin hoc va hoc duong lan 1/2011/ www.BinhSon.netPham Vuong
 
Khối 10: Nội Dung Kiểm tra Lần 1
Khối 10: Nội Dung Kiểm tra Lần 1Khối 10: Nội Dung Kiểm tra Lần 1
Khối 10: Nội Dung Kiểm tra Lần 1Nguyễn Duyênmiks
 
Chuong1 tongquanvehedieuhanh
Chuong1 tongquanvehedieuhanhChuong1 tongquanvehedieuhanh
Chuong1 tongquanvehedieuhanhluyenshare
 

Similar to Báo cáo hdh (20)

C 3. Quản lý bộ nhớ full.pdf
C 3. Quản lý bộ nhớ full.pdfC 3. Quản lý bộ nhớ full.pdf
C 3. Quản lý bộ nhớ full.pdf
 
Baigiang10
Baigiang10Baigiang10
Baigiang10
 
Giaotrinh hedieuhanh
Giaotrinh hedieuhanhGiaotrinh hedieuhanh
Giaotrinh hedieuhanh
 
Quan ly bo nho ngoai trong linux
Quan ly bo nho ngoai trong linuxQuan ly bo nho ngoai trong linux
Quan ly bo nho ngoai trong linux
 
Google chrome os (perfect version)
Google chrome os (perfect version)Google chrome os (perfect version)
Google chrome os (perfect version)
 
--De cuong on tap hdh
 --De cuong on tap hdh --De cuong on tap hdh
--De cuong on tap hdh
 
Bat dau voi Raspberry Pi (demo)
Bat dau voi Raspberry Pi (demo)Bat dau voi Raspberry Pi (demo)
Bat dau voi Raspberry Pi (demo)
 
He dieu hanh
He dieu hanhHe dieu hanh
He dieu hanh
 
Tổng quan về Hệ điều hành
Tổng quan về Hệ điều hànhTổng quan về Hệ điều hành
Tổng quan về Hệ điều hành
 
Quan tri he dieu hanh linux
Quan tri he dieu hanh linuxQuan tri he dieu hanh linux
Quan tri he dieu hanh linux
 
He thong cauhoi_sgk_sbt
He thong cauhoi_sgk_sbtHe thong cauhoi_sgk_sbt
He thong cauhoi_sgk_sbt
 
Bai tap3
Bai tap3Bai tap3
Bai tap3
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành android
 
Bai 10 khai niem ve he dieu hanh1
Bai 10 khai niem ve he dieu hanh1Bai 10 khai niem ve he dieu hanh1
Bai 10 khai niem ve he dieu hanh1
 
120 cau mon quan tri mang public_sv
120 cau mon quan tri mang public_sv120 cau mon quan tri mang public_sv
120 cau mon quan tri mang public_sv
 
Tìm Hiểu Giải Pháp Ảo Hóa Mã Nguồn Mở KVM Và Triển Khai Thử Nghiệm
Tìm Hiểu Giải Pháp Ảo Hóa Mã Nguồn Mở KVM Và Triển Khai Thử Nghiệm Tìm Hiểu Giải Pháp Ảo Hóa Mã Nguồn Mở KVM Và Triển Khai Thử Nghiệm
Tìm Hiểu Giải Pháp Ảo Hóa Mã Nguồn Mở KVM Và Triển Khai Thử Nghiệm
 
Tin hoc va hoc duong lan 1/2011/ www.BinhSon.net
Tin hoc va hoc duong lan 1/2011/ www.BinhSon.netTin hoc va hoc duong lan 1/2011/ www.BinhSon.net
Tin hoc va hoc duong lan 1/2011/ www.BinhSon.net
 
Khối 10: Nội Dung Kiểm tra Lần 1
Khối 10: Nội Dung Kiểm tra Lần 1Khối 10: Nội Dung Kiểm tra Lần 1
Khối 10: Nội Dung Kiểm tra Lần 1
 
Chuong1 tongquanvehedieuhanh
Chuong1 tongquanvehedieuhanhChuong1 tongquanvehedieuhanh
Chuong1 tongquanvehedieuhanh
 

Báo cáo hdh

  • 1. 1 TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ - VIỄN THÔNG *****  ***** BÁO CÁO BÀI TẬP LỚN: Hệ điều hành ĐỀ TÀI: TÌM HIỂU LINUX PAGE CACHE Giảng viên hướng dẫn:PGS.TS Hàn Huy Dũng Sinh viên thực hiện: Nguyễn Văn Bình- 20182382 Lê Trần Huy- 20182581 Phạm Trọng Huy Hoàng- 20182546
  • 2. 2 Lời nói đầu Linux là tên gọi của một hệ điều hành máy tính mã nguồn mở và cũng là tên hạt nhân của hệ điều hành. Phiên bản linux đầu tiên do linus torvalds viết vào năm 1991, lúc ông còn là một sinh viên đại học Helsinki tại Phần Lan. Ông làm việc một cách hăng say trong vòng 3 năm liên tục và cho ra đời phiên bản Linux 1.0 vảo năm 1994. Bộ phận chủ yếu này được phát triển và tung ra trên thị trường dưới bản quyền GNU General Public License. Do đó mà bất cứ ai cũng có thể tải và xem mã nguồn của Linux. Vài năm qua, Linux đã thực sự tạo ra một cuộc cách mạng trong lĩnh vực máy tính. Sự phát triển và những gì chúng mang lại cho máy tính thật đáng kinh ngạc: một hệ điều hành đa nhiệm, đa người dùng. Linux có thể chạy trên nhiều bộ vi xử lý khác nhau như: Intel, Motorola, MC68K, Dec Alpha. Nó tương tác tốt với các hệ điều hành:Apple, Mcrosoft và Novell. Không phải ngẫu nhiên mà ngành công nghê thông tin Việt Nam trong Linux làm hệ điều hành nền cho các chương trình ứng dụng chủ đạo về kinh tế và quốc phòng. Với mã nguồn mở, sử dụng Linux an toàn hơn các ứng dụng Windows. Linux đem đến cho chúng ta lợi ích về kinh tế với rất nhiều phần mềm miễn phí. Mã nguồn mở của hệ điều hành và cac chương trình trên Linux là tài liệu vô giá để chúng ta học hỏi về kỹ thuật lập trình vốn là những tài liệu không được công bố đối với các ứng dụng Windows. Trong đồ án này, chúng ta sẽ tìm hiểu một phần rất quan trọng trong hệ điều hành Linux đó là: quản lý bộ nhớ trong Linux. Một hệ điều hành muốn chạy ổn định thì phải có một cơ chế quản lý bộ nhớ hiệu quả. Cơ chế này sẽ được trình bày một cách chi tiết trong đồ án và có kèm theo các chương trình minh họa. Trong quá trình tìm bài tuy có nhiều cố gắng nhưng không thể tránh được những sai sót, nhóm em hy vọng nhận được những nhận xét của thầy để đề tài được hoàn thành tốt
  • 3. 3 Mục lục Lời nói đầu……………………………………………………………………..2 Chương 1. Tại sao cần bộ nhớ ảo.......................................................................4 Chương 2. Nguyên lý hoạt động của bộ nhớ ảo……………………………….7 Chương 3. Tìmhiểu các giải thuật thay thế trang……………………………10 3.1.FIFO……………………………………………………………….10 3.2.OPT………………………………………………………………..11 3.3.LRU………………………………………………………………..12 3.4.So sánh các giải thuật thay thế trang………………………………12 Chương 4. Memory Mapping………………………………………………..15 4.1. Private mapping…………………………………………………..15 4.2. Anonymous mapping……………………………………………..15 Chương 5. Page Cache……………………………………………………….16 5.1.Định nghĩa…………………………………………………………16 5.2. Bộ đệm trang giải quyết những vấn đề gì…………………………16 5.3. Cơ chế hoạt động………………………………………………….17 5.4. Kiểm tra và điều khiển bộ nhớ cached trên Linux với vmtouch….19 Tài liệu tham khảo……………………………………………………………24
  • 4. 4 Chương 1. Tại sao cần bộ nhớ ảo Khi mà chưa có sự tồn tại của bộ nhớ ảo, toàn bộ hệ thống Linux sẽ dùng chung một không gian địa chỉ, được mapping thẳng vào bộ nhớ vật lý RAM, vào các thiết bị ngoài như VGA, PCI… Chúng ta gọi hệ thống đó là hệ thống single address space – Hệ thống không gian địa chỉ chung. Những vấn đề gặp phải với hệ thống sử dụng bộ nhớ chung: Vấn đề 1: Hệ thống có bộ nhớ vật lý ít hơn không gian địa chỉ của nó Vấn đề 2: Phân mảnh bộ nhớ chung Vấn đề 3: Vấn đề nhiều chương trình trong hệ thống sử dụng chung bộ nhớ Vấn đề 4: Toàn bộ hệ thống có thể bị crash vì chỉ một chương trình chạy sai Vấn đề 1: Hệ thống có bộ nhớ vật lý ít hơn không gian địa chỉ của nó Điều gì sẽ xảy ra khi hệ thống MIPS 32 bit có không gian địa chỉ 4GB, nhưng bộ nhớ vậy lý thực tế chỉ có 1GB (30 bit)? Có hai trường hợp xảy ra, người lập trình cần phải biết hệ thống chỉ có 1GB bộ nhớ, và sẽ viết chương trình mà không truy cập tới các địa chỉ nằm ngoài vùng 1GB. Trường hợp còn lại, người lập trình không có thông tin, chương trình có thể truy cập vào vùng nhớ ngoài 1GB, và hệ thống bị crash. Đứng trên góc độ phát triển phần mềm, rất khó để chương trình biết được hệ thống đang thực sự có bao nhiêu GB bộ nhớ vật lý. Đặc biệt ngày nay, với việc phần mềm được phát triển độc lập và gần như không phụ thuộc vào phần cứng (game, ứng dụng…), hệ thống có bộ nhớ sử dụng chung sẽ không đáp ứng được.
  • 5. 5 Vấn đề 2: Phân mảnh bộ nhớ chung Thứ tự các chương trình khi chạy trong hệ thống 1. Chương trình A chạy, chiếm 1GB bộ nhớ, hệ thống còn 3GB bộ nhớ trống. 2. Chương trình B chạy, chiếm 2GB bộ nhớ, hệ thống còn 1GB bộ nhớ trống. 3. Chương trình A kết thúc, giải phóng 1GB bộ nhớ. Hệ thống còn 2GB bộ nhớ trống, còn đủ cho chương trình C chạy. 4. Chương trình C muốn chạy, hệ thống cònđủ 2GB bộ nhớ trống, nhưng bộ nhớ bịphân mảnh, do đó C không thể tìm ra đủ 2GB bộ nhớ liền mạch => C không thể chạy. Như vậy, việc phân mảnh bộ nhớ trong trong quátrình chương trình chạy cũng là một vấn đề đối với hệ thống dùng chung không gian địa chỉ. Vấn đề 3: Vấn đề nhiều chương trình trong hệ thống sử dụng chung bộ nhớ Trong một hệ thống sử dụng chung bộ nhớ, tất cả các chương trình đều có thể truy cập tới mọi địa chỉ trong không gian bộ nhớ, dẫn đến việc hệ thống sẽ không có cơ chế bảo vệ việc truy cập những phần không gian bộ nhớ sử dụng chung giữa các chương trình. Việc sử dụng bộ nhớ chung giữa các chương trình có thể giải thích dễ hiểu hơn bằng ví dụ sau: Chúng ta có chương trình A và chương trình B cùng chạy đồng thời trong hệ thống. A thực hiện ghi giá trị 10 vào ô nhớ có địa chỉ 1024, sau đó B cũng thực hiện việc ghi giá trị 11 vào ô nhớ có địa chỉ 1024.
  • 6. 6 Kết thúc quá trình trên, chương trình B đã thay đổi giá trị bộ nhớ tại địa chỉ 1024, điều này ảnh hưởng trực tiếp thay đổi quá trình thực thi của chương trình A. Trong một hệ thống thực tế, chương trình A có thể bị chạy sai do bộ nhớ bị corrupted hoặc thậm chí là crash. Vấn đề 4: Toàn bộ hệ thống có thể bị crash vì chỉ một chương trình chạy sai Như chúng ta thấy trong các hệ thống ngày nay, một chương trình ứng dụng chạy bị lỗi, crash, toàn bộ hệ thống vẫn có thể tiếp tục chạy một cách bình thường. Tuy nhiên, với hệ thống bộ nhớ sử dụng chung, chương trình ứng dụng khi chạy (ví dụ game) cũng có thể truy cập vào vùng nhớ củacác chương trình hệ thống (ví dụ phần vùng nhớ của hệ điều hành – kernel), điều này dẫn tới việc nếu chương trình ứng dụng đó thực thi lỗi, nó có thể gây crash cho cả hệ thống. Cả bốn vấn đề trên đòi hỏi cần có một phương thức quản lý bộ nhớ khác, để đảm bảo các chương trình chạy trong hệ thống có thể hoạt độnghiệu quả, đảm bảo tính an toàn dữ liệu (tránh việc truy cập bộ nhớ lẫn nhau của các chương trình), đảm bảo tính an toàn của hệ thống (đảm bảo các chương trình hệ thống – kernel không bị can thiệp bởi các chương trình ở tần user space).
  • 7. 7 Chương 2.Nguyên lý hoạt động của bộ nhớ ảo Bộ nhớ ảo – virtual memory tồn tại như một lớp trung gian giữa chương trình (CPU) và bộ nhớ vật lý của hệ thống. Thay vì truy cập địa chỉ vật lý, chương trình truy cập bộ nhớ ảo, từ bộ nhớ ảo, sẽ có cơ chế để mappingsang bộ nhớ vật lý. Việc chuyển đổi – mapping địa chỉ ảo sang địa chỉ vật lý có tác dụng là việc chương trình không cần quan tâm có bao nhiêu bộ nhớ vật lý trong hệ thống, cũng như không quan tâm nó cần phải truy cập chính xác vào địa chỉ vậy lý nào. Chương trình khi chạy được quyền truy cập vào tất cả các địa chỉ trong không gian bộ nhớ ảo (4G không gian địa chỉ với hệ thống 32 bit), việc chuyển đổi sang địa chỉ vật lý sao cho đúng được thực hiện bởi lớp MAPPING. Ngoài ra, như đã đề cập ở phần trước, bộ nhớ ảo giải quyết hầu hết các vấn đề gặp phải với hệ thống không gian bộ nhớ chung. Quay lại vấn đề, hệ thống 32bit không gian địa chỉ 4G, nhưng chỉ có 1G bộ nhớ vật lý (RAM), chương trình sẽ bị crash nếu truy cập địa chỉ ngoài vùng địa chỉ vật lý. Bộ nhớ ảo và lớp MAPPING xử lý vấn đề này bằng cách, thay vì mapping vào bộ nhớ vật lý RAM, chúng ta có thể mapping vào ổ đĩadisk, hoặc bất kì thiết bị lưu trữ nào khác. Cơ chế này còngọi là cơ chế swap bộ nhớ mà chúng ta có thể nghe nói tới trước đây, việc máy tính sử dụng ổ cứng khi bộ nhớ RAM đã hết. Trong hình 2, lớp MAPPING khi đã map hết 1G bộ nhớ vật lý, sẽ thực hiện map các địa chỉ cònlại trong không gian địa chỉ ảo 4G sang ổ đĩa ngoài (ở đây là map địa chỉ 5 và 6 sang địa chỉ của ổ đĩa)=> chương trình sẽ không bị crash nếu nó cần dùng nhiều hơn 1G bộ nhớ vật lý. Tất nhiên, việc sử dụng ổ đĩa disk thay vì RAM
  • 8. 8 sẽ khiến hiệu năng chương trình giảm đi, do việc đọc/ghi ổ đĩabao giờ cũng chậm hơn rất nhiều việc đọc/ghitrên RAM. Trở lại với ví dụ, chúng ta có 3 chương trình cần chạy: chương trình A cần 1GB, chương trình B cần 2GB, chương trình C cần 2GB. Chương trình A và B cùng chạy, chiếm 3G bộ nhớ. Sau đó A thoát ra, hệ thống có 2G bộ nhớ trống, nhưng bị phân mảnh. Chương trình C khi đó không thể chạy dù hệ thống có đủ bộ nhớ cho C. Hệ thống bộ nhớ ảo cũng giải quyết được vấn đề đó. Mỗi một chương trình khi chạy sẽ có một bộ mapping riêng và không gian địa chỉ ảo riêng. Đứng trên góc nhìn của chương trình, nó chỉ quan tâm đến địa chỉ ảo, nên bộ nhớ của nó là luôn liền mạch. Việc mapping giữa không gian địa chỉ ảo của từng chương trình vào bộ nhớ vật lý sẽ được thực điện độc lâp, và invisible– không nhìn thấy được đối với chương trình. Vấn đề nhiều chương trình trong hệ thống sử dụng chung bộ nhớ xảy ra khi hai chương trình cùng truy cập vào một địa chỉ vật lý giống nhau, do hai chương trình hoạt động độc lập, chúng có thể truy cập vào bất kì địa chỉ nào chúng muốn. Vấn đề này cũng được giải quyết dễ dàng bằng việc sử dụng bộ nhớ ảo: Trong hệ thống bộ nhớ ảo, mỗi chương trình có không gian địa chỉ và bộ mapping riêng biệt, có nghĩa là, đứng trên góc độ chương trình, nó “nhìn”toàn bộ bộ nhớ là của nó – vì thực tế nó sử dụng địa chỉ ảo, không phải địa chỉ vật lý. Ví dụ: hai chương trình cùng truy cập vào địa chỉ 1024. A ghi giá trị 10 vào địa chỉ 1024, B ghi giá trị 11 cũng vào địa chỉ 1024. Tuy nhiên crash không xảy ra, do
  • 9. 9 MAPPING đã map 1024 của A vào địa chỉ 2048 vật lý, map 1024 của B vào địa chỉ vật lý 3072 Vấn đề này cũng được khắc phục với hệ thống bộ nhớ ảo. Các chương trình có không gian địa chỉ và mapping khác nhau, nên về cơ bản, các chương trình sẽ có không gian địa chỉ vật lý khác nhau. Việc một chương trình chạy sai không ảnh hưởng tới toàn bộ hệ thống. Ngoài việc cung cấp không gian địa chỉ riêng biệt cho các chương trình, hệ thống bộ nhớ ảo còncó thể hỗ trợ cơ chế “shared memory” – bộ nhớ sử dụng chung giữa các chương trình Cơ chế shared memoryđược bộ nhớ ảo thực hiện rất đơn giản: mapping địa chỉ của các chương trình khác nhau vào chung một địa chỉ vật lý. Bộ MAPPING sẽ thực hiện việc map hai địa chỉ của hai chương trình A, B vào chung một địa chỉ vật lý, ở đây là 1024-A và 2048-B vào địa chỉ vật lý 3072.
  • 10. 10 Chương 3 Trong hệ điều hành sử dụng phân trang để quản lý bộ nhớ, cần có một thuật toán thay thế trang để quyết định trang nào cần được thay thế khi có trang mới. Page Fault - Lỗi trang xảy ra khi chương trình đang chạy truy cập trang bộ nhớ được ánh xạ vào không gian địa chỉ ảo, nhưng không được tải trong bộ nhớ vật lý. Vì bộ nhớ vật lý thực tế nhỏ hơn nhiều so với bộ nhớ ảo, lỗi trang xảy ra. Trong trường hợp lỗi trang, Hệ điều hành có thể phải thay thế một trong các trang hiện có bằng trang mới cần thiết. Các thuật toán thay thế trang khác nhau đề xuất các cách khác nhau để quyết định trang nào sẽ thay thế. Mục tiêu của tất cả các thuật toán là giảm số lượng lỗi trang. 3.1 FIFO Cần biết được: Số khung trang, tình trạng ban đầu, chuỗi tham chiếu. Hướng tiếp cận: Ghi nhận thời điểm một trang được mang vào bộ nhớ chính. Khi cần thay thế trang, trang ở trong bộ nhớ lâu nhất sẽ được chọn. Ví dụ: Sử dụng 3 khung trang, ban đầu cả 3 đều trống, chuỗi tham chiếu: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 Ta có được bảng sau với * là các lỗi trang(page fault).
  • 11. 11 Nhận xét:  Mặc dù FIFO đơn giản và dễ dàng, nhưng nó không phải lúc nào cũng tối ưu, hoặc thậm chí không hiệu quả.  Một hiệu ứng thú vị có thể xảy ra với FIFO là nghichlýBelady, trongđó tăng số lượng khung hình có sẵn thực sựcó thể làm tăngsố lượng lỗi trang xảy ra! Ví dụ, hãy xem xét biểu đồ sau đây dựa trên chuỗi trang (1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5) : 3.2.OPT Thay thế trang nhớ được tham chiếu trễ nhất trong tương lai.
  • 12. 12 Ví dụ: cho chuỗi : 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 với 3 khung trang, ban đầu đều trống. 3.3.LRU Thay thế trang nhớ được tham chiếu trễ nhất trong quá khứ. Ví dụ: cho chuỗi : 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 3.4 So sánh các giải thuật thay thế trang
  • 13. 13 Giải thuật FIFO OPT LRU Ưu điểm Nó đơn giản và dễ hiểu và dễ thực hiện. Sự phức tạp ít hơn và dễ thực hiện. Cấu trúc dữ liệu được sử dụng là dễ dàng và nhẹ Thay thế trang ít được sử dụng gần đây nhất, do đó không có Anomaly của Belady. Dễ dàng chọn trang bị lỗi và đã không được sử dụng trong một thời gian dài. Nhược điểm Hiệu quả của quy trình thấp. Khi chúng ta tăng số lượng khung hình trong khi sử dụng FIFO, chúng ta đang cung cấp nhiều bộ nhớ hơn cho các quy trình. Vì vậy, lỗi trang sẽ giảm, nhưng ở đây các lỗi trang đang tăng lên. Vấn đề OPT là hoàn hảo, nhưng không thể trong thực tế vì hệ điều hành không thể biết các yêu cầu Nó đòi hỏi cấu trúc dữ liệu bổ sung phải được thực hiện và hỗ trợ phần cứng rất cao.
  • 14. 14 này được gọi là nghịch lý Belady. trong tương lai. Xử lý lỗi rất khó khăn
  • 15. 15 Chương 4.Memory mapping 4.1.Private mapping: Sự thay đổinội dung của vùng nhớ mapping không được nhìn thấy bởi tiến trình khác. Nếu là file mapping, nội dung của file cũng sẽ không thay đổi. Kernel làm được việc này bằng kỹ thuật copy-on-write. Nghĩa là trước khi thay đổi thì 2 tiến trình chia sẻ vùng nhớ mapping, nhưng nếu 1 tiến trình thay đổi nội dung vùng nhớ đó, kernel trước hết sẽ tạo ra 1 bản copycủa các trang thay đổiđó trên vùng nhớ riêng biệt của bộ nhớ ảo. Vì vậy, kỹ thuật mapping với quyền private còn được gọi là copy-on-write mapping. 4.2 Anonymous mapping: Kỹ thuật này tạo ra vùng nhớ ánh xạ không map với 1 file cụ thể nào. Vì vậy, nội dung của vùng nhớ sau đó sẽ không được tải vào từ file nào mà sẽ được khởi tạo giá trị 0. Vùng nhớ ánh xạ của tiến trình này có thể được chia sẻ với vùng nhớ ánh xạ của tiến trình khác (cùng trỏ đến các vùng nhớ giống nhau trên RAM). Khi 2 hoặc nhiều tiến trình cùng chia sẻ vùng nhớ ánh xạ, tiến trình này có thể nhìn thấy sự thay đổicủa vùng nhớ khi tiến trình khác thay đổihay không phụ thuộc vào việc chế độ mapping là private hay shared.
  • 16. 16 Chương 5.Page Cache 5.1.Định nghĩa: Page Cache(Bộ đệm trang )là bộ đệm đĩa chính được sử dụng bởi nhân Linux. Trong hầu hết các trường hợp, hạt nhân đề cập đến bộ đệm trang khi đọc từ hoặc ghi vào đĩa. Các trang mới được thêm vào bộ đệm trang để đáp ứng các yêu cầu đọc của quy trình Chế độ người dùng. Nếu trang chưa có trong bộ đệm, một mục mới sẽ được thêm vào bộ đệm và chứa đầy dữ liệu đọc từ đĩa. Nếu có đủ bộ nhớ trống, trang được lưu trong bộ nhớ cache trong một khoảng thời gian không xác định và sau đó có thể được sử dụng lại bởi các quy trình khác mà không cần truy cập đĩa. Tương tự, trước khi ghi một trang dữ liệu vào thiết bị khối, hạt nhân sẽ xác minh xem trang tương ứng đã được đưa vào bộ đệm chưa; nếu không, một mục mới sẽ được thêm vào bộ đệm và chứa đầy dữ liệu sẽ được ghi trên đĩa. Quá trình truyền dữ liệu I / O không bắt đầu ngay lập tức: quá trình cập nhật đĩa bị trì hoãn trong vài giây, do đó tạo cơ hội cho các tiến trình sửa đổi thêm dữ liệu được ghi (nói cách khác, hạt nhân thực hiện các hoạt động ghi hoãn lại). 5.2. Bộ đệm trang giải quyết những vấn đề gì Bộ nhớ cache trên đĩalà một cơ chế phần mềm cho phép hệ thống giữ trong RAM một số dữ liệu thường được lưu trữ trên đĩa, để có thể nhanh chóng thỏa mãn truy cập nhanh hơn vào dữ liệu đó mà không cần truy cập vào đĩa. Bộ nhớ đệm trên đĩa rất quan trọng đối với hiệu suất hệ thống, bởi vì việc truy cập lặp lại vào cùng một dữ liệu đĩalà phổ biến. Quy trình chế độ người dùng tương tác với đĩađược quyền yêu cầu đọc hoặc ghi dữ liệu đĩagiống nhau nhiều lần. Hơn nữa, các quy trình khác nhau cũng có thể cần xử lý cùng một dữ liệu đĩatại các thời điểm khác nhau. Ví dụ: bạn có thể sử dụng lệnh cp để sao chép tệp văn bản, sau đó gọi trình soạn thảo ưa thích của bạn để sửa đổi tệp đó.
  • 17. 17 Tóm lại mục đíchchính là cải thiện độ trễ IO của các hoạt động đọc và ghi 5.3.Cơ chế hoạt động Đọc yêu cầu (1)Khi một ứng dụng không gian người dùng muốn đọc dữ liệu từ đĩa, nó sẽ yêu cầu hạt nhân cung cấp dữ liệu bằng cách sử dụng các lệnh gọi hệ thống đặc biệt như read(),pread(),mmap()… (2)Hạt nhân Linux sẽ kiểm tra xem các trang có trong Page Cache hay không và ngay lập tức trả chúng về trình gọi nếu có. Như bạn có thể thấy kernel đã thực hiện hoạt động 0 đĩa trong trường hợp này. (3)Nhưng nếu không có trang nào như vậy trong Page Cache, kernel cần tải chúng từ đĩa. Để làm được điều đó, nó phải tìm một vị trí trong Bộ đệm trang cho các trang được yêu cầu. Nếu không có bộ nhớ trống (trong cgroup hoặc hệ thống của người gọi), quá trình lấy lại bộ nhớ phải được thực
  • 18. 18 hiện. Sau đó, hạt nhân lên lịch cho hoạt động IO của đĩa đọc, lưu trữ các trang đíchtrong bộ nhớ và cuối cùng trả về dữ liệu được yêu cầu từ Bộ đệm trang cho tiến trình đích. Bắt đầu từ thời điểm này, bất kỳ yêu cầu nào trong tương lai để đọc phần này của tệp (bất kể từ quy trình hoặc nhóm nào) sẽ được xử lý bởi Bộ đệm trang mà không có bất kỳ IOP đĩanào cho đến khi các trang này chưa bị loại bỏ. Viết yêu cầu (I) Khi một chương trình không gian người dùng muốn ghi một số dữ liệu vào đĩa, nó cũng sử dụng một loạt các cuộc gọi tổng hợp, ví dụ : write(),pwrite(),writev()…Một sự khác biệt lớn so với việc đọc là ghi thường nhanh hơn, vì các hoạt động IO trên đĩathực không được thực hiện ngay lập tức. Tuy nhiên, điều này chỉ đúng nếu hệ thống hoặc một nhóm không có vấn đề về áp suất bộ nhớ và có đủ trang miễn phí (chúng ta sẽ nói về quá trình loại bỏ sau). Vì vậy, kernel thường chỉ cập nhật các trang trong Page Cache. Điều này làm cho đường ống ghi về bản chất là không đồng bộ. Người gọi không biết khi nào trang thực sự xảy ra, nhưng nó biết rằng các lần đọc tiếp theo sẽ trả về dữ liệu mới nhất. Page Cache bảo vệ tính nhất quán của dữ liệu trên tất cả các quy trình và nhóm. Những trang như vậy, chứa dữ liệu chưa được xóa, có một cái tên đặc biệt: trang bẩn . (II) Nếu dữ liệu của tiến trình không quan trọng, nó có thể dựa vào hạt nhân và quá trình xả của nó, cuối cùng vẫn giữ dữ liệu vào đĩavật lý. Nhưng nếu bạn phát triển một hệ thống quản lý cơ sở dữ liệu (ví dụ: đốivới các giao dịch tiền), bạn cần viết giấy bảo đảm để bảo vệ hồ sơ của mình khỏi bị mất điện đột ngột. Đối với những tình huống như vậy, Linux cung cấp fsync() và fdatasync() các mysync() cuộc gọi hệ
  • 19. 19 thống sẽ chặn cho đến khi tất cả các trang bẩn của tệp được cam kết vào đĩa. Viết yêu cầu Ví dụ: dd if=/dev/zero of=/tmp/test.txt bs=1M count=10 && grep -i dirty /proc/meminfo && sync && grep -i dirty /proc/meminfo • Lệnh đầu tiên ghi 1 file có kích thước 10MB • Như ta thấy thì dữ liệu của file được đánh dấu là dirty trong page cached bằng cách kiểm tra trong lệnh số 2, ở đây là 712 kB được đánh dấu là dirty • Lệnh số 3 giúp ta buộc sync dữ liệu từ page cached vào đĩa • Lệnh số 4 kiểm tra lại trong page cached xem có dữ liệu nào được đánh dấu dirty hay không, như ta thấy thì không còn(lưu ý là có thể >0 kB do có các tiến trình khác) 5.4.Kiểm tra và điều khiển bộ nhớ cached trên Linux với vmtouch Muốn biết là trong Memory của mình đang cached những file nào, một file cụ thể nào đó có được cached trong memory hay không hoặc cached bao nhiêu phần. Hoặc bạn muốn load/warm-up data của bạn từ đĩavào Memory trước khi có một tiến trình nào đó đọc/ghi ...
  • 20. 20 Có một công cụ khá thú vị tên là vmtouch, công cụ này cung cấp các chức năng  Check xem một file có được cached hay không?  "Nói" với HĐH cached hoặc xóa một file khỏi memory  "Nói" với HĐH lock 1 file trong memory, không cho tự động xóa khỏi memory  ... Chuẩn bị 1 số file text để thử Sau khi chạy lệnh check số dòng của file thì file đã được cached lên memory rồi nên sẽ phải flush cached đi. Thao tác này sẽ lặp đi lặp lại để đảm bảo kết quả chính xác. VD1:Kiểm tra xem file t1400k.txt có được cached trong memory hay không?
  • 21. 21 =>0%, không có gì trên memory cả vì có flush cache ở trên Load file vào memory và kiểm tra bộ nhớ Tốn 0.051s để đọc toàn bộ file này Khi không có cached
  • 22. 22 Tốn 1.100s để đọc toàn bộ file này. Sau khi thử với nhiều file với số lượng dòng khác nhau sẽ thu được bảng số liệu sau:
  • 23. 23 Biểu đồ tốc độ đọc file khi có và không có cached Nhận xét: Ưu điểm: 1. Tăng tốc độ truy cập dữ liệu Nếu dữ liệu có thể được lưu trữ trong bộ nhớ, thì truy cập tiếp theo không cần phải thông qua đĩa I / O , chỉ cần bộ nhớ cache trực tiếp . Bởi vì truy cập bộ nhớ nhanh hơn nhiều so với truy cập đĩa. Vì vậy, tăng tốc truy cập dữ liệu là lợi thế lớn của bộ nhớ cache 2. Giảm tần số I/O, Cải thiện hiệu suất đĩa I/O thông lượng hệ thống Nhược điểm:
  • 24. 24 1. Nhược điểm trực tiếp nhất là nhu cầu chiếm thêm không gian bộ nhớ vật lý, Khi thiếu vật lý, nó có thể dẫn đến hoạt độnghoán đổi thường xuyên, Cuối cùng, đĩa của hệ thống I / O Load tăng lên. 2. Một nhược điểm khác là nó không cung cấp quản lý tốt cho API lớp ứng dụng. Ngay cả khi lớp ứng dụng muốn tối ưu hóa Bộ nhớ cache.Việc sử dụng chúng cũng khó khăn. Tài liệu tham khảo 1.https://vimentor.com/vi/lesson/bo-nho-ao-virtual-memory-1 2.https://vimentor.com/vi/lesson/chuyen-doi-dia-chi-bo-nho-ao-address- translation 3. https://biriukov.dev/docs/page-cache/0-linux-page-cache-for-sre/