Phiên bản thứ tám của bản vá dành cho nhân Linux có hỗ trợ ngôn ngữ Rust

Miguel Ojeda, tác giả của dự án Rust-for-Linux, đã đề xuất phát hành các thành phần v8 để phát triển trình điều khiển thiết bị bằng ngôn ngữ Rust để các nhà phát triển nhân Linux xem xét. Đây là phiên bản sửa đổi của các bản vá, tính đến phiên bản đầu tiên, được xuất bản mà không có số phiên bản. Hỗ trợ Rust được coi là thử nghiệm, nhưng đã được đưa vào nhánh linux-next, tuyên bố sẽ được tích hợp vào bản phát hành mùa thu 5.20/6.0 và đủ trưởng thành để bắt đầu công việc tạo các lớp trừu tượng trên các hệ thống con kernel, cũng như viết trình điều khiển và các mô-đun. Sự phát triển này được tài trợ bởi Google và ISRG (Nhóm nghiên cứu bảo mật Internet), nhóm sáng lập dự án Let's Encrypt và thúc đẩy HTTPS cũng như phát triển các công nghệ để cải thiện bảo mật Internet.

Trong phiên bản mới:

  • Bộ công cụ và một biến thể của thư viện alloc, không có khả năng tạo ra trạng thái "hoảng loạn" khi xảy ra lỗi, đã được cập nhật cho bản phát hành Rust 1.62. So với phiên bản đã sử dụng trước đó, bộ công cụ Rust đã hỗ trợ ổn định cho chức năng const_fn_trait_bound được sử dụng trong các bản vá kernel.
  • Mã ràng buộc được tách thành một “ràng buộc” gói thùng riêng biệt, giúp đơn giản hóa việc xây dựng lại nếu các thay đổi chỉ được thực hiện đối với “kernel” gói chính.
  • Triển khai macro “concat_idents!” được viết lại dưới dạng macro thủ tục không bị ràng buộc với chức năng concat_idents và cho phép sử dụng tham chiếu đến các biến cục bộ.
  • Macro “static_assert!” đã được viết lại, cho phép sử dụng “core::assert!()” trong bất kỳ ngữ cảnh nào thay vì hằng số.
  • Macro "build_error!" được điều chỉnh để hoạt động khi chế độ “RUST_BUILD_ASSERT_{WARN,ALLOW}” được đặt cho mô-đun.
  • Đã thêm một tệp riêng biệt có cài đặt “kernel/configs/rust.config”.
  • Các tệp “*.i” được xử lý thay thế macro đã được đổi tên thành “*.rsi”.
  • Hỗ trợ xây dựng các thành phần Rust với mức tối ưu hóa khác với mức tối ưu hóa được sử dụng cho mã C đã bị ngừng.
  • Đã thêm mô-đun fs, cung cấp các liên kết để làm việc với hệ thống tệp. Một ví dụ về một hệ thống tập tin đơn giản được viết bằng Rust được cung cấp.
  • Đã thêm mô-đun Workqueue để làm việc với hàng đợi hệ thống (cung cấp các liên kết trên cấu trúc hạt nhân Work_struct và Workqueue_struct).
  • Sự phát triển của mô-đun kasync tiếp tục với việc triển khai các phương pháp lập trình không đồng bộ (async). Đã thêm ví dụ về máy chủ TCP cấp lõi được viết bằng Rust.
  • Đã thêm khả năng xử lý các ngắt trong ngôn ngữ Rust bằng cách sử dụng các loại Trình xử lý [Threaded] và [Threaded]Registration`.
  • Đã thêm macro thủ tục "#[vtable]" để giúp làm việc dễ dàng hơn với các bảng con trỏ hàm, chẳng hạn như cấu trúc file_Operations.
  • Đã thêm triển khai danh sách liên kết hai chiều "unsafe_list::List".
  • Đã thêm hỗ trợ ban đầu cho RCU (Đọc-sao chép-cập nhật) và loại Bảo vệ để kiểm tra xem khóa đọc có bị ràng buộc với luồng hiện tại hay không.
  • Đã thêm hàm Task::spawn() để tạo và tự động khởi động các luồng kernel. Đồng thời thêm phương thức Task::wake_up().
  • Đã thêm mô-đun độ trễ cho phép bạn sử dụng độ trễ (trình bao bọc trên msleep()).

Những thay đổi được đề xuất giúp có thể sử dụng Rust làm ngôn ngữ thứ hai để phát triển trình điều khiển và mô-đun hạt nhân. Hỗ trợ Rust được trình bày dưới dạng tùy chọn không được bật theo mặc định và không dẫn đến việc Rust được đưa vào làm phần phụ thuộc xây dựng bắt buộc cho kernel. Sử dụng Rust để phát triển trình điều khiển sẽ cho phép bạn tạo trình điều khiển an toàn hơn và tốt hơn với nỗ lực tối thiểu, không gặp phải các vấn đề như truy cập bộ nhớ sau khi giải phóng, hủy tham chiếu con trỏ null và lỗi tràn bộ đệm.

Xử lý an toàn bộ nhớ được cung cấp trong Rust tại thời điểm biên dịch thông qua kiểm tra tham chiếu, theo dõi quyền sở hữu đối tượng và thời gian tồn tại của đối tượng (phạm vi), cũng như thông qua đánh giá tính chính xác của quyền truy cập bộ nhớ trong quá trình thực thi mã. Rust cũng cung cấp khả năng bảo vệ chống tràn số nguyên, yêu cầu khởi tạo bắt buộc các giá trị biến trước khi sử dụng, xử lý lỗi tốt hơn trong thư viện chuẩn, áp dụng khái niệm tham chiếu và biến bất biến theo mặc định, cung cấp kiểu gõ tĩnh mạnh để giảm thiểu lỗi logic.

Nguồn: opennet.ru

Thêm một lời nhận xét