Struktury danych CROOK-5
Opis procesu
Struktura opisująca kontekst procesu CROOK-a 5 w wersji 8 dla maszyny nieprzerobionej wygląda następująco:
| Nazwa | Indeks | Rozmiar | Opis |
|---|---|---|---|
| ICE | 0 | 3 | Wektor procesu: IC, R0, SR |
| REJE | 3 | 7 | Rejestry R1-R7 |
| NEXT | 10 | 1 | Łącznik główny listy procesów |
| NXCH | 11 | 1 | Łącznik listy procesów potomnych |
| STATE | 12 | 1 | Stan procesu |
| PIOR | 13 | 1 | Priorytet procesu |
| PRNU | 14 | 1 | Numer procesu |
| PAPR | 15 | 1 | Proces nadrzędny |
| CHLS | 16 | 1 | Początek listy procesów potomnych |
| ALLS | 17 | 1 | |
| CHTIM | 18 | 1 | |
| DEVI | 19 | 1 | Aktualne wejście |
| DEVO | 20 | 1 | Aktualne wyjście |
| USAL | 21 | 1 | |
| ROB | 22 | 8 | Obszar roboczy |
| STRLI | 30 | 1 | Początek listy strumieni? |
| BUFLI | 31 | 1 | Początek listy buforów? |
| LARUS | 32 | 1 | TABLICA KODOW DOSTEPU |
| LISMEM | 33 | 1 | POCZ LISTY BLOKOW PAO |
| CORSIZ | 34 | 1 | LICZBA BLOKOW PO 4K |
| NXTMEM | 35 | 1 | LISTA PROCESOW Z PAO DO ODEBRANIA |
| BAR | 36 | 1 | |
| SZABME | 37 | 1 | SZABLON PRZYDZIALU PAO |
| BLPASC | 38 | 1 | blokada PASC |
| IC | 39 | 3 | IC, R0, SR |
| REJ | 42 | 7 | Rejestry R1-R7 |
| JDAD | 49 | 1 | ADRES POCZ ZRODLA LADOWANIA |
| JPAD | 50 | 1 | ADRES POCZ PRG |
| JACN | 51 | 1 | POZYCJA PRG W FILDIC |
| JNAME | 52 | 2 | NAZWA PROGRAMU |
| JLOLEN | 54 | 1 | Dlugosc ladowania |
Proces pierwotny INI tworzony jest w trakcie startu systemu, a adres jego kontekstu przechowywany jest pod adresem 0x2919 (ADINI - ADdres INI). Dla jądra nieprzerobionego w wersji 8 jest to 0x3c0c. Kolejne tworzone procesy umieszczane są w tablicy procesów na pozycjach będących wielokrotnościami -55 (rozmiar kontekstu procesu, procesy lokowane są od 0x3c0c w stronę malejących adresów). Adres, pod którym należy umieścić kolejny, nowo tworzony proces, przechowywany jest pod adresem 0x291b (FREES - Free Slot).
Struktura drzewa procesów opisana jest w następujący sposób:
- W polu PAPR znajduje się wskaźnik na kontekst procesu nadrzędnego. Dla procesu INI jest to -1.
- W polu CHLS znajduje się wskaźnik na pierwszy na liście proces potomny
- Pierwszy proces potomny wskazuje na kolejny proces potomny polem NXCH, itd.
- Każdy proces potomny w polu CHLS wskazuje na początek własnej listy procesów potomnych
Oprócz tego, pole NEXT służy to zbudowania listy procesów w danej kolejce.
Przykład drzewa procesów wraz ze wzajemnymi zależnościami pokazuje rysunek poniżej. Strzałkami koloru czarnego oznaczone zostały relacje potomek-przodek. Strzałkami niebieskimi i zielonymi oznaczono listy potomków procesów (odpowiednio) INI i P1. Kolorem czerwonym i różowym oznaczono przykładową zawartość list procesów w kolejkach WTTM i WTRAM.
Kolejki procesów
System utrzymuje 16 głównych kolejek procesów. Proces może znajdować się w jednej z nich, w zależności od tego, na jaki zasób bądź zdarzenie oczekuje. Początki list zajmują 16 (NOQ - Number Of Queues) kolejnych słów od adresu 0x2846 (QJW - Queue of Jobs Waiting):
| Pozycja | Nazwa | Opis |
|---|---|---|
| 0 | ? | ? |
| 1 | ? | ? |
| 2 | ? | ? |
| 3 | WTRAM | Kolejka oczekujących po bufor RAM |
| 4 | WTTM | Kolejka oczekujacych na określony czas zegarowy |
| 5 | WTBU | czeka na wolny bufor |
| 6 | WTCOR | czeka na pamięć |
| 12 | WTCAT | czeka na wejście do obszaru działania na katalogu |
| 13 | WTSI | ?? |
| 14 | WTSTR | czeka na strumień? |
| 15 | WTIEC | czeka na IEC? |
Stan procesu
16-bitowe słowo stanu procesu składa się z trzech części:
- bity 0-8 określają stan procesu
- bity 9-15 opisują przyczynę przejścia procesu do danego stanu, (numer kolejki, w której proces oczekuje, numer urządzenia, na które czeka, ...)
Proces gotowy do wykonania ma stan 0.
| Bity | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9-15 |
|---|---|---|---|---|---|---|---|---|---|---|
| Zawartość | HAST | HAQJ | HAJW | HAQL | HABA | ALRS | HADV | HCAM NCOW |
Przyczyna |
Znaczenie stanów:
- HAST - zatrzymany
- HAQJ - czeka w kolejce
- HAJW - czeka na inny proces?
- HAQL
- HABA
- ALRS
- HADV - czeka na urządzenie znakowe
- HCAM - czeka na CAMAC
- NCOW
- HAPR HAQL+075
- HATO HAQL+076
- HATR HAQL+041 - czeka na zakończenie?
- HADE 040 - czeka na usunięcie?
