2012-11-06 35 views
5

Khi tôi xem qua các trang hướng dẫn của shmat. Nó được mô tả là chức năng nguyên thủy của API là để đính kèm phân đoạn bộ nhớ được kết hợp với số điện thoại shmid vào quá trình gọi 'địa chỉ.shmat để đính kèm phân đoạn bộ nhớ chia sẻ

Các câu hỏi tôi có như sau.

  • Thuật ngữ đính kèm trông giống với tôi. Tôi thấy khó khăn trong việc hiểu được năng suất cơ bản là gì mà đính kèm đề cập đến.?
  • Ý nghĩa của việc ánh xạ phân đoạn bộ nhớ là gì?

Trả lời

1

Có một lời giải thích tốt ở đây:. http://www.makelinux.net/alp/035

"Dưới Linux, bộ nhớ ảo của mỗi quá trình được chia thành các trang Mỗi quá trình duy trì một ánh xạ từ địa chỉ bộ nhớ của nó đến các trang bộ nhớ ảo, có chứa các dữ liệu thực tế . Mặc dù mỗi quá trình có địa chỉ riêng của mình, ánh xạ nhiều quy trình có thể trỏ đến cùng một trang, cho phép chia sẻ bộ nhớ"

+0

Có vẻ như họ đã sai (ngược lại). Mỗi tiến trình có không gian địa chỉ ảo riêng của nó và duy trì một ánh xạ từ không gian ảo đến các khung trang trong bộ nhớ vật lý, nơi dữ liệu được đặt. –

2

Sử dụng nó như char *ptr=shmat(seg_id,NULL,0); nó gắn các phân khúc id tạo ra bởi chức năng shmget() với quá trình chứa này trên mã.

seg_id là id phân đoạn của phân khúc mới được tạo ra NULL có nghĩa là Hệ điều hành sẽ chăm sóc của địa chỉ bắt đầu của phân khúc này trên danh nghĩa của người dùng 0 là lá cờ cho read/write cả

Bất cứ khi nào một quá trình gắn với bộ nhớ chia sẻ sau đó nó phải được tách ra để một quá trình khác có thể truy cập nó bằng cách gắn vào phân đoạn đó (nếu cơ chế khóa tài nguyên có mặt.)

để tách: shmdt(ptr);

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