ለሊኑክስ ከርነል ስድስተኛው የፓቼዎች ስሪት ለዝገት ቋንቋ ድጋፍ

የ Rust-for-Linux ፕሮጄክት ደራሲ ሚጌል ኦጄዳ የመሣሪያ ነጂዎችን በዝገት ቋንቋ ለማዳበር v6 ክፍሎች እንዲለቁ ሐሳብ አቅርበዋል ለሊኑክስ ከርነል ገንቢዎች። ያለ ስሪት ቁጥር የታተመውን የመጀመሪያውን እትም ከግምት ውስጥ በማስገባት ይህ የ patches ሰባተኛው እትም ነው። የዝገት ድጋፍ እንደ ሙከራ ይቆጠራል ነገር ግን በሚቀጥለው ሊኑክስ ቅርንጫፍ ውስጥ ተካቷል እና በከርነል ንኡስ ስርዓቶች ላይ የአብስትራክሽን ንብርብሮችን ለመፍጠር እንዲሁም ሾፌሮችን እና ሞጁሎችን ለመፃፍ በበቂ ሁኔታ ተዘጋጅቷል። ልማቱ በGoogle እና ISRG (የኢንተርኔት ደኅንነት ጥናትና ምርምር ቡድን) የገንዘብ ድጋፍ የሚደረግለት ሲሆን እሱም የኑ ኢንክሪፕት ፕሮጄክት መስራች እና HTTPSን እና የኢንተርኔት ደህንነትን ለማሻሻል ቴክኖሎጂዎችን ማስፋፋት ነው።

