<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mera400.pl/index.php?action=history&amp;feed=atom&amp;title=CROOK-5_-_Procesy</id>
	<title>CROOK-5 - Procesy - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mera400.pl/index.php?action=history&amp;feed=atom&amp;title=CROOK-5_-_Procesy"/>
	<link rel="alternate" type="text/html" href="https://mera400.pl/index.php?title=CROOK-5_-_Procesy&amp;action=history"/>
	<updated>2026-05-01T14:45:01Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://mera400.pl/index.php?title=CROOK-5_-_Procesy&amp;diff=1018&amp;oldid=prev</id>
		<title>Amo: Utworzono nową stronę &quot;Proces jest podstawowym obiektem zarządzanym przez system operacyjny. Każdy proces (z wyjątkiem jednego, pierwotnego, który jest przodkiem wszystkich innych) może b...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mera400.pl/index.php?title=CROOK-5_-_Procesy&amp;diff=1018&amp;oldid=prev"/>
		<updated>2013-08-18T07:43:26Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;Proces jest podstawowym obiektem zarządzanym przez system operacyjny. Każdy proces (z wyjątkiem jednego, pierwotnego, który jest przodkiem wszystkich innych) może b...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Proces jest podstawowym obiektem&lt;br /&gt;
zarządzanym przez system operacyjny.&lt;br /&gt;
Każdy proces (z wyjątkiem jednego, pierwotnego, który&lt;br /&gt;
jest przodkiem wszystkich innych)&lt;br /&gt;
może być utworzony tylko przez inny proces. W momencie tworzenia&lt;br /&gt;
powstaje relacja przodek-potomek decydująca o wzajemnym&lt;br /&gt;
oddziaływaniu procesów. Tworzenie procesu polega na&lt;br /&gt;
inicjalizacji w systemie wektora stanu procesu zawierającego&lt;br /&gt;
dane o właściwościach procesu i jego stanie.&lt;br /&gt;
&lt;br /&gt;
= Stany procesów =&lt;br /&gt;
&lt;br /&gt;
Proces po utworzeniu znajduje się w stanie zatrzymania&lt;br /&gt;
i może zostać uaktywniony przez swojego przodka.&lt;br /&gt;
W stanie aktywnym może być aktualnie wykonywany lub czekać&lt;br /&gt;
na procesor. Proces może zostać zawieszony przy czekaniu&lt;br /&gt;
na zakończenie wykonywania operacji wejścia-wyjścia, czekaniu&lt;br /&gt;
na zwolnienie jednego z zasobów przydzielanych przez system&lt;br /&gt;
lub w wyniku wykonania ekstrakodu typu &amp;quot;czekaj&amp;quot;.&lt;br /&gt;
Proces aktywny lub zawieszony może zostać zatrzymany w wyniku&lt;br /&gt;
spowodowania alarmu lub przez swojego przodka.&lt;br /&gt;
Przodek może odpowiednim ekstrakodem ponownie uaktywnić lub&lt;br /&gt;
usunąć proces.&lt;br /&gt;
&lt;br /&gt;
= Zasada koordynacji (szeregowania) procesów =&lt;br /&gt;
&lt;br /&gt;
Każdy proces ma przypisany priorytet, który jest liczbą&lt;br /&gt;
całkowitą z zakresu 0-127, przy czym liczba 0 oznacza&lt;br /&gt;
priorytet najwyższy. W systemie istnieje lista procesów aktywnych,&lt;br /&gt;
na której umieszczane są procesy gotowe do wykonania.&lt;br /&gt;
Proces przechodzący w stan aktywny umieszczany jest na liście według&lt;br /&gt;
priorytetu, jako pierwszy wśród procesów o jednakowym priorytecie.&lt;br /&gt;
Aktualnie wykonywanym jest zawsze proces pierwszy na liście.&lt;br /&gt;
W wypadku zawieszenia lub zatrzymania procesu jest on usuwany z listy.&lt;br /&gt;
Na końcu listy znajduje się zawsze systemowy proces &amp;quot;tracenia czasu&amp;quot;,&lt;br /&gt;
który wykonywany jest wtedy, gdy na liście nie ma innych procesów.&lt;br /&gt;
&lt;br /&gt;
= Atrybuty procesów =&lt;br /&gt;
&lt;br /&gt;
Z każdym procesem związana jest sześciobitowa liczba&lt;br /&gt;
określająca atrybuty procesu.&lt;br /&gt;
W czasie tworzenia procesu (ekstrakod DEFP) jest ona ustawiana&lt;br /&gt;
tak samo jak w procesie przodku.&lt;br /&gt;
Przeniesienia ciała procesu do osobnego bloku pamięci&lt;br /&gt;
(ekstrakody CPRF i JUMP) powoduje ustawienie wartości atrybutów&lt;br /&gt;
na takie, jakie są zapisane w etykiecie zbioru zawierającego&lt;br /&gt;
nowe ciało procesu.&lt;br /&gt;
Kolejne (od najstarszego) bity atrybutów oznaczają:&lt;br /&gt;
&lt;br /&gt;
* bit 0 =1 - oznacza program nie przygotowany do sprzętowego rozszerzenia przestrzeni adresowej do 64K;&lt;br /&gt;
* bity 1,2 - dwa bity zawierające informację dla programu XOSL o sposobie przesyłania parametrów do procesu przy jego uruchomieniu;&lt;br /&gt;
* bit 3 =1 - oznacza moduł wynikowy PASCALa.&lt;br /&gt;
* bit 4 =1 - oznacza proces rezydujący - proces zajmujący pamięć od chwili przeniesienia do osobnego bloku pamięci do usunięcia i nie posiadający zbioru specjalnego (procesy o tym atrybucie są automatycznie usuwane przez program XOSL po zakończeniu pracy i po każdym alarmie);&lt;br /&gt;
* bit 5 =1 - oznacza proces uprawniony do wykonywania wszystkich zastrzeżonych operacji.&lt;br /&gt;
&lt;br /&gt;
= Proces pierwotny INI =&lt;br /&gt;
&lt;br /&gt;
W chwili inicjalizacji systemu oprócz procesu &amp;quot;tracenia czasu&amp;quot;&lt;br /&gt;
tworzony jest proces pierwotny INI. Jest to proces&lt;br /&gt;
o najwyższym priorytecie, wykonujący się w użytkowym bloku&lt;br /&gt;
pamięci operacyjnej, którego zadaniem jest odebranie zgłoszenia użytkownika&lt;br /&gt;
i uruchomienie odpowiedniego programu komunikacji użytkownika z systemem.&lt;br /&gt;
Może to być standardowy program interpretacji zleceń systemowych&lt;br /&gt;
XOSL lub inny program ustalony przez użytkownika.&lt;br /&gt;
&lt;br /&gt;
= Alarmy zgłaszane przez procesy =&lt;br /&gt;
&lt;br /&gt;
Alarmami nazywamy tu wszystkie zdarzenia uniemożliwiające&lt;br /&gt;
dalsze wykonywanie procesu. Mogą być one spowodowane błędem&lt;br /&gt;
w programie, niewłaściwym działaniem urządzeń,&lt;br /&gt;
odwołaniem do nieistniejącego zbioru itp.&lt;br /&gt;
Po spowodowaniu alarmu proces zostaje zatrzymany, alarm zostaje wpisany&lt;br /&gt;
na listę alarmów przodka a przodek uaktywniony jeśli był zatrzymany.&lt;br /&gt;
Proces posiadający potomków&lt;br /&gt;
powinien po uaktywnienu sprawdzać stan swojej listy alarmów.&lt;br /&gt;
Służy do tego ekstrakod TERR który pobiera identyfikator procesu&lt;br /&gt;
pierwszego na liście alarmów i usuwa ten proces z listy.&lt;br /&gt;
Mechanizm listy alarmów używany jest także&lt;br /&gt;
do przesyłania sygnałów do przodka. Przewidziano do tego&lt;br /&gt;
celu grupę ekstrakodów, których wykonanie powoduje alarm&lt;br /&gt;
z przekazaniem jako numeru alarmu numeru ekstrakodu.&lt;br /&gt;
Znaczenie poszczególnych numerów jest lokalne dla danego poziomu&lt;br /&gt;
przodek-potomek.&lt;br /&gt;
Każdy proces może zadeklarować własną obsługę alarmów,&lt;br /&gt;
przekazując ekstrakodem&lt;br /&gt;
adres tablicy w której zostanie umieszczona zawartość&lt;br /&gt;
licznika rozkazów i numer alarmu.&lt;br /&gt;
Po sprawdzeniu numeru alarmu proces może zrezygnować z jego&lt;br /&gt;
dalszej obsługi i przekazać alarm przodkowi, tak jakby nie była&lt;br /&gt;
deklarowana własna obsługa.&lt;br /&gt;
&lt;br /&gt;
= Ekstrakody systemu operacyjnego =&lt;br /&gt;
&lt;br /&gt;
System operacyjny CROOK-5 udostępnia programom użytkowym około 70 funkcji systemowych. Funkcje te mogą być wywoływane przez programy użytkowe za pomocą ekstrakodów. W systemie CROOK-5 można wyróżnić 6 grup ekstrakodów:&lt;br /&gt;
&lt;br /&gt;
* ekstrakody zarządzania procesami. W grupie tej znajdują się ekstrakody pozwalające zarówno na tworzenie i sterowanie pracą procesów potomnych jak i wykonywanie pewnych operacji pomocniczych dotyczących procesu wywołującego ekstrakod.&lt;br /&gt;
* ekstakody semaforowe. Cztery ekstrakody realizujące typowe operacje semaforowe: semafor całkowitoliczbowy (dla procesów działających we wspólnym bloku pamięci), oraz semafor binarny (dla procesów używających wspólnego strumienia).&lt;br /&gt;
* ekstrakody współpracy z podsystemem zbiorów. W tej grupie znajdują się ekstrakody tworzenia i usuwania zbiorów i strumieni, ustalania parametrów zbiorów, ustalania skorowidza bieżącego, dołączania i odłączania talerzy dyskowych, oraz kilka ekstrakodów pomocniczych.&lt;br /&gt;
* ekstrakody WE/WY sekwencyjnego (znkowego).&lt;br /&gt;
* ekstrakody swobodnego dostępu do zbiorów dyskowych.&lt;br /&gt;
* ekstrakody umożliwiające działanie na urządzeniach takich jak: PI, CAMAC, taśma magnetyczna.&lt;br /&gt;
&lt;br /&gt;
Istnieje grupa ekstrakodów (o numerach od 0340 do 0377)&lt;br /&gt;
obsługiwanych przez system w sposób szczególny.&lt;br /&gt;
Wywołanie ekstrakodu z tej grupy powoduje alarm systemowy&lt;br /&gt;
przekazywany do przodka niezależnie od deklaracji&lt;br /&gt;
własnej obsługi alarmów.&lt;br /&gt;
Są one przeznaczone do komunikacji procesu z procesem przodkiem&lt;br /&gt;
(przykładem są tu ekstrakody pomocnicze programu XOSL).&lt;br /&gt;
&lt;br /&gt;
Parametry są przekazywane do ekstrakodów przez rejestr uniwersalny R4. Parametrem może być:&lt;br /&gt;
* liczba lub identyfikator umieszczony w tym rejestrze;&lt;br /&gt;
* adres pola parametrów.&lt;br /&gt;
&lt;br /&gt;
Wyjątkiem są tutaj ekstrakody SIGN i WAIS dla których&lt;br /&gt;
dodatkowym parametrem jest liczba umieszczona w programie&lt;br /&gt;
za wywołaniem ekstrakodu.&lt;br /&gt;
&lt;br /&gt;
Dane wyjściowe z ekstrakodu są przekazywane poprzez poszczególne&lt;br /&gt;
słowa pola parametrów,&lt;br /&gt;
lub przez rejestr uniwersalny R4, a dla ekstrakodów wejścia&lt;br /&gt;
sekwencyjnego dodatkowo przez bit C rejestru R0.&lt;br /&gt;
Wyjątkiem są ekstrakody INAM i INUM, gdzie dane wyjściowe&lt;br /&gt;
są przekazywane przez rejestry R1, R2 i R3, oraz bity C i V&lt;br /&gt;
rejestru R0.&lt;br /&gt;
&lt;br /&gt;
= Ekstrakody zarządzania procesami =&lt;br /&gt;
&lt;br /&gt;
== Pole parametrów PROC ==&lt;br /&gt;
&lt;br /&gt;
* 0 - słowo błędów, jeżeli początkowa zawartość jest różna od zera to wystąpienie błędu powoduje alarm, w przeciwnym przypadku program realizuje się dalej, a w słowo błędów wpisany zostaje numer alarmu (rozdz. I.5);&lt;br /&gt;
* 1 - identyfikator procesu potomnego - lokalny dla procesu wywołującego ekstrakod;&lt;br /&gt;
* 2 - zawartość IC procesu potomnego;&lt;br /&gt;
* 3 - zawartość R0 procesu potomnego;&lt;br /&gt;
* 4 - przy ekstrakodzie DEFP priorytet definiowanego procesu, względem procesu wykonującego ekstrakod, przy pobieraniu rejestrów zawartość słowa stanu procesu, przy ładowaniu rejestrów ignorowane;&lt;br /&gt;
* 5-11 - zawartości rejestrów R1:-R7 procesu potomnego.&lt;br /&gt;
&lt;br /&gt;
== Ekstrakody zarządzania procesami potomnymi ==&lt;br /&gt;
&lt;br /&gt;
Parametrem ekstrakodów tej grupy jest przekazywany w R4&lt;br /&gt;
adres opisanego w punkcie III.1.7.1. pola parametrów PROC.&lt;br /&gt;
Jego dwa pierwsze słowa określają identyfikator procesu którego&lt;br /&gt;
operacja dotyczy, oraz sposób reakcji w przypadku wystąpienia błedu&lt;br /&gt;
w trakcie wykonywania ekstrakodu.&lt;br /&gt;
Muszą być one ustawione przy wejściu do ekstrakodu.&lt;br /&gt;
Pozostałe słowa określają stan procesu oraz zawartości IC i&lt;br /&gt;
rejestrów. Muszą być one ustawiane przy wejściu do ekstrakodów&lt;br /&gt;
DEFP i SREG.&lt;br /&gt;
&lt;br /&gt;
* DEFP - definiuj proces potomny i załaduj jego rejestry (każdy proces może tworzyć własną rodzinę procesów potomnych).&lt;br /&gt;
* DELP - usuń proces wraz z wszystkimi jego potomkami.&lt;br /&gt;
* SREG - załaduj IC i rejestry procesu potomnego.&lt;br /&gt;
* TREG - pobierz zawartości IC i rejestrów procesu potomnego. W wyniku wykonania ekstrakodu do odpowiednich słów pola parametrów zostaną wpisane przez system: słowo stanu procesu oraz zawartości IC i rejestrów.&lt;br /&gt;
* RUNP - uaktywnij proces potomny.&lt;br /&gt;
* HANG - zatrzymaj proces potomny.&lt;br /&gt;
&lt;br /&gt;
== Ekstrakody pomocnicze ==&lt;br /&gt;
&lt;br /&gt;
* TERR - pobierz do R4 identyfikator procesu potomnego pierwszego na liście alarmów (wartość -1 oznacza, że lista alarmów jest pusta).&lt;br /&gt;
* STOP - zatrzymaj własny proces (zatrzymaj siebie) do chwili ponownego uruchomienia ekstrakodem RUNP przez przodka lub spowodowania alarmu przez potomka. Jeżeli zawarty w R4 argument jest różny od zera, dodatkowym zdarzeniem uruchamiającym proces jest upłynięcie wskazanej argumentem liczby kwantów czasu (po 100 milisekund).&lt;br /&gt;
* WAIT - zawieś własny proces na określoną zawartością R4 liczbę kwantów czasu.&lt;br /&gt;
* CHPI - zmień własny piorytet o zawartość R4 (tylko dla procesów posiadających odpowiednie uprawnienie).&lt;br /&gt;
* RELD - zwolnij urządzenia znakowe zajmowane przez proces.&lt;br /&gt;
* OES - deklaracja własnej obsługi alarmów; R4 jest adresem pola, w którym zerowe słowo zawiera adres procedury obsługi a kolejne dwa słowa przeznaczone są na przechowanie zawartości IC i numeru alarmu (własną obsługę alarmów można wyłączyć wykonując ekstrakod z rejestrem R4=-1). Deklaracja własnej obsługi jest wyłączana przez system po przesłaniu IC i numeru alarmu do pola opisu alarmu. Jeżeli proces zamierza nadal sam obsługiwać swoje alarmy musi ponownie wykonać ekstrakod OES.&lt;br /&gt;
* ERR - rezygnacja z własnej obsługi alarmu którego opis znajduje się w polu zadeklarowanym ekstrakodem OES (przekazanie obsługi przodkowi). Przed wykonaniem ekstrakodu ERR należy ekstrakodem OES &amp;quot;przypomnieć&amp;quot; systemowi adres pola opisu alarmu.&lt;br /&gt;
* DATE - umieść pod adresem podanym w R4 trzy słowa określające rok, miesiąc, dzień.&lt;br /&gt;
* TIME - umieść pod adresem podanym w R4 trzy słowa określające godzinę, minutę, sekundę.&lt;br /&gt;
&lt;br /&gt;
== Ekstrakody semaforowe ==&lt;br /&gt;
&lt;br /&gt;
W ekstrakodach semaforowych R4 zawiera adres słowa którego&lt;br /&gt;
zawartość jest wartością semafora, a słowo za ekstrakodem&lt;br /&gt;
zawiera liczbę o jaką będzie zmieniona wartość semafora.&lt;br /&gt;
&lt;br /&gt;
* WAIS - odejmij wskazaną liczbę od wartości semafora. Jeżeli wartość semafora pozostanie dodatnia lub równa zero kontynuuj proces; w przeciwnym przypadku pozostaw pierwotną wartość semafora bez zmian i zawieś proces do chwili uzyskania przez semafor odpowiedniej wartości (w wyniku wykonania ekstrakodu SIGN przez inny proces).&lt;br /&gt;
* SIGN - zwiększ wartość semafora o podaną liczbę i ewentualnie uaktywnij czekające procesy (lub jeden z nich).&lt;br /&gt;
&lt;br /&gt;
Niezależnie od ekstrakodów WAIS oraz SIGN&lt;br /&gt;
system umożliwia wykonywanie operacji na semaforach&lt;br /&gt;
binarnych związanych z każdym strumieniem.&lt;br /&gt;
W chwili tworzenia strumienia (dowolnym z ekstrakodów ASG, CASG lub&lt;br /&gt;
NASG) definiowany jest semafor którego wstępną wartością jest 1.&lt;br /&gt;
Argumentem ekstrakodów jest podawany w R4 adres pola&lt;br /&gt;
opisującego strumień (analizowane są dwa pierwsze słowa tego pola).&lt;br /&gt;
&lt;br /&gt;
* TAKS - jeśli wartość semafora strumienia wynosi jeden, zmień ją na zero. W przeciwnym razie: jeśli zawartość słowa błędów pola opisu strumienia jest zero, zmień ją na 10 (wskazanie zajętości); jeżeli zawartość słowa błędów jest różna od zera zawieś proces do chwili uzyskania przez semafor wartości jeden.&lt;br /&gt;
* RELS - jeśli proces wykonał uprzednio ekstrakod TAKS, ustal wartość semafora strumienia na jeden i ewentualnie uaktywnij jeden z czekających na ten semafor procesów.&lt;br /&gt;
&lt;br /&gt;
UWAGA: Ekstrakody TAKS i RELS mogą być w systemie nieznane. Procedury je realizujące dołączane są do systemu zależnie od ustawienia odpowiedniego bitu w tablicy konfiguracji.&lt;br /&gt;
&lt;br /&gt;
== Ekstrakod pobierania informacji o procesie ==&lt;br /&gt;
&lt;br /&gt;
Ekstrakod PINF pobiera informację o własnym procesie i wypełnia&lt;br /&gt;
następująco pole parametrów:&lt;br /&gt;
&lt;br /&gt;
* 0 - numer generacji systemu;&lt;br /&gt;
* 1 - starszy byte zawiera rozmiar dostępnej pamięci operacyjnej (w jednostkach po 4K), młodszy zaś kod uprawnień użytkownika;&lt;br /&gt;
* 2 - priorytet  procesu;&lt;br /&gt;
* 3 - długość zbioru specjalnego (w sektorach);&lt;br /&gt;
* 4 - adres startowy (adres ładowania);&lt;br /&gt;
* 5 - rozmiar zajmowanej pamięci operacyjnej w słowach;&lt;br /&gt;
* 6 - kod uprawnień i atrybuty procesu;&lt;br /&gt;
* 7 - nazwa obszaru;&lt;br /&gt;
* 8-9 - nazwa użytkownika;&lt;br /&gt;
* 10-11 - nazwa programu (procesu).&lt;br /&gt;
&lt;br /&gt;
== Zajmowanie własnej pamięci przez proces ==&lt;br /&gt;
&lt;br /&gt;
Każdy proces po utworzeniu i uruchomieniu wykonuje się&lt;br /&gt;
w bloku pamięci wspólnym ze swoim przodkiem.&lt;br /&gt;
Procesy, mające działać w oddzielnym bloku pamięci&lt;br /&gt;
mogą ekstrakodem CPRF przygotować się do zajęcia pamięci&lt;br /&gt;
i wczytania ze zbioru nowego ciała procesu,&lt;br /&gt;
a następnie ekstrakodem JUMP załadować ciało procesu&lt;br /&gt;
i przenieść sterowanie do własnego bloku pamięci.&lt;br /&gt;
Oba ekstrakody muszą być wywoływane bezpośrednio&lt;br /&gt;
jeden po drugim, a proces który ich używa&lt;br /&gt;
nie może mieć procesów potomnych.&lt;br /&gt;
&lt;br /&gt;
* CPRF - utwórz zbiór specjalny i przygotuj parametry transmisji ciała procesu do pamięci. Argumentem jest podawany w R4 adres pola parametrów działania na zbiorach (III.3.2.1). Występujący tam tytuł zbioru (musi to być zbiór dyskowy) wskazuje na zbiór z którego zostanie załadowane ciało procesu.&lt;br /&gt;
* JUMP - przenieś sterowanie do osobnego bloku pamięci. Argumentem jest podawany w R4 adres pola parametrów zarządzania procesami (III.1.7.1.). W wyniku wykonania ekstrakodu zostaje załadowane ciało procesu, a proces zostaje wznowiony z IC i rejestrami załadowanymi tak, jak w zadanym polu parametrów. Ujemna wartość czwartego słowa pola parametrów (słowo stanu) uznacza polecenie wykonania alarmu 0100 po załadowaniu ciała procesu.&lt;br /&gt;
&lt;br /&gt;
{{source|title=SYSTEM OPERACYJNY CROOK-5 dla minikomputera MERA-400 (wersja 7)|author=Zbigniew Czerniak, Marek Nikodemski|date=Gdańsk 1988}}&lt;/div&gt;</summary>
		<author><name>Amo</name></author>
	</entry>
</feed>