W jaki sposób BIOS może blokować wirtualizację?

26

Zaczynam pracować z Dockerem i po kilku godzinach próbowania go uruchomić, dowiedziałem się, że mój BIOS go blokuje i że muszę dostosować ustawienia BIOS-u. Powiedziano mi, że BIOS jest w jakiś sposób związany z płytą główną.

W jaki sposób BIOS może zablokować ten proces, unieważniając system operacyjny?

Alvaro Joao
źródło
14
Masz to zacofane. Ustawienia BIOS dotyczące wirtualizacji informują CPU, że zezwala na określony rodzaj przetwarzania. jeśli rozszerzenia wirtualizacji nie są włączone w BIOS, procesor nie będzie mógł uruchomić programu. Sytuacja przypomina próbę uruchomienia programu skompilowanego dla architektury procesora DEC Alpha w systemie x64. bez rozszerzeń program spróbuje uruchomić instrukcje, których procesor nie rozumie. Twój doker blokuje się przed uruchomieniem, ponieważ wykrył, że procesor w jego obecnej konfiguracji nie może go uruchomić.
Frank Thomas

Odpowiedzi:

37

To nie jest tak, że CPU blokuje program; nie ma koncepcji aplikacji na tak niskim poziomie. Problem polega na tym, że Docker w systemach operacyjnych innych niż Linux może wymagać wirtualizacji sprzętu. Nie określiłeś swojego systemu operacyjnego, ale zrobiłem trochę szpiegowania i odkryłem, że prawdopodobnie używasz systemu Windows.

Wirtualizacja sprzętowa to funkcja procesora, która, jak można się domyślić na podstawie nazwy, pozwala procesorowi pomóc w wirtualizacji. Na wielu komputerach musisz włączyć to w BIOS-ie. Ma to częściowo na celu zapobieganie problemom bezpieczeństwa . Zasadniczo nie można uruchomić programu, ponieważ próbował użyć funkcji, która była faktycznie nieobecna, a nie aktywnie blokowana.

Ben N.
źródło
14
a tiny bit of snoopingHa..ha
E2Busy
tak, korzystam z systemu Windows 7! Dziękuję za wyjaśnienie!!! Teraz rozumiem!
Alvaro Joao
Znam to ustawienie, ale wciąż niejasne, czym dokładnie jest wirtualizacja sprzętowa (w kontekście ustawienia BIOS)?
Celeritas,
2
@Celeritas Wirtualizacja sprzętu to zestaw funkcji zapewnianych przez procesor i system BIOS, które zwiększają wydajność działających maszyn wirtualnych, na przykład poprzez przejrzyste zarządzanie dostępem do pamięci wykonywanym przez maszynę wirtualną w bardziej wydajny sposób niż można to zrobić na poziomie samego oprogramowania, oraz obsługa / przechwytywanie „uprzywilejowanych” instrukcji, takich jak operacje we / wy dla oprogramowania do wirtualizacji w celu wydajniejszej obsługi.
heksafrakcja
2
@ RACING121 N oznacza NSA :)
Ben N
41

Odpowiedź Ben N jest zdecydowanie najbardziej użyteczna i jasna.

Dla tych, którzy wciąż się zastanawiają, oto pełna historia.


Wirtualizację osiąga się dzięki sprzętowej pomocy procesora. Ponieważ zwirtualizowany system operacyjny zakłóca działanie hosta, ponieważ konkurują one o te same zasoby, potrzebny jest mechanizm, aby powstrzymać gościa przed niekontrolowanym dostępem do sprzętu. Można to zrobić za pomocą oprogramowania, spowolnienia, technik lub pomocy procesora.

Wirtualizacja wspomagana sprzętowo jest realizowana za pomocą konkretnych, opcjonalnych instrukcji, o których można przeczytać w rozdziałach 23, 24, 25, 26, 27 i 28 instrukcji Intel 3B część 3 . Oprogramowanie musi najpierw sprawdzić, czy instrukcje są obsługiwane, zanim spróbuje ich użyć.

Ze względów bezpieczeństwa CPU ma specjalny rejestr, jest to MSR o nazwie IA32_FEATURE_CONTROL, który przechowuje informacje z funkcją włączania lub wyłączania.
Cytowanie

Bit 0 to bit blokady. Jeśli ten bit jest wyraźny, VMXON powoduje wyjątek dotyczący ogólnej ochrony. Jeśli ustawiony jest bit blokady, WRMSR dla tego MSR powoduje wyjątek ogólnej ochrony; MSR nie może być modyfikowany do momentu zresetowania zasilania . Systemowy system BIOS może użyć tego bitu, aby zapewnić opcję konfiguracji systemu BIOS w celu wyłączenia obsługi VMX. Aby włączyć obsługę VMX na platformie, BIOS musi ustawić bit 1, bit 2 lub oba (patrz poniżej), a także bit blokady.

Podstawową kwestią jest to, że po zablokowaniu rejestru nie można go odblokować do momentu włączenia zasilania .

Ponieważ BIOS / UEFI jest na pierwszym miejscu, może wyłączyć wirtualizację, usuwając odpowiednie bity i blokując rejestr, zanim jakikolwiek system operacyjny może temu zapobiec. Gdy funkcja wirtualizacji jest wyłączona w ten sposób, procesor zgłasza, że ​​brakuje opcjonalnego rozszerzenia instrukcji (aw rzeczywistości jeśli wystąpi błąd, a oprogramowanie nie może korzystać z wirtualizacji sprzętowej).

Margaret Bloom
źródło
2
To bardzo dobry dodatek do pytania. Większość ludzi nie ma pojęcia, że ​​ustawienie wymaga resetowania w celu zmiany, więc nie można go włączyć „w locie”, gdy system operacyjny jest uruchomiony.
Tonny
OHH, więc tak to działa! Poszukałem go i znalazłem twoją odpowiedź (co mnie interesuje, jeśli chodzi o moje osobiste koncepcje)
Paul Stelian,