Linux-ytimen korjaustiedostojen kahdeksas versio, joka tukee Rust-kieltä

Rust-for-Linux-projektin kirjoittaja Miguel Ojeda ehdotti v8-komponenttien julkaisua laiteajurien kehittämiseen Rust-kielellä Linux-ytimen kehittäjien harkittavaksi. Tämä on korjauspäivitysten tarkistettu versio, jossa otetaan huomioon ensimmäinen versio, julkaistu ilman versionumeroa. Rust-tukea pidetään kokeellisena, mutta se sisältyy jo linux-next-haaraan, väitetään olevan integroitu syksyn 5.20/6.0-julkaisuun ja on riittävän kypsä aloittamaan abstraktiokerrosten luomisen ytimen alijärjestelmiin sekä kirjoitusajurien kirjoittamiseen. ja moduulit. Kehitystä rahoittavat Google ja ISRG (Internet Security Research Group), joka on Let's Encrypt -projektin perustaja ja edistää HTTPS:ää ja Internetin turvallisuutta parantavien teknologioiden kehitystä.

Uudessa versiossa:

  • Työkalusarja ja alloc-kirjaston muunnos, jotka eivät aiheuta mahdollista "paniikki"-tilan luomista virheiden sattuessa, on päivitetty Rust 1.62:n julkaisua varten. Aiemmin käytettyyn versioon verrattuna Rust-työkalupakkissa on vakiintunut tuki ytimen korjauksissa käytettävälle const_fn_trait_bound-toiminnallisuudelle.
  • Sidontakoodi on erotettu erilliseksi laatikkopaketiksi "sidokset", mikä yksinkertaistaa uudelleenrakentamista, jos muutoksia tehdään vain pääpakettiin "ytimen".
  • Makro "concat_idents!" kirjoitetaan uudelleen prosessimakron muodossa, joka ei ole sidottu concat_idents-toimintoon ja sallii viittausten käytön paikallisiin muuttujiin.
  • "Static_assert!"-makro on kirjoitettu uudelleen, mikä mahdollistaa "core::assert!()":n käytön kaikissa yhteyksissä vakioiden sijaan.
  • Makro "build_error!" mukautettu toimimaan, kun moduuleille on asetettu RUST_BUILD_ASSERT_{WARN,ALLOW}-tila.
  • Lisätty erillinen tiedosto asetuksilla "kernel/configs/rust.config".
  • Makrokorvauksissa käsitellyt *.i-tiedostot on nimetty uudelleen muotoon *.rsi.
  • Tuki Rust-komponenttien rakentamiselle, joiden optimointitasot poikkeavat C-koodissa käytetyistä, on lopetettu.
  • Lisätty fs-moduuli, joka tarjoaa sidoksia tiedostojärjestelmien kanssa työskentelemiseen. Esitetään esimerkki yksinkertaisesta Rust-kielellä kirjoitetusta tiedostojärjestelmästä.
  • Lisätty työjonomoduuli järjestelmäjonojen kanssa työskentelemiseen (tarjoaa sidoksia work_struct- ja workqueue_struct-ytimen rakenteiden yli).
  • Kasync-moduulin kehitystyö jatkui asynkronisten ohjelmointimenetelmien (async) käyttöönotolla. Lisätty esimerkki ydintason TCP-palvelimesta, joka on kirjoitettu Rustilla.
  • Lisätty mahdollisuus käsitellä keskeytyksiä Rust-kielessä käyttämällä [Threaded]Handler- ja [Threaded]Registration-tyyppejä.
  • Lisätty prosessimakro "#[vtable]", jotta on helpompi työskennellä funktioosoittimien taulukoiden, kuten file_operations-rakenteen, kanssa.
  • Lisätty kaksisuuntaisten linkitettyjen luetteloiden "unsafe_list::List" toteutus.
  • Lisätty alustava tuki RCU:lle (Read-copy-update) ja Guard-tyypille sen tarkistamiseksi, onko lukulukko sidottu nykyiseen säikeeseen.
  • Lisätty Task::spawn()-funktio ytimen säikeiden luomiseen ja automaattiseen käynnistämiseen. Lisätty myös Task::wake_up()-metodi.
  • Lisätty viivemoduuli, jonka avulla voit käyttää viiveitä (wrapper over msleep()).

Ehdotetut muutokset mahdollistavat Rustin käytön toisena kielenä ohjaimien ja ydinmoduulien kehittämisessä. Rust-tuki esitetään vaihtoehtona, joka ei ole oletusarvoisesti käytössä, eikä se johda ruosteen sisällyttämiseen ytimen vaadittujen koontiriippuvuuksien joukkoon. Rustin käyttäminen ohjaimien kehittämiseen mahdollistaa turvallisempien ja parempien ohjainten luomisen vähäisellä vaivalla, ilman ongelmia, kuten muistialueen käyttäminen sen vapauttamisen jälkeen, nollaosoittimien viittausten poistaminen ja puskurin ylitykset.

Muistiturvallista käsittelyä tarjotaan Rustissa käännöshetkellä referenssitarkistuksen, objektin omistajuuden ja objektin käyttöiän (laajuus) seurantaan sekä muistin käytön oikeellisuuden arviointiin koodin suorittamisen aikana. Ruoste tarjoaa myös suojan kokonaislukujen ylivuodoilta, vaatii muuttujien arvojen pakollisen alustamisen ennen käyttöä, käsittelee virheet paremmin standardikirjastossa, soveltaa oletusarvoisesti muuttumattomien viitteiden ja muuttujien käsitettä, tarjoaa vahvan staattisen kirjoittamisen loogisten virheiden minimoimiseksi.

Lähde: opennet.ru

Lisää kommentti