Inguqulelo yesibhozo yeepetshi zeLinux kernel ngenkxaso yolwimi lweRust

UMiguel Ojeda, umbhali weprojekthi yeRust-for-Linux, ucebise ukukhutshwa kwezixhobo ze-v8 zokuphuhlisa abaqhubi besixhobo ngolwimi lweRust ukuze ziqwalaselwe ngabaphuhlisi be-Linux kernel. Le yinguqulelo ehlaziyiweyo yeepatches, ngokuqwalasela inguqulo yokuqala, epapashwe ngaphandle kwenombolo yenguqulo. Inkxaso yomhlwa ithathwa njengovavanyo, kodwa sele ifakiwe kwisebe le-linux-elilandelayo, amabango adityaniswe ekukhutshweni kokuwa kwe-5.20 / 6.0, kwaye ikhule ngokwaneleyo ukuqalisa umsebenzi ekudaleni ama-abstraction layers phezu kwe-kernel subsystems, kunye nokubhala abaqhubi. kunye neemodyuli. Uphuhliso luxhaswa ngemali nguGoogle kunye ne-ISRG (iQela loPhando loKhuseleko lwe-Intanethi), ongumseki weprojekthi ye-Let Encrypt kwaye ikhuthaza i-HTTPS kunye nophuhliso lobuchwepheshe ukuphucula ukhuseleko lwe-Intanethi.

Kwinguqulelo entsha:

  • Isixhobo sezixhobo kunye nokwahluka kwethala leencwadi le-alloc, elingenalo ukuveliswa kwemeko "yoloyiko" xa iimpazamo zisenzeka, zihlaziywe ukuze kukhululwe iRust 1.62. Xa kuthelekiswa nenguqulo esetyenziswe ngaphambili, i-Rust toolkit izinzile inkxaso ye-const_fn_trait_bound yokusebenza esetyenziswe kwiipatches ze-kernel.
  • Ikhowudi yokubopha ihlukaniswe kwiphakheji yekhreyithi eyahlukileyo "izibophelelo", eyenza lula ukwakha kwakhona ukuba utshintsho lwenziwa kuphela kwiphakheji engundoqo "kernel".
  • Ukuphunyezwa kwe-macro "concat_idents!" ibhalwe ngokutsha ngendlela yenkqubo macro engabotshelelwanga kwi-concat_idents ukusebenza kwaye ivumela ukusetyenziswa kweereferensi kwizinto eziguquguqukayo zendawo.
  • I-β€œstatic_assert!” imacro ibhalwe ngokutsha, ivumela ukusetyenziswa kwe-β€œcore::assert!()” kuyo nayiphi na imeko endaweni yezigxina.
  • Imakhro "build_error!" iqhelaniswe nomsebenzi xa i-"RUST_BUILD_ASERT_{WARN, VUMELA}" indlela imiselwe iimodyuli.
  • Yongeza ifayile eyahlukileyo kunye nezicwangciso "kernel/configs/rust.config".
  • Iifayile ze-β€œ*.i” ezicutshungulwe ngoovimba abakhulu zithiywe igama elithi β€œ*.rsi”.
  • Inkxaso yokwakha amacandelo erust enamanqanaba okuphucula ahlukileyo kulawo asetyenziselwa ikhowudi ye-C iye yanqunyanyiswa.
  • Imodyuli eyongeziweyo ye-fs, ebonelela ngezibophelelo zokusebenza kunye neenkqubo zefayile. Umzekelo wenkqubo yefayile elula ebhalwe kwi Rust unikiwe.
  • Imodyuli eyongeziweyo yomgca wokusebenza wokusebenza kunye nemigca yenkqubo (ibonelela ngezibophelelo ngaphezulu kwe-work_struct kunye ne-workqueue_struct kernel izakhiwo).
  • Uphuhliso lwemodyuli ye-kasync luqhubekile nokuphunyezwa kweendlela zeprogram ye-asynchronous (async). Kongezwe umzekelo we-core-level ye-TCP server ebhalwe kwi-Rust.
  • Kongezwe ukukwazi ukuphatha iziphazamiso kulwimi lweRust kusetyenziswa i [Treaded]Handler iindidi kunye ne [Treaded]Registration` iintlobo.
  • I-procedural macro eyongeziweyo "#[vtable]" ukwenza kube lula ukusebenza ngeetafile zezalathisi zokusebenza, ezifana ne-file_operations structure.
  • Uzalisekiso olongeziweyo loluhlu oludityanisiweyo lweendlela ezimbini "unsafe_list::List".
  • Inkxaso yokuqala eyongeziweyo ye-RCU (Funda-ikopi-uhlaziyo) kunye nohlobo lweGada ukujonga ukuba isitshixo sokufunda sibotshelelwe kumsonto wangoku.
  • Umsebenzi owongezelelweyo:: spawn () umsebenzi wokudala kwaye uqale ngokuzenzekelayo imisonto yekernel. Kwakhona wongeze uMsebenzi ::wake_up() indlela.
  • Yongezwe umnqongo wokulibaziseka okuvumela ukuba usebenzise ulibaziseko (i-isongeki phezu kwe-msleep()).

Utshintsho olucetywayo lwenza kube lula ukusebenzisa iRust njengolwimi lwesibini ekuphuhliseni abaqhubi kunye neemodyuli zekernel. Inkxaso yomhlwa inikezelwa njengokhetho olungenziwanga ngokungagqibekanga kwaye alubangeli ukubandakanywa kweRust phakathi kokuxhomekeka kolwakhiwo olufunekayo kwi-kernel. Ukusebenzisa iRust ukuphuhlisa abaqhubi kuya kukuvumela ukuba udale abaqhubi abakhuselekileyo nabangcono ngomzamo omncinci, simahla kwiingxaki ezinjengokufikelela kwindawo yememori emva kokuba ikhululiwe, ireferencing null pointer, kunye nebuffer overruns.

Ukuphathwa okukhuselekileyo kwimemori kubonelelwa kwiRust ngexesha lokuqokelela ngokujonga ireferensi, ukugcina umkhondo wobunini bento kunye nobomi bento (ububanzi), kunye nokuvavanya ukuchaneka kofikelelo lwememori ngexesha lokwenziwa kwekhowudi. Umhlwa ukwabonelela ngokhuseleko ngokuchasene nokuphuphuma kwenani elipheleleyo, kufuna ukuqaliswa okunyanzelekileyo kwamaxabiso aguquguqukayo ngaphambi kokusetyenziswa, iphatha iimpazamo ngcono kwithala leencwadi elisemgangathweni, isebenzisa ingqikelelo yeembekiselo ezingenakuguquguquka kunye nezinto eziguquguqukayo ngokungagqibekanga, ibonelela ngochwethezo olomeleleyo ukuze kuncitshiswe iimpazamo ezinengqiqo.

umthombo: opennet.ru

Yongeza izimvo