CROOK-5 - Zarządzanie pamięcią operacyjną
Pamięć operacyjną przeznaczoną dla programów użytkowych można dzielić na bloki o rozmiarach będących wielokrotnoscią 4 Ksłów. Bloki te są przydzielane procesom tylko na czas ich działania. Zatrzymanie procesu lub zawieszenie z powodu czekania na buforowane urządzenie wejścia-wyjścia może powodować przepisanie zawartości zajmowanej pamięci do specjalnego zbioru dyskowego i zwolnienie zajmowanego bloku pamięci. Jeżeli proces zajmuje wspólny blok pamięci wraz ze swoimi potomkami to zwolnienie pamięci nastąpi po spełnienu warunków zwolnienia przez wszystkich potomków.
Tryby pracy systemu
Dla zapewnienia możliwie krótkiego czasu reakcji systemu i ograniczenia liczby wymian wprowadzono dwa tryby pracy. Tryb bez wymian stosowany jest wtedy, gdy wszystkie uruchomione programy mieszczą się w pamięci operacyjnej. Pamięć zwalniana jest tylko w przypadku zatrzymania procesu lub spowodowania przezeń alarmu. Gdy dla jakiegoś procesu zabraknie wolnej pamięci, zostanie on umieszczony na liście czekających na pamięć i system przejdzie do trybu z wymianami. W trybie tym procesy zwalniają pamięć także przy operacjach wejścia-wyjścia na buforowanych urządzeniach znakowych i przy zajmowaniu procesora w sposób ciągły przez okres 3 s. Jeśli w ciągu 60 s lista czekających na pamięć pozostaje pusta, system powraca do trybu bez wymian. Tak więc, przy wzroście liczby użytkowników i rozmiarów ich programów czas reakcji systemu zwiększa się, zwłaszcza dla dużych programów konwersacyjnych. Istnieje również możliwość nadania programowi atrybutu "rezydujący" i wtedy nie będzie go obowiązywać tryb z wymianami. Umożliwia to stosowanie systemu jednocześnie do pracy wielodostępnej i do pracy "na bieżąco" gdzie wymagana jest natychmiastowa reakcja.
Ekstrakod przydziału pamięci
Ekstrakod CORE umożliwia zmianę wielkości bloku pamięci przydzielonego procesowi. Agumentem ekstrakodu jest zawarta w R4 żądana wielkość bloku (w słowach). Po wykonaniu ekstrakodu w R4 będzie się znajdował adres ostatniego słowa w przydzielonym bloku. Ekstrakod umożliwia zarówno zwiększanie jak i zmniejszanie rozmiaru bloku pamięci zajmowanej przez proces. Wykonanie ekstrakodu z zerową zawartością R4 powoduje tylko pobranie do R4 adresu ostatniego słowa w aktualnie zajmowanym bloku pamięci.
Niedozwolone jest wywoływanie ekstrakodu CORE z argumentem różnym od 0 przez proces o niespójnej przestrzeni adresowej.
Ekstrakody organizacji niespójnego obszaru pamięci
System operacyjny umożliwia procesom zajmowanie niespójnych bloków pamięci operacyjnej. Pamięć procesu jest opisywana za pomocą, mieszczącej się w jednym słowie, mapy pamięci. Poszczególne bity słowa-mapy oznaczeją kolejne bloki (po 4Ksłowa) zajętej pamięci, gdzie:
Bit | Oznacza blok |
---|---|
15 | 0000000 - 0007777 |
14 | 0010000 - 0017000 |
... | ... |
0 | 0170000 - 0177777 |
Ekstrakod GMEM umożliwia dołączanie do przestrzeni adresowej procesu nowych bloków pamięci. Argumentem jest, podawana w R4, mapa wskazująca gdzie mają być dołączone nowe bloki pamięci. W wyniku wykonania ekstrakodu pamięć procesu jest skonfigurowana tak, że nowa mapa pamięci równa jest sumie logicznej (.OR.) starej mapy i argumentu ekstrakodu. Ekstrakod RMEM umożliwia odłączenie (i zwolnienie) wskazanych bloków od ciała procesu. Argumentem ekstrakodu jest podawana w R4 mapa bloków do zwolnienia. Po wykonaniu każdego z tych ekstrakodów rejestr R4 zawiera aktualną mapę pamięci. Wykonanie ekstrakodu GMEM lub RMEM z argumentem równym 0 powoduje pobranie do R4 aktualnej mapy pamięci.
Źródło: SYSTEM OPERACYJNY CROOK-5 dla minikomputera MERA-400 (wersja 7), Zbigniew Czerniak, Marek Nikodemski, Gdańsk 1988