Struktury danych CROOK-5: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
brak opisu edycji
Nie podano opisu zmian
 
(Nie pokazano 24 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
= Opis procesu =
= Opis procesu =


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 opisująca kontekst procesu CROOK-a 5 dla jądra w wersji 8 dla maszyny nieprzerobionej (N) i przerobionej (P) wygląda następująco:
 
Pełna struktura opisująca kontekst procesu CROOK-a 5 w wersji 8 dla maszyny nieprzerobionej wygląda następująco:


{| class="wikitable"
{| class="wikitable"
! Nazwa !! Indeks !! Rozmiar !! Opis
! Nazwa !! Indeks N !! Indeks P !! Rozmiar !! Opis
|-
| ICE || 0 || 0 || 3 || Wektor procesu: IC, R0, SR
|-
|-
| ICE || 0 || 3 || Wektor procesu: IC, R0, SR
| REJE || 3 || 8 || 7 || Rejestry R1-R7       
|-
|-
| REJE || 3 || 7 || Rejestry R1-R7       
| NEXT || 10 || 15 || 1 || Łącznik główny listy procesów
|-
|-
| NEXT || 10 || 1 || Łącznik główny listy procesów
| NXCH || 11 || 16 || 1 || Łącznik listy procesów potomnych
|-
|-
| NXCH || 11 || 1 || Łącznik listy procesów potomnych
| STATE || 12 || 17 || 1 || Stan procesu
|-
|-
| STATE || 12 || 1 || Stan procesu
| PIOR || 13 || 18 || 1 || Priorytet procesu
|-
|-
| PIOR || 13 || 1 || Priorytet procesu
| PRNU || 14 || 19 || 1 || Numer procesu
|-
|-
| PRNU || 14 || 1 || Numer procesu
| PAPR || 15 || 20 || 1 || Proces nadrzędny
|-
|-
| PAPR || 15 || 1 || Proces nadrzędny
| CHLS || 16 || 21 || 1 || Początek listy procesów potomnych
|-
|-
| CHLS || 16 || 1 || Początek listy procesów potomnych
| ALLS || 17 || 22 || 1 ||
|-
|-
| ALLS || 17 || 1 ||
| CHTIM || 18 || 23 || 1 ||
|-
|-
| CHTIM || 18 || 1 ||
| DEVI || 19 || 24 || 1 || Aktualne wejście
|-
|-
| DEVI || 19 || 1 || Aktualne wejście
| DEVO || 20 || 25 || 1 || Aktualne wyjście
|-
|-
| DEVO || 20 || 1 || Aktualne wyjście
| USAL || 21 || 26 || 1 ||  
|-
|-
| USAL || 21 || 1 ||  
| ROB || 22 || 27 || 8 || Obszar roboczy       
|-
|-
| ROB || 22 || 8 || Obszar roboczy       
| STRLI || 30 || 35 || 1 || Początek listy strumieni?
|-
|-
| STRLI || 30 || 1 || Początek listy strumieni?
| BUFLI || 31 || 36 || 1 || Początek listy buforów?
|-
|-
| BUFLI || 31 || 1 || Początek listy buforów?
| LARUS || 32 || 37 || 1 || TABLICA KODOW DOSTEPU
|-
|-
| LARUS || 32 || 1 || TABLICA KODOW DOSTEPU
| LISMEM || 33 || 38 || 1 || POCZ LISTY BLOKOW PAO
|-
|-
| LISMEM || 33 || 1 || POCZ LISTY BLOKOW PAO
| CORSIZ || 34 || 39 || 1 || LICZBA BLOKOW PO 4K
|-
|-
| CORSIZ || 34 || 1 || LICZBA BLOKOW PO 4K
| NXTMEM || 35 || 40 || 1 || LISTA PROCESOW Z PAO DO ODEBRANIA
|-
|-
| NXTMEM || 35 || 1 || LISTA PROCESOW Z PAO DO ODEBRANIA
| BAR || 36 || 41 || 1 ||
|-
|-
| BAR || 36 || 1 ||
| SZABME || 37 || 42 || 1 || SZABLON PRZYDZIALU PAO
|-
|-
| SZABME || 37 || 1 || SZABLON PRZYDZIALU PAO
| BLPASC || 38 || 43 || 1 || blokada PASC
|-
|-
| BLPASC || 38 || 1 || blokada PASC
| IC || 39 || -4 || 3 || IC, R0, SR
|-
|-
| IC || 39 || 1 || IC, R0, SR
| REJ || 42 || 44 || 7 || Rejestry R1-R7
|-
|-
| REJ || 42 || 3 || Rejestry R1-R7
| JDAD || 49 || 51 || 1 || ADRES POCZ ZRODLA LADOWANIA
|-
|-
| JDAD || 49 || 7 || ADRES POCZ ZRODLA LADOWANIA
| JPAD || 50 || 52 || 1 || ADRES POCZ PRG
|-
|-
| JPAD || 50 || 1 || ADRES POCZ PRG
| JACN || 51 || 53 || 1 || POZYCJA PRG W FILDIC
|-
|-
| JACN || 51 || 1 || POZYCJA PRG W FILDIC
| JNAME || 52 || 54 || 2 || NAZWA PROGRAMU
|-
|-
| JNAME || 52 || 2 || NAZWA PROGRAMU
| JLOLEN || 54 || 56 || 1 || Dlugosc ladowania
|-
|-
| JLOLEN || 54 || 1 || Dlugosc ladowania
| TABUJB || 55 || 61 || || Całkowity rozmiar struktury
|}
|}


= Listy procesów =
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).


