Świadomość systemu operacyjnego
Świadomość systemu operacyjnego Simics jest modułem Simics, który rozumie struktury danych i abstrakcje systemu operacyjnego działającego na docelowym systemie Simics. Dzięki świadomości OS, Simics i debugger Simics wiedzą o przestrzeni jądra, przestrzeni użytkownika, procesach, wątkach i zadaniach.
Fundamentalnie, świadomość OS wykonuje dwa zadania: śledzenie na żywo zdarzeń w miarę ich występowania oraz badanie chwilowego stanu systemu operacyjnego. Śledzenie zdarzeń na żywo oznacza, że świadomość systemu operacyjnego wykrywa, kiedy system operacyjny wykonuje przełączanie zadań, kiedy oprogramowanie wykonuje wywołanie systemowe lub kiedy występują przerwania. Najczęstszym sposobem wykrywania takich zdarzeń jest oczekiwanie na przerwania w systemie docelowym – dopóki nie wystąpią żadne przerwania, działa to samo oprogramowanie na poziomie użytkownika. Gdy wystąpi przerwanie, system operacyjny przejmuje kontrolę, a uruchomiony proces jest uważany za wyłączony. Kiedy system operacyjny powraca do przestrzeni użytkownika, jakiś proces jest uważany za włączony.
Live tracking określa, kiedy coś się dzieje, ale określenie, co się stało, wymaga zbadania chwilowego stanu systemu operacyjnego. Na przykład, gdy wyzwala się przerwanie, jakie są aktywne wątki na procesorze, który otrzymał przerwanie? Aby to ustalić, świadomość systemu operacyjnego musi znać strukturę kolejek uruchomionych i oczekujących procesów, zawartość struktur zadań lub bloków sterowania procesami oraz innych struktur danych. Pod warunkiem, że zostało to poprawnie skonfigurowane, świadomość systemu operacyjnego może następnie przemierzać listy w pamięci docelowej i określać nazwę aktualnie aktywnego procesu na danym procesorze, wszystkie istniejące procesy, dynamicznie ładowane moduły oprogramowania i ich adresy relokacji oraz wszystko inne, co może być interesujące.
Ponieważ dokładna zawartość struktur zadań oraz przesunięcia poszczególnych pól mogą się różnić w zależności od kompilacji i wersji systemu operacyjnego, świadomość systemu operacyjnego musi zostać skonfigurowana przed jej użyciem. Najczęściej możliwe jest określenie parametrów dla świadomości OS poprzez spojrzenie na tabelę symboli lub plik jądra z informacjami debugowania z kompilacji systemu operacyjnego. Istnieją jednak systemy operacyjne, w których dokładne parametry nie mogą być określone do czasu uruchomienia, a w takich przypadkach konfiguracja będzie musiała poczekać do czasu uruchomienia systemu docelowego. W każdym przypadku, po określeniu, zestaw parametrów może być zapisany i używany następnym razem, gdy ta sama konfiguracja docelowa jest uruchomiona.
Używanie plików parametrów umożliwia posiadanie konfiguracji świadomości systemu operacyjnego są dystrybuowane wraz z obrazami systemu operacyjnego, do których się odnoszą. Oznacza to, że zespół platformy może zbudować obraz systemu operacyjnego, skonfigurować świadomość systemu operacyjnego dla niego, zapisać parametry i dostarczyć swoim użytkownikom system operacyjny i jego parametry świadomości systemu operacyjnego bez konieczności dostarczania plików symboli lub informacji debugowania. Plik parametrów świadomości systemu operacyjnego jest po prostu częścią dostarczonego stosu oprogramowania i jest aktywowany w skryptach startowych używanych do uruchamiania Simics. Użytkownicy systemu nie muszą wiedzieć, jak skonfigurować świadomość systemu operacyjnego – po prostu działa ona od razu po uruchomieniu dostarczonych konfiguracji systemu docelowego. Parametry świadomości systemu operacyjnego są również zapisywane wewnątrz plików punktów kontrolnych Simics, tak że świadomość systemu operacyjnego działa przez operacje zapisywania i przywracania punktów kontrolnych.
Świadomość systemu operacyjnego umożliwia posiadanie funkcji Simics działających tylko na określonym podzbiorze stosu oprogramowania, takich jak posiadanie punktów przerwania ustawionych tylko wewnątrz określonego procesu lub śledzenie tylko dostępu do pamięci wykonywanego przez jądro, a nie przez zadania na poziomie użytkownika. Napisane przez użytkownika rozszerzenie Simicsa lub skrypt może nasłuchiwać zdarzeń ze świadomości OS i podejmować działania oparte na tym, jakie oprogramowanie jest aktualnie uruchomione w systemie docelowym. Można poprosić system świadomości OS o powiadomienia tylko dla określonego procesu lub zobaczyć wszystkie działania dla wszystkich procesów.
System świadomości OS w Simics działa w oparciu o koncepcję drzewa węzłów. Każdy węzeł w drzewie reprezentuje poziom abstrakcji w modelu procesu OS. Zazwyczaj, górnym węzłem jest sam system operacyjny, który jest następnie podzielony na zadania na poziomie jądra i użytkownika. W systemie operacyjnym takim jak Linux, każde zadanie na poziomie użytkownika zawiera jeden lub więcej wątków. W jądrze świadomość systemu operacyjnego zazwyczaj odróżnia wątki jądra od zadania bezczynności, ponieważ pomaga to uwzględnić docelowy czas wykonania. Rysunek 3.3 przedstawia przykład drzewa węzłów z systemu Linux typu barebones.
W interfejsie Simics CLI i GUI debuggera, zapytania do procesów są używane do znajdowania interesujących nas procesów. Zapytania te mogą odpowiadać nazwom procesów, numerom ID procesów lub innym właściwościom udostępnianym przez świadomość systemu operacyjnego. W większości przypadków nazwa procesu jest wystarczająca do jego identyfikacji, ale w złożonych systemach potrzebne są bardziej złożone dopasowania, takie jak „proces o nazwie foo na tablicy o nazwie bar”. W długo działającym systemie, w którym określony program jest uruchamiany wiele razy, identyfikator procesu może być użyty do zidentyfikowania konkretnego uruchomienia procesu.
Simics Świadomość systemu operacyjnego obsługuje zagnieżdżone systemy operacyjne w celu obsługi świadomości systemu operacyjnego dla systemów opartych na hiperwizorze. W systemie z hypervisorem konieczne jest śledzenie harmonogramu systemów operacyjnych gości na docelowych rdzeniach procesora. Po określeniu aktywnego systemu operacyjnego na rdzeniu można następnie zastosować świadomość OS dla tego systemu operacyjnego w celu określenia aktywnego procesu lub wątku. Pojedyncze drzewo jest zatem używane dla całego systemu, zakorzenione w hypervisorze.
Szczegóły tego, co świadomość systemu operacyjnego może śledzić i odkrywać na temat docelowego stosu oprogramowania, różnią się w zależności od systemu operacyjnego gościa oraz tego, ile pracy poświęcono na zbudowanie świadomości systemu operacyjnego dla tego systemu.
W porównaniu z systemami świadomości systemu operacyjnego używanymi w debuggerach sprzętowych (JTAG) zdolność symulatora do precyzyjnego śledzenia przełączników zadań jest wyjątkowa. Takie funkcje okazały się niepraktyczne do zaimplementowania w debugerach sprzętowych, ponieważ wiązałyby się ze znacznym narzutem i przytłaczałyby dostępność sprzętowych punktów przerwania. Kontrola stanu chwilowego jest zasadniczo taka sama jak kontrola stanu systemu przez debugger sprzętowy po zatrzymaniu systemu i rzeczywiście ten sam kod, który jest używany w debuggerach sprzętowych, został użyty w Simics do określenia faktów, takich jak adresy relokacji dla dynamicznie ładowanych modułów.
Debugger oparty na agencie nie potrzebuje świadomości systemu operacyjnego, ponieważ działa wewnątrz systemu docelowego i może używać interfejsów API systemu operacyjnego, aby zapytać docelowy system operacyjny o działające zadania, załadowane moduły i inne informacje.
Debugger oparty na agencie nie potrzebuje świadomości systemu operacyjnego, ponieważ działa wewnątrz systemu docelowego i może używać interfejsów API systemu operacyjnego, aby zapytać docelowy system operacyjny o działające zadania, załadowane moduły i inne informacje.