2013-01-13 44 views
7

Hoạt động Tôi không rõ ràng với quản lý bộ nhớ khi một quá trình trong thực hiện trong thời gian chạynhư thế nào một chương trình chạy trong bộ nhớ và cách bộ nhớ được xử lý bởi hệ thống

Dưới đây là một sơ đồ enter image description here

tôi không rõ ràng với những điều sau đây trong hình ảnh:

  • 1) Ngăn xếp mà hình ảnh này đề cập đến là gì?
  • 2) Phân đoạn ánh xạ bộ nhớ là tham chiếu đến ánh xạ tệp là gì?
  • 3) Heap phải làm gì với quy trình. Là heap chỉ được xử lý trong một quá trình hoặc là một cái gì đó heap duy trì bởi hạt nhân hệ điều hành và sau đó không gian bộ nhớ được phân bổ bởi malloc (sử dụng heap) khi bao giờ một ứng dụng không gian người dùng gọi này?

Bài báo đề cập đến http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

không gian địa chỉ ảo, mà trong chế độ 32-bit luôn là một khối 4GB địa chỉ bộ nhớ. Các địa chỉ ảo được ánh xạ tới bộ nhớ vật lý của bảng trang,

  • 4) Điều này có nghĩa rằng tại một thời điểm chỉ có một chương trình chạy trong bộ nhớ chiếm toàn bộ 4 GB RAM?

Các bài viết tương tự cũng đề cập đến

Linux randomizes ngăn xếp, bộ nhớ phân khúc lập bản đồ, và đống bằng cách thêm offsets đến các địa chỉ bắt đầu của họ. Thật không may là địa chỉ 32-bit không gian là khá chặt chẽ, để lại ít phòng cho ngẫu nhiên và cản trở hiệu quả của nó.

  • 5) Có đề cập đến randomizing ngăn xếp trong một quá trình hoặc là nó đề cập đến một cái gì đó còn lại sau khi đếm không gian của tất cả các quá trình?
+1

Đó là rất nhiều câu hỏi. –

+2

thực sự nó đã được một tuần và tôi đã không thể hiểu bài viết này thats lý do tại sao tôi đăng ngay cả khi bạn có thể trả lời một phần sẽ giúp một số người khác sẽ trả lời một phần khác và như vậy –

Trả lời

7

1) Ngăn xếp mà hình ảnh này đề cập đến là gì?

stack dùng để phân bổ biến cục bộ và khung gọi chức năng (bao gồm các thông số như tham số chức năng, nơi trả về sau khi hàm đã gọi, v.v.).

2) Phân đoạn ánh xạ bộ nhớ là tham chiếu đến ánh xạ tệp là gì?

Memory mapping segment giữ các thư viện được liên kết. Nó cũng là nơi mà các cuộc gọi mmap được phân bổ. Nói chung, một tập tin ánh xạ bộ nhớ chỉ đơn giản là một vùng bộ nhớ được hỗ trợ bởi một tập tin.

3) Heap phải làm gì với quy trình. Là heap chỉ được xử lý trong một quá trình hoặc là một cái gì đó heap duy trì bởi hạt nhân hệ điều hành và sau đó không gian bộ nhớ được phân bổ bởi malloc (sử dụng heap) khi bao giờ một ứng dụng không gian người dùng gọi này?

heap là quy trình cụ thể và được quản lý bởi chính quy trình, tuy nhiên phải yêu cầu bộ nhớ từ hệ điều hành bắt đầu (và khi cần). Bạn là chính xác, đây là nơi thường được phân bổ malloc cuộc gọi. Tuy nhiên, hầu hết các triển khai malloc đều sử dụng số mmap để yêu cầu khối bộ nhớ, do đó, thực sự ít phân biệt giữa phân đoạn heap và bộ nhớ ánh xạ. Thực sự, heap có thể được coi là một phần của phân đoạn bộ nhớ được ánh xạ.

4) Điều này có nghĩa là tại một thời điểm chỉ có một chương trình chạy trong bộ nhớ chiếm toàn bộ 4 GB RAM?

Không, đó có nghĩa là số lượng nhớ địa chỉ sẵn cho các chương trình được giới hạn đến 4 GB RAM, những gì đang thực sự chứa trong bộ nhớ tại bất kỳ thời điểm nào là phụ thuộc vào cách hệ điều hành phân bổ bộ nhớ vật lý, và nằm ngoài phạm vi của câu hỏi này.

5) Có phải nó đề cập đến việc ngẫu nhiên chồng trong một quy trình hay nó đề cập đến thứ gì đó còn lại sau khi đếm không gian của tất cả các quy trình?

Tôi chưa bao giờ thấy bất kỳ điều gì gợi ý 4gb không gian "cản trở" hiệu quả của các chiến lược cấp phát bộ nhớ được hệ điều hành sử dụng. Ngoài ra, như các ghi chú @Jason, các vị trí của ngăn xếp, phân đoạn bộ nhớ được ánh xạ và đống được phân ngẫu nhiên "để ngăn chặn các khai thác bảo mật có thể dự đoán được, hoặc ít nhất làm cho chúng khó hơn rất nhiều so với mọi quá trình mà hệ điều hành quản lý chính xác cùng một vị trí bộ nhớ ảo. " Để cụ thể, hệ điều hành sẽ ngẫu nhiên các địa chỉ ảo cho ngăn xếp, vùng được ánh xạ bộ nhớ và vùng heap. Trên ghi chú đó, mọi thứ mà quy trình nhìn thấy là virtual address, sau đó được ánh xạ tới địa chỉ thực trong bộ nhớ, tùy thuộc vào vị trí của trang cụ thể. Bạn có thể tìm thấy thêm thông tin về ánh xạ giữa các địa chỉ ảo và địa chỉ vật lý here.

