Uczę się OS na uniwersytecie, a nasz projekt opiera się na OS/161 zbudowanym przez Harvard. Tak więc moja odpowiedź opiera się na tym systemie operacyjnym.
W OS/161 każdy wątek ma 2 stosy - jeden dla użytkownika/aplikacji, jeden dla programu jądra.
1. Jaka jest potrzeba używania dwóch różnych stosów w tym samym programie?
Załóżmy, że stosujemy tylko stos w trybie aplikacji. Ponieważ przestrzeń pamięci jest udostępniona przez wiele wątków, jeśli jakiś inny wątek przypadkowo nadpisuje adres używany przez jądro, może to spowodować awarię jądra, co prowadzi do bardzo wrażliwego systemu operacyjnego.
2. W jaki sposób pułapka zmienia bieżący stos programu ze stosu użytkowników na stos jądra?
w OS/161, pułapka służy do transferu z aplikacji do jądra. Istnieją trzy mechanizmy, które mogą wywołać pułapkę: Wywołania systemowe, wyjątki i przerwań. Ramka pułapki w stosie jądra służy do zapisywania bieżącego kontekstu wątku.
Poniżej szczegółowy proces (od lecture note of UWaterloo CS350):
Gdy jeden z powyższego mechanizmu nastąpi, sprzętowy przełącza procesor w trybie uprzywilejowanym i przekazuje sterowanie do określonej lokalizacji, w którym jądro powinien znajdować się przewodnik.
Handler jądro tworzy ramkę pułapkę i używa go do oszczędza kontekst wątku aplikacji tak, że kod obsługi mogą być wykonywane na CPU.
Tuż przed obsługi jądra zakończy wykonywanie, przywraca się kontekstu aplikacji gwintu z ramą pułapki, przed powrotem sterowanie do aplikacji.
3. Jak wraca do stosu użytkowników po zakończeniu wywołania systemowego?
Powyższy proces wyraźnie wyjaśnia również na to pytanie.
Jakiej architektury się uczysz? – Gabe
http://www.cs.umb.edu/~eoneil/cs444_f06/class10.html: coś dobrego, aby wyjaśnić problem. Z uniwersyteckiej strony internetowej !! –
Zemdlałem z uniwersytetu 5 lat temu i to pytanie wciąż przypomina mi moje studia licencjackie. Za każdym razem, gdy otrzymuję powiadomienie o tym pytaniu na przepełnienie stosu, jestem pełen nostalgii. – user609306