Tôi đang làm việc trên thiết kế hạt nhân và tôi có một số câu hỏi liên quan đến phân trang. Ý tưởng cơ bản mà tôi có cho đến nay là: Mỗi chương trình có bộ nhớ 4G (hoặc vì nó nghĩ) riêng của nó, trừ đi một phần ở đâu đó mà tôi dự trữ cho các chức năng hạt nhân mà chương trình có thể gọi. Vì vậy, hệ điều hành cần phải tìm ra một số cách để tải các trang trong bộ nhớ mà chương trình cần sử dụng trong quá trình hoạt động của nó. Bây giờ, giả sử rằng chúng tôi có số lượng bộ nhớ và thời gian xử lý vô hạn, tôi có thể tải/phân bổ bất kỳ trang nào mà chương trình đã viết hoặc đọc từ khi xảy ra lỗi trang cho các trang không tồn tại (hoặc được hoán đổi Vì vậy, hệ điều hành có thể nhanh chóng phân bổ chúng hoặc trao đổi chúng. Mặc dù vậy, trong thế giới thực, tôi cần tối ưu hóa quá trình này để chúng tôi không có một chương trình liên tục tiêu thụ tất cả bộ nhớ mà nó từng chạm vào.Hệ điều hành thường quản lý bộ nhớ hạt nhân và xử lý trang như thế nào?
Vì vậy, tôi đoán câu hỏi của tôi là, làm thế nào để một hệ điều hành thường đi về điều này? Suy nghĩ ban đầu của tôi là tạo ra một hàm mà chương trình gọi tới các trang thiết lập/miễn phí, sau đó nó có thể tự quản lý bộ nhớ, nhưng chương trình thường làm điều này, hay trình biên dịch cho rằng nó có triều đại tự do? Ngoài ra, trình biên dịch xử lý các tình huống mà nó cần phân bổ một phân đoạn bộ nhớ khá lớn như thế nào? Tôi có cần cung cấp chức năng cố gắng cung cấp cho nó các trang X theo thứ tự không?
Điều này rõ ràng không phải là một câu hỏi cụ thể về ngôn ngữ, nhưng tôi là một phần của tiêu chuẩn C và tốt với C++, vì vậy tôi muốn bất kỳ ví dụ mã nào ở trong đó hoặc trong assembly. (Hội đồng không cần thiết, tôi hoàn toàn có ý định làm cho nó hoạt động với càng nhiều mã C càng tốt, và tối ưu hóa như một bước cuối cùng.)
Một điều khác cũng cần phải trả lời dễ dàng hơn: xử lý các hàm hạt nhân mà một chương trình cần gọi? Có OK chỉ để có một khu vực bộ nhớ (tôi đã suy nghĩ về phía cuối của không gian ảo) có chứa hầu hết các chức năng cơ bản/quá trình bộ nhớ cụ thể mà chương trình có thể gọi? Suy nghĩ của tôi từ đó sẽ có chức năng hạt nhân làm điều gì đó rất lạ mắt và hoán đổi các trang (để các chương trình không thể thấy các hàm hạt nhân nhạy cảm trong không gian riêng của chúng) khi các chương trình cần làm bất cứ điều gì lớn, nhưng tôi không thực sự tập trung vào an ninh tại thời điểm này.
Vì vậy, tôi đoán tôi lo lắng hơn về ý tưởng thiết kế chung so với các chi tiết cụ thể. Tôi muốn làm cho hạt nhân hoàn toàn tương thích với GCC (bằng cách nào đó) và tôi cần phải đảm bảo rằng nó cung cấp mọi thứ mà một chương trình bình thường sẽ cần.
Cảm ơn lời khuyên nào.
Ồ ... về cơ bản, ngôn ngữ C giả định rằng "heap" của nó là một không gian địa chỉ dài và sẽ tự quản lý bộ nhớ đó và tất cả hạt nhân phải làm là thay đổi bộ nhớ lớn như thế nào? Điều đó nghe có vẻ khá đơn giản, và dễ dàng đo lường bộ nhớ được tiêu thụ bởi một chương trình. –
Không phải ngôn ngữ C, mà là việc triển khai truyền thống thư viện chuẩn của nó. Tiêu chuẩn C cũng cho phép triển khai phức tạp hơn; cách thư viện chuẩn quản lý bộ nhớ của nó chủ yếu là một chi tiết thực hiện, theo như tiêu chuẩn C có liên quan. – CesarB