wikipedia article về phân trang là điểm khởi đầu tốt để tìm hiểu cách hệ điều hành quản lý bộ nhớ giữa các quy trình và là tài nguyên tốt để đọc để trả lời câu hỏi 4 và 5. Tóm lại, bộ nhớ được cấp phát cho các trang , và các trang này hoặc tồn tại trong bộ nhớ chính, hoặc đã được "phân trang" ra đĩa. Khi một địa chỉ bộ nhớ được yêu cầu bởi một tiến trình, nó sẽ chuyển trang từ đĩa sang bộ nhớ chính, thay thế một trang khác nếu cần. Có nhiều chiến lược thay thế trang khác nhau được sử dụng và tôi giới thiệu cho bạn bài viết để tìm hiểu thêm về những lợi thế và bất lợi của mỗi bài viết.

+0

Là một lưu ý phụ, toàn bộ các khóa học đại học được dành cho việc học chỉ các chủ đề * giới thiệu * và các vấn đề cơ bản liên quan đến các câu hỏi mà bạn vừa hỏi, vì vậy đừng mong đợi học qua đêm. (Mặc dù nếu bạn làm, nhiều quyền lực hơn cho bạn!) –

+0

cảm ơn rất nhiều dicarlo2 cho sự giúp đỡ của bạn, tôi sẽ đánh giá cao nếu bạn có thể đưa ra gợi ý cho một số hướng dẫn hoặc sách cho các khóa học đại học mà bạn đã đề cập –

+0

@RegisteredUser Chắc chắn, tại UIUC những chủ đề này được đề cập ngắn gọn trong nửa sau của khóa học kiến ​​trúc máy tính giới thiệu và khoảng một nửa khóa học lập trình hệ thống (http://courses.engr.illinois.edu/cs241/fa2012/). Sau này có lẽ là phù hợp nhất với các câu hỏi bạn đã hỏi, xem ghi chú trên bộ nhớ trong liên kết tôi đã cung cấp. –

1

Phần 1. Stack ...

Một chức năng có thể gọi một chức năng, mà có thể gọi hàm khác. Bất kỳ biến nào được phân bổ sẽ kết thúc trên stack thông qua mỗi lần lặp. Và de-phân bổ như mỗi chức năng thoát, do đó "ngăn xếp". Bạn có thể xem Wikipedia cho nội dung này ... http://en.wikipedia.org/wiki/Stack_%28abstract_data_type%29

+0

cảm ơn +1 cho liên kết wiki này –

1

Linux sẽ ngẫu nhiên ngăn xếp, phân đoạn ánh xạ bộ nhớ và đống bằng cách thêm bù đắp vào địa chỉ xuất phát của chúng. Thật không may là không gian địa chỉ 32-bit là khá chặt chẽ, để lại ít chỗ cho ngẫu nhiên và cản trở hiệu quả của nó.

Tôi tin rằng đây là cách tổng quát hơn được thực hiện trong bài viết khi so sánh khả năng ngẫu nhiên trong 32 so với 64 bit. 3GB bộ nhớ địa chỉ trong 32-bit vẫn còn khá nhiều không gian để "di chuyển xung quanh" ... nó chỉ là không nhiều chỗ có thể được chi trả trong một hệ điều hành 64-bit, và có một số ứng dụng, chẳng hạn như hình ảnh- biên tập viên, v.v ... có dung lượng bộ nhớ rất cao và có thể dễ dàng sử dụng toàn bộ 3 GB bộ nhớ địa chỉ khả dụng cho chúng. Hãy ghi nhớ tôi đang nói "địa chỉ" bộ nhớ ... điều này phụ thuộc vào nền tảng và không phải là số lượng bộ nhớ vật lý có sẵn trong hệ thống.

+0

Tôi thậm chí không chắc chắn những gì ngẫu nhiên bắt đầu của ngăn xếp, phân đoạn bộ nhớ ánh xạ, và phân đoạn heap sẽ làm gì, xem xét tất cả mọi thứ quá trình nhìn thấy là một địa chỉ ảo. –

+1

Đó là để ngăn chặn khai thác bảo mật dự đoán, hoặc ít nhất làm cho chúng khó khăn hơn nhiều so với mọi quá trình mà hệ điều hành quản lý có từng phần của tệp thực thi trong cùng một vị trí bộ nhớ ảo. – Jason

+0

Ah, câu nói đó chắc chắn là lọ tôi nhớ, bây giờ tôi nhớ. Có thể bối cảnh của câu nói đó đề cập đến các vấn đề bảo mật và không liên quan gì đến hiệu suất, như tôi đã giả định nó đề cập đến khi nó nói "hiệu quả". –

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