System utrzymuje 16 głównych list 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):
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.
 
[[File:Crook-procesy.png]]
 
= Kolejki procesów =
 
Pod adresem 0x62 (BPROG - Bieżący PROGram) system przechowuje wskaźnik na kontekst aktualnie wykonywanego procesu. Jest to jednocześnie czoło listy procesów gotowych do wykonania, łączonej dalej polem NEXT.
Oprócz tej listy, 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):


{| class="wikitable"
{| class="wikitable"
Linia 79: Linia 95:
! Pozycja !! Nazwa !! Opis
! Pozycja !! Nazwa !! Opis
|-
|-
| 0 || ? || ?
| 0 || 0 || Kolejka procesów oczeujących na kanał pamięciowy 0
|-
|-
| 1 || ? || ?
| 1 || 1 || Kolejka procesów oczeujących na kanał pamięciowy 1
|-
|-
| 2 || ? || ?
| 2 || 2 || Kolejka procesów oczeujących na kanał pamięciowy 2
|-
|-
| 3 || WTRAM || Kolejka oczekujących po bufor RAM
| 3 || 3<br/>''WTRAM'' || Kolejka procesów oczeujących na kanał pamięciowy 3<br />''w wersji 8: Kolejka oczekujących po bufor RAM''
|-
|-
| 4 || WTTM || Kolejka oczekujacych na na czas procesora (gotowe do wykonania)
| 4 || WTTM || Kolejka oczekujacych na określony czas zegarowy
|-
|-
| 5 || WTBU || czeka na wolny bufor
| 5 || WTBU || czeka na wolny bufor
Linia 104: Linia 120:
= Stan procesu =
= Stan procesu =


16-bit słowo stanu procesu składa się z dwóch części:
16-bitowe słowo stanu procesu składa się z trzech części:
* bity 0-8 określają stan procesu
* bity 0-8 określają stan procesu
* bity 9-15 opisują przyczynę wejścia procesu w dany stan
* 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.


{| class="wikitable"
{| class="wikitable"
! width=30 | Bit !! width=30 | 0 !! width=30 | 1 !! width=30 | 2 !! width=30 | 3 !! width=30 | 4 !! width=30 | 5 !! width=30 | 6 !! width=30 | 7 !! width=30 | 8 !! 9-15
! width=30 | Bity !! width=30 | 0 !! width=30 | 1 !! width=30 | 2 !! width=30 | 3 !! width=30 | 4 !! width=30 | 5 !! width=30 | 6 !! width=30 | 7 !! width=30 | 8 !! 9-15
|-
|-
| '''Stan''' || HAST || HAQJ || || HAJW || HAQL || HABA || ALRS || HADV || HCAM<br/>NCOW || Przyczyna
| '''Zawartość''' || HAST || HAQJ || || HAJW || HAQL || HABA || ALRS || HADV || HCAM<br/>NCOW || Przyczyna
|}
|}


Linia 130: Linia 148:
* HADE 040 - czeka na usunięcie?
* HADE 040 - czeka na usunięcie?


Przyczyna zatrzymania jest indeksem w tablicy list procesów oczekujących:
{{source|title=Opracowanie własne}}
 
{| class="wikitable"
! Nazwa !! Indeks !! Opis
|-
| ???? || 0 || ?
|-
| WTTM || 4 (=NMECH) || czeka na czas
|-
| WTBU || 5 || czeka na wolny bufor
|-
| WTCOR || 6 || czeka na pamięć
|-
| WTCAT || 12 (=WTCOR+NOCAM+2) || czeka na wejście do obszaru działania na katalogu
|-
| WTSI || 13 ||
|-
| WTSTR || 14 || czeka na strumień?
|-
| WTIEC || 15 ||czeka na IEC?
|-
| JWPI || 72 (=MEMCH+NMECH+NOMT) ||
|-
| JWIEC || 73 ||
|-
| NOQ || 16 ||
|}

Menu nawigacyjne