Glibc 2.36 Համակարգային գրադարանի թողարկում

Վեց ամիս մշակումից հետո թողարկվել է GNU C Library (glibc) 2.36 համակարգի գրադարանը, որը լիովին համապատասխանում է ISO C11 և POSIX.1-2017 ստանդարտների պահանջներին։ Նոր թողարկումը ներառում է ուղղումներ 59 մշակողների կողմից:

Glibc 2.36-ում իրականացված որոշ բարելավումներ ներառում են.

  • Ավելացվեց նոր DT_RELR (հարաբերական տեղափոխում) հասցեների տեղափոխման ձևաչափի աջակցություն, որը թույլ է տալիս նվազեցնել հարաբերական տեղափոխությունների չափը համօգտագործվող օբյեկտներում և PIE (Դիրքից անկախ գործադիրներ) ռեժիմում կապակցված գործարկվող ֆայլերում: ELF ֆայլերում DT_RELR դաշտի օգտագործումը պահանջում է «-z pack-relative-relocs» տարբերակի աջակցություն, որը ներկայացվել է binutils 2.38-ի թողարկման մեջ:
  • Linux պլատֆորմի համար pidfd_open, pidfd_getfd և pidfd_send_signal գործառույթներն իրականացվել են՝ ապահովելով մուտք դեպի pidfd գործառույթ, որն օգնում է կարգավորել PID-ի վերօգտագործման իրավիճակները՝ ավելի ճշգրիտ կերպով բացահայտելու վերահսկվող ֆայլեր մուտք գործող գործընթացները (pidfd-ը կապված է որոշակի գործընթացի հետ և չի փոխվում, մինչդեռ PID-ը կարող է. կցվի մեկ այլ գործընթացի այն բանից հետո, երբ ընթացիկ գործընթացն ավարտվում է այդ PID-ի հետ):
  • Linux պլատֆորմի համար ավելացվել է process_madvise() ֆունկցիան, որը թույլ է տալիս մի գործընթացին թողարկել madvise() համակարգի կանչը մեկ այլ գործընթացի անունից՝ նույնականացնելով թիրախային գործընթացը՝ օգտագործելով pidfd: madvise()-ի միջոցով դուք կարող եք միջուկին տեղեկացնել հիշողության հետ աշխատելու առանձնահատկությունների մասին՝ գործընթացի հիշողության կառավարումը օպտիմալացնելու համար, օրինակ, փոխանցված տեղեկատվության հիման վրա միջուկը կարող է նախաձեռնել լրացուցիչ ազատ հիշողության թողարկում: Զանգ madvise()-ին մեկ այլ գործընթացի միջոցով կարող է պահանջվել այն իրավիճակում, երբ օպտիմալացման համար անհրաժեշտ տեղեկատվությունը անհայտ է ընթացիկ գործընթացին, բայց համակարգված է առանձին ֆոնային կառավարման գործընթացով, որը կարող է ինքնուրույն նախաձեռնել չօգտագործված հիշողության հեռացումը գործընթացներից:
  • Linux պլատֆորմի համար ավելացվել է process_mrelease() ֆունկցիան, որը թույլ է տալիս արագացնել հիշողության թողարկումը դրա կատարումն ավարտող գործընթացի համար։ Նորմալ պայմաններում ռեսուրսների թողարկումը և գործընթացի դադարեցումը ակնթարթային չեն և կարող են հետաձգվել տարբեր պատճառներով՝ խանգարելով օգտագործողի տարածության հիշողության վաղ արձագանքման համակարգերին, ինչպիսիք են oomd-ը (տրամադրվում է systemd-ի կողմից): Անվանելով process_mrelease՝ նման համակարգերը ավելի կանխատեսելիորեն կարող են խթանել հիշողության վերադարձը հարկադիր գործընթացներից:
  • DNS լուծիչի ներկառուցված ներդրմանն ավելացվել է «no-aaaa» տարբերակի աջակցությունը, որը թույլ է տալիս անջատել AAAA գրառումների համար DNS հարցումների ուղարկումը (IPv6 հասցեն որոշելով հյուրընկալողի անունով), ներառյալ NSS-ը գործարկելիս: Գործառույթներ, ինչպիսիք են getaddrinfo(), պարզեցնելու խնդրի ախտորոշումը: Այս տարբերակը չի ազդում /etc/host-ում սահմանված IPv6 հասցեների կապերի մշակման և getaddrinfo()-ին AI_PASSIVE դրոշակով զանգերի վրա:
  • Linux պլատֆորմի համար ավելացվել են fsopen, fsmount, move_mount, fsconfig, fspick, open_tree և mount_setattr գործառույթները՝ ապահովելով մուտք դեպի նոր միջուկի API՝ ֆայլային համակարգի մոնտաժը կառավարելու համար՝ հիմնված լեռան անվանատարածքների վրա: Առաջարկվող գործառույթները թույլ են տալիս առանձին մշակել մոնտաժման տարբեր փուլեր (մշակել սուպերբլոկը, ստանալ տեղեկություններ ֆայլային համակարգի մասին, տեղադրել, ամրացնել մոնտաժման կետին), որոնք նախկինում կատարվել են ընդհանուր mount() ֆունկցիայի միջոցով։ Առանձին գործառույթները հնարավորություն են տալիս կատարել ավելի բարդ մոնտաժային սցենարներ և առանձին կատարել այնպիսի գործողություններ, ինչպիսիք են գերբլոկի վերակազմավորումը, ընտրանքների միացումը, ամրացման կետը փոխելը և այլ անվանատարածք տեղափոխելը: Բացի այդ, առանձին մշակումը թույլ է տալիս ճշգրիտ որոշել սխալի կոդերի թողարկման պատճառները և սահմանել բազմաթիվ աղբյուրներ բազմաշերտ ֆայլային համակարգերի համար, ինչպիսիք են overlayf-ները:
  • localedef-ը աջակցություն է տրամադրում ASCII-ի փոխարեն UTF-8 կոդավորման մեջ տրամադրված տեղային սահմանման ֆայլերի մշակման համար:
  • Ավելացվել են գործառույթներ՝ բազմաբայթ mbrtoc8 և c8rtomb կոդավորումները ISO C2X N2653 և C++20 P0482R6 բնութագրերին փոխարկելու համար:
  • Ավելացված է աջակցություն ISO C8X N2 ստանդարտի նախագծում սահմանված char2653_t տեսակի համար:
  • Ավելացվել են arc4random, arc4random_buf և arc4random_uniform գործառույթները, որոնք ապահովում են փաթեթներ getrandom համակարգի զանգի և /dev/urandom ինտերֆեյսի վրա, որոնք վերադարձնում են բարձրորակ կեղծ պատահական թվեր:
  • Linux պլատֆորմի վրա աշխատելիս այն աջակցում է LoongArch հրահանգների հավաքածուի ճարտարապետությանը, որն օգտագործվում է Loongson 3 5000 պրոցեսորներում և իրականացնում է նոր RISC ISA-ը, որը նման է MIPS-ին և RISC-V-ին: Իր ներկայիս տեսքով հասանելի է միայն LoongArch-ի 64-բիթանոց տարբերակի (LA64) աջակցությունը: Աշխատելու համար ձեզ անհրաժեշտ են binutils 2.38, GCC 12 և Linux kernel 5.19-ի առնվազն տարբերակներ:
  • Prelink մեխանիզմը, ինչպես նաև դրա հետ կապված LD_TRACE_PRELINKING և LD_USE_LOAD_BIAS միջավայրի փոփոխականները և կապող հնարավորությունները հնացել են և կհեռացվեն ապագա թողարկումում:
  • Հեռացվել է Linux միջուկի տարբերակը ստուգելու և LD_ASSUME_KERNEL միջավայրի փոփոխականի հետ աշխատելու կոդը: Glibc-ի կառուցման ժամանակ աջակցվող միջուկի նվազագույն տարբերակը որոշվում է NT_GNU_ABI_TAG ELF դաշտի միջոցով:
  • LD_LIBRARY_VERSION միջավայրի փոփոխականը դադարեցվել է Linux հարթակում:

Source: opennet.ru

Добавить комментарий