Ẹya kẹjọ ti awọn abulẹ fun ekuro Linux pẹlu atilẹyin fun ede Rust

Miguel Ojeda, onkọwe ti iṣẹ akanṣe Rust-for-Linux, dabaa itusilẹ ti awọn paati v8 fun idagbasoke awọn awakọ ẹrọ ni ede Rust fun imọran nipasẹ awọn olupilẹṣẹ ekuro Linux. Eyi ni ẹya ti a tunwo ti awọn abulẹ, ni akiyesi ẹya akọkọ, ti a tẹjade laisi nọmba ẹya kan. Atilẹyin ipata ni a ka si esiperimenta, ṣugbọn o ti wa tẹlẹ ninu ẹka ti o tẹle linux, sọ pe o ṣepọ sinu itusilẹ isubu ti 5.20/6.0, ati pe o ti dagba to lati bẹrẹ iṣẹ lori ṣiṣẹda awọn fẹlẹfẹlẹ abstraction lori awọn eto inu ekuro, ati awọn awakọ kikọ. ati awọn module. Idagbasoke naa jẹ agbateru nipasẹ Google ati ISRG (Ẹgbẹ Iwadi Aabo Intanẹẹti), eyiti o jẹ oludasile iṣẹ akanṣe Let's Encrypt ati igbega HTTPS ati idagbasoke awọn imọ-ẹrọ lati mu aabo Intanẹẹti dara si.

Ninu ẹya tuntun:

  • Ohun elo irinṣẹ ati iyatọ ti ile-ikawe alloc, laisi iran ti o ṣeeṣe ti ipo “ijaaya” nigbati awọn aṣiṣe ba waye, ti ni imudojuiwọn fun itusilẹ ti Rust 1.62. Ti a ṣe afiwe si ẹya ti a lo tẹlẹ, ohun elo irinṣẹ Rust ti ni atilẹyin iduroṣinṣin fun iṣẹ ṣiṣe const_fn_trait_bound ti a lo ninu awọn abulẹ kernel.
  • Awọn koodu abuda ti wa ni niya sinu lọtọ crate package “abuda”, eyi ti o simplifies atunkọ ti o ba ti awọn ayipada ti wa ni ṣe nikan si akọkọ package “ekuro”.
  • Imuse Makiro “concat_idents!” tun kọwe ni irisi Makiro ilana ti ko ni asopọ si iṣẹ ṣiṣe concat_idents ati gba laaye lilo awọn itọkasi si awọn oniyipada agbegbe.
  • Makiro "static_assert!" ti tun kọwe, gbigba lilo "mojuto :: assert! ()"Ninu eyikeyi ipo dipo awọn iduro.
  • Makiro "build_aṣiṣe!" farasin lati ṣiṣẹ nigbati ipo “RUST_BUILD_ASSERT_{WARN,ALLOW}” ti ṣeto fun awọn modulu.
  • Fikun faili lọtọ pẹlu awọn eto “kernel/configs/rust.config”.
  • Awọn faili "* .i" ti a ti ni ilọsiwaju ni awọn afikun macro ti jẹ lorukọmii si "* .rsi".
  • Atilẹyin fun kikọ awọn paati Rust pẹlu awọn ipele iṣapeye yatọ si awọn ti a lo fun koodu C ti dawọ duro.
  • Fikun fs module, eyiti o pese awọn abuda fun ṣiṣẹ pẹlu awọn ọna ṣiṣe faili. Apeere ti eto faili ti o rọrun ti a kọ sinu Rust ti pese.
  • Fi kun workqueue module fun ṣiṣẹ pẹlu awọn eto queues (pese bindings lori work_struct ati workqueue_struct ekuro ẹya).
  • Idagbasoke module kasync tẹsiwaju pẹlu imuse ti awọn ọna siseto asynchronous (async). Ṣe afikun apẹẹrẹ ti olupin TCP ipele-mojuto ti a kọ sinu ipata.
  • Ṣafikun agbara lati mu awọn idalọwọduro ni ede ipata ni lilo awọn oriṣi [Asopo] Handler ati awọn iru Iforukọsilẹ.
  • Fikun macro ilana ilana "#[vtable]" lati jẹ ki o rọrun lati ṣiṣẹ pẹlu awọn tabili ti awọn itọka iṣẹ, gẹgẹbi ọna ṣiṣe_faili.
  • Ṣafikun imuse ti awọn atokọ ti a ti sopọ mọ bidirectional "unsafe_list :: Akojọ".
  • Atilẹyin akọkọ ti a ṣafikun fun RCU (Ka-daakọ-imudojuiwọn) ati iru Ẹṣọ lati ṣayẹwo boya titiipa kika ti sopọ mọ okun lọwọlọwọ.
  • Iṣẹ-ṣiṣe ti a ṣafikun :: iṣẹ spawn () lati ṣẹda ati bẹrẹ awọn okun kernel laifọwọyi. Tun ṣe afikun ọna Iṣẹ-ṣiṣe :: wake_up ().
  • Ṣe afikun module idaduro ti o fun ọ laaye lati lo awọn idaduro (apapọ lori orun ()).

Awọn iyipada ti a dabaa jẹ ki o ṣee ṣe lati lo Rust bi ede keji fun idagbasoke awakọ ati awọn modulu ekuro. Atilẹyin ipata ti gbekalẹ bi aṣayan ti ko ṣiṣẹ nipasẹ aiyipada ati pe ko ja si ifisi ipata laarin awọn igbẹkẹle ikole ti o nilo fun ekuro. Lilo Rust lati ṣe agbekalẹ awakọ yoo gba ọ laaye lati ṣẹda ailewu ati awọn awakọ to dara julọ pẹlu ipa diẹ, laisi awọn iṣoro bii iraye si agbegbe iranti lẹhin ti o ti ni ominira, piparẹ awọn itọka asan, ati awọn agbekọja buffer.

Mimu ailewu iranti ni a pese ni ipata ni akoko iṣakojọpọ nipasẹ iṣayẹwo itọkasi, ṣiṣe itọju ohun-ini ohun ati igbesi aye ohun (opin), ati nipasẹ igbelewọn ti deede wiwọle iranti lakoko ṣiṣe koodu. Ipata tun pese aabo lodi si ṣiṣan odidi odidi, nilo ipilẹṣẹ dandan ti awọn iye oniyipada ṣaaju lilo, mu awọn aṣiṣe dara julọ ni ile-ikawe boṣewa, lo imọran ti awọn itọkasi ailagbara ati awọn oniyipada nipasẹ aiyipada, nfunni titẹ aimi to lagbara lati dinku awọn aṣiṣe ọgbọn.

orisun: opennet.ru

Fi ọrọìwòye kun