แพตช์รุ่นที่แปดสำหรับการรองรับไดรเวอร์ Rust บน Linux มาถึงแล้ว

มิเกล โอเจด้า, ผู้เขียนโครงการ Rust-for-Linux ปล่อยตัวที่แปด ของการพัฒนาแพตช์เคอร์เนล Linux พร้อมรองรับภาษา Rust เพื่อให้นักพัฒนาเคอร์เนล Linux พิจารณา

ซึ่งจัดอยู่ในอันดับที่ XNUMX ของแพตช์ (โดยพิจารณาจากเวอร์ชันแรกที่ไม่มีหมายเลขเวอร์ชัน). การสนับสนุนสนิมถือเป็นการทดลอง แต่มันรวมอยู่ใน linux-next branch แล้ว โดยอ้างว่าเป็นการผนวกรวมในเวอร์ชันฤดูใบไม้ร่วง 5.20/6.0 และขั้นสูงพอที่จะเริ่มทำงานในการสร้างเลเยอร์นามธรรมที่ด้านบนของระบบย่อยเคอร์เนล เช่นเดียวกับการเขียนคอนโทรลเลอร์และโมดูล

การพัฒนาได้รับทุนจาก Google และ ISRG (Internet Security Research Group) ซึ่งเป็นผู้ก่อตั้งโครงการ Let's Encrypt และส่งเสริม HTTPS และการพัฒนาเทคโนโลยีเพื่อเพิ่มความปลอดภัยอินเทอร์เน็ต

การเปลี่ยนแปลงที่เสนอทำให้สามารถใช้ Rust เป็นภาษาที่สองสำหรับการพัฒนาไดรเวอร์และโมดูลเคอร์เนลได้ การสนับสนุน Rust จะแสดงเป็นตัวเลือกที่ไม่ได้เปิดใช้งานโดยค่าเริ่มต้น และไม่ส่งผลให้ Rust รวมอยู่ในการพึ่งพา build ที่จำเป็นสำหรับเคอร์เนล การใช้ Rust เพื่อพัฒนาไดรเวอร์จะช่วยให้คุณสร้างไดรเวอร์ที่ดีขึ้นและปลอดภัยยิ่งขึ้นโดยใช้ความพยายามเพียงเล็กน้อย โดยไม่มีปัญหา เช่น การเข้าถึงพื้นที่หน่วยความจำหลังจากปล่อยว่าง ตัวชี้ว่างที่ไม่มีการอ้างอิง และบัฟเฟอร์โอเวอร์โฟลว์

ความปลอดภัยของหน่วยความจำมีให้ใน Rust ในเวลาคอมไพล์โดยการตรวจสอบการอ้างอิง การติดตามความเป็นเจ้าของอ็อบเจ็กต์ และอายุของอ็อบเจ็กต์ (ขอบเขต) ตลอดจนการประเมินความถูกต้องของการเข้าถึงหน่วยความจำระหว่างการใช้งานโค้ด

มีอะไรใหม่ในรุ่นที่แปดนี้

ในข้อเสนอใหม่นี้ที่ออกมีกล่าวไว้ว่า ตัวแปรไลบรารี allocซึ่งขจัดการสร้างสถานะ "ตื่นตระหนก" ที่เป็นไปได้จากข้อผิดพลาด อัปเดตเป็น Rust เวอร์ชัน 1.62 เมื่อเทียบกับเวอร์ชันก่อนหน้า ชุดเครื่องมือ Rust มีการสนับสนุนที่เสถียรสำหรับฟังก์ชัน const_fn_trait_bound ที่ใช้ในแพตช์เคอร์เนล

นอกจากนั้นแล้ว รหัสการผูกถูกแยกเป็นมัดของกล่อง "การผูก" แยกกัน ซึ่งทำให้ง่ายต่อการสร้างใหม่หากเปลี่ยนเฉพาะแพ็คเกจเคอร์เนลหลักเท่านั้น

ดิ การใช้งานมาโคร "concat_idents!" เขียนใหม่เป็นมาโครขั้นตอน ไม่เชื่อมโยงกับฟังก์ชัน concat_idents และอนุญาตให้ใช้การอ้างอิงตัวแปรในเครื่อง

นอกจากนี้ ยังกล่าวอีกว่ามาโคร "static_ยืนยัน!" ถูกเขียนใหม่เพื่อให้ "core::assert!()" ใช้ในบริบทใดๆ แทนค่าคงที่ ในขณะที่มาโคร "construction_error!" ได้รับการปรับให้ทำงานเมื่อตั้งค่าโหมด "RUST_BUILD_ASSERT_{WARN,ALLOW}" สำหรับโมดูล

เพิ่มโมดูล fs ซึ่งมีลิงค์สำหรับการทำงานกับระบบไฟล์ มีการเสนอตัวอย่างระบบไฟล์อย่างง่ายที่เขียนในภาษา Rust รวมถึงโมดูลคิวงานที่เพิ่มเข้ามาเพื่อทำงานกับคิวระบบ

จากการเปลี่ยนแปลงอื่น ๆ ที่โดดเด่นจากข้อเสนอใหม่นี้:

  • เพิ่มไฟล์การกำหนดค่าแยกต่างหาก "kernel/configs/rust.config"
  • ไฟล์ "*.i" ที่ประมวลผลในการแทนที่มาโครถูกเปลี่ยนชื่อเป็น "*.rsi"
  • ลบการสนับสนุนสำหรับการสร้างส่วนประกอบ Rust ที่มีระดับการปรับให้เหมาะสมนอกเหนือจากที่ใช้สำหรับรหัส C
  • การพัฒนาโมดูล kasync ยังคงดำเนินต่อไปโดยใช้วิธีการเขียนโปรแกรมแบบอะซิงโครนัส (async)
  • เพิ่มตัวอย่างของเซิร์ฟเวอร์ TCP ระดับเคอร์เนลที่เขียนในภาษา Rust และเพิ่มความสามารถในการจัดการกับการขัดจังหวะใน Rust
  • เพิ่มแมโครโพรซีเดอร์เพื่อให้ทำงานกับตารางตัวชี้ฟังก์ชันได้ง่ายขึ้น เช่น โครงสร้าง file_operations
  • เพิ่มการใช้งานรายการเชื่อมโยงแบบสองทิศทาง "unsafe_list::List"
  • เพิ่มการรองรับเริ่มต้นสำหรับ RCU และประเภท Guard เพื่อตรวจสอบว่าล็อกการอ่านถูกผูกไว้กับเธรดปัจจุบันหรือไม่
  • เพิ่มฟังก์ชัน Task::spawn() เพื่อวางไข่และเริ่มต้นเคอร์เนลเธรดโดยอัตโนมัติ
  • เพิ่มเมธอด Task::wake_up() แล้ว
  • เพิ่มโมดูลการหน่วงเวลา

ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติมคุณสามารถตรวจสอบรายละเอียด ในลิงค์ต่อไปนี้.


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. รับผิดชอบข้อมูล: AB Internet Networks 2008 SL
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา