Maniac II OS

 

System operacyjny MANIAC-a jest tworzony w modelu wielowarstwowym, mającym na celu wykreowanie wygodnej w użyciu maszyny wirtualnej, wykorzystującej w optymalny sposób sprzętowe zasoby komputera. Wyraźnie wyróżniane warstwy to: Jądro systemu - obsługujące przerwania sprzętowe jak i software'owe; System zarządzania pamięcią wraz z dyspozytorem (dispatcher'em) zadań; Obsługa urządzeń WE/WY (w tym system(y) plików) oraz Interpreter poleceń - interface użytkownika.

1. JĄDRO SYSTEMU.

Do zadań tej warstwy należą: wstępna obsługa przerwań hardware'owych (IRQ,NMI), oraz realizacja procedur systemowych, przy wykorzystaniu rozkazów uprzywilejowanych.

Przerwanie synchronizujące pracę systemu generowane jest przez układ VIA (65c22), będący jedynym źródłem przerwań dla wersji przenośnej MANIAC-a. Główna procedura przerwania obsługuje klawiaturę (foliową), licznik systemowy, oraz kontroluje niektóre polecenia użytkownika (np. polecenie "gorącego" startu). Wymagana częstość zgłaszanych przerwań domyślnie równa jest 256Hz, jednak ze względu na sprzętową elastyczność w konfiguracji sygnału taktowania (PHI2), użytkownik ma możliwość dowolnej rekonfiguracji częstotliwości wywoływania przerwań, zarówno w trybie TURBO, jak i NORMAL (patrz SETUP systemowy).

Do realizacji procedur systemowych (np. alokacja pamięci, obsługa wyświetlacza/karty grafiki, komunikacja z urządzeniami) wykorzystano mechanizm przerwań software'owych. Stanowią one swoisty "pomost" między sprzętem "na niskim poziomie", a użytkownikiem, odciążając go od konieczności stosowania niewygodnych skoków do określonych miejsc w pamięci, zwiększając jednocześnie elastyczność systemu (taki sposób realizacji odwołań do systemu uniezależnia software od modyfikacji systemu operacyjnego).

Elementem determinującym rodzaj wykonywanej operacji jest sygnatura przerwania COP, oraz rejestry procesora. I.E.:

COP $10 - procedura obsługująca wyświetlacz LCD / kartę grafiki

COP $21 - główna procedura systemowa (alokacja pamięci, obsługa systemu plików; komunikacja z urządzeniami)

COP $16 - klawiatura

Nietrudno zauważyć wyraźną analogię między rozwiązaniami zastosowanymi w innych systemach (MS DOS; TOS; AMIGA OS).

Przerwanie COP korzysta z utworzonej w pamięci tablicy wektorów (jednostką jest 32 bitowy fizyczny adres procedury przerwania). Znaczna część wektorów wskazuje na rozkaz RTI i może być dowolnie zadysponowana przez użytkowników (ułatwiając np. tworzenie driver-ów, bądź rezydentnych nakładek na system).

Parametry pracy systemu są konfigurowane przez użytkownika za pomocą programu SETUP. Za jego pośrednictwem można zdefiniować m.in. rozmiar RAMDYSKu, zmienić dzielniki częstotliwości przerwania IRQ (dla trybu TURBO / NORMAL) itp. Konfiguracja zapisywana jest w określonym miejscu pamięci operacyjnej komputera. W przypadku zastosowania podtrzymania bateryjnego, jej forma nie ulegnie zniszczeniu. Jeśli podtrzymania bateryjnego pamięci nie ma, system zastosuje ustawienia DEFAULTowe, zapisane w pamięci EPROM.

2.ZARZĄDZANIA PAMIĘCIĄ OPERACYJNĄ.

Sprzętowe możliwości stronicowania, oferowane przez procesor 65c816 są dość ubogie. Doświadczenie w programowaniu procesora 6502 podpowiada, że sprzętowy rozmiar strony równy 64 KB jest stanowczo za duży. Dla oszczędności, w systemie zastosowano sztuczne stronicowanie, wprowadzając jednocześnie dwa modele programów - relokowalne (small), oraz stabilne (huge). Mechanizm alokacji pamięci (dla zadań, bądź danych) dzieli pamięć na jednostki alokacji, równe rozmiarowi strony procesora 6502 (256B). Program zarządzający zasobami pamięci operacyjnej posługuje się tablicą alokacji pamięci ułożonej w listę dwukierunkową. Jednostką tablicy alokacji jest struktura, zawierająca rejestr bazowy oraz rejestr graniczny.

Alokacji pamięci dokonuje się za pomocą funkcji systemu alokacji {48h,49h,4ah} przerwania COP 21h. Wielkość rezerwowanego obszaru (liczbę paragrafów 256 bajtowych) przekazywana jest za pośrednictwem akumulatora procesora 65c816. Zaalokowany obszar jest ciągły w fizycznej przestrzeni adresowej, bloki nie przekraczające rozmiarem granic fizycznej strony (64K) umieszczane są wewnątrz fizycznych bloków 64K, bloki o rozmiarach większych od 64K ZAWSZE zaczynają się od zerowego adresu fizycznej strony.

