Mtundu wachisanu ndi chitatu wa zigamba za Linux kernel mothandizidwa ndi chilankhulo cha Rust

Miguel Ojeda, wolemba pulojekiti ya Rust-for-Linux, adakonza zotulutsa zida za v8 zopangira madalaivala a zida muchilankhulo cha Rust kuti aganizidwe ndi opanga ma kernel a Linux. Uwu ndiye mtundu wosinthidwa wa zigamba, poganizira mtundu woyamba, wosindikizidwa wopanda nambala yamtundu. Thandizo la dzimbiri limaonedwa ngati loyesera, koma likuphatikizidwa kale mu linux-yotsatira nthambi, imati ikuphatikizidwa mu kumasulidwa kwa 5.20 / 6.0, ndipo ndi okhwima mokwanira kuti ayambe ntchito yopanga zigawo zowonongeka pamagulu a kernel, komanso kulemba madalaivala ndi ma modules. Ntchitoyi imathandizidwa ndi Google ndi ISRG (Internet Security Research Group), yomwe ndi amene anayambitsa pulojekiti ya Let's Encrypt ndipo imalimbikitsa HTTPS ndi chitukuko cha matekinoloje opititsa patsogolo chitetezo cha intaneti.

Mu mtundu watsopano:

  • Zothandizira ndi zina za library ya alloc, zopanda m'badwo wa "mantha" pakachitika zolakwika, zasinthidwa kuti amasulidwe Rust 1.62. Poyerekeza ndi mtundu womwe udagwiritsidwa ntchito kale, Rust toolkit yakhazikitsa chithandizo cha const_fn_trait_bound magwiridwe antchito omwe amagwiritsidwa ntchito pazigamba za kernel.
  • Khodi yomangiriza imapatulidwa kukhala "zomanga" za crate zosiyana, zomwe zimathandizira kumanganso ngati zosintha zimangopanga "kernel" phukusi lalikulu.
  • Kukhazikitsa kwa macro "concat_idents!" olembedwanso m'mawonekedwe a procedural macro omwe sanagwirizane ndi magwiridwe antchito a concat_idents ndipo amalola kugwiritsa ntchito maumboni kumitundu yakumaloko.
  • Ma macro a "static_assert!" alembedwanso, kulola kugwiritsa ntchito "core::assert!()" m'malo aliwonse m'malo mokhazikika.
  • Macro "build_error!" zidasinthidwa kuti zizigwira ntchito pamene "RUST_BUILD_ASERT_{WARN, ALLOW}" mode yakhazikitsidwa kuti ikhale ma module.
  • Anawonjezera fayilo yosiyana ndi zoikamo "kernel/configs/rust.config".
  • Mafayilo a "*.i" osinthidwa m'malo akuluakulu asinthidwa kukhala "*.rsi".
  • Thandizo lomanga zida za dzimbiri zokhala ndi milingo yokhathamiritsa yosiyana ndi yomwe imagwiritsidwa ntchito pa C code yatha.
  • Yowonjezera fs module, yomwe imapereka zomangira zogwirira ntchito ndi mafayilo amafayilo. Chitsanzo cha fayilo yosavuta yolembedwa mu Rust imaperekedwa.
  • Ma module owonjezera ogwirira ntchito ndi mizere yamakina (amapereka zomangira pa work_struct ndi workqueue_struct kernel structures).
  • Kukula kwa gawo la kasync kunapitilira ndikukhazikitsa njira zamapulogalamu asynchronous (async). Anawonjezera chitsanzo cha seva yapakatikati ya TCP yolembedwa ku Rust.
  • Anawonjezera kuthekera kothana ndi zosokoneza mu chilankhulo cha dzimbiri pogwiritsa ntchito mitundu ya [Threaded]Handler and [Threaded]Registration`.
  • Onjezani procedural macro "#[vtable]" kuti zikhale zosavuta kugwira ntchito ndi matebulo azolozera ntchito, monga mawonekedwe a file_operations.
  • Kukhazikitsa kowonjezera kwa mindandanda yolumikizidwa ndi bidirectional "unsafe_list::List".
  • Anawonjezera chithandizo choyambirira cha RCU (Werengani-copy-update) ndi mtundu wa Guard kuti muwone ngati loko yowerengera ikugwirizana ndi ulusi womwe ulipo.
  • Ntchito Yowonjezera :: spawn () ntchito kuti mupange ndikuyambitsa ulusi wa kernel. Anawonjezeranso Task::wake_up() njira.
  • Onjezani gawo lochedwetsa lomwe limakupatsani mwayi wochedwetsa (chopukutira pa msleep()).

Zosintha zomwe zaperekedwa zimapangitsa kuti zitheke kugwiritsa ntchito Rust ngati chilankhulo chachiwiri popanga madalaivala ndi ma module a kernel. Thandizo la dzimbiri limaperekedwa ngati njira yomwe siyimathandizidwa mwachisawawa ndipo sizimapangitsa kuti Dzimbiri liphatikizidwe ngati kudalira kofunikira kwa kernel. Kugwiritsa ntchito Rust pakukula kwa madalaivala kumakupatsani mwayi wopanga madalaivala otetezeka komanso abwinoko molimbika pang'ono, opanda mavuto monga kukumbukira kukumbukira mutatha kumasula, kusokoneza null pointer, ndi buffer overruns.

Chitetezo cha Memory chimaperekedwa mu Rust panthawi yophatikiza kudzera pakuwunika, kuyang'anira umwini wa chinthu ndi nthawi ya moyo wa chinthu (kukula), komanso kuwunika kulondola kwa kukumbukira kukumbukira panthawi yopanga ma code. Dzimbiri limaperekanso chitetezo ku kusefukira kwazinthu zonse, kumafuna kukhazikitsidwa kovomerezeka kwa zinthu zosinthika musanagwiritse ntchito, kuwongolera zolakwika bwino mulaibulale yokhazikika, kumagwiritsa ntchito lingaliro la maumboni osasinthika ndi zosintha mwachisawawa, kumapereka zilembo zolimba kuti muchepetse zolakwika zomveka.

Source: opennet.ru

Kuwonjezera ndemanga