Exec (Amiga) - Exec (Amiga)

Exec jest jądro z AmigaOS . Jest to mikrojądro wielozadaniowe o rozmiarze 13  KB, które umożliwia wielozadaniowość z wywłaszczaniem w zaledwie 256 KB pamięci (jak dostarczono z pierwszymi Amigami 1000 ). Exec zapewniał funkcje do wielozadaniowości, zarządzania pamięcią oraz obsługi przerwań i dynamicznych bibliotek współdzielonych .

Działa jako planista zadań wykonywanych w systemie, zapewniając wielozadaniowość z wywłaszczaniem z priorytetowym planowaniem okrężnym . Exec zapewnia również dostęp do innych bibliotek i komunikację między procesami wysokiego poziomu poprzez przekazywanie wiadomości . Inne porównywalne mikrojądra miały problemy z wydajnością z powodu konieczności kopiowania wiadomości między przestrzeniami adresowymi . Ponieważ Amiga ma tylko jedną przestrzeń adresową, przekazywanie komunikatów Exec jest całkiem wydajne. Jedynym stałym adresem pamięci w oprogramowaniu Amigi (adres 4) jest wskaźnik do exec.library, którego można następnie użyć do uzyskania dostępu do innych bibliotek. Exec został zaprojektowany i wdrożony przez Carla Sassenratha .

Exec

W przeciwieństwie do nowszych nowoczesnych systemów operacyjnych , jądro exec nie działa „uprzywilejowane”. Współczesne systemy operacyjne dla 68000, takie jak Atari TOS i SunOS, używały instrukcji pułapki do wywoływania funkcji jądra. To sprawiło, że funkcje jądra działały w trybie nadzorcy 68000 , podczas gdy oprogramowanie użytkownika działało w trybie nieuprzywilejowanego użytkownika . W przeciwieństwie do tego wywołania funkcji exec są wykonywane za pomocą tablicy skoków biblioteki, a kod jądra normalnie jest wykonywany w trybie użytkownika. Zawsze, gdy potrzebny jest tryb nadzorcy, czy to jądro, czy programy użytkownika, biblioteka działa Supervisor()lub SuperState()jest używana.

Jedynym ograniczeniem jądra Exec było to, że niewspółpracujący program mógł wyłączyć wielozadaniowość na długi czas lub na czas nieokreślony, wywołując wywołania Exec Forbid()lub Disable(), bez późniejszego wywołania odpowiedniego Permit()lub Enable(), powodując działanie środowiska jako jedno zadanie. Wielozadaniowość może być również wyłączona przez programy, które z powodu błędu lub zamiaru oprogramowania modyfikują struktury danych Exec lub kod przechowywany w pamięci o dostępie swobodnym (RAM), prawdopodobnie z powodu braku obsługi jednostki zarządzania pamięcią (MMU).

Nawet przy takich ograniczeniach, Exec spełnia definicję prewencyjnego algorytmu planowania, wykorzystując prewencyjną procedurę planowania i opierając interwały przerwań na zegarze.

Deweloper jądra Linuksa, Linus Torvalds, opisał kiedyś projekt Amigi jako oparty na współpracy, mimo że używa ona wyprzedzającej polityki planowania. Argumentował, że powodem tego jest brak ochrony [pamięci] między zadaniami, co oznacza, że ​​zadanie może utrudniać działanie systemu w sposób zapobiegawczy. Ponieważ zadania musiałyby zdecydować się nie zatrzymywać mechanizmu wyprzedzającego, sprowadziłoby się to do rodzaju odwróconego systemu kooperacyjnego. Ten rodzaj powiązania między zasadami ochrony i harmonogramu jest niestandardowy.

ExecSG

ExecSG (druga generacja) to jądro używane przez AmigaOS 4 . To jądro było licencjonowane przez Hyperion Entertainment od Thomasa Friedena i Hansa-Jörga Friedena. Udostępnia te same funkcje i struktury, co jądro Commodore Amiga Exec, ale działa tylko na procesorach PowerPC . Ostateczne pochodzenie ExecSG jest nieokreślone.

Bibliografia

Linki zewnętrzne