Rust хэлийг дэмждэг Линукс цөмд зориулсан засваруудын гурав дахь хэвлэл

Линуксийн хувьд Rust төслийн зохиогч Мигель Ожеда Linux цөм хөгжүүлэгчдэд зориулж Rust хэл дээр төхөөрөмжийн драйверуудыг хөгжүүлэх гурав дахь бүрэлдэхүүн хэсгийн хувилбарыг санал болгов. Rust-ийн дэмжлэгийг туршилтын гэж үздэг боловч linux-next салбарт оруулахаар аль хэдийн тохиролцсон. Энэхүү бүтээн байгуулалтыг Google болон ISRG (Интернетийн аюулгүй байдлын судалгааны групп) санхүүжүүлдэг бөгөөд энэ нь Let's Encrypt төслийн үүсгэн байгуулагч бөгөөд HTTPS болон интернетийн аюулгүй байдлыг сайжруулах технологийн хөгжлийг дэмждэг.

Санал болгож буй өөрчлөлтүүд нь Rust хэлийг драйверууд болон цөмийн модулиудыг хөгжүүлэх хоёр дахь хэл болгон ашиглах боломжтой гэдгийг санаарай. Rust-ийн дэмжлэгийг анхдагчаар идэвхжүүлээгүй сонголт хэлбэрээр танилцуулж байгаа бөгөөд зэв нь цөмийн хувьд шаардлагатай бүтээх хамаарал болгон оруулахад хүргэдэггүй. Драйвер хөгжүүлэхэд Rust-ийг ашигласнаар санах ойд нэвтрэх эрх чөлөөлсний дараа санах ойд нэвтрэх, хоосон заагч хаягжилт, буфер хэт ачаалал гэх мэт асуудлуудаас ангид, хамгийн бага хүчин чармайлтаар илүү аюулгүй, илүү сайн драйверуудыг бий болгох боломжтой болно.

Санах ойн аюулгүй ажиллагааг Rust-д хөрвүүлэх үед лавлагаа шалгах, объектын эзэмшил болон объектын ашиглалтын хугацааг (хамрах хүрээ) хянах, мөн кодыг гүйцэтгэх явцад санах ойд нэвтрэх зөв эсэхийг үнэлэх замаар хангадаг. Rust нь бүхэл тоон хэтрэхээс хамгаалж, ашиглахын өмнө хувьсагчийн утгыг заавал эхлүүлэх шаардлагатай, стандарт номын санд алдааг илүү сайн зохицуулдаг, өөрчлөгддөггүй лавлагаа, хувьсагчийн ойлголтыг анхдагчаар ашигладаг, логик алдааг багасгахын тулд хүчтэй статик бичихийг санал болгодог.

