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

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
Nie podano opisu zmian
 
(Nie pokazano 28 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
= Opis procesu =
= Opis procesu =


CROOK-5, wersja 8 dla maszyny nieprzerobionej
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:


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

Aktualna wersja na dzień 12:16, 8 sty 2015

Opis procesu

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:

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

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

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):

Pozycja Nazwa Opis
0 0 Kolejka procesów oczeujących na kanał pamięciowy 0
1 1 Kolejka procesów oczeujących na kanał pamięciowy 1
2 2 Kolejka procesów oczeujących na kanał pamięciowy 2
3 3
WTRAM
Kolejka procesów oczeujących na kanał pamięciowy 3
w wersji 8: 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?

Źródło: Opracowanie własne