Bochs tworzy symulację procesora, pamięci i innych elementów architektury za pomocą modułów pisanych w C++.
Dostarcza interpreter języka emulowanej maszyny.
Emuluje urządzenia we/wy (urządzenia wirtualne lub rzeczywiste).
Ponieważ instrukcje są obsługiwane przez program, prędkość emulacji jest obarczona znacznym narzutem czasowym.
Przy starcie Bochs główny moduł wczytuje plik konfiguracyjny i obrazy systemu plików z dysku. Bochs ma tylko jeden plik konfiguracyjny. Są z niego wczytywane ustawienia wszystkich komponentów. Można tu ustalić początkowe rejestry i zawartość pamięci, ustawienia urządzeń, BIOS itd.
Bochs zawiera plik z zapisanym programem BIOS'u.
BIOS w rzeczywistości jest kawałkiem kodu maszynowego. Kiedy BIOS kończy inicjalizację następuje przeskok do bootsectora emulowanego systemu operacyjnego, który kontynuuje ładowanie systemu.
cpu : zawiera większość kodu odpowiedzialnego za implementację procesora (operacje arytmetyczne i logiczne, przepływ danych, stronicowanie itd...)T |
memory : czytanie/pisanie do pamięci, sprowadzanie danych i instrukcji z pamięci |
iodev : obsługa urządzeń zewnętrznych w tym we/wy. Emulowanie obsługi sprzętu (floppy , CDROM , HD , klawiatura, mysz, wsparcie dla VGA, karty sieciowe, DMA itd.) |
bios : symulacja BIOs-u x86 | |
debug : debuger |
fpu : operacje zmiennoprzecinkowe |
gui : wsparcie dla GUI bochs-a. (X11 ,BeOs) |
misc : Różne inne opcje, takie jak wsparcie dla SB16 |
Komponent CPU jest kompletną implementacją instrukcji procesora Pentium.
Najpierw instrukcja zostaje sprowadzona z pamięci. Potem CPU oddziela kod instrukcji, parametry i flagi. W zależności od instrukcji kontrolę przejmuje odpowiedni moduł Bochsa. (na przykład dla instrukcji zmiennopozycyjnej - FPU). Podczas fazy wykonawczej, mogą pojawić się wyjątki, które zakłócą normalny przebieg. W zależności od wyjątku instrukcja zostaje obsłużona w odpowiedni sposób. Kiedy w końcu wynik jest gotowy, zostaje zapisany z powrotem do pamięci. Ta technika nazywa się fetch-decode-execute loop.
CPU zajmuje się również urządzeniami. Niektóre urządzenia komunikują się z CPU poprzez DMA. To oznacza zapis i odczyt do konkretnej komórki pamięci wysyła informacje do urządzenia, zamiast do pamięci. Inne urządzenia korzystają z przerwań. CPU trzyma tablicę przerwań zawierającą kod obsługi przerwań. W pętli fetch-decode-execute CPU sprawdza czy zostało wywołane przerwanie. Jesli tak, to w następnym obrocie pętli wykonywana jest obsługa przerwania a nie następna instrukcja.