Hầu hết các tài liệu về Bộ nhớ ảo chỉ ra rằng với tư cách là nhà phát triển ứng dụng, việc hiểu Bộ nhớ ảo có thể giúp tôi khai thác các khả năng mạnh mẽ của nó. Tôi đã tham gia vào việc phát triển các ứng dụng trên Linux trong một thời gian nhưng không quan tâm đến sự phức tạp của Bộ nhớ ảo trong khi tôi viết mã. Tui bỏ lỡ điều gì vậy? Nếu có, hãy làm sáng tỏ cách tôi có thể tận dụng các hoạt động của Bộ nhớ ảo. Khác cho tôi biết nếu tôi không có ý nghĩa với câu hỏi!Bộ nhớ ảo
Trả lời
Vâng, khái niệm này thực sự khá đơn giản. Tôi sẽ không lặp lại nó ở đây, nhưng bạn nên chọn bất kỳ cuốn sách nào về thiết kế OS và nó sẽ được giải thích ở đó. Tôi đề nghị "Khái niệm hệ điều hành" từ Silberscahtz và Galvin - đó là những gì tôi đã phải sử dụng trong trường Đại học và nó là tốt.
Một vài điều mà tôi có thể nghĩ về những gì ảo kiến thức Memory có thể cung cấp cho bạn là:
- Học để cấp phát bộ nhớ trên ranh giới trang để tránh lãng phí (chỉ áp dụng cho bộ nhớ ảo, không phải là đống thông thường/bộ nhớ ngăn xếp);
- Khóa một số trang trong RAM để chúng không bị hoán đổi sang HDD;
- Trang người giám hộ;
- Đặt trước một số dải địa chỉ và thực hiện bộ nhớ thực sau;
- Có thể sử dụng bit NX (không thực thi được) để tăng cường bảo mật, nhưng không chắc chắn về điều này.
- PAE để truy cập> 4GB trên hệ thống 32 bit.
Tuy nhiên, tất cả những điều này sẽ chỉ sử dụng trong các trường hợp khá cụ thể. Thật vậy, 99% các ứng dụng không cần phải lo lắng về điều này.
Đã thêm: Điều đó nói rằng, chắc chắn là tốt để biết tất cả những điều này, để bạn có thể xác định các tình huống như vậy khi chúng phát sinh. Chỉ cần cẩn thận - với sức mạnh đến trách nhiệm.
Đối với hầu hết các ứng dụng hiện nay, lập trình viên có thể vẫn không biết về hoạt động của bộ nhớ máy tính mà không gây hại. Nhưng đôi khi - ví dụ như trường hợp khi bạn muốn cải thiện dấu chân của chương trình - bạn sẽ phải tự mình thao túng bộ nhớ. Trong những tình huống như vậy, biết cách bộ nhớ được thiết kế để hoạt động là điều cần thiết.
Nói cách khác, mặc dù bạn thực sự có thể tồn tại mà không có nó, việc tìm hiểu về bộ nhớ ảo sẽ chỉ làm cho bạn trở thành một lập trình viên tốt hơn.
Và tôi nghĩ rằng Wikipedia article có thể là một khởi đầu tốt.
Có thể là 9 trong số 10 trường hợp bạn không cần phải lo lắng về việc quản lý bộ nhớ ảo. Đó là công việc của hạt nhân. Có thể trong một số ứng dụng chuyên biệt cao, bạn cần phải tinh chỉnh xung quanh chúng.
Tôi biết một bài viết nói về quản lý bộ nhớ máy tính với sự nhấn mạnh trên Linux [http://lwn.net/Articles/250967]. Hi vọng điêu nay co ich.
Đó là một câu hỏi mơ hồ.
Cách bạn có thể sử dụng bộ nhớ ảo, chủ yếu là thông qua việc sử dụng các tệp ánh xạ bộ nhớ. Xem trang hướng dẫn mmap() để biết thêm chi tiết.
Mặc dù, có thể bạn đang sử dụng nó ngầm, vì mọi thư viện động được triển khai dưới dạng tệp được ánh xạ và nhiều thư viện cơ sở dữ liệu cũng sử dụng chúng.
Giao diện sử dụng các tệp được ánh xạ từ các ngôn ngữ cấp cao hơn thường khá bất tiện, điều này khiến chúng ít hữu ích hơn.
Những lợi ích chính của việc sử dụng các file ánh xạ là:
- Không overhead hệ thống gọi khi truy cập vào các bộ phận của tập tin (điều này thực sự có thể là một bất lợi, như một lỗi trang có thể có càng nhiều overhead dù sao, nếu nó xảy ra)
- Không cần phải sao chép dữ liệu từ bộ đệm hệ điều hành sang bộ đệm ứng dụng - điều này có thể cải thiện hiệu suất
- Khả năng chia sẻ bộ nhớ giữa các quy trình.
Một số nhược điểm là:
- 32-bit máy có thể chạy ra khỏi không gian địa chỉ dễ dàng
- Tricky để xử lý tập tin mở rộng một cách chính xác
- Không có cách nào dễ dàng để xem có bao nhiêu/những trang là Tuy nhiên, có thể có một số cách khác nhau)
- Không tốt cho các ứng dụng thời gian thực, do lỗi trang có thể gây ra yêu cầu IO, việc chặn luồng (tệp có thể bị khóa trong bộ nhớ nhưng chỉ khi có đủ).
Nếu bạn quan tâm đến hiệu suất - hiểu biết về phân cấp bộ nhớ là quan trọng.
Đối với các tập dữ liệu nhỏ được chứa đầy đủ trong bộ nhớ vật lý, bạn cần phải quan tâm đến bộ nhớ đệm (bộ nhớ truy cập từ bộ nhớ cache nhanh hơn nhiều).
Khi xử lý các tập dữ liệu lớn - có thể được phân trang do thiếu bộ nhớ vật lý, bạn cần phải cẩn thận để giữ cho các mẫu truy cập của bạn được bản địa hóa.
Ví dụ: nếu bạn khai báo ma trận trong C (int a[rows][cols]
), nó được phân bổ theo hàng. Vì vậy, khi quét ma trận, bạn cần quét theo hàng thay vì theo cột. Nếu không, bạn sẽ phân trang cùng một dữ liệu vào và ra nhiều lần.
Một vấn đề khác là sự khác biệt giữa bẩn và sạch dữ liệu được lưu trữ trong bộ nhớ. Dữ liệu sạch là thông tin được tải từ tệp không được chương trình sửa đổi. Các hệ điều hành có thể trang ra dữ liệu sạch (có lẽ tùy thuộc vào cách nó được tải) mà không cần ghi nó vào đĩa. Trước tiên, các trang bẩn phải được ghi vào tệp hoán đổi.
- 1. Bộ nhớ ảo và sbrk
- 2. Android có hỗ trợ bộ nhớ ảo
- 3. Bộ nhớ ảo có vô hạn không?
- 4. bộ nhớ ảo đã cạn kiệt: Không thể cấp phát bộ nhớ
- 5. Bộ nhớ ảo và mã có thể định vị lại
- 6. GuardMalloc kết quả trong bộ nhớ ảo cạn kiệt
- 7. Tại sao apache giữ offsets vào bộ nhớ nơi php-cli giữ địa chỉ bộ nhớ ảo?
- 8. C++ nhớ bảng chức năng ảo tốn
- 9. Bộ nhớ cache, tắt bộ nhớ đệm
- 10. Tôi có nên quản lý các trang hoặc chỉ dựa vào bộ nhớ ảo không?
- 11. Bộ nhớ ảo và căn chỉnh - chúng kết hợp với nhau như thế nào?
- 12. Làm thế nào để giảm mức tiêu thụ bộ nhớ ảo?
- 13. Không gian địa chỉ tiến trình so với bộ nhớ ảo
- 14. Làm thế nào để hạn chế sử dụng bộ nhớ ảo bởi node.js?
- 15. Mức sử dụng bộ nhớ ảo cao + phân bổ thấp trên iOS
- 16. Làm thế nào để dịch địa chỉ bộ nhớ ảo sang địa chỉ thực?
- 17. Sự khác biệt giữa "bộ nhớ ảo" và "không gian hoán đổi" là gì?
- 18. Ứng dụng iPhone và iPad Sử dụng bộ nhớ thực và ảo
- 19. Xác định ai/dung lượng bộ nhớ ảo 5.5 GB trong w3wp.exe
- 20. Bộ nhớ ảo hạt nhân của mỗi quá trình có chứa gì?
- 21. Máy ảo hiện đại xử lý việc cấp phát bộ nhớ như thế nào?
- 22. Phân bổ bộ nhớ tĩnh trong bộ nhớ cache CPU trong c/C++: có thể không?
- 23. máy ảo
- 24. Giới hạn bộ nhớ VM của Python
- 25. Đơn vị MMU (Bộ quản lý bộ nhớ) trong bộ xử lý bảo vệ các phân đoạn bộ nhớ
- 26. Làm cách nào để đặt bộ nhớ cho máy ảo trong IntelliJ? Tôi có phải đặt riêng các tùy chọn bộ nhớ Tomcat không?
- 27. bộ nhớ cache chia sẻ bộ nhớ trong bộ nhớ actorecord
- 28. Bố cục bộ nhớ lớp CLR
- 29. Java sử dụng nhiều bộ nhớ hơn so với bộ nhớ phân bổ
- 30. truy cập bộ nhớ so với bản sao bộ nhớ
Ngoài ra; Bộ nhớ ảo cung cấp cho bạn một cơ sở để che dấu phân mảnh bộ nhớ vật lý. – RandomNickName42
@ RandomNickName42 - Nó cũng được sử dụng cho các tệp ánh xạ bộ nhớ và tải một phần tệp .exe/.dll, nhưng biết rằng không giúp ích nhiều trong cuộc sống hàng ngày - ngoại trừ hiểu biết thêm về con thú phức tạp đó là máy tính ngày nay. –