logo ‟overcq”

OUX/C+ OS

Podręcznik programisty OUX/C+ OS

Ostatnia aktualizacja: .

Program startowy

‘Kernel’ wymaga specjalnego programu startowego (‘bootloader’), który wykonuje programy inicjujące systemu i przygotowuje środowisko działania.

Program startowy wykonuje następujące czynności:

System operacyjny OUX/C+

Program główny ‘kernela’

Wykonuje następujące czynności:

Funkcjonalności

Przepływ wykonania

System wykonuje się na najwyższym poziomie uprzywilejowania procesora (“ring 0”). Procedury są eksportowane (“_export”), by były dostępne dla programów dołączanych do ‘kernela’, są prywatne w ‘kernelu’ (“_private”) lub wewnętrzne w ‹module› (“_internal”).

Programy w systemie wykonują się w następujących środowiskach:

Na razie programy wykonują się tylko na startowym procesorze.

‹Znaczniki stanu›, ‹raporty›, ‹cyklery› i ‹impulsatory› mają taką samą funkcjonalność jak w OUX/C+. Ponadto są do dyspozycji ‹raporty czasowe›.

Wprowadzenie ‹raportów czasowych›

Międzyprocesorowy ‘lock’ z kodem powrotu

Umożliwia synchronizację wykonywania nie zatrzymujących się bloków programu między procesorami.

Po wywołaniu procedury “E_flow_I_lock” program wpada w pętlę oczekiwania na wejście do bloku programu, który może być jednocześnie wykonywany tylko przez jeden proces w systemie wieloprocesorowym. Gdy jako argument procedury “E_flow_I_unlock_r” zostanie podany kod oznaczający błąd, to jest on przekazywany wszystkim oczekującym procesom, umożliwiając przerwanie oczekiwania i emisję ‹zdarzenia› w każdym z nich.

O asynchroniczności wywołań sprzętowych

Kontrola błędów
Komunikaty linii

Komunikaty linii wypisuje się makrem nowej linii “G(fmt,…)” albo makrem kontynuacji linii “G_(fmt,…)”. Jako pierwszy parametr makra podaje się formatujący ciąg tekstowy. Po nim ewentualnie następują kolejne parametry zakodowane (prefiksem “%”) do wypisania w tym ciągu.

Po prefiksie “%” umieszcza się ewentualnie rozmiar bitowy parametru, ale na pewno – typ/format wypisywania. Są następujące typy parametrów:

‹Zdarzenia›

‹Zdarzenia› są emitowane w przypadku błędu wykonania procedury — w postaci kodu ~0, ~1, ~2 lub ~3. Do emisji służą makra blokowe “K(statement)” i “Kp(statement)” oraz makra liniowe wewnątrz bloków wyjścia z procedury “K_(error,statement)” i “Kp_(error,statement)”, którymi otacza się wywoływaną procedurę. Kody błędów mają następujące znaczenia:

W przypadku, gdy wywołanie procedury wróci z kodem błędu, a jest w normalnym toku wykonywania procedury nadrzędnej, to tylko w przypadku błędu ~0 jest wykonywany blok wyjścia z błędem. W przypadku pozostałych kodów błędów jest wykonywany natychmiastowy powrót z procedury i kod błędu przekazywany wyżej. W przypadku, gdy wywołanie procedury wróci z jakimkolwiek kodem błędu wewnątrz bloku wyjścia z procedury (albo z błędem, albo zwykłego), to jest wykonywany natychmiastowy powrót z procedury z kodem błędu podanym w makrze lub wyższym (w sensie wartości bez negacji), jeśli z takim wróciła procedura.

‹Moduły›

Interpretator ACPI/AML

Zawiera kompletny ‘parser’ AML zgodny z ACPI 6.5, natomiast interpretator instrukcji przebiega przepływ wykonania i oblicza wartości arytmetyczne, ale nie uzyskuje dostępu do pamięci. Na razie został rozbudowany na tyle, na ile symulator maszyny wirtualnej pozwalał przetestować. Posiada potencjał tworzenia w przyszłości procedur ACPI w kodzie maszynowym; po dodaniu asemblera.

W przypadku błędu składni podczas interpretacji startowej wyskakuje do nadrzędnego obiektu i kontynuuje.

Kontrolki graficzne

Są zaimplementowane następujące kontrolki graficzne możliwe do wstawienia do dowolnego okna:

Jeśli kontrolki są używane w danym oknie, to należy w procedurze tworzenia ‹modułu› po utworzeniu okna wykonać “E_controls_M” oraz dodać je odpowiednimi procedurami ‹modułu› “controls”.