Menu

Budowa systemu

Budowa komputera

Przykładowe systemy

Programowanie

Linki



Procesor

Jak już zapewne wiesz, procesor jest najważniejszą jednostką wykonawczą komputera, a więc jego zadaniem jest wykonywanie aplikacji uruchomionych na komputerze oraz sprawowanie nad nimi kontroli (w pewnym sensie).

Nie będę zajmował się ogólnym opisem funkcji procesora, ani ogólnej jego budowy. Opis ten będzie dotyczył jedynie aspektów pracy procesora ważnej dla programisty systemów operacyjnych. A więc do rzeczy.

Budowa procesora

Procesor od strony oprogramowania składa się z rejestrów ogólnego przeznaczenia oraz rejestrów specjalnych. Rejestr jest to komórka danych umożliwiająca zapis lub odczyt z niej od jednego do kilku bajtów (od 8 bitów do 32 bitów, 64 bity w nowych procesorach oferujących rozszerzenia 64 bitowe).

1. Rejestry ogólnego przeznaczenia

Rejestry

Rejestry ogólnego przeznaczenia mogą służyć do:

W procesorach Intel x86, a więc stosowanych obecnie w większości komputerów PC (będę zajmował się jedynie tym rodzajem procesorów, a nawet dokładniej - opisy będą dotyczyły procesorów 80386 i nowszych, ponieważ są to już procesory 32 bitowe) istnieją cztery rejestry ogólnego przeznaczenia: EAX, EBX, ECX (używany często jako licznik w pętlach - Counter Register), EDX. Każdy z nich może przechowywać 4 bajty (32 bity), a więc są to rejestry 32-bitowe. Dodatkowo można skorzystać z pierwszych 16 bitów rejestru poprzez rejestry AX, BX, CX, DX (nazywane też rejestrami 16-bitowymi) oraz do górnych oraz dolnych 8 bitów tych rejestrów odpowiednio poprzez AH, BH, CH, DH i AL, BL, CL, DL (rejestry 8-bitowe). Dodatkowo istnieją 4 rejestry ogólnego przeznaczenia (E)SP (wierzchołek stosu), (E)BP (spód stosu), (E)DI (adres przeznaczenia) oraz (E)SI (adres źródłowy), które z regóły wykorzystywane są do odpowiednich im funkcji - ESP i EBP do obsługi stosu, ESI i EDI przy kopiowaniu łańcuchów bajtów, często w parze z rejestrami segmentów DS i ES.

2. Rejestry specjalne

Istnieją także rejestry specjalne, które mogą zostać użyte jedynie w odpowiedni sposób. Takie rejestry to CS, DS, ES, FS, GS, SS (rejestry segmentacji - o nich więcej na podstronie Budowa komputera -> Pamięć), a także EIP (wskaźnik do aktualnie wykonywanej instrukcji), rejestr znaczników EFLAGS (zawiera bity, ustawiane lub zerowane po wykonaniu instrukcji, mówi o wyniku ostatniej operacji, np. czy wynikiem ostatniej operacji odejmowania było zero). Oczywiście nie są to wszystkie rejestry, lecz jedynie te które są często wykorzystywane (jeżeli nie przez programistę to przez jego kompilator). Obecne procesory zawierają wiele rejestrów kontrolnych (np. od CR0 do CR4) oraz specyficznych rejestrów producenta, ale nie będę się nimi zajmował.

Tryby pracy procesora

Procesory 80386 oraz nowsze posiadają trzy tryby pracy:

Zaraz po włączeniu procesor znajduje się w trybie rzeczywistym, aby zachować zgodność z wczesniejszymi procesorami. 32-bitowy system operacyjny musi przełączyć procesor do trybu chronionego, aby móc kontynuować swoje uruchamianie.

Możliwości procesora


1. Wykonywanie aplikacji

Powszechnie mówi się, że procesor wykonuje programy w kodzie binarnym. Jest to prawda ja jednak nie lubię tego określenia. Językiem procesora jest tzw. Assembler. Każdej instrukcji wykonywanej przez procesor oraz rodzajowi podanych parametrów odpowiada odpowiedni ciąg bitów. Tak więc dla przykładu:

MOV AL, 61h = 0 x B0 61 = zapisz w rejestrze AL [0xB0] wartość 0x61 [0x61]

Obecnie niewielu programistów używa Assemblera przy programowaniu aplikacji użytkowych (język wysokiego poziomu jak np. C++ jest tłumaczony na Assembler przy pomocy kompilatora), jednak jest on niezbędny przy programowaniu niektórych części systemu operacyjnego, a także pomocny przy wielu optymalizacjach kodu (jak wiadomo kompilator języka wysokiego poziomu zwykle kod, który można zapisać w kilku linijkach Assemblera, zmienia na kilka razy więcej). Osobiście zachęcam do obeznania się z Assemblerem, ponieważ jest to język programowania o nieograniczonych możliwościach i jest bardzo przydatny w praktyce. (Dobry kurs Assemblera znajduje się w dziale Linki)

2. Dostęp do pamięci operacyjnej

Z dostępem procesora do pamięci wiąże się kilka ciekawych zagadnień oraz troche historii. Więcej na ten temat w osobnym dziale Budowa komputera -> Pamięć. Procesor posiada dostęp do pamięci operacyjnej zainstalowanej w komputerze. Istnieje wiele instrukcji umożliwiających odczyt i zapis do pamięci operacyjnej zarówno pojedyńczych bitów/bajtów jak i łańcuchów.

3. Komunikacja z urządzeniami zewnętrznymi

Wbrew pozorom urządzeniami zewnętrznymi w tym przypadku nie nazywamy wyłącznie urządzeń podłączonych na zewnątrz komputera, lecz wszystkie urządzenia mające możliwość wymiany danych z procesorem, jak np. kontroler stacji dyskietek, karta graficzna, chipset płyty głównej. Istnieje kilka możliwości komunikacji pomiędzy procesorem a urządzeniem.

4. Zarządzanie pamięcią operacyjną

W trybie chronionym procesor posiada możliwość zarządzania pamięcią operacyjną. Daje to wiele możliwości twórcom systemów operacyjnych. Segmentacja, stronnicowanie, pamięć wirtualna, przywileje dostępu do pamięci itd. - więcej w Budowa komputera -> Pamięć.

5. Kontrola wykonywania aplikacji

Procesor oferuje wiele metod kontroli wykonywania aplikacji. Istnieje kilkanaście różnego rodzaju wyjątków, jak np. dzielenie przez zero, które wstrzymują działanie komputera lub wywołują odpowiednio napisany program obsługujący wyjątki, który może na przykład wyświetlić odpowiedni komunikat o błędzie i zamknąć działającą, a raczej niedziałającą aplikację.

6. Wielozadaniowość

W trybie chronionym istnieje możliwość sprzętowej obsługi wielozadaniowości. Procesor całkowicie kontroluje przełączanie między poszczególnymi aplikacjami oraz nadzoruje poprawność ich wykonywania. Obecnie jednak nie wykorzystuje się tej możliwości, ponieważ wbrew pozorom jest dość wolna i najczęściej w systemach operacyjnych implementuje się programowe przełączanie zadań. O wielozadaniowości więcej w Budowa systemu -> Wielozadaniowość

Dokumentacja

[1] IntelR 64 and IA-32 Architectures Software Developer's Manuals

[2] AMD64 Architecture Programmer's Manual



Valid XHTML 1.1 License Poprawny CSS!
© 2007 by Tomek Figa na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne 2.5 Polska.