2010-04-26 9 views
34

czytam następujące oświadczenie:Dlaczego Linux nie używa przełącznika kontekstowego sprzętu przez TSS?

Architektura x86 zawiera specyficzny typ segmentu o nazwie State Segment Zadanie (TSS), do sklepu komputerowego konteksty. Chociaż Linux nie używa przełączników kontekstowych sprzętowych , jest on jednak zmuszony do skonfigurowania TSS dla każdego odrębnego procesora w systemie.

Zastanawiam:

  • Dlaczego nie użyć Linux wsparcie sprzętowe dla przełączania kontekstu?
  • Czy podejście sprzętowe nie jest szybsze niż podejście programowe?
  • Czy istnieje system operacyjny, który korzysta ze sprzętowego przełącznika kontekstowego? Czy okna go używają?

W końcu i jak zawsze, dziękuję za cierpliwość i odpowiedź.

----------- Dodano --------------

http://wiki.osdev.org/Context_Switching dostał jakieś wyjaśnienie.

Ludzie tak zdezorientowani jak ja mogliby na to spojrzeć. 8 ^)

+1

Mogłem przysiąc, że właśnie czytałem forum OSDev i przeczytałem to;) – Earlz

Odpowiedz

37

TSS x86 działa bardzo wolno w przypadku wielozadaniowości sprzętowej i nie oferuje praktycznie żadnych korzyści w porównaniu do przełączania zadań programowych. (Właściwie to myślę, że ręczne robienie tego ręcznie bije TSS wiele razy)

TSS znany jest również jako denerwujący i nużący do pracy i nie jest przenośny, nawet do x86-64. Linux dąży do pracy na wielu architekturach, więc prawdopodobnie zdecydował się na zmianę oprogramowania, ponieważ może być napisany w sposób niezależny od komputera. Ponadto przełączanie zadań oprogramowania zapewnia o wiele więcej mocy niż to, co można zrobić i jest ogólnie łatwiejsze do skonfigurowania niż TSS.

Wierzę, że Windows 3.1 używał TSS, ale przynajmniej jądro NT> 5 nie. Nie znam żadnego systemu operacyjnego podobnego do systemu Unix, który używa TSS.

Należy pamiętać, że TSS jest obowiązkowe. Tym, co robią systemy operacyjne, jest utworzenie pojedynczego wpisu TSS (na procesor) i za każdym razem, gdy trzeba zmienić zadania, po prostu zmieniają ten pojedynczy TSS. A także jedynymi polami używanymi w TSS przez przełączanie zadań oprogramowania są ESP0 i SS0. Służy do uzyskania dzwonka 0 z kodu 3 dla przerwań. Bez TSS nie byłoby znanego stosu Ring 0, który prowadziłby oczywiście do GPF i ostatecznie potrójnego błędu.

+0

Dzięki Earlz. Zaznaczam twoją odpowiedź jako odpowiedź. Również dzięki innym ludziom. : D – smwikipedia

+2

Przełączanie oparte na TSS zapewnia zarządzanie stanem na poziomie sprzętu (read: security), którego nie zmienia program. System TSS i przywilejów wprowadzony do IA w latach 80. XX wieku odgrywa rolę w zabezpieczaniu procesów od siebie nawzajem. Podsumowując: "Niektóre systemy operacyjne nie używają przełączania zadań na podstawie sprzętu, ponieważ wolą wydajność i przenośność niż bezpieczeństwo". Wydaje się legit. –

+1

Na marginesie NT używa modelu wątków M: N, w przeciwieństwie do "innych systemów" nie ma relacji 1: 1 między wątkami sprzętowymi i programowymi, rozwiązuje to więcej niż tylko "problem z przełączaniem zadań". Nie wszystkie systemy mogą implementować model M: N (na przykład ze względu na ich ścisłe połączenie wątków sprzętowych z konkretnym procesorem i procesem), a zamiast tego ponoszą kary za wydajność (ponieważ takie systemy nie mają odpowiedniego sprzętu => mechanizm sygnalizacji trybu użytkownika, który nie wiąże również pierwotnego wątku wykonywania.) –

6

Linux nie używa segmentowego modelu pamięci, więc ta funkcja specyficzna dla segmentacji nie jest używana.

x86 Procesory mają wiele różnych rodzajów sprzętu do przełączania kontekstu, więc rozróżnienie nie jest sprzętem a oprogramowaniem, ale bardziej jak OS wykorzystuje różne dostępne funkcje sprzętowe. Nie ma potrzeby korzystania z nich wszystkich.

Linux jest tak skoncentrowany na wydajności, że można założyć, że ktoś wyprofilował każdą opcję, która jest możliwa, i że aktualnie stosowane opcje są najlepszym dostępnym kompromisem.

+0

Dziękuję Andrew. Czy możesz mi powiedzieć, jaki inny sprzęt obsługuje przełączanie kontekstu, jaki zapewnia procesor x86? Słyszałem tylko o TSS. – smwikipedia

+0

Większość funkcji MMU ma sens tylko w środowisku wielowątkowym, na przykład. Wygląda na to, że nie miałem racji: procesor zmusza Linuxa do korzystania z TSS dla rejestru ESP, mimo że żadne inne pola nie są używane. Domyślam się, że sekcja dotycząca przełączania zadań programowych zawiera wskazówki do większości potrzebnych informacji: http://wiki.osdev.org/Task_State_Segment –

+0

Na podstawie ostatniego komentarza Andrew: TSS jest wymagany dla rzeczy takich jak ring3 -> ring0 transitions gdzie podnosi wartość ESP0. Zapobiega to kernelowi przy użyciu stroju ring3 przy wejściu do ring0 - funkcji bezpieczeństwa. Linux używa jednego TSS na procesor dla tego przejścia. –

17

Linux używany do przełączania opartego na HW, w przedziale czasowym 1.3. Sądzę, że przełączanie kontekstowe na sw okazało się szybsze i bardziej elastyczne.

Innym powodem może być minimalizacja kodu specyficznego dla arch. Pierwszym portem Linuksa do architektury innej niż x86 była Alpha. Alpha nie ma TSS, więc więcej kodu może być współużytkowane, jeśli wszystkie archs używają przełączania SW. (Tylko przypuszczenie.) Niestety, dzienniki zmian jądra dla okresu jądra 1.2-1.3 nie są dobrze zachowane, więc nie mogę być bardziej szczegółowy.

+0

Dzięki Andy za informacje o historii. : D – smwikipedia

3

@Andy - Ostatnie jądro z przełączaniem zadań sprzętowych to 2.1.108.

+1

Potrącony, ponieważ powinien być komentarzem (do odpowiedzi Andysa), a nie własną odpowiedzią. – amn

Powiązane problemy