ვინდოუსზე უბუნტუს Bash საშუალებას აძლევს ადგილობრივ Linux ELF64 binaries აწარმოებს Windows– ზე Windows Subsystem– ის საშუალებით Linux (WSL) მიუხედავად იმისა, რომ ბევრი ადამიანი შოკირებული იყო Ubuntu– ს შესახებ Bash– ით, აღსანიშნავია, რომ ეს ახალ კარებს ხსნის სხვადასხვა ოპერაციულ სისტემებს შორის თავსებადობისთვის. Microsoft კიდევ ერთ ნაბიჯს გადადგამს და ამჟღავნებს თუ როგორ მუშაობს მისი WSL, ასე რომ ჩვენ უკეთ შეგვიძლია გავიგოთ, თუ როგორ ურთიერთობს ეს ორი სისტემა ერთმანეთთან.
WSL შეიქმნა Microsoft Windows Kernel გუნდის მიერ და შეიცავს როგორც მომხმარებლის რეჟიმის, ასევე ბირთვის რეჟიმის კომპონენტებს. კერძოდ, სისტემა შედგება:
- მომხმარებლის რეჟიმის სესიის მენეჯერის სერვისი, რომელიც მართავს Linux ინციდენტის სასიცოცხლო ციკლს
- Pico პროვაიდერების დრაივერები (lxss.sys, lxcore.sys), რომელთა როლი არის Linux ბირთვის მიბაძვა Linux syscall- ების თარგმნით.
- Pico ამუშავებს მომხმარებლის შეუცვლელი რეჟიმის Linux- ის მასპინძლობას (მაგ. / Bin / bash).
კავშირი სამ კომპონენტს შორის აღწერილია შემდეგნაირად:
ეს არის ადგილი მომხმარებლის რეჟიმის Linux binaries- სა და Windows ბირთვის კომპონენტებს შორის, სადაც ხდება მაგია. Pico პროცესებში Linux– ის შეუცვლელი ბინარების განთავსებით, ჩვენ საშუალებას გვაძლევს Linux სისტემის ზარები მიმართული იყოს Windows– ის ბირთვში. Lxss.sys და lxcore.sys დრაივერები თარგმნიან Linux სისტემის გამოძახებებს NT API- ებში და მიჰბაძებიან Linux ბირთვს.
პროცესის მთავარი გამოწვევაა ორი სისტემის ერთად მუშაობა:
WSL ახდენს შეუცვლელ Linux Linux ELF64 ორობით პროგრამას ვირტუალიზაციის საშუალებით Linux ბირთვის ინტერფეისზე Windows NT ბირთვის თავზე. ერთ-ერთი ბირთვის ინტერფეისი, რომელსაც ის ავლენს სისტემის ზარები (syscalls). Syscall არის სერვისი, რომელსაც უზრუნველყოფს ბირთვი, რომლის გამოძახება შესაძლებელია მომხმარებლის რეჟიმიდან. როგორც Linux ბირთვი, ასევე Windows NT ბირთვი აჩვენებს რამდენიმე ასეულ სიგნალს მომხმარებლის რეჟიმში, მაგრამ მათ აქვთ განსხვავებული სემანტიკა და, ძირითადად, პირდაპირ თავსებადი არ არის. მაგალითად, Linux- ის ბირთვი მოიცავს ნივთებს, როგორიცაა ჩანგალი, ღია და კლავს, ხოლო Windows NT ბირთვს აქვს მსგავსი NtCreateProcess, NtOpenFile და NtTerminateProcess.
Windows– ის ქვესისტემა Linux– ისთვის მოიცავს ბირთვის რეჟიმის დრაივერებს (lxss.sys და lxcore.sys), რომლებიც პასუხისმგებელნი არიან Linux– ის სისტემის ზარების მოთხოვნების დამუშავებაზე Windows NT ბირთვთან კოორდინაციით. დრაივერები არ შეიცავს Linux ბირთვიდან კოდს, მაგრამ მათ ნაცვლად იყენებენ Linux– ის თავსებადი ბირთვის ინტერფეისების სუფთა ოთახს. მშობლიურ Linux- ზე, როდესაც syscall მზადდება მომხმარებლის რეჟიმის შესრულებადი პროგრამით, მას ამუშავებს Linux ბირთვი. WSL– ზე, როდესაც syscall მზადდება იმავე შესრულებადიდან, Windows NT ბირთვი თხოვნას გადასცემს lxcore.sys. სადაც ეს შესაძლებელია, lxcore.sys თარგმნის Linux syscall– ს ექვივალენტურ Windows NT ზარზე, რაც თავის მხრივ აკეთებს მძიმე მოხსნას.
თუ გავითვალისწინებთ Microsoft- ის დაინტერესებას ღია წყაროს პლატფორმებისადმი, ბევრს აინტერესებდა თუ არა ეს ტექნიკურმა გიგანტმა უნდა შეიძინოს Linux– ზე ორიენტირებული ისეთი მსხვილი კომპანიები, როგორიცაა Canonicalკომპანია Ubuntu ოპერაციული სისტემის უკან. მიუხედავად იმისა, რომ Microsoft და Canonical თანამშრომლობდნენ ღია კოდის პროგრამულ უზრუნველყოფაში, არცერთს არ გაუცია კომენტარი ამ შესაძლებლობის შესახებ.
თუ თქვენ საინტერესო ხართ როგორ ვითარდება Linux - Windows ურთიერთქმედება, გადადით Microsoft- ის ბლოგზე. გუნდი დაჰპირდა, რომ ამ თემაზე კიდევ უფრო მეტი ბლოგის პოსტი მოჰყვებოდა.
დაკავშირებული ისტორიები, რომელთა შემოწმება გჭირდებათ:
- Linux მომხმარებლების ცნობით, ”ყურსასმენებმა Windows 8.1-ში შეწყვიტეს მუშაობა”
- Microsoft– მა და Canonical– მა Bash– ის Windows 10 – ზე შემოიტანეს Build 2016 – ზე
- მიუნხენი იწყებს უფასო Ubuntu CD– ების დარიგებას Windows XP მომხმარებლებისთვის