3. PROCESY W SYSTEMIE MANIAC OS.

Zastosowany model zarządzania zasobami pamięciowymi zmusza użytkownika do wyboru modelu tworzonego programu.

MODEL SMALL - program w pełni relokowalny, nie wykorzystujący trybu absolutnego adresowania (program musi być przystosowany do relokacji - nie wiadomo, od jakiej strony się rozpocznie), oraz nie przekraczającym 64KB

MODEL HUGE - daje pełną swobodę, umieszczany jest w określonym miejscu względem początku fizycznej strony (64K). Program NIE MUSI zajmować całego bloku (64K) pamięci - przestrzeń "poniżej" oddawana będzie do systemu (np. uruchamiamy program w modelu HUGE, startujący w $8800. Program zostaje umieszczony, pamięć poniżej $8800 zostaje zwolniona).Rozmiar pliku wykonywalnego może bezproblemowo przekraczać 64KB i w całości (o ile wystarcza wolnej pamięci) zostaje umieszczony w pamięci.

Tutaj również nietrudno zauważyć podobieństwo do rozwiązań zastosowanych np. w MS DOS-ie (model COM - ze zdefiniowanym adresem startu programu, oraz EXE - z definiowanym przez użytkownika adresem startowym, o dowolnym rozmiarze).

MODEL SMALL został wprowadzony głównie dla potrzeb systemowych - idealnie nadaje się do tworzenia relokowalnych nakładek, driverów itp.

Każdemu zadaniu, uruchamianemu przez system przydzielana jest strona zerowa, oraz stos. Istnieją dwie metody opuszczenia programu

a) TERMINATE - powrót do programu nadrzędnego, zwolnienie obszaru zajmowanego przez program,

b) TERMINATE AND STAY RESIDENT - zapisanie na stosie adresu, przekazywanego przez program, celem późniejszego wznowienia jego działania. Pamięć nie zostaje zwolniona, program może pracować "w tle" systemu operacyjnego (podpinając się pod jeden z wektorów, oferowanych przez systemową procedurę IRQ)

4. URZĄDZENIA WE/WY, oraz system(y) plików.

Urządzenia WE/WY dzielą się na znakowe (np. porty równoległe, monitor ekranowy, klawiatura), oraz blokowe (wszelkiego rodzaju pamięci masowe - ramdysk, dyski HDD, dyski optyczne etc...). Zarówno pierwsze, jak i drugie wymagają zamontowania (mount), bądź demontowania (demount) w systemie, przy czym są one traktowane osobno. System wstępnie próbuje zamontować ramdysk (jako urządzenie nr.0), oraz dyski HDD, podpięte do kontrolerów IDE.

Maksymalna liczba urządzeń określona jest wielkością tablicy urządzeń i równa jest 256 (128 znakowych/128 blokowych).

Do instalowania nowych urządzeń służy przerwanie COP $13. Przy instalacji przekazuje się adres handlera, otrzymując po powrocie numer urządzenia (jeśli powiodła się instalacja).

Handler urządzeń blokowych powinien reagować na trzy typy instrukcji: odczyt/zapis logicznego sektora; reset urządzenia; pobranie statusu.

Przewidziane drivery instalowane w systemie to handler ramdysku oraz dysków twardych.

Taka organizacja znacznie zwiększa liczbę typów możliwych do podpięcia urządzeń (np. PeCet), tym bardziej że driver jest z założenia prostym programem.

System plików to (początkowo) FAT12/16. Planowane jest rozszerzenie o obsługę innych, popularnych systemów.

Kilka słów odnośnie RAMDYSKu:

Jego wielkość określana jest za pomocą SETUPu systemowego (w 64 kilobajtowych stronach), zajmuje obszar znajdujący się na końcu przestrzeni adresowej dostępnego RAM-u. Menadżer pamięci nie ma wpływu na jego zawartość - podczas instalacji obniżana jest zawartość komórki MEMTOP, określającej górną granicę dostępnej w systemie pamięci.

Z pobudek oszczędnościowych, oraz przez wzgląd na prędkość transmisji danych RAMDYSK wykorzystuje FAT12 (512 bajtów na jednostkę alokacji).

Jest zwykłym urządzeniem systemowym, można go demontować - ręcznie (za pomocą komendy shella), bądź zmniejszając jego rozmiar do 0.

5. INTERFACE UŻYTKOWNIKA

Zawarty w ROMie interpreter poleceń będzie zbliżony do SHELLa unixowego, zwiększy wygodę w komunikacji użytkownika ze stworzoną maszyną wirtualną. Do konfiguracji jego pracy posłuży plik CONFIG.SYS.

W przyszłości (po zaimplementowaniu karty grafiki) planowany jest graficzny interfejs użytkownika, jako zamiennik (bądź nakładka) istniejącego SHELLa.

 

Są to główne założenia, wzorujące powstający system. Aktualnie do przetestowanych (działających) warstw systemu należą: jądro, zarządzanie pamięcią / przydzielanie zadań procesom, oraz obsługa urządzeń (jedynym w chwili obecnej jest ramdysk) wraz z (częściową) obsługą systemu plików.