በአዲሱ ስሪት:

  • የመሳሪያ ኪት እና የአሎክ ቤተ መፃህፍት ተለዋጭ፣ ስህተቶች በሚከሰቱበት ጊዜ “አስደንጋጭ” ሁኔታ ሊፈጠር ከሚችል ትውልድ ነፃ የወጣው፣ ዝገት 1.60 እንዲለቀቅ ተዘምኗል፣ ይህም በከርነል ጥገናዎች ውስጥ ጥቅም ላይ የሚውለውን “ምናልባት_uninit_extra” ሁነታን ይደግፋል።
  • ፈተናዎችን ከሰነዱ (በሰነዱ ውስጥ እንደ ምሳሌነት የሚያገለግሉ ሙከራዎች)፣ ከከርነል ኤፒአይ ጋር የተሳሰሩ ሙከራዎችን በማጠናቀር በከርነል ጭነት ወቅት ወደተከናወኑ KUnit ሙከራዎች የመቀየር ችሎታ ታክሏል።
  • ፈተናዎች ልክ እንደ Rust kernel code የክሊፕ ሊንተር ማስጠንቀቂያ እንዳይሰጡ መስፈርቶች ቀርበዋል።
  • የ "የተጣራ" ሞጁል ከኔትወርክ ተግባራት ጋር የመጀመሪያ ትግበራ ቀርቧል. ዝገት ኮድ እንደ የስም ቦታ (በመዋቅር የተጣራ የከርነል መዋቅር ላይ የተመሰረተ)፣ SkBuff (struct sk_buff)፣ TcpListener፣ TcpStream (struct socket)፣ Ipv4Addr (struct in_addr)፣ SocketAddrV4 (struct sockaddr_6) እና የእነሱ IPsvXNUMX .
  • ያልተመሳሰሉ የፕሮግራም አወጣጥ ቴክኒኮች (async) የመጀመሪያ ድጋፍ አለ ፣ በካሲንክ ሞጁል መልክ የተተገበረ። ለምሳሌ፣ የTCP ሶኬቶችን ለመቆጣጠር ያልተመሳሰለ ኮድ መፃፍ ይችላሉ፡ async fn echo_server(ዥረት፡ TcpStream) -> ውጤት { let mut buf = [0u8; 1024]; loop { let n = stream.read (&mut buf) .ይጠብቅ?; ከሆነ n == 0 {ተመለስ እሺ(()); } stream.write_ሁሉንም (&buf[..n]) ይጠብቁ?; }
  • የአውታረ መረብ ፓኬት ማጣሪያዎችን ለመቆጣጠር የተጣራ: ማጣሪያ ሞጁል ታክሏል። ምሳሌ rust_netfilter.rs በዝገት ቋንቋ ከማጣሪያ ትግበራ ጋር ታክሏል።
  • የቀላል mutex smutex::Mutex ትግበራ ታክሏል፣ ይህም መሰካት አያስፈልገውም።
  • የተጨመረው NoWaitLock፣ መቆለፊያን በፍፁም የማይጠብቅ፣ እና በሌላ ክር ከተያዘ፣ደዋዩን ከማቆም ይልቅ መቆለፊያ ለማግኘት ሲሞከር ስህተት እንዲነገር ያደርጋል።
  • ታክሏል RawSpinLock፣ በከርነል ውስጥ በ raw_spinlock_t ተለይቷል፣ ስራ ፈት ሊሆኑ የማይችሉ ክፍሎችን ተግባራዊ ለማድረግ።
  • የማመሳከሪያው የመቁጠሪያ ዘዴ የሚተገበርበት ነገርን ለማጣቀስ የ AREf አይነት ታክሏል (ሁልጊዜ የሚጠቀስ)።
  • Rustc በጂሲሲ ውስጥ ላሉት አርክቴክቸር እና ማሻሻያዎች ድጋፍ ለመስጠት ከጂሲሲ ፕሮጀክት የlibgccjit ላይብረሪ እንድትጠቀሙ የሚያስችል የ rustc_codegen_gcc backend የ rustc compilerን የማስነሳት አቅምን ተግባራዊ አድርጓል። የማጠናቀቂያ ማስተዋወቂያ ማለት የሩስት ኮምፕሌተርን በራሱ ለመገንባት በጂሲሲ ላይ የተመሰረተ ኮድ ጄኔሬተርን በ rustc የመጠቀም ችሎታ ማለት ነው። በተጨማሪም፣ በቅርቡ የተለቀቀው GCC 12.1 በትክክል እንዲሠራ ለlibgccjit አስፈላጊ የሆኑ ማስተካከያዎችን ያካትታል። rustup utilityን በመጠቀም rustc_codegen_gccን ለመጫን የሚያስችል ዝግጅት በመደረግ ላይ ነው።
  • በጂ.ሲ.ሲ ላይ የተመሰረተ የዝገት ቋንቋ ማቀናበሪያን በመተግበር በ GCC frontend gccrs እድገት ውስጥ ያለው መሻሻል ተጠቅሷል። በአሁኑ ጊዜ በ gccrs ላይ የሚሰሩ ሁለት የሙሉ ጊዜ ገንቢዎች አሉ።

የታቀዱት ለውጦች ሹፌሮችን እና የከርነል ሞጁሎችን ለማዳበር Rustን እንደ ሁለተኛ ቋንቋ ለመጠቀም እንዳስቻሉ ያስታውሱ። የዝገት ድጋፍ በነባሪነት ያልነቃ እና ለከርነል ከሚያስፈልጉት የግንባታ ጥገኞች መካከል ዝገት እንዲካተት የማያደርግ አማራጭ ሆኖ ቀርቧል። ሹፌሮችን ለማዳበር Rustን መጠቀም በትንሹ ጥረት ደህንነቱ የተጠበቀ እና የተሻሉ አሽከርካሪዎችን ለመፍጠር ያስችላል፣ ከችግሮች ነፃ ከወጣ በኋላ የማስታወሻ ቦታ ማግኘት፣ ባዶ ጠቋሚዎችን መሰረዝ እና ቋት መጨናነቅ።

የማህደረ ትውስታ-አስተማማኝ አያያዝ በዝገት ውስጥ በማጠናቀር ጊዜ በማጣቀሻ ፍተሻ፣ የነገሮችን ባለቤትነት እና የእቃውን የህይወት ዘመን (ስፋት) በመከታተል እንዲሁም በኮድ አፈፃፀም ወቅት የማስታወስ ችሎታን ትክክለኛነት በመገምገም ይሰጣል። ዝገት ከኢንቲጀር መብዛት ጥበቃን ይሰጣል፣ ከመጠቀምዎ በፊት ተለዋዋጭ እሴቶችን የግዴታ ማስጀመርን ይጠይቃል፣ በመደበኛ ቤተ-መጽሐፍት ውስጥ ስህተቶችን በተሻለ ሁኔታ ይቆጣጠራል ፣ የማይለዋወጥ ማጣቀሻዎችን እና ተለዋዋጮችን በነባሪነት ይተገበራል ፣ ምክንያታዊ ስህተቶችን ለመቀነስ ጠንካራ የማይንቀሳቀስ ትየባ ይሰጣል።

ምንጭ: opennet.ru

አስተያየት ያክሉ