Iyo yechisere vhezheni yezvigamba zveLinux kernel nerutsigiro rweRust mutauro

Miguel Ojeda, munyori wepurojekiti yeRust-for-Linux, akakurudzira kuburitswa kwezvikamu zvev8 zvekugadzira madhiraivha emidziyo mumutauro weRust kuti atariswe nevagadziri veLinux kernel. Iyi ndiyo yakagadziridzwa vhezheni yezvigamba, uchifunga nezve yekutanga vhezheni, yakabudiswa pasina nhamba yeshanduro. Rutsigiro rutsigiro rwunoonekwa sekuyedza, asi rwakatoverengerwa mulinux-rinotevera bazi, inotaura kuti yakabatanidzwa mukudonha kuburitswa kwe5.20/6.0, uye yakura zvakakwana kuti itange basa rekugadzira abstraction layers pamusoro pekernel subsystems, pamwe nekunyora madhiraivha. uye modules. Kuvandudza uku kunotsigirwa neGoogle neISRG (Internet Security Research Group), inova muvambi weLet Encrypt project uye inosimudzira HTTPS nekuvandudzwa kwetekinoroji yekuvandudza kuchengetedzwa kweInternet.

Mushanduro itsva:

  • Iyo kit yezvishandiso uye musiyano wealloc raibhurari, isina chizvarwa che "kutya" mamiriro kana kukanganisa kukaitika, yakagadziridzwa kuburitswa kweRust 1.62. Kana ichienzaniswa neyakamboshandiswa vhezheni, iyo Rust toolkit yakatsigisa rutsigiro rweiyo const_fn_trait_bound mashandiro anoshandiswa muma kernel patches.
  • Iyo inosunga kodhi inopatsanurwa kuita yakaparadzana crate package "zvisungo", iyo inorerutsa kuvakazve kana shanduko dzichiitwa chete kune main package "kernel".
  • Kuitwa kweiyo macro "concat_idents!" yakanyorwa patsva muchimiro cheprocedural macro iyo isina kusungirirwa kune iyo concat_idents mashandiro uye inobvumira kushandiswa kwemareferenzi kune emunharaunda akasiyana.
  • Iyo "static_assert!" macro yakanyorwa patsva, zvichibvumira kushandiswa kwe "core::assert!()" mune chero mamiriro pachinzvimbo chekuramba.
  • Macro "build_error!" inochinjirwa kushanda kana iyo "RUST_BUILD_ASERT_{WARN, ALLOW}" modhi yaiswa kumamodule.
  • Yakawedzera imwe faira ine zvigadziriso "kernel/configs/rust.config".
  • Mafaira e "* .i" akagadziriswa mune macro substitutes akatumidzwa zita rekuti "*.rsi".
  • Tsigiro yekuvaka Rust zvikamu zvine optimization mazinga akasiyana neaya anoshandiswa kuC kodhi akamiswa.
  • Yakawedzerwa fs module, iyo inopa zvisungo zvekushanda nemafaira masisitimu. Muenzaniso weiyo nyore faira system yakanyorwa muRust inopiwa.
  • Yakawedzerwa workqueue module yekushanda nesystem queues (inopa zvisungo pamusoro peiyo work_struct uye workqueue_struct kernel zvimiro).
  • Kuvandudzwa kwekasync module kwakaenderera mberi nekushandiswa kweasynchronous programming nzira (async). Yakawedzera muenzaniso we-core-level TCP server yakanyorwa muRust.
  • Yakawedzera kugona kubata zvinokanganisa mumutauro weRust uchishandisa [Threaded]Handler types ne[Threaded]Registration` marudzi.
  • Yakawedzera procedural macro "#[vtable]" kuita kuti zvive nyore kushanda nematafura emabasa anonongedzera, senge faira_operations chimiro.
  • Yakawedzerwa kushandiswa kwebidirectional yakabatana zvinyorwa "unsafe_list::List".
  • Yakawedzera rutsigiro rwekutanga rweRCU (Verenga-kopi-update) uye Guard mhando yekutarisa kana kiyi yekuverenga yakasungwa kune yazvino shinda.
  • Rakawedzerwa Basa :: spawn () basa rekugadzira uye otomatiki tanga kernel tambo. Zvakare akawedzera iyo Task :: wake_up () nzira.
  • Yakawedzera kunonoka module inobvumidza iwe kushandisa kunonoka (kuputira pamusoro pemsleep()).

Idzo shanduko dzakarongwa dzinoita kuti zvikwanise kushandisa Rust semutauro wechipiri wekugadzira vatyairi uye kernel module. Rutsigiro rutsigiro runounzwa sechisarudzo chisingagoneswe nekukasira uye hachikonzeri kubatanidzwa kweRust pakati pezvinodiwa kuvaka zvinoenderana nekernel. Kushandisa Rust kugadzira madhiraivha kuchakubvumidza kuti ugadzire vatyairi vakachengeteka uye varinani nekuedza kushoma, vasina matambudziko akadai sekuwana nzvimbo yendangariro mushure mekunge yasunungurwa, kurevera null anonongedzera, uye buffer overruns.

Memory-yakachengeteka kubata inopihwa muRust panguva yekuunganidza kuburikidza nekutarisa referensi, kuchengeta track yemuridzi wechinhu uye chinhu hupenyu hwese (chiyero), pamwe nekuongororwa kwekururama kwekuyeuka kwekuwana panguva yekodhi kodhi. Ngura inopawo dziviriro kubva pahuwandu hwekufashukira, inoda kusungirirwa kwekutanga kwemhando dzakasiyana usati washandiswa, inobata zvikanganiso zviri nani muraibhurari yakajairwa, inoshandisa iyo pfungwa yezvisingachinjiki mareferensi uye zvinosiyana nekusarudzika, inopa yakasimba static typing kuderedza zvikanganiso zvine musoro.

Source: opennet.ru

Voeg