CROOK-5 - Podsystem wejścia-wyjścia
Podsystem wejścia - wyjścia zawiera ekstrakody umożliwiające przesyłanie informacji między programami a urządzeniami zewnętrznymi bądż też zbiorami dyskowymi. Obiekt do/z którego będzie wykonywane przesyłanie informacji (urządzenie znakowe, zbiór dyskowy, komunikat) identyfikowane jest przez strumień. Może to być strumień utworzony przez proces wykonujący operacje WE/WY, lub też strumień utworzony przez jednego z jego przodków. Przy współpracy z urządzeniami znakowymi lub przy sekwencyjnym dostępie do zbiorów dyskowych, używane są ekstrakody transmisji znakowych. Umożliwiają one przesyłanie zarówno pojedyńczych znaków jak i bloków o zadanej długości lub o zadanym znaku kończącym. Do współpracy z pamięciami zewnętrznymi lub przy dostępie swobodnym do zbiorów dyskowych używane są ekstrakody transmisji blokowych. Przesyłają one bloki słów bezpośrednio między pamięcią zewnętrzną a pamięcią operacyjną.
Pole parametrów transmisji znakowych REC
- 0 - na młodszym bajcie wskażnik znaku w buforze określający przy wywołaniu ekstrakodu numer znaku w buforze od którego rozpocznie się transmisja, po zakończeniu ekstrakodu wskażnik ostatniego znaku zwracany jest na całym słowie.
- 1 - identyfikator strumienia (przywiązanego uprzednio odpowiednim ekstrakodem do urządzenia lub zbioru dyskowego).
- 2 - adres bufora w pamięci operacyjnej do/z którego transmitowane są znaki upakowane po dwa w słowo.
- 3 - słowo którego starszy byte zawiera kod znaku kończącego transmisję, a młodszy maksymalną liczbę znaków, która może być transmitowana; zerowa wartość młodszego byte'u oznacza transmisję bez ograniczenia długości.
- 4 - słowo występujące tylko w ekstrakodzie PINP i uwzględniane tylko przy czytaniu z urządzenia dwukierunkowego (monitor ekranowy, drukarka z klawiaturą); słowo to zawiera kody dwóch znaków które będą wyprowadzane na urządzenie przed czytaniem, a ponadto pierwszy z tych znaków zostanie umieszczony w buforze (tak, jakby został pobrany ekstrakodem jako pierwszy znak). Przy czytaniu ze zbioru dyskowego lub z urządzenia jednokierunkowego (czytnik) słowo to jest ignorowane.
Bity starszego bajtu zerowego słowa mają następujące znaczenie:
- 0 - bit ustawiony dla ekstrakodów PRIR i PRIN oznacza transmisję dwukierunkową - czytanie po pisaniu, wówczas słowo 4 zawiera adres bufora, a słowo 5 kod znaku kończącego i ogranicznik bufora czytania;
- 1 - bit ustawiony oznacza czytanie bez generacji echa (tylko dla MULTIX-a);
- 2-7 - liczba większa od zera określa dopuszczalny czas trwania transmisji w sekundach (tylko dla MULTIX-a).
Ekstrakody transmisji znakowych
Argumentem ekstrakodów tej grupy jest podawany w rejestrze R4 adres pola parametrów REC.
Z każdym strumieniem (przywiązanym do zbioru dyskowego) związany jest wskażnik znaku zbioru przywiązanego do strumienia. Jest to liczba (32-bitowa), określająca numer kolejny znaku w zbiorze który będzie pobrany (lub przesłany) przy wykonaniu operacji wejścia (wyjścia). Liczba ta jest zwiększana po przesłaniu każdego znaku. Po zdefiniowaniu strumienia wskażnik znaku jest ustawiony na początek zbioru.
- INPR - czytaj blok.
- PINP - wyprowadż znaki zgłoszenia i czytaj blok.
- PRIR - pisz blok wraz ze znakiem kończącym.
- PRIN - pisz blok bez znaku kończącego.
- EOF - zamknij zbiór wyjściowy.
- FBOF - ustaw wskażnik znaku na początek zbioru.
- FEOF - ustaw wskażnik znaku na koniec zbioru.
Wykrycie przez ekstrakod czytania końca zbioru sygnalizowane jest ustawieniem bitu C w R0. Wczytanie lub wyprowadzenie końca zbioru (ekstakody:INPR, PINP,EOF) powoduje automatyczne usunięcie strumienia. Wywołanie ekstrakodów ustalających położenie wskażnika znaku dla strumieni dołączonych do obiektów innych niż zbiory dyskowe nie powoduje żadnych skutków.
Ekstrakody przetwarzania nazw i liczb
Ekstrakody te używają pola parametrów takiego jak dla ekstrakodów transmisji znakowych. Po przeanalizowaniu każdego elementu bloku wskażnik znaku w buforze wskazuje pozycje następną za znakiem kończącym ten element. Po osiągnięciu końca bloku wskażnik wskazuje pozycję ostatniego znaku w buforze.
- INAM - pobierz z bufora nazwę lub liczbę. Liczba rozpoczynająca się cyfrą 0 traktowana jest jako ósemkowa. Ekstrakod analizuje kolejne znaki zgodnie z wartością wskaznika znaku. Możliwe są wyjścia z ekstrakodu według:
- IC, w R3 umieszczony został pobrany znak, który nie jest znakiem, który mógłby rozpoczynać liczbę lub nazwę (nieudana próba pobrania nazwy lub liczby);
- IC+1, pobrana z bufora liczba umieszczona została w R2 (bit C=0) lub w R1 i R2 (bit C=1), R3 zawiera znak kończący liczbę, przy nadmiarze ustawiany jest bit V;
- IC+2, pobrana z bufora nazwa umieszczona została w R1 i R2 po trzy znaki w słowie, nazwa dłuższa od sześciu znaków jest obcinana, a R3 zawiera znak kończący nazwę (pierwszy znak za nazwą różny od litery lub cyfry).
- INUM - pobierz z bufora liczbę dziesiętną. Ekstrakod działa podobnie jak INAM lecz analizuje tylko liczby (nie ma wyjścia według IC+2), jak również ignoruje nieznaczące zera na początku.
Pole parametrów transmisji blokowych BLOCK
- 0 - licznik ustawiany po powrocie z ekstrakodu, podający liczbę przesłanych słów.
- 1 - dla READ i WRIT: identyfikator strumienia przywiązanego do zbioru, dla REAP i WRIP: identyfikator procesu, dla OVL: ignorowany.
- 2 - adres początku przesyłanego obszaru w pamięci operacyjnej.
- 3 - liczba słów transmisji.
- 4 - adres dyskowy w zbiorze (numer sektora dyskowego względem początku zbioru) od którego rozpocznie się transmisja.
Ekstrakody transmisji blokowych
- READ - czytaj ze zbioru dyskowego lub wczytaj komunikat.
- WRIT - pisz do zbioru.
- REAP - czytaj ze zbioru systemowego (zawierającego obraz pamięci operacyjnej procesu).
- WRIP - pisz do zbioru systemowego.
- OVL - wczytaj nakładkę ze zbioru, z którego był utworzony własny proces.
- WADR - pisz do zbioru pola adresowe - adresuj dysk(tylko dla procesów posiadających odpowiednie uprawnienie).
Wczytywanie komunikatu (ekstrakod READ) odbywa się według identyfikatora strumienia zdefiniowanego przez nadawcę komunikatu. Po wczytaniu komunikatu strumień ten jest usuwany.
Dla ekstrakodu OVL wywoływanego przez program o atrybucie 4 ( program w postaci relokowalnych modułów utworzonych przez kompilator PASCAL i assembler GASS ) pole parametrów ma inne znaczenie:
- 0-3 - czteroznakowa nazwa modułu (w kodzie ISO );
- 4 - adres wejściowy do nakładki, lub 0. Podanie 0 w tym słowie oznacza że po wykonaniu ekstrakodu sterowanie zostanie przekazane pod adres transferowy zapisany w opisie nakładki, lub za ekstrakodem.
Ekstrakody współpracy z kanałem automatyki PI
Argumentem ekstakodów jest przekazywany w R4 adres pola parametrów. Pole składa się z dwóch słów. Ze słowa pierwszego pobierana jest informacja wysyłana do PI lub wpisywana jest doń informacja wczytana z PI. Poszczególne bity drugiego słowa zawierają:
- 0-1 - kod odpowiedzi (O):
- 0 - rozkaz wykonany (OK)
- 1 - zajętość (EN)
- 2 - błąd (PE)
- 3 - brak odpowiedzi
- 2-4 - kod funkcji (F):
- 1 - czytaj z pakietu pierwsze słowo
- 2 - czytaj zgłoszenie przerwania
- 3 - czytaj z pakietu drugie słowo
- 4 - funkcja dodatkowa
- 5 - pisz do pakietu pierwsze słowo
- 6 - funkcja dodatkowa
- 7 - pisz do pakietu drugie słowo
- 5-7 - numer logiczny kanału PI (0-gdy tylko jeden kanał)
- 8-11 - adres kasety
- 12-15 - adres pakietu.
Gdy F=0 wykonywany jest rozkaz do kanału, bity 11:-13 określają treść rozkazu:
- 0 - zeruj kanał
- 1 - blokuj przerwania do procesora
- 3 - ustaw rejestr masek
- 4 - sprawdż istnienie bloku sprzężenia
- 5 - podaj stan zgłoszeń z kaset
- 6 - podaj specyfikację przerwania o najwyższym piorytecie
- 7 - ustaw numer procesora (alokuj).
Ekstrakod "wykonaj operację" OPPI.
Ekstrakod wykonuje operacje określoną drugim słowem pola parametrów. Po wykonaniu ustawia bity odpowiedzi w drugim słowie i, jeśli operacja dotyczy pobrania słowa, wpisuje jego wartość do pierwszego słowa pola parametrów.
Ekstrakod WFPI.
Ekstrakod pobiera z PI adres zgłoszenia o najwyższym priorytecie, a jeśli nie ma zgłoszeń - zawiesza proces do chwili pojawienia się zgłoszenia. Z pola parametrów używa tylko numeru kanału PI i ustawia bity odpowiedzi. Pobrany adres zgłoszenia umieszczany jest w pierwszym słowie w tej samej kolejności jak przy wykonywaniu operacji:
- bity 8-11 adres kasety,
- bity 12-15 adres pakietu.
Ekstrakod współpracy z systemem CAMAC
Argumentem ekstrakodu CAMAC jest przekazywany w R4 adres pola parametrów. Pole składa się z dwóch, trzech lub czterech słów w zależności od funkcji i rodzaju operacji.
- 0 - słowo zawierające na bitach 4-7 rodzaj operacji (zadawany przy wejśćiu do ekstrakodu) a na bitach 0-2 odpowiedż ustawianą przez ekstrakod:
- bit 0=1 brak odpowiedzi z kanału,
- bit 1=1 brak akceptacji rozkazu (X=0),
- bit 2=1 odpowiedż negatywna (Q=0)
- bit 4=1 operacja lub transmisja 24-bitowa,
- bit 5=1 transmisja ADDRESS SCAN,
- bit 6=1 transmisja STOP,
- bit 7=1 zawieś proces i czekaj na zgłoszenie LAM.
- Jeśli ekstrakod dotyczy transmisji, to po jej zakończeniu na bitach 3:-15 umieszczana jest liczba przesłanych słów.
- 1 - adres i funkcja CAMAC:
- bity 0-1 numer logiczny kasety (C),
- bity 2-6 kod funkcji (F),
- bity 7-10 adres wewnętrzny (A),
- bity 11-15 numer stanowiska (N),
- 2 - adres danych w pamięci operacyjnej (używany jest tylko przy operacjach przesłania i transmisjach),
- 3 - liczba słów transmisji (tylko przy transmisji).
Ekstrakod umożliwia wykonywanie wszelkich operacji w systemie zawierającym do czterech kaset CAMAC. Fizyczne adresy kaset (numery kanałów) umieszczone są w tablicy konfiguracji systemu operacyjnego (słowa 044:-047). Przy starcie systemu przeprowadzana jest inicjacja wszystkich zadeklarowanych kaset poprzez wysłanie do każdego bloku sprzężenia rozkazów "generuj Z" i "odblokuj zgłoszenia". Każdy blok sprzężenia z założenia pracuje z odblokowanymi zgłoszeniami. Umożliwia to jednoczesną współpracę z jedną kasetą kilku procesów z których każdy może czekać na zgłoszenia z innego stanowiska. System po odebraniu przerwania wysyła do stanowiska które się zgłosiło rozkaz "blokuj podawanie L na magistralę" i ponownie odblokowuje zgłoszenia w bloku sprzężenia. Dozwolone jest wysyłanie wszelkich rozkazów do bloku sprzężenia, a więc również rozkazów dotyczących samego sterownika kasety. Należy więc zwrócić uwagę na to, że wysłanie do bloku sprzężenia rozkazu "generuj Z" lub "zablokuj zgłoszenia" spowoduje zablokowanie procesów czekających na zgłoszenia z danej kasety.
Ekstrakody współpracy z pamięciami taśmowymi
Argumentem ekstrakodów jest przekazywany w R4 adres pola parametrów. Pole składa się z czterech słów, przy czym ekstrakody nietransmisyjne używają tylko dwóch pierwszych.
- 0 - słowo zawierające parametr zwracany przez ekstrakod:
- bit 0=1 koniec taśmy,
- bit 1=1 początek taśmy przy ruchu wstecz,
- bit 2=1 znacznik końca zbioru (FILE MARK),
- bity 3-15 długość przesłanego bloku w słowach.
- 1 - numer logiczny jednostki (pozycja w tablicy konfiguracji względem adresu 040).
- 2 - adres początku przesyłanego obszaru w pamieci operacyjnej.
- 3 - liczba słów transmisji.
Nazwy ekstakodów:
- RWMT - przewiń taśmę do początku;
- FBMT - przesuń taśmę do znacznika zbioru do tyłu;
- FFMT - przesuń taśmę do znacznika zbioru do przodu;
- BBMT - przesuń taśmę o blok do tyłu;
- BFMT - przesuń taśmę o blok do przodu;
- FMMT - zapisz znacznik zbioru;
- REMT - czytaj blok z taśmy;
- WRMT - pisz blok na taśmę.
Ekstrakody umożliwiają wykonywanie operacji w systemie zawierającym do czterech jednostek pamięci taśmowych. Fizyczne adresy jednostek umieszczone są w tablicy konfiguracji (słowa 040:-043). Każda jednostka jest zajmowana przez proces z nią współpracujący na czas działania procesu. W przypadku wykrycia błędu przy czytaniu taśma jest cofana i czytanie powtarza się. Dopiero po dziesiątym wystąpieniu tego samego błędu proces jest przerywany alarmem. W przypadku wystąpienia błedu przy pisaniu, powtarza się również zapis. Po dziesiątym nieudanym zapisie dany odcinek taśmy zostaje wykasowany i operacja zapisu wykonywana jest ponownie w innym, dalszym miejscu taśmy.
Źródło: SYSTEM OPERACYJNY CROOK-5 dla minikomputera MERA-400 (wersja 7), Zbigniew Czerniak, Marek Nikodemski, Gdańsk 1988