CHƯƠNG I: CƠ CHẾ QUẢN LÝ BỘ NHỚ ẢO TRONG LINUXI.Khái niệm bộ nhớ ảo, không gian hoán đổiLinux có khả năng hỗ trợ bộ nhớ ảo, điều này có nghĩa là nó có thể sử dụng một phần của đĩa như là
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC PHENIKAA
BÁO CÁO BÀI TẬP LỚN
HỌC PHẦN HỆ ĐIỀU HÀNH TÊN ĐỀ TÀI
Họ và tên sinh viên: Nguyễn Văn A
Mã sinh viên: 1234455
Ngành học: Công nghệ thông tin/
Khóa: K14/K15/
Tên lớp: CNTT1/CNTT2/
Hà Nội, Năm 2023
Trang 2MỤC LỤC
LỜI MỞ ĐẦU………1
Chương I: QUẢN LÝ BỘ NHỚ ẢO, KHÔNG GIAN HOÁN ĐỔI I Khái niệm bộ nhớ ảo, không gian hoán đổi……….2
II Mô hình bộ nhớ ảo……… …2
III Tạo không gian hoán đổi………6
IV Sử dụng không gian hoán đổi………8
V Định vị không gian hoán đổi……… 9
Tài liệu tham khảo……… 11
Trang 3LỜI MỞ ĐẦU
Trong những năm gần đây, Linux đã tạo ra một cuộc cách mạng đáng kể trong lĩnh vực máy tính Sự tiến triển và những đóng góp mà nó mang lại cho máy tính
là đáng kinh ngạc: một hệ điều hành đa nhiệm và đa người dùng Linux có khả năng hoạt động trên nhiều bộ xử lý khác nhau như Intel, Motorola, MC68K, Dec Alpha, và tương tác tốt với các hệ điều hành như Apple, Microsoft và Novell Không tình cờ mà ngành công nghệ thông tin Việt Nam đã lựa chọn Linux làm hệ điều hành cơ sở cho các ứng dụng chủ đạo trong lĩnh vực kinh tế và quốc phòng Với mã nguồn mở, việc sử dụng Linux mang lại sự an toàn cao hơn so với các ứng dụng Windows Linux cung cấp lợi ích kinh tế bằng cách cung cấp nhiều phần mềm miễn phí Mã nguồn mở của hệ điều hành và các chương trình trên Linux là tài nguyên quý giá để nâng cao kỹ năng lập trình, điều mà không phải là điều có sẵn đối với ứng dụng Windows
Trong dự án này, chúng ta sẽ tìm hiểu về một khía cạnh quan trọng của hệ điều hành Linux, đó là quản lý bộ nhớ Một hệ điều hành muốn hoạt động ổn định cần phải có một cơ chế quản lý bộ nhớ hiệu quả Chi tiết về cơ chế này sẽ được trình bày trong dự án, đi kèm với các ví dụ minh họa
Trang 4CHƯƠNG I: CƠ CHẾ QUẢN LÝ BỘ NHỚ ẢO TRONG LINUX
I Khái niệm bộ nhớ ảo, không gian hoán đổi
Linux có khả năng hỗ trợ bộ nhớ ảo, điều này có nghĩa là nó có thể sử dụng một phần của đĩa như là RAM để mở rộng dung lượng bộ nhớ Kernel sẽ tự động ghi nội dung của các phần bộ nhớ không sử dụng lên đĩa cứng, giải phóng bộ nhớ cho các mục đích khác Khi cần thiết, những nội dung này có thể được đọc trở lại vào bộ nhớ
Dù việc sử dụng bộ nhớ ảo giúp tăng dung lượng sẵn có mà không làm ảnh hưởng đến trải nghiệm người sử dụng và chương trình chạy, tuy nhiên, cần lưu ý rằng việc đọc và ghi dữ liệu lên đĩa cứng chậm hơn nhiều so với sử dụng bộ nhớ thực tế, với mức chậm khoảng một nghìn lần Phần không gian trên đĩa cứng được
sử dụng như là không gian hoán đổi
Linux có khả năng sử dụng một tệp thông thường trong hệ thống tệp hoặc một phân vùng riêng để thực hiện không gian hoán đổi Một phân vùng swap có thể mang lại hiệu suất nhanh hơn, nhưng nó cũng đồng nghĩa với việc thay đổi kích thước của nó có thể phức tạp hơn so với việc chỉnh sửa một tệp swap Khi bạn đã biết dung lượng không gian hoán đổi cần thiết, bạn có thể quyết định bắt đầu tạo một phân vùng swap Tuy nhiên, nếu bạn chưa chắc chắn về dung lượng cần thiết, việc sử dụng một tệp swap trước là một giải pháp khôn ngoan Thay vào đó, bạn có thể sử dụng hệ thống trong khoảng thời gian để đảm bảo rằng bạn đã xác định đúng dung lượng không gian hoán đổi cần thiết, sau đó mới quyết định tạo phân vùng swap
II Mô hình bộ nhớ ảo
Trước khi chúng ta khám phá các phương thức mà Linux sử dụng để hỗ trợ
bộ nhớ ảo, hãy đặt tầm quan trọng vào mô hình trừu tượng của hệ điều hành này Khi một chương trình được thực hiện, bộ xử lý đọc một lệnh từ bộ nhớ và tiến hành giải mã Trong quá trình giải mã này, bộ xử lý có thể cần truy cập bộ nhớ để lấy dữ liệu hoặc lưu trữ nó tại một vị trí cụ thể Sau đó, bộ xử lý tiếp tục thực hiện lệnh và di chuyển đến lệnh tiếp theo trong chương trình Do đó, việc truy cập bộ nhớ để đọc lệnh hoặc thực hiện thao tác lưu trữ dữ liệu là một quá trình liên tục và không ngừng
Trang 5Đối với hệ điều hành Linux, tất cả các địa chỉ trong bộ nhớ ảo đều là địa chỉ
ảo, không phải địa chỉ vật lý Bộ xử lý thực hiện quá trình chuyển đổi này bằng cách sử dụng thông tin từ các bảng quản lý được tạo và duy trì bởi hệ điều hành
Để tạo điều kiện thuận lợi cho quá trình chuyển đổi này, bộ nhớ ảo và bộ nhớ vật lý được chia thành các đơn vị gọi là trang, mỗi trang có kích thước đồng đều Điều này giúp quản lý bộ nhớ hiệu quả và giảm độ phức tạp của quá trình chuyển đổi địa chỉ Ví dụ, trên hệ thống Alpha AXP, Linux sử dụng trang kích thước 8Kbyte, trong khi trên hệ thống Intel x86, trang thường có kích thước 4Kbyte Mỗi trang được liên kết với một số khung trang duy nhất (PFN - Page Frame Number) để xác định vị trí vật lý tương ứng trong bộ nhớ
Mô hình trừu tượng của sự ánh xạ từ địa chỉ ảo đến địa chỉ vật lý
Trang 6Mô hình này sử dụng địa chỉ ảo để quản lý bộ nhớ và thực hiện việc chuyển đổi từ địa chỉ ảo sang địa chỉ vật lý Địa chỉ ảo được chia thành hai phần: địa chỉ offset
và số khung trang ảo Kích thước trang được xác định là 4Kbyte, do đó, từ bit 0 đến bit 11 của địa chỉ ảo chứa địa chỉ offset, còn từ bit 12 trở lên là số khung trang ảo
Khi bộ xử lý gặp một địa chỉ ảo, nó phải trích xuất địa chỉ offset và số khung trang ảo Để thực hiện việc này, bộ xử lý sử dụng bảng trang Bảng trang giúp ánh
xạ từ số khung trang ảo sang số khung trang vật lý Sau khi xác định được số khung trang vật lý, bộ xử lý sẽ truy cập vào vị trí tương ứng trong trang vật lý đó,
sử dụng địa chỉ offset
Quá trình này giúp bộ xử lý ảo hóa bộ nhớ, cho phép mỗi tiến trình có thể hoạt động với bộ nhớ ảo của riêng mình mà không cần biết về bộ nhớ vật lý thực sự Bảng trang đóng vai trò quan trọng trong việc quản lý ánh xạ giữa địa chỉ ảo và địa chỉ vật lý
Hình trên chỉ ra không gian địa chỉ ảo của hai tiến trình X và Y, mỗi tiến trình có một bảng trang riêng Các bảng trang này ánh xạ trang ảo của mỗi tiến trình vào trang vật lý trong bộ nhớ Khung trang áo số 0 của tiến trình X được ánh xạ vào
bộ nhớ tại khung trang vật lý số 1 và khung trang ảo số 1 của tiên trình Y được ánh xạ vào khung trang vật lý số 4 Mỗi mục trong bàng trang theo lý thuyết là chứa những thông tin sau :
Cờ Hợp Lệ (Valid Bit): Đây là một bit đánh dấu xem mục trong bảng trang
có hợp lệ hay không Nếu cờ này được đặt là 1, nghĩa là mục đó là hợp lệ và có thể sử dụng để ánh xạ địa chỉ ảo Ngược lại, nếu cờ này là 0, mục đó không hợp lệ
và không thể sử dụng
Số Khung Trang Vật Lý (Physical Frame Number): Đây là thông tin quan trọng nhất, xác định số khung trang vật lý mà mục này ánh xạ đến trong bộ nhớ Khi cần truy cập dữ liệu tại một địa chỉ ảo, số khung trang vật lý này sẽ được sử dụng để xác định vị trí trong bộ nhớ vật lý
Thông Tin Điều Khiển Truy Cập (Access Control Information): Thông tin này mô tả cách mà trang được sử dụng Nó bao gồm các thuộc tính như:
Trang 71 Quyền Ghi (Write Permission): Cho biết liệu trang có thể được ghi hay không Nếu được đặt là 1, nghĩa là trang có thể được ghi Ngược lại, nếu là 0, trang chỉ có quyền đọc
2 Chứa Đoạn Mã Thực Thi (Executable): Xác định xem trang có chứa đoạn
mã thực thi hay không Nếu là 1, trang có thể chứa mã thực thi, và nếu là 0, trang không chứa mã thực thi
Thông tin này giúp bộ xử lý quản lý quyền truy cập và kiểm soát việc truy cập vào các trang trong không gian địa chỉ ảo của các tiến trình
Khi bảng trang được truy cập, số khung trang ảo thường được sử dụng như một địa chỉ offset để xác định vị trí cụ thể trong bảng Trong trường hợp này, nếu khung trang ảo số 5 được sử dụng, nó sẽ tương ứng với phần tử số 6 của bảng trang (bắt đầu từ 0), với giả định rằng số khung trang ảo được sử dụng như là địa chỉ offset
Điều này giúp bộ xử lý nhanh chóng xác định được mục trong bảng trang tương ứng với địa chỉ ảo mà nó đang xử lý, từ đó có thể trích xuất thông tin cần thiết như số khung trang vật lý và các thuộc tính khác để thực hiện ánh xạ địa chỉ ảo sang địa chỉ vật lý trong bộ nhớ
Để chuyển từ địa chỉ ảo sang địa chỉ vật lý, bộ xử lý trước hết tiến hành xử lý số khung trang ảo và địa chỉ offset trong trang ảo tương ứng Trong bối cảnh của Mô hình trừu tượng phía trên và giả định kích thước trang là 0x2000 byte, giả sử có một địa chỉ ảo là 0x2194 thuộc không gian địa chỉ ảo của tiến trình Y Bộ xử lý sẽ chuyển địa chỉ này thành địa chỉ offset 0x194 vào khung trang áo số 1
Bộ xử lý sử dụng số khung trang ảo như một chỉ số để truy xuất vào bảng trang của tiến trình Nếu mục tương ứng trong bảng trang, tại địa chỉ offset đó, là hợp
lệ, bộ xử lý sẽ lấy số khung trang vật lý từ mục này Trái lại, nếu mục này không hợp lệ, tiến trình sẽ cố truy cập vào một vùng bộ nhớ ảo không tồn tại Trong tình huống này, bộ xử lý không thể xử lý địa chỉ này và chuyển quyền điều khiển cho
hệ điều hành để xử lý lỗi
Trang 8Bộ xử lý thông báo lỗi trang cho hệ điều hành khi một tiến trình cố gắng truy cập vào địa chỉ ảo không hợp lệ Hệ điều hành sau đó được thông báo về địa chỉ ảo gây ra lỗi và nguyên nhân của lỗi trang
Nếu địa chỉ ảo là hợp lệ, bộ xử lý sẽ lấy số khung trang vật lý tương ứng và nhân
nó với kích thước trang để xác định địa chỉ của trang cơ sở trong bộ nhớ vật lý Sau đó, bộ xử lý cộng thêm địa chỉ offset để có được địa chỉ vật lý cuối cùng cho lệnh hoặc dữ liệu cần truy cập
Ví dụ, với khung trang áo số 1 của tiến trình Y ánh xạ đến khung trang vật lý số 4, bắt đầu từ địa chỉ 0x8000 (4 x 0x2000) Khi cộng thêm địa chỉ offset 0x194, ta có địa chỉ vật lý cuối cùng là 0x8194
Cách ánh xạ địa chỉ ảo và địa chỉ vật lý này cho phép bộ nhớ ảo được ánh xạ vào
bộ nhớ vật lý của hệ thống theo bất kỳ thứ tự nào Ví dụ, trong Hình 3, khung trang ảo số 0 của tiến trình X ánh xạ đến khung trang vật lý số 1, trong khi khung trang ảo số 7 ánh xạ đến khung trang vật lý số 0, mặc dù nó có địa chỉ ảo cao hơn khung trang ảo số 0 trong bộ nhớ ảo Điều này làm rõ một điểm thú vị về bộ nhớ ảo: các trang trong bộ nhớ ảo không theo một thứ tự cố định nào khi được hiển thị trong bộ nhớ vật lý
III Tạo không gian hoán đổi
Một tệp swap được xem xét như một tệp thông thường đối với kernel, không
có đặc điểm nổi bật Điều duy nhất quan trọng là nó không chứa bất kỳ vùng trồng nào, điều này là quan trọng để đảm bảo tính hiệu quả khi sử dụng hàm mkswap() Tệp swap thường cần tồn tại trên đĩa cục bộ để đáp ứng yêu cầu của hệ thống và kernel khi thực hiện các hoạt động swap
Bit về các vùng trống là vô cùng quan trọng Tệp swap đặc biệt dành không gian trên đĩa để giúp kernel nhanh chóng đưa trang ra ngoài mà không cần thực hiện mọi bước tìm kiếm disk sector cho một tệp Sự hiện diện của vùng trồng trong một tệp swap có ý nghĩa là không có disk sector được đặt riêng biệt, từ đó kernel không thể sử dụng tệp đó
Để tạo một tệp swap mà không có vùng trống, bạn có thể sử dụng lệnh sau:
Trang 9$ dd if=/dev/zero of=/extra-swap bs=1024 count=1024
1024+0 records in
1024+0 records out
Trong đó, /extra-swap là tên của tệp swap và kích thước được xác định bởi tham
số count= Đối với kích thước tốt nhất, bạn nên chọn một bội số của 4, vì kernel thường ghi trang nhớ với kích thước 4 Kbyte Nếu kích thước không phải là bội
số của 4, có thể có những phần nhỏ không được sử dụng cuối cùng của tệp swap
Một phân vùng swap thông thường cũng không có gì đặc biệt Bạn có thể tạo
nó giống như các phân vùng khác, nhưng điều khác biệt là nó được sử dụng như một phân vùng thô, không chứa bất kỳ tệp hệ thống nào Phân vùng swap thường được đánh dấu với loại 82 (Linux swap), điều này không làm thay đổi cách kernel hoạt động, nhưng giúp việc liệt kê phân vùng trở nên rõ ràng hơn khi bạn kiểm tra thông tin phân vùng trên hệ thống
Sau khi bạn tạo một phân vùng swap hoặc một tệp swap, bước tiếp theo là ghi một chữ ký lên nơi bắt đầu của nó Chữ ký này chứa thông tin quản lý quan trọng được sử dụng bởi kernel Bạn có thể thực hiện điều này bằng cách sử dụng hàm mkswap(), như sau:
$ mkswap /extra-swap 1024
Setting up swapspace, size = 1044480 bytes
$
Lưu ý rằng không gian hoán đổi vẫn chưa được sử dụng ngay sau khi bạn thực hiện lệnh này; nó tồn tại nhưng kernel chưa sử dụng nó để cung cấp bộ nhớ ảo Cần chú ý khi sử dụng hàm mkswap(), vì nó không kiểm tra xem tệp hoặc phân vùng này đã được sử dụng hay chưa Việc này có thể dẫn đến việc ghi đè lên thông tin quan trọng hoặc phân vùng quan trọng nếu bạn không cẩn thận Do đó, bạn nên chỉ sử dụng hàm này khi cài đặt lên hệ thống của mình
Giới hạn kích thước cho mỗi không gian hoán đổi trong Linux thường được giới hạn là 127MB, tuy nhiên, bạn có thể sử dụng đồng thời tới 8 không gian hoán đổi, nâng tổng kích thước lên đến 1GB Tuy nhiên, thông tin này có thể đã thay
Trang 10đổi với các phiên bản kernel mới hơn, vì vậy, giới hạn cụ thể có thể thay đổi tùy thuộc vào cấu hình cụ thể của kernel Ví dụ, trên bộ xử lý i386, giới hạn có thể là 2GB
IV Sử dụng không gian hoán đổi
Sau khi tạo một không gian hoán đổi, để sử dụng nó, bạn cần thông báo cho kernel thông qua lệnh swapon Đường dẫn đến không gian hoán đổi được chuyển làm đối số
Ví dụ, để bắt đầu sử dụng một tệp swap tạm thời, bạn có thể sử dụng lệnh:
$ swapon /extra-swap
Không gian hoán đổi cũng có thể được tự động sử dụng bằng cách liệt kê chúng trong tệp /etc/fstab Dưới đây là một ví dụ về cách khai báo một phân vùng swap trong tệp /etc/fstab:
/extra-swap none swap sw 0 0
Lệnh swapon -a được sử dụng trong quá trình khởi động để bắt đầu hoán đổi trên tất cả các không gian hoán đổi được liệt kê trong tệp /etc/fstab Do đó, lệnh swapon thường chỉ được sử dụng khi cần thêm không gian hoán đổi
Để quản lý việc sử dụng không gian hoán đổi, bạn có thể sử dụng lệnh free Lệnh này hiển thị tổng số không gian hoán đổi, không gian đã sử dụng, và không gian còn trống
$ free
total used free shared buff/cache available
Mem: 15152 14896 256 2528 12404 12404
Swap: 32452 6684 25768
Để loại bỏ một không gian hoán đổi, bạn có thể sử dụng lệnh swapoff Tuy nhiên, cần lưu ý rằng không nên sử dụng lệnh này trừ khi bạn chắc chắn rằng không gian hoán đổi không còn được sử dụng Điều này có thể kiểm tra bằng lệnh free để đảm bảo có đủ bộ nhớ vật lý trống trước khi loại bỏ không gian hoán đổi
Trang 11Tất cả các không gian hoán đổi được sử dụng tự động bằng lệnh swapon -a
có thể được loại bỏ đồng thời bằng lệnh swapoff -a Lệnh này tự động tìm kiếm thông tin trong tệp /etc/fstab để xác định và loại bỏ các không gian hoán đổi Các không gian hoán đổi được quản lý thủ công vẫn có thể được loại bỏ bình thường Đôi khi, có thể có nhiều không gian hoán đổi được sử dụng mặc dù có đủ bộ nhớ vật lý trống Điều này có thể xảy ra nếu có nhu cầu hoán đổi tạm thời, nhưng sau
đó một tiến trình lớn giải phóng nhiều bộ nhớ vật lý Dữ liệu đã đưa ra sẽ không được đưa vào ngay lập tức, dẫn đến việc bộ nhớ vật lý còn trống một thời gian dài Mặc dù có thể không cần phải lo lắng về điều này, bạn nên hiểu rõ cách hoạt động để hiểu tình trạng hệ thống của mình
V Định vị không gian hoán đổi
Khi xác định kích thước không gian hoán đổi, quá trình này không chỉ là về việc đặt một con số gấp đôi bộ nhớ vật lý Dưới đây là một phân tích chi tiết để xác định kích thước không gian hoán đổi một cách hiệu quả:
1 Dự đoán tổng bộ nhớ cần thiết:
Sử dụng lệnh free để theo dõi tình trạng bộ nhớ và đảm bảo bạn hiểu rõ mức tiêu thụ bộ nhớ bởi các quá trình đang chạy
Sử dụng lệnh ps để xem thông tin chi tiết về từng quá trình, bao gồm bộ nhớ được sử dụng
Ước lượng tổng bộ nhớ cần cho các ứng dụng và dịch vụ mà bạn dự kiến chạy cùng một lúc
2 Thêm một lượng dự phòng:
Dựa trên kinh nghiệm và sự hiểu biết về các yếu tố không dự kiến, thêm một phần nhỏ vào ước lượng từ bước 1 Điều này giúp đảm bảo không gian hoán đổi
có thể chứa đựng các hoạt động bất ngờ mà không gây ra sự cạn kiệt bộ nhớ
3 Tính tổng kích thước không gian hoán đổi:
Sử dụng tổng bộ nhớ dự kiến từ bước 2 và trừ đi bộ nhớ vật lý trên hệ thống Kết quả sẽ là kích thước không gian hoán đổi cần thiết