Tại sao lại cần bộ nhớ ảo?

Em vừa được học sơ qua phần bộ nhớ trong RAM, theo em biết được RAM là một bộ nhớ vật lý bên cạnh nó còn có một bộ nhớ ảo, vậy cho em được hỏi tại sao lại cần bộ nhớ ảo và nó gồm những thành phần nào ( em nghe mấy đàn anh bảo có cả stack và heap trong đó ??? ) ?

1 Like

Chắc trong sách có mà.

1 Like

Dạ tại em bên Điện tử viễn thông nên ko được học nhứng thứ như thế này… em tự tìm hiểu đến đây thôi , anh biết sách nào giới thiệu cho em được k? Em đang theo nhúng ạ

mình nghĩ bài viết này sẽ giúp ích cho bạn :slight_smile:

Cảm ơn bạn để mình đọc thử xem :)))

Bạn có 4 tỷ mảnh ruộng xịn sò cần cho thuê kiếm lời. Một mảnh ruộng thuê là lời 10k trả theo ngày. :~
Cái bạn cho người này người nọ thuê còn lại 1 tỷ mảnh ruộng. Cái tự nhiên có người bảo: “Tao muốn thuê 1.5 tỷ mảnh ruộng, mày có còn dư mà cho tao thuê không?”. Tất nhiên với máu làm ăn, khi này dù có trong tay 1 tỷ mảnh ruộng nhưng bạn vẫn bảo là “Quất luôn đi anh”.
Khi đấy bạn đang dùng chiến thuật ruộng ảo để đầu tư kinh doanh kiếm lời <(").

Tương tự bộ nhớ ảo, khi một chương trình bảo Hệ Điều Hành (HDH) là: “Anh mày cần 2GB RAM để chạy này, Yes or No?” Tất nhiên để chiều ý người dùng thì HDH sẽ chém gió cho chương trình là: “Dạ em đang có 4 tỷ ô nhớ trong RAM đây, a thích xài cái nào là em có hếtttttttttt”. Rồi cấp phát và cho nó chạy trong làn lệ buông rơi.

Thì đây là một trong những ứng dụng của bộ nhớ ảo. Hồi mà xưa xửa xừa xưa, khi không đủ RAM, chương trình sẽ không thể chạy được và nhiều khi phải chờ tới khi nào đủ chỗ thì thôi. Tuy nhiên với tài quản lý và chém gió của HDH hiện đại ngày nay, dù cho bộ nhớ thật có thể không đủ, thì HDH sẽ sắp xếp và phân chia khéo léo thông qua Bộ nhớ ảo, giúp phần nào loại bỏ việc trên.

Còn muốn tìm hiểu kỹ hơn. Như việc “Ủa ổng còn 1 tỷ mảnh ruộng mà sao kiếm đâu ra 1.5 tỷ cho thuê hay vậy ta?” Thì ôm cuốn sách mang tên: Modern Operating Systems bản thứ 4 nhé.

11 Likes

Rất chi tiết cảm ơn anh rất nhiều :smiley:
Sẵn tiện cho em được hỏi , lúc học c++ phần con trỏ co nhắc đến 4 vùng nhớ code seg, data seg, stack và heap seg vậy nó nằm ở đâu? có phải trong RAM không ạ?
Em có bức hình này… thắc mắc suốtprocess_relocation
P/s: em có hỏi nhiều quá mong mấy anh thông cảm …

nó nằm ở đâu trời biết :V thanh ghi 32 biến, cache Level 1 vài chục vài trăm KB, cache L2 1 MB, cache L3 4MB, L4 8MB, rồi mới tới RAM, mà có khi ko đủ RAM nó xuống SSD hoặc HDD luôn ko chừng.

cái quan trọng của bộ nhớ ảo là tránh đọc ghi rờ rẫm bậy bạ qua chỗ hiểm của mấy chương trình khác ko ai nói à :V Nếu được cho phép đọc ghi bộ nhớ thật thì tạo 1 con trỏ trỏ tới vùng nhớ của hệ điều hành đổi tên là Windows XXX chơi :V

3 Likes

Đầu tiên em nên nhớ là HDH có thể thực hiện muti proccess có nghĩa là có nhiều chương trình sử dụng cùng system resouces, trông đó có memory. Mỗi một chương trình(program) cần được cấp phát 1 vùng nhớ để chạy(physical memory)
Nếu chỉ sử dụng bộ nhớ vật lý cho nhiều proccess có khả năng program đang chạy sẽ làm corrupt memory của 1 program đang chạy khác.
Vitual memory cho phép share physical memory mà không gây corrupt program khác.

2 Likes

Theo mình được biết. RAM là nơi dùng chung của toàn bộ hệ thống. Dữ liệu của mỗi phần mềm trên đó phân mảnh lung tung chưởng. Nó sẽ không liền khối và chia 4 phần như cái ảnh trên.

RAM ảo sẽ “lừa” ứng dụng là vùng dữ liệu của nó là một vùng liền mạch chia khối như hình trên. Khi truy cập dữ liệu nó sẽ âm thầm ánh xạ từng địa chỉ ảo tới địa chỉ vật lý.
Nếu sai anh em đính chính :stuck_out_tongue:

3 Likes

Quên, data trong RAM, OS có thể move sang swap area(trên window là pagefile còn trong linux là là swap partion)
Do vậy Vitual Memory không chỉ ánh xạ qua Physycal memory mà còn qua swap area nữa nhé.

2 Likes

cũng là thông qua địa chỉ ảo để bảo vệ mà :V

1 Like

Dạ em cảm ơn các anh!!! đọc qua thì em có hiểu sơ sơ rồi, nhưng em nghĩ em nên đọc thêm sách ạ

1 Like

Như vậy theo suy đoán của mình thì một máy tính không có OS và một ứng dụng chơi trực tiếp với physical mem sẽ có tốc độ khủng hơn rất nhiều ?

nhưng chắc chỉ 1 người viết vì mấy người khác viết chương trình khác vào thế nào cũng dẫm RAM lên nhau

2 Likes

Chắc là máy chuyên dụng rồi :smiley:

À thiết bị chuyên dụng chỉ chạy duy nhất 1 app :slight_smile:

2 Likes

Hi Phước,
Hình như bộ nhớ ảo e đang nói tới ở đây là Virtual Memory đúng ko.

Giả sử thế này, e ko biết tiếng Nhật, nhưng e cần nói chuyện với 1 người Nhật.
Vậy e sẽ nhờ một thông dịch viên làm cầu nối.
E nói với thông dịch viên bằng tiếng Việt.
Sau đó, ông ấy sẽ nói lại cho người kia bằng Tiếng Nhật

Thông thường, application của mình sẽ không làm việc trực tiếp với RAM.
Mà nó sẽ nhờ Hệ Điều Hành để làm cầu nối tới RAM.
Application và HĐH sẽ nói chuyện với nhau bằng những Virtual Memory.
HĐH và RAM sẽ nói chuyện với nhau bằng những Physic Memory.

Thử hình dung, nếu e ko biết tiếng Nhật, nhưng cố nói tiếng Nhật thì thế nào, sẽ rất nhiều rủi ro đúng ko.
Thì ở đây cũng vậy, Application ko hiểu RAM, nếu để Application làm việc trực tiếp với RAM sẽ rất nguy hiểm.
Hệ điều hành sẽ nói chuyện với RAM, rồi sau đó nói lại cho Application bằng một thứ ngôn ngữ dể hiểu hơn là Virtual Memory.

Còn Virtual Memory được cấu trúc như thế nào thì e đọc thêm ở đây nghen:

3 Likes

Em mới vào cộng đồng daynhauhoc mà thấy mấy anh giải đáp thắc mắc rất nhanh sử dụng ví dụ rất dễ hiểu… cảm ơn anh maxterjy và mọi người.

1 Like

Bạn tham khảo ở đây có giải thích kỹ và chi tiết này:
https://vimentor.com/vi/lesson/gioi-thieu-co-che-virtual-memory

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?