2009-02-04 38 views
5

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

4

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.

+0

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

+0

@ 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. –

1

Đố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.

1

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.

2

Đó 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ó đủ).
1

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ẩnsạ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.

Các vấn đề liên quan