Nội dung nghiên cứu về Virtual memory (bộ nhớ ảo) - Nguyên lý hệ điều hành - Học Viện Kỹ Thuật Mật Mã
Memory system trong máy tính là tập hợp các thành phần lưu trữ dữ liệu của máy tính, mỗi thành phần đều có đặc điểm chung là lưu trữ liệu với thành các ô nhớ với địa chỉ nhớ liên tiếp như một mảng, một số thành phần của Computer Memory System có thể kể đến như. Tài liệu giúp bạn tham khảo và đạt kết quả tốt. Mời bạn đọc đón xem!
Preview text:
Nội dung nghiên cứu về Virtual memory (bộ nhớ ảo)
Đôi chút về Memory system (hệ thống bộ nhớ) trước khi
có Virtual Memory (Bộ nhớ ảo hay VM) Sơ lược về MS
Memory system trong máy tính là tập hợp các thành phần lưu trữ dữ liệu của máy tính, mỗi thành
phần đều có đặc điểm chung là lưu trữ liệu với thành các ô nhớ với địa chỉ nhớ liên tiếp như một mảng,
một số thành phần của Computer Memory System có thể kể đến như: -
Registers: Đây là bộ nhớ nhanh nhất, nằm trong CPU, dùng để lưu trữ tạm thời các giá trị đang được xử lý. -
Main Memory (RAM): Là bộ nhớ chính, dung lượng lớn, tốc độ truy xuất thấp hơn so với cache
và register, nhưng vẫn nhanh hơn so với bộ nhớ thứ cấp (như ổ cứng). Đây là nơi lưu trữ dữ liệu
chương trình đang được thực thi. -
Cache: Bộ nhớ là một bộ nhớ đệm, thực hiện nhiệm vụ lưu trữ những dữ liệu tài nguyên thường
được truy cập bởi CPU. Bộ nhớ này thường nằm ở trong CPU hoặc nằm ở vị trí cầu nối giữa CPU
và phần bộ nhớ chương trình hệ thống, nhưng đây thường là bộ nhớ có dung lượng nhỏ. -
Secondary Storage: Bộ nhớ thứ cấp như ổ cứng (HDD, SSD) có dung lượng lớn nhất, nhưng tốc
độ truy cập thấp nhất. Thường có nhiệm vụ lưu trữ dữ liệu. -
Memory Control er: Là thành phần điều khiển việc giao tiếp giữa CPU và RAM, quản lý việc
đọc/ghi dữ liệu vào bộ nhớ chính.
Trong một hệ thống máy tính ban đầu, khi một chương trình được người dùng khởi chạy,
Operation system (Hệ điều hành hay OS) sẽ thực hiện tìm kiếm tệp lệnh thực thi của chương trình (trong
window là các tệp Portable Executable như các tệp có phần mở rộng *.exe, *.dll hay trong linux là các tệp
Executable and Linkable Format và Mac là Mach-O) được lưu trữ bên trong bộ nhớ thứ cấp. Khi tìm
thấy, OS sẽ tải các phần cần thiết của chương trình vào RAM. Đây là bước gọi là "loading" (tải), trong
bước này OS sẽ thực hiện tạo ra các memory address space (không gian địa chỉ bộ nhớ) riêng biệt cho
chương trình. Không gian địa chỉ này bao gồm các phân đoạn: -
Code Segment: Lưu trữ mã thực thi của chương trình.
- Data Segment: Lưu trữ các biến toàn cục và dữ liệu được khởi tạo. -
Heap Segment: Dùng để cấp phát bộ nhớ đọng trong quá trình chạy chương trình. -
Stack Segment: Lưu trữ các lời gọi hàm, biến cục bộ, và các thông tin về luồng thực thi.
Dữ liệu của chượng trình sẽ được liên tiếp với địa chỉ vùng nhớ của chương trình. Sau khi OS nạp
dữ liệu chường trình cần thiết vào bộ nhớ RAM, kế đế OS thiết lập con trỏ stack để quản lý việc gọi hàm
và lưu trữ các biến cục bộ, và con trỏ heap để quản lý việc cấp phát bộ nhớ động. Stack sẽ được đẩy lên
hoặc kéo xuống khi các hàm được gọi hoặc kết thúc. Heap sẽ tăng hoặc giảm kích thước khi cấp phát
hoặc giải phóng bộ nhớ động. Khi đã hoàn tất việc chuẩn bị, CPU bắt đầu thực thi chương trình. Nó đọc
các lệnh từ code segment, truy cập dữ liệu từ data segment hoặc heap, và sử dụng stack để quản lý các
hàm và biến cục bộ. Trong suốt quá trình chạy, chương trình có thể yêu cầu thêm bộ nhớ (ví dụ: khi bạn
cấp phát bộ nhớ động với “malloc” trong C/C++ hoặc “new” trong C++/Java). Hệ điều hành sẽ cung cấp
thêm bộ nhớ từ heap hoặc từ bộ nhớ ảo nếu cần thiết. Hệ điều hành cũng quản lý việc giải phóng bộ nhớ
khi các biến hoặc đối tượng không còn được sử dụng. Khi chương trình kết thúc, hệ điều hành sẽ giải
phóng toàn bộ không gian địa chỉ của chương trình, bao gồm việc giải phóng RAM đã được cấp phát cho
các phân đoạn khác nhau của chương trình.
Ảnh 1. Tiến trinh trong bộ nhớ Đặt vấn đề
*Chỗ này em Hải nói theo dutube (lười viết vcl)
*Mấy anh đẹp trai làm ppt làm chỗ này theo link này giúp em: 3 vấn đề đối với bộ nhớ
Vậy ta có thể thấy được gì từ các bước trên. Khi OS thực hiện thao tác chạy một chương trình nào
đó thì tài nguyên dữ liệu của chương trình sẽ chiếm một phần của bộ nhớ RAM được cấp phát bởi hệ điều
hành. Sau đó thì chương trình sẽ liên tục chiếm dụng vùng nhớ liên tiếp với độ lớn được cấp phát để chạy
các thao tác execution (thực thi chương trình) cho đến khi nhận được flag termination (cờ hủy chương
trình) từ hệ điều hành.
Ta có thể giả xử ba chương trình P1 cần 1GB memory space, P2 cần 2GB memory space, P3 -
cần 2GB memory space, và bộ nhớ ram với 4GB ram tương đương 32-bit nhớ
Khi P1 chạy đồng thời với P2 thì 3GB vùng nhớ trên RAM sẽ được chiếm dụng hiệu quả
mà không có vấn đề gì, điều này cũng đúng lần lượt đối với khi chạy P2-P3 hay P1-P3. Tuy
nhiên, giả xử sau khi P1 – P2 chạy thì P1, được ngừng đi, thì khi đó số vùng nhớ trên RAM còn
lại là 2GB vùng nhớ, nhưng vấn đề phát sinh ở đây lại là, do khi chương trình P1 được hủy và thì
ta sẽ có các phân đoạn như sau vùng 1 1GB vùng nhớ, vùng 2 2GB vùng nhớ tuy nhiên đã bị
chiếm dụng bởi P2, vùng 3 1GB vùng nhớ. Như vậy ta có thể thấy rằng tổng vùng nhớ trên RAM
vừa đủ để thực hiện P3. Tuy nhiên vấn đề phát sinh ở đây là do bộ nhớ chương trình được cấp
phát là liên tiếp nhau, do đó tuy là tổng dung lượng vùng nhớ vẫn đủ để chạy chương trình P3
nhưng lại không thể thực hiện được, và điều này gây ra sự lãng phí vùng nhớ vùng 1 và vùng 3.
Trong trường hợp này, VM đóng vai trò là trung gian để liên kết bộ nhớ chương trình với
bộ nhớ của máy tính. Bắt đầu từ đoạn P1 được hủy, khi P3 bắt đầu chạy thì ta có thể map bộ nhớ
của P3 tới bất kì chỗ nào trong bộ nhớ máy tính. Trong trường hợp này thì 1GB của P3 sẽ được
map vào chỗ trống của P1 để lại, 1GB còn lại thì map vào chỗ bộ nhớ trống ban đầu của máy
tính. => Vấn đề được giải quyết
Bộ nhớ ảo (Virtual Memory) 1. Khái niệm
Bộ nhớ ảo là một kỹ thuật quản lý bộ nhớ được sử dụng bởi hệ điều hành để mở
rộng khả năng lưu trữ của bộ nhớ vật lý (RAM) bằng cách sử dụng bộ nhớ thứ cấp
(như ổ cứng HDD hoặc SSD). 2. Ưu điểm
- Tăng dung lượng bộ nhớ: Bộ nhớ ảo cho phép các chương trình sử dụng
nhiều bộ nhớ hơn dung lượng vật lý có sẵn trong RAM. Điều này cực kỳ hữu
ích khi chạy các ứng dụng lớn hoặc nhiều ứng dụng cùng lúc mà dung lượng RAM không đủ.
- Cải thiện khả năng quản lý bộ nhớ: Bộ nhớ ảo giúp hệ điều hành quản lý bộ
nhớ hiệu quả hơn thông qua kỹ thuật phân trang (paging). Các ứng dụng không
cần phải quan tâm đến việc phân bổ bộ nhớ phức tạp, vì bộ nhớ ảo cung cấp
một không gian địa chỉ bộ nhớ liên tục, trong khi thực tế, bộ nhớ có thể bị phân mảnh.
- Tăng độ bảo mật và ổn định: Mỗi tiến trình có không gian địa chỉ ảo riêng,
giúp ngăn chặn các tiến trình can thiệp lẫn nhau. Điều này tăng cường độ bảo
mật và ổn định cho hệ thống, vì nếu một chương trình gặp lỗi và ghi vào vùng
nhớ không đúng, nó sẽ không ảnh hưởng đến các chương trình khác.
- Hỗ trợ đa nhiệm (Multitasking): Bộ nhớ ảo cho phép nhiều chương trình
chạy đồng thời mà không cần phải lo lắng về xung đột bộ nhớ. Khi bộ nhớ vật
lý đầy, hệ điều hành có thể chuyển một số trang không được sử dụng thường
xuyên xuống ổ cứng (swap space), cho phép RAM trống phục vụ các tiến trình đang hoạt động.
- Giảm sự phụ thuộc vào RAM: Nhờ vào kỹ thuật swapping, hệ điều hành có
thể chuyển bớt dữ liệu từ RAM sang ổ cứng khi không cần thiết, giúp tối ưu
hóa việc sử dụng RAM và tránh tình trạng hết bộ nhớ.
- Tối ưu hóa hiệu suất: Bộ nhớ ảo sử dụng Translation Lookaside Buffer (TLB)
để lưu trữ các ánh xạ từ địa chỉ ảo sang địa chỉ vật lý, giúp tăng tốc quá trình
truy cập bộ nhớ. Ngoài ra, kỹ thuật demand paging chỉ tải những trang cần
thiết vào RAM, giảm thiểu việc sử dụng tài nguyên không cần thiết. 3. Nhược điểm
- Hiệu suất thấp hơn: Khi hệ thống phải sử dụng bộ nhớ ảo, đặc biệt là khi
chuyển đổi giữa RAM và swap space trên ổ cứng, quá trình này diễn ra
chậm hơn nhiều so với việc truy cập trực tiếp vào RAM. Điều này dẫn đến
hiệu suất hệ thống giảm đáng kể, gây ra hiện tượng lag hoặc chậm phản hồi.
- Tăng thời gian truy cập: Quá trình chuyển đổi giữa địa chỉ ảo và địa chỉ
vật lý, cùng với việc tải dữ liệu từ bộ nhớ thứ cấp, làm tăng độ trễ truy cập.
- Làm hao mòn ổ cứng: Sử dụng bộ nhớ ảo thường xuyên, đặc biệt là khi
swap space trên ổ cứng được sử dụng nhiều, có thể làm tăng tốc độ hao
mòn của ổ cứng, đặc biệt là các ổ SSD (Solid State Drive), do số lần
ghi/xóa dữ liệu tăng lên.
- Tiêu tốn tài nguyên CPU: Bộ nhớ ảo yêu cầu CPU thực hiện thêm các
thao tác quản lý bộ nhớ, chẳng hạn như chuyển đổi địa chỉ ảo sang địa chỉ
vật lý. Điều này có thể tiêu tốn thêm tài nguyên CPU, dẫn đến giảm hiệu
suất cho các ứng dụng khác.
- Chiếm dung lượng lưu trữ: Bộ nhớ ảo chiếm một phần dung lượng của bộ
nhớ thứ cấp, làm giảm không gian lưu trữ khả dụng cho các tệp và ứng dụng khác.
Document Outline
- Đôi chút về Memory system (hệ thống bộ nhớ) trước
- Sơ lược về MS
- Đặt vấn đề
- Bộ nhớ ảo (Virtual Memory)