Khi nghiên cứu các hệ điều hành (chủ yếu với Linux làm tài liệu tham khảo), có một vài điểm mà tôi không tìm được giải thích rõ ràng trong tài liệu mà tôi đã nghiên cứu.Phân đoạn bộ nhớ trong các hệ điều hành hiện đại
Chương trình được tải vào bộ nhớ thường được mô tả như được chia thành các phân đoạn văn bản, dữ liệu, ngăn xếp, v.v. ngay cả trong ngữ cảnh hệ điều hành như Linux nơi bộ nhớ ảo dựa hoàn toàn vào phân trang. Có phải đó là trường hợp mà nó chỉ là chương trình, và không phải là bộ nhớ chính nó được gọi là phân đoạn? Nếu vậy, tôi thấy thuật ngữ khó hiểu.
Tôi thấy rằng malloc có thể được triển khai trong Linux bằng cách sử dụng cuộc gọi 'sbrk' làm tăng kích thước của phân đoạn dữ liệu. Một lần nữa, đây có phải là 'phân đoạn dữ liệu' chỉ là một vùng bộ nhớ được sử dụng cho dữ liệu theo quy ước và không phải là phân đoạn 'thực'? (Câu hỏi thêm: 'sbrk' dường như không thể giảm kích thước của 'phân đoạn'. Điều này có nghĩa là một quá trình không bao giờ có thể giải phóng bộ nhớ cho hệ điều hành khác ngoài việc bỏ?)
Ngoài ra tôi quan tâm đến biết lý do tại sao các hệ điều hành hiện đại dường như không sử dụng phân đoạn (phân trang). Nó sẽ không ngăn chặn một số loại tấn công nhất định để có mã nằm trong phân khúc được bảo vệ riêng của nó, do đó tăng cường bảo mật? Mặt khác, điều này sẽ làm cho ví dụ JIT biên dịch không thể/khó khăn?
Bên cạnh câu trả lời "có"/"không" cho các câu hỏi ở trên, tôi quan tâm đến bất kỳ việc xây dựng sâu sắc nào về chủ đề này.
Cảm ơn bạn trước.
Ngoài ra còn có 'brk', mà * có thể * thiết lập ngắt chương trình đến một giá trị thấp hơn. Và các phân đoạn * được phân chia thành các trang và mỗi trang * có thể * thực sự là chỉ đọc hoặc không thực thi, và đoạn văn bản và phân đoạn dữ liệu ro thường sẽ được đặt như vậy. –