Tôi có nhiều mã trong thư viện được chia sẻ ELF chỉ được sử dụng trong khi khởi tạo thư viện (nó được gọi từ bộ khởi tạo tĩnh). Nếu tôi đặt mã này trong phần riêng của nó (hoặc có lẽ nó có thể đi trong phần .init), mà tôi có thể làm bằng cách sử dụng __attribute__((section(".mysection")))
, có cách nào để buộc phần này được phân trang sau khi thư viện đã được tải không?Xóa phần ELF khỏi RAM sau khi khởi tạo thư viện
This question có liên quan, nhưng kết luận là hạt nhân sẽ trang ra các trang không sử dụng khi thiếu bộ nhớ, vì vậy không cần phải làm như vậy một cách rõ ràng. Tuy nhiên, tôi đang làm việc trong một môi trường nhúng nơi bộ nhớ ở mức phí bảo hiểm và chi phí phân trang mã từ đĩa (ổ flash USB chậm) cao. Do đó, tôi muốn xóa mã này một cách rõ ràng, điều mà tôi biết sẽ không bao giờ được sử dụng nữa, thay vì để hạt nhân có thể quyết định xóa một số mã khác mà cuối cùng có thể cần được quay trở lại.
Tôi chắc chắn tôi nhớ đọc về một syscall để yêu cầu hạt nhân để trang vào hoặc ra một số khu vực của bộ nhớ, mặc dù tôi không thể tìm thấy bất kỳ tài liệu tham khảo này bất cứ nơi nào, vì vậy có lẽ tôi tưởng tượng nó. Có một điều như vậy tồn tại?
syscall 'madvise', đặc biệt với thông số MADV_WILLNEED/MADV_DONTNEED, là những gì tôi đang nghĩ đến. Tuy nhiên, tôi vẫn muốn biết nếu có một cách dễ dàng để buộc một phần ELF cụ thể được phân trang ra ngoài. – jchl