Засваруудын шинэ хувилбар нь засварын эхний болон хоёр дахь хувилбарын хэлэлцүүлгийн үеэр гарсан сэтгэгдлийг арилгасаар байна. Хамгийн мэдэгдэхүйц өөрчлөлтүүд:

  • Rust 1.57-ийн тогтвортой хувилбарыг лавлагаа хөрвүүлэгч болгон ашиглах руу шилжилт хийж, Rust 2021 хэлний тогтворжуулсан хувилбарын холбоосыг өгсөн. Өмнө нь засваруудыг Rust-ийн бета салбартай холбож, хэлний зарим функцийг ашигладаг байсан. тогтворгүй гэж ангилсан. Rust 2021 техникийн үзүүлэлтэд шилжсэнээр const_fn_transmute, const_panic, const_unavailable_unchecked, core_panic болон try_reserve гэх мэт тогтворгүй функцуудыг нөхөөсүүдэд ашиглахгүй байх ажлыг эхлүүлэх боломжийг бидэнд олгосон.
  • Засваруудад багтсан Rust номын сангийн alloc хувилбарын хөгжүүлэлт үргэлжилж, санах ойгүй болсон гэх мэт алдаа гарсан үед "сандрах" төлөвийг бий болгох санах ойн хуваарилалтын функцийг өөрчилсөн. Шинэ хувилбар нь "no_rc" болон "no_sync" сонголтуудыг хэрэгжүүлснээр цөмийн зэв кодонд ашиглагдаагүй функцуудыг идэвхгүй болгож, номын санг илүү модульчлагдсан болгодог. Цөмд шаардлагатай өөрчлөлтүүдийг үндсэн номын сан руу шилжүүлэхэд чиглэсэн үндсэн хуваарилагч хөгжүүлэгчидтэй ажил үргэлжилж байна. Цөмийн түвшинд номын санд ажиллахад шаардлагатай "no_fp_fmt_parse" сонголтыг Rust үндсэн номын сан (гол) руу шилжүүлсэн.
  • Цөмийг CONFIG_WERROR горимд бүтээх үед хөрвүүлэгчийн болзошгүй анхааруулгыг арилгахын тулд кодыг цэвэрлэв. Rust-д код үүсгэх үед хөрвүүлэгчийн оношлогооны нэмэлт горимууд болон Clippy linter анхааруулга идэвхждэг.
  • Хийсвэрлэлүүдийг дарааллын түгжээ (дарааллын түгжээ), тэжээлийн удирдлагын буцаан дуудлагууд, оролт/гаралтын санах ой (readX/writeX), тасалдал болон урсгал зохицуулагч, GPIO, төхөөрөмжид хандах, драйверууд болон итгэмжлэлүүдэд ашиглахыг санал болгож байна.
  • Драйвер хөгжүүлэх хэрэгслүүдийг шилжүүлэн байршуулах мутекс, битийн давталт, хялбаршуулсан заагчийн холболт, сайжруулсан алдааны оношлогоо, өгөгдлийн автобуснаас хамааралгүй дэд бүтцийг багтаасан болно.
  • Лавлагааг тоолоход ижил нэртэй цөмийн API ашигладаг refcount_t backend дээр суурилсан хялбаршуулсан Ref төрлийг ашиглан холбоосуудтай ажиллах сайжруулсан. Стандарт хуваарилалтын санд өгөгдсөн Arc болон Rc төрлүүдийн дэмжлэгийг хассан бөгөөд цөмийн түвшинд гүйцэтгэсэн кодонд боломжгүй (эдгээр төрлийг идэвхгүй болгох сонголтуудыг номын санд зориулж бэлтгэсэн).
  • Засварууд нь Rust дээр дахин бичсэн PL061 GPIO драйверын хувилбарыг агуулдаг. Драйверын онцлог шинж чанар нь түүний хэрэгжилт нь C хэл дээрх одоо байгаа GPIO драйверийг бараг мөр мөрөөр давтдаг явдал юм. Rust-д драйвер үүсгэхтэй танилцахыг хүсч буй хөгжүүлэгчдэд зориулж C кодыг Rust-ийн аль бүтцэд хувиргаж байгааг ойлгох боломжийг олгодог мөр мөрөөр харьцуулалтыг бэлдсэн.
  • Rust-ийн үндсэн кодын суурь нь libgccjit номын санг ашиглан урьдчилж (AOT) эмхэтгэлийг хэрэгжүүлдэг GCC-д зориулсан rustc backend болох rustc_codegen_gcc-г ашигласан. Backend-ийг зөв хөгжүүлснээр энэ нь GCC ашиглан цөмд хамаарах Rust кодыг цуглуулах боломжийг танд олгоно.
  • Red Hat нь ARM, Google, Microsoft-оос гадна Linux цөмд Rust хэлийг ашиглах сонирхолтой байгаагаа илэрхийлсэн. Google нь Rust for Linux төсөлд шууд дэмжлэг үзүүлж, Rust дахь Binder процесс хоорондын харилцааны механизмын шинэ хэрэгжилтийг боловсруулж, Rust дахь янз бүрийн драйверуудыг дахин боловсруулах боломжийг судалж байгааг эргэн санацгаая. Майкрософт компани Hyper-V-д зориулсан драйверуудыг Rust-д нэвтрүүлж эхэлжээ. ARM нь ARM дээр суурилсан системүүдэд Rust дэмжлэгийг сайжруулахаар ажиллаж байна. IBM нь PowerPC системүүдийн цөмд Rust дэмжлэгийг хэрэгжүүлсэн.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх