Mofuta oa borobeli oa li-patches bakeng sa kernel ea Linux ka tšehetso bakeng sa puo ea Rust

Miguel Ojeda, sengoli sa projeke ea Rust-for-Linux, o khothalelitse tokollo ea likarolo tsa v8 bakeng sa ho nts'etsapele bakhanni ba lisebelisoa ka puo ea Rust bakeng sa ho hlahlojoa ke baetsi ba Linux kernel. Ena ke mofuta o ntlafalitsoeng oa li-patches, ho nahanoa ka mofuta oa pele, o hatisitsoeng ntle le nomoro ea mofuta. Tšehetso ea mafome e nkoa e le liteko, empa e se e kenyelelitsoe lekaleng le latelang la linux, e ipolelang hore e kenyelelitsoe hoetla ha 5.20 / 6.0, 'me e hōlile ka ho lekaneng ho qala mosebetsi oa ho theha likarolo tsa abstraction holim'a kernel subsystems, hammoho le ho ngola bakhanni. le li-module. Ntlafatso ena e tšehelitsoe ka lichelete ke Google le ISRG (Internet Security Research Group), e leng mothehi oa morero oa Let's Encrypt le ho khothaletsa HTTPS le nts'etsopele ea mahlale a ho ntlafatsa ts'ireletso ea Marang-rang.

Khatisong e ncha:

  • Setsi sa lithulusi le mofuta o mong oa laeborari ea alloc, e se nang monyetla oa "ho tšoha" boemo ha liphoso li etsahala, li ntlafalitsoe bakeng sa tokollo ea Rust 1.62. Ha ho bapisoa le mofuta o neng o sebelisoa pele, Rust toolkit e tsitsitse ts'ehetso bakeng sa ts'ebetso ea const_fn_trait_bound e sebelisoang lipacheng tsa kernel.
  • Khoutu e tlamang e arotsoe ka sephutheloana sa "crate" se arohaneng, se nolofatsang ho aha bocha haeba liphetoho li etsoa feela "kernel" ea sephutheloana se seholo.
  • Ts'ebetsong ea "concat_idents" ea macro! e ngotsweng hape ka mokgwa wa macro procedural e sa tlamahaneng le tshebetso ya concat_idents mme e dumella tshebediso ya ditshupiso ho mefuta e fapaneng ya lehae.
  • "static_assert!" macro e ngotsoe bocha, e lumellang tšebeliso ea "core::assert!()" moelelong ofe kapa ofe ho fapana le li-constants.
  • Macro "build_error!" e ikamahanya le mosebetsi ha "RUST_BUILD_ASERT_{TEMOSO, LUMELLA}" mokhoa o setetsoe bakeng sa likarolo.
  • E kentse faele e arohaneng e nang le "kernel/configs/rust.config".
  • Lifaele tsa "*.i" tse sebetsitsoeng ka li-substitutes tse kholo li fetotsoe lebitso la "*.rsi".
  • Ts'ehetso ea ho aha likarolo tsa Rust tse nang le maemo a ntlafatso a fapaneng le a sebelisoang bakeng sa khoutu ea C e emisitsoe.
  • E kenyellelitsoe fs module, e fanang ka litlamo bakeng sa ho sebetsa le litsamaiso tsa lifaele. Mohlala oa mokhoa o bonolo oa faele o ngotsoeng ho Rust o fanoe.
  • Mojule oa "workqueue" o kenyellelitsoeng bakeng sa ho sebetsa le mela ea sistimi (e fana ka litlamo holim'a sebopeho sa mosebetsi le sebopeho sa kernel ea mosebetsi).
  • Nts'etsopele ea module ea kasync e ile ea tsoela pele ka ts'ebetsong ea mekhoa ea mananeo a asynchronous (async). E kentse mohlala oa seva sa TCP sa mantlha se ngotsoeng ho Rust.
  • E kentse bokhoni ba ho sebetsana le litšitiso ka puo ea Rust ho sebelisoa mefuta ea [Tlhalo] ea Sebapali le mefuta ea [Tlhalo] ea Ngoliso`.
  • E kenyellelitsoe macro "#[vtable]" ho etsa hore ho be bonolo ho sebetsa ka litafole tsa lintlha tsa ts'ebetso, joalo ka sebopeho sa file_operations.
  • Keketso e kentsoeng ea manane a hokahantsoeng a mahlakore a mabeli "unsafe_list::List".
  • E kentse tšehetso ea pele bakeng sa RCU (Read-copy-update) le mofuta oa Guard ho hlahloba hore na senotlolo sa ho bala se tlameletsoe khoeleng ea hona joale.
  • Mosebetsi o Ekelitsoeng:: spawn () mosebetsi oa ho theha le ho qala likhoele tsa kernel ka bohona. Hape o kenyellelitse mokhoa oa Task::wake_up().
  • E kentse mojule oa ho lieha ho o lumella ho sebelisa tieho (sephutheloana holim'a msleep()).

Liphetoho tse reriloeng li etsa hore ho khonehe ho sebelisa Rust e le puo ea bobeli bakeng sa ho ntlafatsa bakhanni le li-module tsa kernel. Tšehetso ea mafome e hlahisoa e le khetho e sa sebetseng ka ho sa feleng 'me e sa etse hore Rust e kenyelelitsoe e le ho itšetleha ho hlokahalang bakeng sa kernel. Ho sebelisa Rust bakeng sa nts'etsopele ea mokhanni ho tla u lumella ho theha bakhanni ba sireletsehileng le ba betere ka boikitlaetso bo fokolang, ntle le mathata a joalo ka phihlello ea mohopolo ka mor'a ho lokolla, li-null pointer dereferences, le buffer overruns.

Ho sebetsa ka mokhoa o sireletsehileng oa memori ho fanoa ka Rust ka nako ea ho bokella ka ho hlahloba litšupiso, ho boloka tlaleho ea botho ba ntho le nako ea bophelo ba ntho (scope), hammoho le ka tlhahlobo ea ho nepahala ha phihlello ea mohopolo nakong ea ts'ebetso ea khoutu. Rust e boetse e fana ka ts'ireletso khahlano le phallo e felletseng, e hloka ho qalisoa ha boleng bo fapaneng pele e sebelisoa, e sebetsana le liphoso hantle laeboraring e tloaelehileng, e sebelisa mohopolo oa litšupiso tse ke keng tsa fetoha le tse fapaneng ka mokhoa o ikhethileng, e fana ka ho thaepa ho tiileng ho fokotsa liphoso tse utloahalang.

Source: opennet.ru

Eketsa ka tlhaloso