Architektura systemu MTS
Deweloper | University of Michigan i 7 innych uniwersytetów w USA, Kanadzie i Wielkiej Brytanii |
---|---|
Napisane w | różne języki, głównie asembler 360/370 |
Stan roboczy | Historyczny |
Pierwsze wydanie | 1967 |
Najnowsze wydanie | 6.0/1988 (końcowy) |
Dostępne w | język angielski |
Platformy | IBM S/360-67, IBM S/370 i następcy |
Domyślny interfejs użytkownika |
Interfejs linii komend |
Licencja | Bezpłatnie ( CC BY 3.0 ) |
Oficjalna strona internetowa | Archive.michigan-terminal-system.org |
MTS System Architecture opisuje organizację oprogramowania Michigan Terminal System , komputerowego systemu operacyjnego z podziałem czasu, używanego od 1967 do 1999 na IBM S/360-67 , IBM System/370 i kompatybilnych komputerach.
Przegląd
Państwo | Tryb | maszyna wirtualna | Przerywa | |
---|---|---|---|---|
Programy użytkownika | problem | użytkownik | NA | NA |
Podsystemy języka poleceń (CLS), procedury obsługi urządzeń (DSR), podprogramy systemowe |
system | |||
Programy pracy (MTS, PDP, DMGR, RM lub HASP, ...) | włączone lub wyłączone | |||
Nadzorca (UMMPS) | kierownik | nie dotyczy | wyłączony | wyłączony |
Sprzęt S/360-67 lub S/370 |
Kierownik ds. Multi-Programming Supervisor (UMMPS) Uniwersytetu Michigan ma pełną kontrolę nad sprzętem i zarządza zbiorem programów pracy. Jednym z programów pracy jest MTS, program pracy, z którym współpracuje większość użytkowników. MTS działa jako zbiór podsystemów języka poleceń (CLS). Jeden z CLSów pozwala na wykonywanie programów użytkownika. MTS zapewnia zbiór podprogramów systemowych, które są dostępne dla CLS, programów użytkownika i samego MTS. Te podprogramy systemowe zapewniają między innymi standardowy dostęp do procedur obsługi urządzeń (DSR), komponentów wykonujących operacje wejścia/wyjścia zależne od urządzenia.
Organizacja
System jest zorganizowany jako zestaw niezależnych komponentów z dobrze zdefiniowanymi interfejsami między nimi. Pomysł ten nie jest oczywiście ani nowy, ani wyjątkowy; ale komponenty MTS są generalnie większe, interfejsy między komponentami sztywniejsze, a komponent komunikuje się z mniejszą liczbą innych komponentów niż w wielu systemach. W rezultacie komponenty są bardziej niezależne od siebie i łatwiej jest wymienić jeden komponent bez wpływu na inne.
Interfejs z przełożonym jest taki sam dla wszystkich komponentów i dozwolonych jest bardzo niewiele przypadków specjalnych; na przykład wszystkie operacje wejścia/wyjścia są wykonywane przy użyciu tych samych urządzeń nadzorczych, niezależnie od tego, czy wejście/wyjście dotyczy czytnika kart, urządzenia przywoławczego czy dowolnego innego urządzenia. Większość dostępu do usług nadzorczych odbywa się za pośrednictwem podprogramów systemowych, które wydają niezbędne instrukcje wywołania nadzorcy (SVC), a nie poprzez bezpośrednie użycie SVC. Bloki sterujące są dostępne tylko pośrednio przez wywołania podprogramów w komponencie, który „jest właścicielem” bloku sterującego.
Interfejsy używane przez programy użytkownika są najczystsze ze wszystkich. Programy użytkownika nigdy nie mogą odnosić się bezpośrednio do żadnego bloku kontrolnego systemu (ani w celach informacyjnych, ani do zmiany), ponieważ segmenty pamięci wirtualnej zawierające bloki kontrolne systemu (segmenty systemowe) są usuwane z wirtualnej przestrzeni adresowej zadania, gdy program w trybie użytkownika biegnie. Interfejsy podprogramów dostępne dla programów użytkownika są również używane przez większość innych części systemu (programy trybu systemowego, CLS, ...), nawet jeśli komponenty działające w trybie systemowym mają dostęp do segmentu (segmentów) pamięci wirtualnej „systemu”. Przejścia z trybu użytkownika do trybu systemowego iz powrotem są zarządzane przez specjalny chroniony zestaw interfejsów podprogramów znanych jako „brama” (początkowo opracowany na Wayne State University).
Wysiłek programistyczny dla MTS jest podzielony pionowo, a nie poziomo. Oznacza to, że jednej lub dwóm osobom przypisuje się odpowiedzialność za komponent, a następnie śledzą go od projektu poprzez wdrożenie i konserwację. Osoba odpowiedzialna ma znaczną swobodę projektowania wewnętrznej struktury komponentu, a nawet rozszerzania interfejsów, o ile wszystkie odpowiednie istniejące interfejsy pozostają niezmienione.
Języki programowania i debugowanie na poziomie systemu
Kierownik, większość programów pracy, duże części MTS, w tym wiele DSR i CLS, są napisane w języku asemblera 360/370. Kilka programów pracy i części MTS, w tym niektóre DSR i CLS, jest napisanych w językach wyższego poziomu, takich jak Plus lub GOM . Programy użytkownika są pisane w szerokiej gamie języków, od asemblera po dowolne dostępne języki wyższego poziomu.
Większość składników systemu, w tym programy użytkownika, CLS i podprogramy ładowane do współdzielonej pamięci wirtualnej, można debugować, a nowe wersje wielu z nich można instalować podczas działania systemu bez konieczności jego wyłączania. Możliwe jest zastąpienie prywatnej kopii wszystkich komponentów z wyjątkiem przełożonego i części niektórych programów pracy. Dostępna jest „testowa” wersja programu zadań MTS (TMTS), która umożliwia testowanie w normalnym środowisku produkcyjnym. SWAT jest interfejsem, który umożliwia używanie symbolicznego systemu debugowania, który jest zwykle używany do debugowania programów użytkownika, do debugowania MTS. $PEEK to uprzywilejowane polecenie MTS, które korzysta z funkcji Program Event Recording (PER) i innych funkcji ułatwiających debugowanie jednego programu zadań z innego. Komponenty, których nie można debugować w ten sposób, można debugować, uruchamiając je na maszynie wirtualnej MTS (program użytkownika).
Kierownik
University of Michigan Multi-Programming Supervisor (UMMPS) to nazwisko przełożonego MTS . UMMPS to jedyna część systemu działająca w stanie nadzorcy S/360. Działa z wyłączoną pamięcią wirtualną (relokacja) i wyłączonymi przerwaniami sprzętowymi. W konfiguracjach wieloprocesorowych może działać jednocześnie na więcej niż jednym procesorze. UMMPS to coś, co dziś można by nazwać mikrojądrem , chociaż UMMPS został opracowany na długo przed tym, zanim ten termin był w powszechnym użyciu.
Do zadań UMMPS wydaje się być rozszerzeniem sprzętu S/360 lub S/370 i odpowiada za:
- przydział wszystkich zasobów sprzętowych ( procesorów , pamięci rzeczywistej , urządzeń wejścia/wyjścia),
- planowanie operacji I/O,
- przetwarzanie wszystkich przerwań sprzętowych , w tym błędów stronicowania i przerwań programowych z powodu błędów w programach zadań,
- implementacja pamięci wirtualnej , w tym:
- przydział adresów VM,
- zarządzanie tabelami segmentów i stron,
- zapewnienie pamięci chronionej lub tylko do odczytu poprzez ustawienie kluczy pamięci,
- zarządzanie odniesieniami do pamięci i bitami zmian,
- zarządzanie nazwanymi przestrzeniami adresowymi (NAS),
- określanie kiedy i które strony powinny być przenoszone między pamięcią rzeczywistą a pamięcią dodatkową w celu wdrożenia stronicowania na żądanie ,
- świadczenie usług na rzecz programów pracy, które wydają instrukcje wywołania przełożonego (SVC) i wywołania monitora (MC), w tym:
- rozpoczynania i kończenia pracy,
- inicjowanie operacji wejścia/wyjścia (programy kanałowe),
- planowanie przerwań czasowych,
- komunikacja z operatorem systemu,
- świadczenie usług komunikacji międzyzadaniowej,
- umożliwianie zadaniom nabywania i zwalniania blokad programowych,
- umożliwianie zadaniom wchodzenia i wychodzenia z trybu użytkownika i trybu systemowego, gdzie programy działające w trybie użytkownika nie mają dostępu do niektórych segmentów pamięci wirtualnej i pełnego zakresu SVC,
- świadczenie usług umożliwiających synchronizację programów pracy,
- udostępnianie segmentów w tle i tabel stron oraz innych usług, które umożliwiają programom zadań świadczenie usług maszyn wirtualnych ,
- symulowanie kilku instrukcji maszynowych obecnych na niektórych, ale nie wszystkich modelach komputerów S/360 lub S/370,
- symulowanie pseudoinstrukcji Branch on Program Interrupt (BPI),
- naprawa błędu sprawdzania maszyny,
- pisanie zrzutów zadań (tworzenie migawki bieżącego stanu wykonania zadania poprzez wypisanie całej pamięci rzeczywistej, całej pamięci wirtualnej zadania, rejestrów ogólnych i słowa stanu programu na taśmę magnetyczną),
- śledzenie ilości wykorzystanego czasu procesora i liczby stronicowań dla zadań,
- utrzymywanie czasu zegara dziennego i
- pomoc w tworzeniu diagnostycznych taśm śladowych.
Po inicjalizacji UMMPS jest całkowicie sterowany przerwaniami. Przerwania mogą być spowodowane instrukcjami wywołania przełożonego (SVC) lub monitora (MC) wydawanymi przez programy robocze w celu zażądania usług, przerwaniami związanymi z błędem strony dla stron pamięci wirtualnej, które nie znajdują się w pamięci rzeczywistej, gdy odwołuje się do nich program roboczy, przerwaniami programu spowodowanymi nieprawidłowymi warunki w programach zadań, przerwania czasowe w imieniu programów zadań lub używane wewnętrznie przez przełożonego, przerwania z podsystemu wejścia/wyjścia, przerwania kontroli maszyny, przerwania zewnętrzne (inicjowane przez operatora) oraz przerwania z innych procesorów w konfiguracji wieloprocesorowej.
Przerwanie programu w stanie nadzorcy to awaria systemu, która skutkuje zrzutem nadzorcy (Super Dump, w którym stan maszyny i zawartość całej pamięci rzeczywistej jest zapisywana na taśmie magnetycznej), po którym następuje ponowne uruchomienie systemu (re-IPL).
Oddział w przypadku przerwania programu (BPI)
Pseudoinstrukcja Branch on Program Interrupt (BPI) zapewnia prosty sposób zachowania kontroli nad sekwencją kodu po przerwaniu programu. Może to być przydatne do testowania prawidłowych adresów na liście parametrów, do przechwytywania przepełnienia, niedomiaru i innych wyjątków podczas obliczeń lub naprawdę każdej sytuacji, w której możliwe jest przerwanie programu. BPI mogą być używane przy bardzo niskich kosztach w zwykle bardziej powszechnym przypadku, w którym nie ma przerwania programu.
UMMPS implementuje pseudoinstrukcję Branch on Program Interrupt (BPI) przy użyciu specjalnego typu instrukcji NOP. Forma instrukcji BPI to:
BPI M 2 ,D 2 (B 2 ) [RX]
Lub
BC 0,D 2 (M 2 ,B 2 ) [RX]
Kod operacyjny Maska 1 Maska 2 Przemieszczenie podstawy +--------------+-------+--- ----+-------+------------+ | x'47' | 0 | M2 | _ B 2 | D 2 | +--------------+-------+-------+-------+---------- --+ 0 8 12 16 20 31
Gdzie Maska 1 jest zawsze równa zero, Maska 2 to nazwa lub wartość, jak opisano w poniższej tabeli, a podstawa i przemieszczenie określają adres rozgałęzienia. Kilka instrukcji BPI może być podanych kolejno. Instrukcja BPI jest dostępna do użytku zarówno w stanie problemu, jak iw stanie nadzorcy (czyli w samym UMMPS).
Gdy instrukcja powoduje przerwanie programu, następująca po niej instrukcja jest sprawdzana w celu określenia, czy jest to instrukcja BPI. Jeśli tak, typ przerwania programu, który wystąpił, jest porównywany z kategoriami typów określonymi w części Maska 2 instrukcji BPI. Jeśli występuje dopasowanie, kod warunku jest ustawiany tak, aby odzwierciedlał przerwanie, które wystąpiło, a rozgałęzienie jest podejmowane. W przeciwnym razie następna instrukcja jest sprawdzana w celu określenia, czy jest to instrukcja BPI, itp. Jeśli nie wykonano transferu BPI (ponieważ nie było instrukcji BPI lub typ przerwania programu nie pasował do maski żadnego z obecnych BPI ), następuje normalne przetwarzanie przerwania programu.
Gdy instrukcja BPI jest wykonywana normalnie (gdy nie ma przerwania programu na poprzedniej instrukcji), jest to instrukcja NOP lub „branch never”.
Kategorie przerwań BPI:
Maska 2 NazwaWartość maski 2
Numer przerwania
Nazwa przerwania
Kod warunku w gałęziOPCD 8 1 Operacja 1 2 Operacja uprzywilejowana 2 3 Wykonać 3 OPND 4 4 Ochrona 0 5 Adresowanie 1 6 Specyfikacja 2 7 Dane 3 WOWDIW 2 8 Naprawiono przelew 0 9 Stały podział 1 10 Przepełnienie dziesiętne 2 11 Dzielenie dziesiętne 3 FP 1 12 Przepełnienie wykładnika 0 13 Niedopełnienie wykładnika 1 14 Znaczenie 2 15 Dzielenie zmiennoprzecinkowe 3
Programy pracy
Wszystkie programy zadań działają w stanie problemu S/360, mogą działać z włączonym lub wyłączonym adresowaniem wirtualnym i mogą, ale nie muszą, być ponownie wprowadzane (więcej niż jedna instancja programu zadań może być dozwolona lub nie). W konfiguracjach wieloprocesorowych pojedyncze zadanie będzie wykonywane tylko na jednym procesorze w danej chwili, ale przełożony może przypisać zadanie do różnych procesorów w różnym czasie.
Program pracy MTS jest tym, z którym większość użytkowników wchodzi w interakcję i zapewnia interpretację poleceń, kontrolę wykonywania, zarządzanie plikami i urządzeniami oraz usługi księgowe. Inne programy robocze wspomagają przełożonego (procesor urządzenia przywoławczego lub PDP, zadanie konsoli OPERATOR, menedżer dysków lub DMGR, ...), zapewniają wspólne lub współdzielone usługi (buforowane lokalne i zdalne usługi wsadowe za pośrednictwem HASP i HASPlings lub później Resource Manager lub RM, który został opracowany na Uniwersytecie Kolumbii Brytyjskiej w celu zastąpienia HASP) lub umożliwić operatorom systemu wyświetlanie stanu i inne sterowanie systemem (JOBS, UNITS, STOP, BLAST, GOOSE, STARTUP, SHUTDOWN, REW, WTM, ...).
Nowe prace, inne niż pierwsza, są uruchamiane przez zgłoszenia do UMMPS z innych prac, najczęściej OPERATORA. Pierwsze zadanie, INIT, jest uruchamiane natychmiast po IPL i nadzorcy.
Adresowanie 24-, 31- i 32-bitowe
Od samego początku i przez większą część swojego życia UMMPS i MTS działały przy użyciu adresowania 24-bitowego . UMMPS nigdy nie używał 32-bitowych adresów pamięci wirtualnej, które były dostępne w IBM S/360-67.
W sierpniu 1982 r. Uniwersytet Alberty zmienił UMMPS, aby działał w trybie adresowania 31-bitowego , aby umożliwić użycie ponad 16 MB pamięci rzeczywistej, chociaż pamięć rzeczywista powyżej 16 MB była używana tylko do przechowywania stron pamięci wirtualnej. Programy pracy i programy użytkownika nadal używały adresów 24-bitowych.
W 1985 r. Rensselaer Polytechnic Institute (RPI) wprowadził zmiany w UMMPS w celu obsługi S / 370-XA, co między innymi umożliwiło adresowanie 24- lub 31-bitowe dla programów zadań i programów użytkownika działających pod MTS. Zmiany zostały wprowadzone na Uniwersytecie Michigan w 1990 roku, aby umożliwić płynne działanie programów użytkownika korzystających z adresów 31-bitowych: moduły obiektowe można było oznaczyć jako obsługujące adresowanie 31-bitowe (lub nie), zmieniono kompilatory i asemblery, aby dostarczały poprawne flagi, programy przełączałyby się między 24- i 31-bitowymi trybami adresowania w razie potrzeby podczas przechodzenia między trybami systemowymi i użytkownika.
Ochrona
MTS ma silny model ochrony, który wykorzystuje sprzętową pamięć wirtualną oraz nadzorcę i stany problemów sprzętu S/360 i S/370, a poprzez oprogramowanie dzieli wykonywanie stanu problemu na tryby systemowy (uprzywilejowany lub niechroniony) i użytkownika (chroniony lub nieuprzywilejowany). Stosunkowo mało kodu działa w stanie nadzorcy. Na przykład procedury obsługi urządzeń (DSR, czyli sterowniki urządzeń) nie są częścią nadzorcy i działają w trybie systemowym w stanie problemu, a nie w stanie nadzorcy.
Pamięć wirtualna i stronicowanie
Pamięć wirtualna (VM) i obsługa stronicowania na żądanie zostały dodane do UMMPS w listopadzie 1967 r., Dzięki czemu MTS był pierwszym systemem operacyjnym, który korzystał z funkcji dynamicznej translacji adresów (DAT), które zostały dodane do IBM S / 360-67 .
UMMPS wykorzystuje 4096-bajtowe strony pamięci wirtualnej i 256-stronicowe segmenty pamięci wirtualnej. UMMPS można było warunkowo złożyć, aby używać małych (64-stronicowych) segmentów, które były dostępne na sprzęcie S / 370, ale programy zadań były zawsze prezentowane z czymś, co wyglądało na duże (256-stronicowe) segmenty. Obsługiwane są zarówno klucze pamięci blokowej 2K, jak i 4K.
Istnieje trzypoziomowa hierarchia przechowywania: (1) pamięć rzeczywista, (2) szybkie urządzenia stronicujące i (3) dyski stronicujące. Szybkie urządzenia przywoławcze obejmują IBM 2301 Drum , IBM 2305 Fixed Head File oraz różne „półprzewodnikowe” urządzenia we/wy innych firm, takie jak STC 4305 i Intel 3805, które symulują obracające się dyski lub częściej zapewniają bardziej wydajny dostęp do zewnętrznej pamięci RAM opartej na architekturze stałych bloków (FBA). Szybkie urządzenia przywoławcze są podłączane za pomocą „dwubajtowych” kanałów we/wy działających z prędkością do 3,0 MB na sekundę, gdy tylko jest to możliwe. Dyski stronicowania były oddzielone od dysków używanych w systemie plików i były używane, jeśli urządzenia stronicowania o większej szybkości zapełniły się. Strony pamięci wirtualnej migrują między pamięcią rzeczywistą a urządzeniami stronicującymi. We wczesnych wersjach MTS strony nie migrowały między poszczególnymi urządzeniami przywoławczymi. W późniejszych wersjach rzadziej używane strony były migrowane z szybkich urządzeń stronicujących na dyski stronicowania, gdy szybkie urządzenia były bliskie zapełnienia. W późniejszym okresie system został zmieniony tak, aby korzystał z IBM S/370-XA Extended Storage jako część drugiego poziomu hierarchii przechowywania i używał tych samych dysków dla systemu plików i stronicowania.
Pamięć wirtualna jest zarządzana przez UMMPS przy pomocy programu zadań Paging Device Processor (PDP). UMMPS odpowiada na żądania przydzielenia i zwolnienia maszyny wirtualnej z programów zadań, przydziela adresy maszyny wirtualnej, przydziela pamięć rzeczywistą, zarządza tablicami segmentów i stron, ustawia klucze pamięci, zarządza bitami odniesienia i zmiany, określa, które strony pamięci wirtualnej powinny być stronicowane, a komunikuje się z PZPR. Nowe strony pamięci wirtualnej są inicjowane z wartością „stałej rdzenia” x'81' przy pierwszym odwołaniu.
PDP to prawdziwy program do zadań pamięciowych. Przydziela miejsce na urządzeniach przywoławczych, inicjuje wszystkie wejścia/wyjścia do urządzeń przywoławczych, odpowiada za usuwanie błędów we/wy i komunikuje się z UMMPS.
Aby zmniejszyć prawdopodobieństwo przewalenia, UMMPS używa „mechanizmu dużych zadań”, który identyfikuje zadania z większą liczbą rzeczywistych stron niż próg, ogranicza liczbę tych „dużych” zadań, które można wykonać w danym momencie, i nadaje dużym zadaniom wydłużony odcinek czasu kiedy wykonają. Pozwala to dużym zadaniom na gromadzenie większej liczby rzeczywistych stron pamięci i lepsze wykorzystanie tych stron, zanim dojdą do końca przedziału czasu, ale duże zadania będą czekać dłużej między przedziałami czasu, gdy jest zbyt wiele dużych zadań rywalizujących o ograniczone strony pamięci rzeczywistej. Liczba stron, które zadanie może mieć, zanim zostanie uznane za duże (próg dużego zadania lub BJT) oraz liczba dużych zadań (NBJ), które kwalifikują się do wykonania, to parametry zewnętrzne, które są ponownie oceniane i ustawiane poza przełożonym co 20 sekund w oparciu o całkowite obciążenie systemu.
Oprócz mechanizmu dużych zadań, pamięć UMMPS, procesor i planowanie we/wy są niezależne, a każdy obszar może „zająć się sobą”.
Pamięć wirtualna jest podzielona na regiony w następujący sposób:
- Segment 0: współdzielona pamięć wirtualna równa się pamięci rzeczywistej (tylko do odczytu)
- Segmenty od 1 do 4: współdzielona pamięć wirtualna (tylko do odczytu)
- Segment 5: prywatna pamięć wirtualna (segment systemowy, dostępny tylko dla programów trybu systemowego (niechronionych))
- Segmenty od 6 do 12: prywatna pamięć wirtualna (segmenty użytkownika, odczyt i zapis do dowolnego programu)
Z biegiem czasu do różnych regionów przypisywano różne liczby segmentów, a wraz z pojawieniem się adresowania 31-bitowego i możliwością używania segmentów maszyn wirtualnych większych niż 16 regiony zostały rozszerzone w następujący sposób:
- Segment 0: współdzielona pamięć wirtualna równa się pamięci rzeczywistej (tylko do odczytu)
- Segmenty od 1 do 5: współdzielona pamięć wirtualna (tylko do odczytu)
- Segmenty 6-7: prywatna pamięć wirtualna (segmenty systemowe, dostępne tylko dla programów trybu systemowego (niechronionych))
- Segment 8: współdzielona pamięć wirtualna do dołączania nazwanych przestrzeni adresowych (NAS) (tylko do odczytu)
- Segmenty 9-55: prywatna pamięć wirtualna (segmenty użytkownika, odczyt i zapis do dowolnego programu)
- Segmenty 56-59: prywatna pamięć wirtualna (segmenty systemowe, dostępne tylko dla programów trybu systemowego (niechronionych))
- Segmenty 60-63: współdzielona pamięć wirtualna do dołączania nazwanych przestrzeni adresowych (NAS) (tylko do odczytu)
Niektóre pamięci rzeczywiste nie są adresowalne przy użyciu adresów pamięci wirtualnej i dlatego są dostępne tylko dla programów zadań UMMPS lub pamięci rzeczywistej. Pamięć wirtualna tylko do odczytu może zostać zmieniona przez uprzywilejowane programy, które wyłączają ochronę pamięci (zwykle na bardzo ograniczony czas).
Nazwane przestrzenie adresowe (NAS) umożliwiają dołączanie nazwanych segmentów pamięci wirtualnej. Są to współdzielone przestrzenie pamięci wirtualnej, które mogą być dołączane i odłączane od wirtualnej przestrzeni adresowej danego zadania, a te same adresy mogą mieć różną zawartość w zależności od tego, które nazwane przestrzenie adresowe są dołączone. Obsługa NAS jest najczęściej używana przez MTS do dołączania segmentów maszyn wirtualnych z fabrycznie załadowanymi komponentami systemu jako sposób na rozszerzenie współdzielonej pamięci wirtualnej bez wykorzystywania przestrzeni adresowej maszyny wirtualnej poniżej magicznej granicy 16 MB, a tym samym utrzymywania większej ilości tej cennej przestrzeni adresowej do wykorzystania przez 24-bity programy użytkownika.
Identyfikatory logowania i projektu
Każdy, kto korzysta z MTS, ma przypisany identyfikator logowania (zwany także identyfikatorem użytkownika lub identyfikatorem centrum obliczeniowego, identyfikatorem CCID). Identyfikatory wpisania się mają zawsze długość 4 znaków. W razie potrzeby krótsze identyfikatory są automatycznie uzupełniane po prawej stronie za pomocą ciągu znaków „.$.”. Zatem identyfikatory „MTS.”, „DAB.”, „ME$”. lub „C.$”. można zapisać odpowiednio jako „MTS”, „DAB”, „ME” i „C”.
Identyfikatory Signon są chronione za pomocą haseł, które należy podać na początku każdej sesji (w ramach lub częściej bezpośrednio po poleceniu $SIGNON ). Wyjątkiem są zadania przesłane za pośrednictwem *BATCH* , które działają z tym samym identyfikatorem, który przesłał nowe zadanie, zadania zaplanowane do wielokrotnego uruchamiania o określonej godzinie lub określonego dnia, gdy zadania są uruchamiane z tym samym identyfikatorem, który je zaplanował, lub zadania zainicjowane z konsola operatora. Hasła mają długość od 1 do 12 znaków, małe litery są zamieniane na duże, dozwolone są znaki specjalne inne niż przecinek i spacja. Hasła można zmienić za pomocą Polecenie $SET PW . Zmiana hasła z sesji terminala wymaga podania oryginalnego hasła, a nowe hasło należy wprowadzić dwukrotnie w celu weryfikacji.
Wprowadzenie błędnego hasła jest zliczane i zgłaszane użytkownikowi przy następnym udanym logowaniu. Zbyt wiele błędnych haseł bez pomyślnego wpisu jest zgłaszanych operatorowi systemu, a jeszcze więcej błędnych haseł bez pomyślnego wpisu spowoduje „zablokowanie” identyfikatora logowania do czasu jego zresetowania przez pracowników biura. Wprowadzono krótkie opóźnienie między nieudanymi próbami wprowadzenia hasła, aby zapobiec szybkiemu „zgadywaniu” dużej liczby haseł.
Osoby fizyczne mogą mieć wiele identyfikatorów logowania do wykorzystania na różnych kursach, różnych projektach badawczych lub z różnymi źródłami finansowania (uniwersytet, rząd, organizacja non-profit, przemysł, ...). Odradza się udostępnianie identyfikatorów wpisu przez osoby fizyczne, ale ma to miejsce.
Identyfikatory logowania są pogrupowane w projekty. Każdy identyfikator wpisania się jest członkiem jednego i tylko jednego projektu. Identyfikatory projektów, podobnie jak identyfikatory logowania, składają się z 4 znaków. Wiele projektów jest kontrolowanych przez identyfikator logowania „Lidera projektu”, który może przydzielać zasoby do kont będących członkami projektu (w ramach limitów zasobów przydzielonych do projektu) za pomocą polecenia $ACCOUNTING MANAGEMENT .
Identyfikatory logowania i identyfikatory projektów są również wykorzystywane do kontrolowania dostępu do plików i wysyłania wiadomości e-mail.
Z jednym wyjątkiem nie ma identyfikatorów wpisania się ze „specjalnymi” uprawnieniami wynikającymi z samego identyfikatora. Zamiast tego można ustawić flagi, które pozwalają określonym identyfikatorom wpisania się na:
- tworzyć publiczne pliki i ustawiać publiczne klucze programów,
- uruchomić z zerowym lub ujemnym saldem konta,
- wykonywać operacje uprzywilejowane, w tym:
- domyślnie oznaczanie plików do uruchamiania w trybie systemowym (niechronionym), a nie użytkownika (chronionym),
- użyj opcji PROT=OFF w komendach $SET i $RUN ,
- użyj testowego podsystemu języka poleceń ( $#CLS ),
- używać uprzywilejowanych opcji $SYSTEMSTATUS i innych podsystemów języka poleceń (CLS).
Wyjątkiem jest identyfikator wpisania się „MTS.”, który może odczytywać, ale nie modyfikować ani zezwalać na dowolny plik w systemie, niezależnie od statusu własności lub zezwolenia. MTS. ID może również korzystać z $SET FILEREF=OFF , która zapobiega aktualizowaniu dat referencyjnych plików (przydatne podczas odzyskiwania po problemach z systemem plików lub badania problemów z bezpieczeństwem).
Program lub użytkownik nie ma możliwości przejęcia uprawnień wynikających z identyfikatora wpisania się innego niż ten, który został użyty do wpisania się do bieżącej sesji. Zamiast tego programy i pliki mogą mieć uprawnienia do określonych identyfikatorów wpisania się, projektów i kluczy programu lub do kombinacji identyfikatorów wpisania się, projektów i kluczy programu.
Sesje terminala, partii i serwera
MTS obsługuje sesje terminalowe, wsadowe i serwerowe. Wszyscy trzej używają tego samego języka poleceń.
- Sesje terminala są interaktywne, a użytkownik może reagować na generowane dane wyjściowe, w tym komunikaty o błędach i monity.
- Zadania wsadowe nie są interaktywne, więc wszystkie dane wejściowe muszą być przygotowane z wyprzedzeniem, z niewielką lub żadną możliwością zmiany danych wejściowych przez użytkownika (przynajmniej nie bez programowania) po rozpoczęciu wykonywania zadania wsadowego.
- Sesje serwera mogą wspierać interakcje użytkownika z MTS lub klienta z MTS i chociaż może zachodzić interakcja z użytkownikiem, polecenia MTS są zwykle odczytywane z pliku poleceń, a użytkownik prawdopodobnie nie będzie musiał znać ani wprowadzać poleceń MTS. Sesje serwera mogą być sponsorowane, w takim przypadku będą wyglądać na bezpłatne dla użytkownika i nie wymagają od użytkownika podania identyfikatora i hasła. Sesje serwera mogą być również płatne i wymagają ważnego identyfikatora i hasła. Sesje serwera mogą być inicjowane z sieci lub z poziomu sesji MTS za pomocą $MOUNT .
University of Alberta opracował w 1971 roku obiekt zorientowany na studentów, aby zapewnić szybką zmianę pracy studentom studiów licencjackich uczącym się programowania w FORTRAN, ALGOL, PL / C i asemblerze 360. Był to dedykowany system wprowadzania kart perforowanych i drukowania, który zapewniał 5-minutową obróbkę i wykonywał kilka tysięcy zadań tygodniowo przy stałym koszcie za zadanie (15 centów).
Język poleceń
MTS odczytuje polecenia z pseudourządzenia *SOURCE* , które początkowo jest terminalem użytkownika lub wsadowym strumieniem wejściowym. Programy mogą wykonywać polecenia MTS, wywołując podprogramy CMD, CMDNOE i COMMAND.
Początkowe i końcowe spacje, jak również null i wszystkie puste linie są ignorowane. Wiersze zaczynające się od gwiazdki ( * lub $* ) są traktowane jako komentarze. Wiersze poleceń zakończone znakiem kontynuacji (domyślnie znakiem minus) są kontynuowane w następnym wierszu. Linie poleceń mogą mieć długość do 255 znaków.
MTS używa poleceń i opcji poleceń zorientowanych na słowa kluczowe. Czasownik polecenia ( SIGNON , RUN , EDIT , ...) jest pierwszym słowem kluczowym w wierszu poleceń. Polecenia mogą zaczynać się opcjonalnym znakiem dolara ( $SIGNON , $ RUN , $EDIT , ...). W zadaniach wsadowych, po nieprawidłowych poleceniach i innych błędach, MTS szuka następnego wiersza rozpoczynającego się znakiem dolara ( $ ) w kolumnie 1 jako następnego polecenia do wykonania. Wszystkie polecenia i większość opcji poleceń zezwala na początkowe skróty podłańcuchów ( C jak COPY , R dla RUN , DEB dla DEBUG , ...). W poleceniach MTS i większości opcji poleceń nie jest rozróżniana wielkość liter.
MTS ma polecenia „jednorazowe” ( CREATE , FILESTATUS , SIGNOFF , ...) i polecenia, które mają tryby poleceń podrzędnych ( EDIT , CALC , SYSTEMSTATUS , ...). Większość poleceń z trybami poleceń podrzędnych można również wywołać jako polecenia jednorazowe, wydając jedno lub więcej poleceń podrzędnych w wierszu poleceń.
Wszystkie zadania MTS rozpoczynają się od polecenia SIGNON , a większość kończy się poleceniem SIGNOFF . Polecenia mogą być przechowywane w plikach i wykonywane za pomocą SOURCE . Polecenia mogą być przechowywane w plikach signon (sigfiles) lub plikach signon-projektu (projectsigfiles), które są zawsze wykonywane bezpośrednio po poleceniu SIGNON . Wykonanie plików sig może być wymagane ( SIGFILEATTN=OFF ) lub opcjonalne ( SIGFILEATTN=ON , ustawienie domyślne).
Globalna kontrola
PODPISZ NON { ccid | * } [ opcja ... ] [ komentarz ] PODPISZ NOFF [ KRÓTKI | $ | DŁUGIE ] [ PARAGONY | NORECEIPTS ] LICZENIE KONTA [ opcja ... ] ZARZĄDZANIE LICZENIEM KONTA KOMENTARZ [ tekst ] Pozycja WYŚWIETLANA [ WYJŚCIE = Nazwa FD ] Opcja SE T ... SIN K [ Nazwa FD | POPRZEDNI ] TAK URCE [ nazwa FD | POPRZEDNI ] SY STEMSTATUS [ opcja ] # CLS FDname [ opcje ] (polecenie uprzywilejowane uruchamiające test CLS)
Zarządzanie plikami
CR EATE nazwa pliku [ ROZMIAR={ n | n P } ] [MAXSIZE={ n | n P} ] [TYP={LINIA | SEQ | SEQWL} ] DES TROY lista plików [ OK | WSZYSTKO | PROMPT ] DUP LICATE stara nazwa [ AS | DO ] nowa nazwa [ opcje ] [ OK | WSZYSTKO | PROMPT ] ED IT [ nazwa pliku ] [: polecenie-edycji ] EM PTY [ lista plików ] [ OK | WSZYSTKO | PROMPT ] SKRÓĆ listę plików [ ALLOK | PROMPT ] RENA ME stara nazwa [ AS ] nowa nazwa [ OK | WSZYSTKO | PROMPT ] RENU MBER lista plików [ pierwszy [ ostatni [ początek [ przyrost ] ] ] ] [ ALLOK | PROMPT ] F ILESTATUS [ lista plików ] [ format ] [ elementy ] FILEM ENU [ lista plików ] [ elementy ] FM ENU [ lista plików ] [ elementy ] ZEZWÓL na listę plików [ dostęp [ dostęp [ dostęp ] ] ZEZWÓL listę plików LIKE lista plików 2 [ Z WYJĄTKIEM dostęp [ dostęp [ dostęp ] ] LOCK nazwa pliku [ jak ] [ CZEKAJ | NOWEJ ] [ WYJDŹ | NOQUIT ] UNLOC K nazwa pliku LOCKS TATUS [ nazwa pliku | JOB nnnnnn ] [ ZABLOKUJ ] [ CZEKAJ ] LS TATUS [ nazwa pliku | ZADANIE nnnnnn ] [ ZABLOKUJ ] [ CZEKAJ ]
Zarządzanie plikami i urządzeniami
KOPIUJ [ Z ] { FDlist1 | 'string' } [ [ TO ] [ FDlist2 ] CR EATE *pdn* TYPE={ PRINT | IMPORTUJ | EKSPORT | DUMMY } DES TROY *pdn* [ OK | WSZYSTKO | PROMPT ] LIST FDlist [ [ ON | TO ] FDname ] [ [ WITH ] opcja ... ] LIST FDlist WITH opcje [ {ON | TO } FDname ] LISTA MOU NT [ wniosek [; żądanie ] ... ] CAN CEL *...* [ [ PRACA ] nnnnnn ] [ {ID | CCID}= ccid ] REL EASE { *PRINT* | *PUNKT* | *PARTIA* | * pdn * } LOKALIZACJA { SYSTEM | LOKALNE | PEŁNY | KRÓTKI | POMOC } ZLOKALIZUJ TE { numer zadania | nazwa_zadania } [ opcja ...] ZOBACZ W [ numer_zadania [; polecenie przeglądania ] LOG [ FDname1 ] { [ ON ] FDname2 [ format ] [ opcje ] | OFF } FTP [ nazwa hosta ] G ET FDname (staromodny i przestarzały, ale czasami nadal użyteczny) NUM BER (staroświecki i przestarzały sposób wprowadzania danych do pliku)
Wykonywanie i sterowanie programem użytkownika
R UN [ Nazwa FD ] [ We/Wy ] [ opcja ] ... [ PAR = parametry ] RER UN [ ECHO | NOECHO ] [ I/Ounits ] [ opcja ] ... [ PAR= parametry ] DEB UG [ FDname ] [ I/Ounits ] [ opcja ] ... [ PAR = parametry ] SDS [ sds-command ] LOA D [ FDname ] [ I/Jednostki ] [ opcja ] ... [ PAR= parametry ] ST ART [ [ AT ] [ RF={ hhhhhh | GR x } ] lokalizacja ] [ I/Ounits ] [ opcja ] ... RES TART [ [ AT ] lokalizacja ] [ I/Ounits ] [ opcja ] ... UNLOA D [ CLS = cls name ] AL TER wartość lokalizacji ... ... WYŚWIETL [ format ] lokalizacja [ OUTPUT= nazwa FD ] DU MP [ format ] [ OUTPUT = nazwa FD ] I F RUNRC warunek liczba całkowita , polecenie MTS ERR ORDUMP (polecenie przestarzałe, powoduje automatyczny zrzut w trybie wsadowym po nieprawidłowym zakończeniu programu użytkownika)
Różnorodny
CAL C [ wyrażenie ] ME SSAGESYSTEM [ polecenie-komunikatu ] FSM ESSAGE [ polecenie-FSMessage ] N ET [ host | * pdn * ] [ . polecenie sieciowe ] HEX ADD [ liczba szesnastkowa1 ] [ liczba szesnastkowa2 ] (przestarzałe, zastąpione przez $Calc) HEXS UB [ liczba szesnastkowa1 ] [ liczba szesnastkowa2 ] (przestarzałe, zastąpione przez $Calc) PAS MIECZ (przestarzałe, usunięte, dozwolone zmiany w plikach publicznych, zanim udostępniono prawdziwy współdzielony dostęp do plików)
Wzorce nazw plików
Kilka poleceń MTS, które używają nazw plików lub list nazw plików, umożliwia użycie wzorców nazw plików: COPY , DESTROY , DUPLICATE , EMPTY , EDIT , FILESTATUS , FILEMENU , LIST , LOCKSTATUS , PERMIT , RENAME , RENUMBER i TRUNCATE . Znak zapytania ( ? ) to znak dopasowania wzorca. Pojedynczy znak zapytania użyty w nazwie pliku będzie pasował do zera lub więcej znaków. „ ? ” dopasowuje wszystkie pliki dla bieżącego identyfikatora wpisania się, „ ?.S ” dopasowuje wszystkie pliki, które kończą się na „ .S ”, „ A?B ” dopasowuje wszystkie pliki, które zaczynają się na „ A ” i kończą na „ B ”, „ A?B?C " pasuje do wszystkich plików, które zaczynają się od " A ", kończą na " C " i zawierają " B ". Dwa lub więcej kolejnych znaków zapytania pasuje do znaków " n -1". " ???.S " pasuje do wszystkich czterech znaków nazw plików, które kończą się na " .S " i " ??? " pasuje do wszystkich trzech nazw plików znakowych. " W163:? " dopasowuje wszystkie pliki pod identyfikatorem wpisania się " W163 ", do których bieżący użytkownik ma pewien dostęp.
Makra poleceń
Procesor makr poleceń MTS umożliwia użytkownikom definiowanie własnych poleceń MTS. Zapewnia język „skryptowy” z poleceniami warunkowymi i jest dostępny do użytku z dowolnymi wierszami odczytanymi z *SOURCE* przez programy użytkownika lub podsystemy języka poleceń, a także z poleceniami MTS. Linie procesora makr są zwykle poprzedzone znakiem większości ( > ). Procesor makropoleceń jest sterowany za pomocą $SET oraz modyfikatorów we/wy w nazwach FD.
Znaki przedrostkowe
Aby pomóc użytkownikom śledzić, z jakim poleceniem, podsystemem poleceń lub programem pracują i kiedy oczekuje się wprowadzenia danych, MTS wyświetla znak przedrostka lub czasami ciąg przedrostka z przodu każdej linii wejścia i wyjścia, którą zapisuje na terminalu użytkownika. Wspólne przedrostki to:
# Tryb poleceń MTS #- Tryb kontynuacji poleceń MTS ? Monity > KOPIUJ i LISTA . Moduł ładujący program pusty Programy użytkownika: Editor + Symbolic Debugging System (SDS) @ Message System ftp> FTP (Transfer plików)
Podsystemy języka poleceń
Program zadań MTS zawsze wykonuje jeden z kilku podsystemów języka poleceń lub CLS. Wiele poleceń MTS jest wbudowanych w MTS i wykonywanych jako część MTS CLS. Programy użytkownika są wykonywane jako USER CLS. USER CLS ma specjalny związek z symbolicznym systemem debugowania (SDS CLS), gdy debugger jest aktywny. Inne polecenia MTS są zaimplementowane jako oddzielne moduły, myląco nazywane również podsystemami języka poleceń lub CLS, które mogą być wykonywane ze współdzielonej pamięci wirtualnej lub ładowane z plików.
Każdy z tych oddzielnych CLS ma swoją własną czteroznakową nazwę i działa jako oddzielny CLS w pierwotnym znaczeniu tego terminu. Wiele z tych CLS, ale nie wszystkie, zapewnia własny, oddzielny język poleceń podrzędnych. Istnieją $SET , które powodują użycie starych lub nowych wersji CLS zamiast bieżących wersji. Istnieje opcja w $UNLOAD , aby zwolnić CLS (zwolnić używaną pamięć wirtualną, zamknąć wszystkie nazwy FD i zwolnić wszystkie otwarte urządzenia lub pseudourządzenia).
Tylko jeden CLS jest wykonywany w danym momencie, ale jeden CLS każdego typu może być aktywny i możliwe jest przełączanie się z jednego CLS do drugiego bez opuszczania lub rozładowywania oryginalnego CLS, a następnie powrót do oryginalnego CLS i kontynuowanie pracy od miejsca, w którym jeden opuścił. CLS, które mają własne podkomendy, zwykle obsługują STOP w celu wyjścia z CLS, komendę MTS i/lub RETURN w celu powrotu do wywołującego trybu komend CLS lub MTS oraz komendy zaczynające się od znaku dolara ( $ ) są wykonywane jako polecenia MTS z natychmiastowym powrotem do oryginalnego CLS.
Wszystkie CLS z wyjątkiem CLS UŻYTKOWNIKA są wykonywane w trybie systemowym w stanie problemu.
Stan ograniczonej obsługi
Sesje MTS zwykle działają w „stanie pełnej obsługi”, ale w okresach skrajnego przeciążenia systemu sesje terminalowe mogą zostać przełączone w „stan ograniczonej usługi” (LSS). Mechanizm LSS jest włączany ręcznie przez operatora systemu i zwykle jest używany tylko wtedy, gdy system sprzętowy działa ze zmniejszoną wydajnością z powodu awarii.
Sesja terminala jest umieszczana w LSS, jeśli LSS zostało włączone przez operatora systemu, a system jest przeciążony podczas wpisywania się. Sesje LSS mogą wydawać polecenia MTS i uruchamiać programy tylko z krótkim lokalnym limitem czasowym. Zamiast zapewniać wszystkim użytkownikom niską wydajność, LSS ogranicza rozmiar zadań, które niektórzy użytkownicy mogą wykonywać, do stosunkowo małych zadań, takich jak edycja plików i czytanie wiadomości, aby umożliwić innym użytkownikom uzyskanie rozsądnej wydajności przy większych zadaniach. Użytkownicy mogą zażądać zmiany sesji na stan pełnej obsługi ( $SET LSS=OFF ) i takie żądania są uwzględniane, jeśli system nie jest przeciążony w momencie zgłoszenia żądania.
Statystyki dowodzenia
Każde wydane polecenie MTS jest rejestrowane najpierw w pliku na dysku, a później na taśmie magnetycznej. Informacje te są dostępne tylko dla personelu i służą do badania problemów z oprogramowaniem, problemów z bezpieczeństwem, wniosków o rabaty oraz do dostarczania statystyk dotyczących używania języka poleceń.
Programy użytkownika
Program użytkownika odnosi się do programu uruchamianego przez użytkownika, który niekoniecznie jest programem należącym do użytkownika lub przez niego stworzonym. Programy użytkownika mogą być dostarczane w plikach publicznych, w plikach dostępnych pod STARYM: lub NOWYM: identyfikatorem logowania, w plikach należących do innych użytkowników i dopuszczonych do użytku przez innych lub programy użytkownika mogą być opracowane przez bieżącego użytkownika w plikach, które są jego własnością .
Programy użytkownika są wykonywane przy użyciu poleceń $RUN , $RERUN i $DEBUG lub rzadziej za pomocą poleceń $LOAD i $START . Polecenia $RESTART można użyć do wznowienia wykonywania programu po przerwaniu uwagi, które nie zostało obsłużone przez program, przerwaniu programu, które nie zostało obsłużone przez program (chociaż ponowne uruchomienie po przerwaniu programu zwykle nie działa dobrze) lub po wyraźnym powrocie do MTS z wywołania podprogramu MTS.
MTS ładuje programy za pomocą modułu ładującego z dynamicznym łączeniem (UMLOAD), który odczytuje rekordy modułu ładującego (ESD, TXT, CSI, RDL, LCS, END, ...) z pliku lub urządzenia określonego przez użytkownika i selektywnie zawiera podprogramy z bibliotek dostarczonych przez użytkownika, z bibliotek podprogramów systemowych, takich jak *LIBRARY , oraz z podprogramów systemowych wstępnie załadowanych do współużytkowanej pamięci wirtualnej. MTS używa standardowych rekordów modułu ładującego OS/360, co sprawia, że MTS może dość łatwo korzystać z kompilatorów opracowanych do użytku w innych systemach operacyjnych IBM.
Gdy program rozpoczyna wykonywanie, liczba logicznych jednostek we/wy zostanie ustawiona jawnie w poleceniu $RUN lub innym poleceniu lub domyślnie. Dowolny ciąg tekstowy podany po słowie kluczowym PAR= jest przekazywany do programu jako parametr.
Domyślnie programy użytkownika są uruchamiane z kluczem programu *EXEC , ale można ustawić inny klucz programu za pomocą polecenia $CONTROL . Programy mogą wywoływać podprogramy systemowe w celu skrócenia klucza programu, którego używają, lub przełączyć się na *EXEC , tymczasowo dając sobie mniejszy dostęp do plików, urządzeń i innych usług kontrolowanych za pomocą kluczy programu. Programy mogą również wywoływać podprogram systemowy w celu wydłużenia lub przywrócenia swojego klucza programowego zgodnie z pewnymi wcześniej ustalonymi regułami.
MTS używa standardowych sekwencji wywołań typu S i rzadziej R, używanych w systemie OS/360.
Domyślnie programy użytkownika są wykonywane w trybie użytkownika w stanie problemu. Programy działające w trybie użytkownika nie mają dostępu do segmentu pamięci wirtualnej systemu, a zatem nie mają dostępu do bloków kontrolnych systemu, nie mogą wywoływać uprzywilejowanych podprogramów systemowych ani wywoływać uprzywilejowanych wywołań nadzorcy (SVC). Programy trybu użytkownika mogą wydawać nieuprzywilejowane SVC, ale niewiele programów robi to bezpośrednio i zamiast tego wywołuje podprogramy systemowe w celu uzyskania usług systemowych. Programy w trybie użytkownika mogą wywoływać podprogramy systemowe, które przełączają się w tryb systemowy po sprawdzeniu, czy chroniona usługa jest dozwolona dla konkretnego wywołującego, następuje powrót do trybu użytkownika, gdy powraca podprogram systemowy.
Wybrane programy użytkownika mogą zostać oznaczone jako uruchamiane w trybie systemowym, a nie w trybie użytkownika przez personel z identyfikatorami uprzywilejowanego wpisania się lub personel z uprawnieniami może spowodować uruchomienie programu użytkownika w trybie systemowym za pomocą słowa kluczowego w komendzie $RUN lub $ SET .
Wejście/wyjście niezależne od urządzenia
Wszystkie żądania wejścia/wyjścia, czy to przez sam program MTS, czy przez program działający pod MTS, są wykonywane przy użyciu wspólnego zestawu wywołań podprogramów (GETFD, FREEFD, READ, WRITE, CONTROL, GDINFO, ATTNTRP, ...). Te same podprogramy są używane bez względu na to, jaki program wykonuje operacje we/wy i bez względu na typ używanego pliku lub urządzenia (maszyna do pisania lub terminal graficzny, drukarka wierszowa, dziurkacz kart, plik dyskowy, taśma magnetyczna i papierowa itp.) . Do korzystania z tych podprogramów nie jest wymagana żadna znajomość formatu ani zawartości bloków kontrolnych systemu. Programy mogą wykorzystywać specyficzne cechy konkretnego urządzenia, ale takie programy będą nieco mniej niezależne od urządzenia.
Wejście/wyjście MTS jest zorientowane na zapis lub linię. Programy czytają wiersze z terminala, czytnika kart, pliku dyskowego lub taśmy i zapisują wiersze na terminalu, drukarce, pliku dyskowym lub taśmie. Konwersja do iz ASCII / EBCDIC oraz przetwarzanie końca linii jest zwykle wykonywane przez procesor front-end lub procedurę obsługi urządzenia (DSR), więc nie jest problemem większości programów. Podczas gdy możliwe jest wykonywanie znaków we/wy na terminalu poprzez odczytywanie lub zapisywanie pojedynczych wierszy znaków, odczytywanie lub zapisywanie wielu takich bardzo krótkich wierszy nie jest zbyt wydajne.
Każda odczytana lub zapisana linia składa się z od 0 do 32 767 bajtów danych i powiązanego numeru linii (liczba całkowita ze znakiem przeskalowana o 1000) określająca lokalizację linii. Długość każdej odczytywanej lub zapisywanej linii jest podawana jawnie, więc programy nie muszą samodzielnie przetwarzać znaków końca linii (CR/LF, NL) ani innych terminatorów (null). Niektóre urządzenia obsługują linie o zerowej długości, a inne nie. W przypadku wielu plików i urządzeń numer wiersza jest po prostu sekwencyjną liczbą odczytanych wierszy, podczas gdy niektóre typy plików wyraźnie przypisują określony numer wiersza do każdego wiersza pliku, a w innych przypadkach numer wiersza jest syntetyzowany z danych pojawiających się w początek linii wejściowej lub numer linii może być dołączony do linii wyjściowej.
Nazwy plików lub urządzeń
0 Wejście/wyjście odbywa się bezpośrednio poprzez odwołanie do pliku lub urządzenia przez jego nazwę (nazwa FD) lub pośrednio przez odwołanie do logicznej jednostki I/O ( SCARDS lub IN PUT, SPRINT lub PR INT, SPUNCH lub OBJ ECT, GUSER , SERCOM , do 99 ). Nazwy FD są przypisywane do logicznych jednostek we/wy za pomocą słów kluczowych w języku poleceń lub domyślnie.
Nazwy FD mogą być prostą nazwą pliku, taką jak MYFILE , prostą nazwą urządzenia poprzedzoną znakiem większości, taką jak >T901 , lub pseudonazwą urządzenia, taką jak *PRINT* . Wszystkie nazwy FD są konwertowane na wielkie litery przed ich użyciem, więc podobnie jak w przypadku poleceń MTS, nazwy FD są niezależne od wielkości liter.
Modyfikatory we/wy, zakresy numerów linii i jawne konkatenacje mogą służyć do tworzenia złożonych nazw FD z prostych nazw FD. Na przykład:
FILE1@-TRIM (modyfikator I/O, który zachowuje spacje końcowe) FILE2(1,10) (zakres numerów linii, który odczytuje linie od 1 do 10 włącznie) FILE3+*SOURCE* (jawne łączenie) FILE4(1,10)@-TRIM+ *TAPE*@-TRIM (wszystkie powyższe w jednej złożonej nazwie FD)
Pseudo nazwy urządzeń
Nazwy pseudourządzeń (PDN) zaczynają się i kończą gwiazdką (np. *nazwa*). Typowe pseudourządzenia obejmują:
- *SOURCE* standardowe wejście (zwykle albo terminal albo dla zadań wsadowych, kolejka wejściowa);
- *SINK* (zwykle terminal lub w przypadku zadań wsadowych drukarka);
- *MSOURCE* główne źródło, którego nie można ponownie przypisać, zwykle terminal lub czytnik kart;
- *MSINK* główny zlew, bez możliwości ponownego przypisania, zwykle terminal lub drukarka;
- *BATCH* zbuforowało dane wejściowe do nowego zadania wsadowego;
- *PRINT* zbuforowane wyjście do drukarki, tak samo jak *MSINK* dla zadań wsadowych;
- *PUNCH* buforował dane wyjściowe do dziurkacza karty (aż do wycofania dziurkowania karty); I
- *DUMMY* wszystkie zapisane dane są odrzucane, a wszystkie odczyty zwracają koniec pliku (podobnie jak /dev/null w systemie UNIX); I
- *AFD* aktywny plik lub urządzenie zgodnie z poleceniem $GET .
Polecenia $SOURCE i $SINK mogą być użyte do ponownego przypisania nazw FD przypisanych do *SOURCE* i *SINK* . Polecenie $MOUNT przypisuje pseudourządzenia (np. *T22*, *NET*) urządzeniom takim jak taśmy magnetyczne i papierowe oraz połączenia sieciowe (w tym połączenia z serwerem). Polecenia $CREATE można używać do tworzenia pseudonazw urządzeń do użytku z importem i eksportem BITNET, dla buforowanych zadań drukowania i urządzeń fikcyjnych.
Modyfikatory wejść/wyjść
Modyfikatory wejścia/wyjścia, ewentualnie zanegowane, mogą być powiązane z nazwą FD w celu zmodyfikowania domyślnych zachowań.
Modyfikator wejścia/wyjścia jest określany przez dodanie znaku at, po którym następuje nazwa modyfikatora do nazwy FD. Na przykład *SOURCE*@UC spowoduje, że wiersze odczytane z *SOURCE* zostaną zamienione na wielkie litery przed przedstawieniem ich programowi, a MYFILE@UC@-TRIM spowoduje, że wiersze odczytane z pliku MYFILE zostaną zamienione na wielkie litery, a wszelkie końcowe spacje na końcu wiersza zostaną zachowane. Niektóre powszechnie używane modyfikatory I/O to: @S (sekwencyjny), @I (indeksowany), @FWD (do przodu), @BKWD (do tyłu), @EBCD ( EBCDIC ), @BIN (binarnie), @UC (wielkie litery), @CC (logiczna kontrola karetki), @MCC (sterowanie karetką maszyny), @NOCC (brak kontroli karetki), @TRIM (przycinanie wszystkich pustych treningów poza ostatnim). Niektóre modyfikatory wejścia/wyjścia są przetwarzane przez MTS w sposób niezależny od urządzenia, a inne są zależne od urządzenia i przetwarzane przez procedury obsługi urządzeń (DSR).
Nie wszystkie pliki lub urządzenia obsługują wszystkie modyfikatory wejścia/wyjścia. Różne pliki i urządzenia mają różne domyślne modyfikatory wejścia/wyjścia, a kilka domyślnych modyfikatorów wejścia/wyjścia można zmienić za pomocą polecenia $SET .
Zakresy numerów linii
Do określonych części pliku lub urządzenia można się odwoływać, podając numery linii początkowej i końcowej oraz ewentualnie przyrost numeru linii w nawiasach oddzielonych przecinkami. Numery wierszy i przyrost są liczbami całkowitymi skalowanymi przez 1000 i mogą być dodatnie lub ujemne (± nnnnn . nnn ). Na przykład SIMPLE.F(-35,197,5) otworzy plik SIMPLE.F , zaczynając od pierwszego wiersza o numerze większym lub równym -35 i zwróci „koniec pliku” zamiast numeru pierwszego wiersza większego niż 197,5. Można również uwzględnić przyrosty numerów linii — na przykład: SIMPLE.F(2,200,2) zwróci wszystkie (i tylko) parzyste numery linii od 2 do 200 (włącznie).
Symboliczne numery linii FIRST lub *F , LAST lub *L , MIN i MAX mogą odnosić się odpowiednio do pierwszej, ostatniej, minimalnej możliwej i maksymalnej możliwej linii. Na przykład SIMPLE.F(*F,0) odwołuje się do „ujemnych” wierszy pliku SIMPLE.F . W tym miejscu programiści mogą umieszczać samodokumentację dla pliku (często binarnego), rzeczywiste dane w pliku zaczynałyby się od linii numer 1.
Można również wykonać proste dodawanie i odejmowanie na liniach symbolicznych: FIRST± m , *F± m , LAST± m , *L± m , MIN+ m , MAX- m , gdzie m jest liczbą całkowitą z kropką dziesiętną lub bez niej przeskalowane o 1000 (± nnnnn . nnn ). Aby więc dodać nowe wiersze na końcu istniejącego pliku, można użyć nazwy FD w postaci SIMPLE.F(LAST+1) .
Łączenie plików lub urządzeń
Jawna konkatenacja umożliwia łączenie nazw FD za pomocą znaku plus, jak NAMEA + NAMEB . W tym przypadku MTS w sposób przezroczysty zwraca zawartość NAMEA , po której następuje zawartość NAMEB lub zapisuje do NAMEB po osiągnięciu końca pliku lub innego błędu podczas zapisu do NAMEA .
Niejawna konkatenacja występuje, gdy linia wejściowa zawiera ciąg znaków:
$KONTYNUUJ Z FDname
MTS będzie kontynuować z nazwą FD podaną jako nowe źródło danych. Lub, jeśli linia formularza:
$CONTINUE Z FDname RETURN
zostanie odczytany, MTS zwróci zawartość nowej FDname aż do osiągnięcia i End-of-File, a następnie zwróci następny wiersz oryginalnej FDname (należy zauważyć, że plik, który kontynuuje sam ze sobą, powoduje nieskończoną pętlę, zwykle błąd, ale czasami używany z dobrym skutkiem).
Podczas gdy linia zaczyna się od znaku dolara, $CONTINUE WITH nie jest poleceniem MTS, ale raczej ogranicznikiem.
Modyfikator @IC I/O i polecenie $SET IC={ON | OFF} może służyć do kontrolowania niejawnej konkatenacji.
wiersze $ENDFILE
Jeśli wiersz zawiera łańcuch $ENDFILE , MTS zwraca „miękki” koniec pliku.
Podczas gdy linia zaczyna się od znaku dolara, $ENDFILE nie jest poleceniem MTS, ale raczej ogranicznikiem.
Modyfikator we/wy @ENDFILE i polecenie $SET ENDFILE={ALWAYS | ŹRÓDŁO | NEVER} może służyć do kontrolowania przetwarzania $ENDFILE .
Linie CONTROL o wartości 9700 USD i 9700 USD
Wiersze zaczynające się od łańcuchów „ $9700 ” lub „ $9700CONTROL ” można kopiować lub zapisywać do *PRINT* w celu sterowania opcjami drukowania na drukarce stronicowej Xerox 9700 . Linie o wartości 9700 USD zaczynają obowiązywać w momencie ich wystąpienia, a linie o wartości 9700 USD CONTROL odnoszą się do całego zadania drukowania, w którym się pojawiają. Chociaż te linie mają formę podobną do poleceń MTS, tak naprawdę są poleceniami urządzenia, a nie prawdziwymi poleceniami MTS.
Akta
Pliki MTS są przechowywane jako „strony” o wielkości 4096 bajtów na jednym lub większej liczbie publicznych lub prywatnych woluminów dyskowych. Woluminy mają etykiety woluminów, numery woluminów i nazwy woluminów (zwykle MTS001, MTS002, ..., MTSnnn). Woluminy dyskowe są przechowywane na tradycyjnych dyskach z zapisem cylindrów i dyskach o architekturze stałych bloków (FBA) lub jednorazowo na komórce danych IBM 2321 .
Pojedyncze pliki nie obejmują woluminów dyskowych. Maksymalny rozmiar pliku jest ograniczony do wolnego miejsca dostępnego na woluminie dysku, na którym się on znajduje. Domyślnie pliki są tworzone w rozmiarze jednej strony, ale można określić zarówno większy rozmiar, jak i maksymalny rozmiar ( $CREATE nazwa SIZE= n P MAXSIZE= n P ). Pliki będą automatycznie powiększane do momentu osiągnięcia maksymalnego rozmiaru lub przekroczenia limitu miejsca na dysku dla identyfikatora wpisania się właściciela. Użytkownicy mogą zażądać utworzenia pliku na określonym woluminie dysku ( $CREATE nazwa VOLUME= nazwa ).
Pliki MTS należą do jednej z trzech kategorii: pliki publiczne , pliki użytkownika i pliki tymczasowe :
- Pliki publiczne to pliki, których nazwy zaczynają się, ale nie kończą, gwiazdką (np. *LIBRARY , *USERDIRECTORY ). Pliki publiczne, często nazywane „plikami gwiaździstymi”, to publicznie dostępne pliki zawierające programy i dane powszechnie dostępne dla wszystkich użytkowników. Na przykład *LIBRARY to biblioteka często używanych podprogramów systemowych. W najwcześniejszych dniach MTS pliki publiczne były jedynymi plikami, które można było udostępniać, a następnie tylko jako pliki tylko do odczytu. Później pliki publiczne można było zezwalać i udostępniać w taki sam sposób, jak inne pliki.
- Pliki użytkownika to pliki, których nazwy nie zaczynają się od gwiazdki ani znaku minus. Muszą być jawnie utworzone ( $CREATE ) i zniszczone ( $DESTROY ). Są one własnością użytkownika, który je utworzył, i początkowo mają do niego pozwolenie, ale mogą być dozwolone do używania przez inne identyfikatory użytkownika za pomocą $PERMIT . Aby odwołać się do pliku należącego do innego użytkownika, nazwa pliku jest poprzedzona identyfikatorem użytkownika właściciela, po którym następuje dwukropek (np. W163:MYPROGRAM ). Za ilość używanego miejsca na dysku pobierane są opłaty, a większość identyfikatorów logowania ma limit maksymalnego miejsca na dysku.
- Pliki tymczasowe to pliki, których nazwy zaczynają się od znaku minus (np. -TEMP ). Ich nazwy są unikalne w ramach jednej sesji. Są tworzone niejawnie przy pierwszym użyciu, nie są naliczane opłaty, nie są wliczane do limitu miejsca na dysku identyfikatora wpisania się i są automatycznie niszczone po zakończeniu sesji terminala lub wsadu.
MTS nie implementuje katalogów , ale de facto istnieje dwupoziomowe grupowanie plików dzięki umieszczeniu w nazwie pliku czteroznakowego identyfikatora użytkownika MTS jego właściciela.
Nazwy plików, podobnie jak wszystkie nazwy FD, są przed użyciem konwertowane na wielkie litery, więc wielkość liter nie jest rozróżniana.
Typy plików
MTS obsługuje trzy typy plików, pliki liniowe, pliki sekwencyjne i pliki sekwencyjne z numerami linii, ale pliki liniowe były zdecydowanie najczęstsze:
Pliki liniowe
Pliki wierszowe ( $CREATE nazwa lub $CREATE nazwa TYPE=LINE ) to pliki zorientowane liniowo, które są indeksowane (i dostępne losowo) według numeru wiersza. Dozwolone numery linii to ± 2147483,647 - zasadniczo liczba całkowita ze znakiem podzielona przez 1000, ale odwołania do wiersza poleceń były ograniczone do ± 99999,999. Regularne zapisy do pliku zwiększają numer linii o 1. Linie mają zmienną długość, a linię można przepisać na dowolną długość między 1 a limitem długości linii (pierwotnie 256, ale później zmieniono na 32767) bez wpływu na otaczające linie. Przepisanie istniejącej linii na długość zerową powoduje usunięcie tej linii bez wpływu na linie otaczające.
Domyślnie numer pierwszego wiersza zapisywanego do pustego pliku to 1 i jest zwiększany o 1 przy każdym kolejnym zapisie. Domyślnie czytanie pliku rozpoczyna się od numeru pierwszego wiersza równego lub wyższego od 1 i kontynuuje czytanie kolejnych wierszy w kolejności rosnącej liczby wierszy. Oznacza to, że ujemne numery linii są „niewidocznymi” częściami pliku, które wymagają określonych odniesień do odczytania.
Istnieją polecenia (i podprogramy systemowe) służące do zmiany numeracji linii. Ciągły zestaw wierszy można przenumerować na dowolną kombinację początku i przyrostu, o ile wiersze pliku nie zostaną ponownie ponumerowane. Na przykład, jeśli plik składa się z wierszy 10, 20, 30, 40 i 50, wiersze 30–40 można zmienić na 35,36, ale nie na 135,136, ponieważ zmieniłoby to kolejność wierszy.
Indeks wierszy i dane są przechowywane na oddzielnych stronach dysku, z wyjątkiem najmniejszych (jednostronicowych) plików, w których indeks wierszy i dane są przechowywane razem.
Polecenie $CREATE domyślnie tworzy pliki wierszy.
Efektem ubocznym systemu plików opartego na wierszach jest to, że programy mogą stopniowo odczytywać i zapisywać poszczególne wiersze. Jeśli ktoś edytuje plik (zwykle plik tekstowy) za pomocą edytora plików MTS ( $EDIT ), wszelkie zmiany wprowadzone w liniach są zapisywane natychmiast, podobnie jak wstawienia i usunięcia określonych linii. To znacznie różni się od większości systemów plików (zorientowanych na bajty), w których plik jest zwykle wczytywany i zmieniany w pamięci, a następnie masowo zapisywany na dysku.
Z powodu problemów ze sprzętem lub oprogramowaniem pliki wierszy mogą ulec uszkodzeniu. Program *VALIDATEFILE sprawdza strukturę plików liniowych.
Pliki sekwencyjne
Pliki sekwencyjne ( $CREATE nazwa TYPE=SEQ ) są plikami zorientowanymi liniowo z pierwszym numerem wiersza domyślnie równym 1 i zwiększanym o 1 dla każdego wiersza. Raz zapisanej długości linii (innej niż ostatnia linia pliku) nie można zmienić, chociaż każdą linię można zastąpić linią o tej samej długości. Pliki sekwencyjne są generalnie czytelne tylko sekwencyjnie od początku do końca lub zapisywane przez dołączanie do końca. Można jednak zażądać odniesienia do bieżącej linii pliku sekwencyjnego i użyć tego odniesienia, aby ponownie przejść do tej określonej lokalizacji.
Pliki sekwencyjne są nieco bardziej wydajne pod względem miejsca niż pliki liniowe i mogą być również bardziej wydajne pod względem czasu procesora w porównaniu z dużymi zdezorganizowanymi plikami liniowymi. Ale głównym powodem istnienia plików SEQ jest to, że obsługiwały one długie linie (do 32 767 znaków) przed plikami liniowymi. Pliki sekwencyjne były mniej powszechne, gdy pliki liniowe mogły obsługiwać długie wiersze. Pliki sekwencyjne służą również do wymuszenia dopisywania nowych linii na końcu pliku bez konieczności podawania zakresu numerów linii (LAST+1).
Sekwencyjne z plikami numerów linii
Pliki sekwencyjne z numerem wiersza ( $CREATE nazwa TYPE=SEQWL ) są podobne do plików sekwencyjnych, z wyjątkiem tego, że ich numery wierszy zostały jawnie zapisane. Mają wszystkie ograniczenia plików sekwencyjnych, z wyjątkiem tego, że numer wiersza można podać podczas zapisywania do pliku (o ile jest większy niż numer ostatniego wiersza zapisanego w pliku). W przeciwieństwie do plików liniowych, pierwszy odczyt pliku SEQWL zwraca pierwszy wiersz pliku, nawet jeśli był ujemny.
Pliki SEQWL były rzadko używane i nie były oficjalnie obsługiwane lub zostały usunięte z dokumentacji przez niektóre witryny MTS. Ponieważ pliki liniowe nie działały dobrze z komórką danych, pliki SEQWL zostały zaimplementowane jako sposób na użycie komórki danych do długoterminowego, tańszego przechowywania plików przy jednoczesnym zachowaniu numerów linii.
Z biegiem czasu udostępnianie plików między użytkownikami MTS ewoluowało w czterech etapach.
Etap pierwszy pozwalał na ograniczone udostępnianie plików, gdzie pliki publiczne lub biblioteczne (pliki, których nazwy zaczynają się od gwiazdki) były czytelne dla wszystkich użytkowników, a dostęp do wszystkich innych plików (plików użytkownika) mieli tylko ich właściciele. Pliki publiczne były własnością pracowników Computing Center i były przez nich utrzymywane, więc na tym etapie udostępniano tylko pliki Computing Center.
Etap drugi pozwolił na ograniczone udostępnianie plików, w którym program *PERMIT mógłby być użyty do (i) uczynienia pliku tylko do odczytu (RO) dla właściciela pliku i wszystkich innych użytkowników MTS, (ii) udostępnienia pliku do kopiowania przez członków tego samego projektu co właściciel pliku za pomocą programu *COPY, lub (iii) udostępnić plik do kopiowania wszystkim innym użytkownikom za pomocą programu *COPY. Jeśli chodzi o etap pierwszy, właściciele domyślnie mieli nieograniczony dostęp do własnych plików, a pliki nie były dostępne dla innych użytkowników.
Etap trzeci dozwolony dla „naprawdę udostępnionych plików”, w których polecenie $ PERMIT lub podprogram PERMIT mogą być używane do udostępniania pliku na różne sposoby z listami innych użytkowników, projektów, wszystkich innych użytkowników lub ich kombinacji. Typy dostępu, które mogą być dozwolone, to odczyt, zapis-rozszerzenie, zapis-zmiana lub pusty, renumeracja lub obcięcie, zniszczenie i zezwolenie. Jeśli chodzi o etapy pierwszy i drugi, domyślnie plik użytkownika jest dozwolony z nieograniczonym dostępem dla jego właściciela i bez dostępu dla innych. Dostęp właściciela pliku można również zmienić, chociaż właściciel zawsze zachowuje zezwolenie na dostęp. Polecenie $FILESTATUS lub podprogramy FILEINFO i GFINFO mogą być użyte do uzyskania statusu pozwolenia dla pliku.
Etap czwarty dodał klucze programowe (PKeys) do listy rzeczy, do których plik może być dozwolony. W ten sposób pliki mogą być dozwolone dla użytkowników, projektów, wszystkich innych użytkowników, kluczy programów lub ich kombinacji. Klucze programów były powiązane z poleceniami i plikami MTS, co pozwalało zezwalać plikom na określone programy lub określone polecenia MTS. Pozwoliło to między innymi na tworzenie programów tylko do wykonywania lub tylko do uruchamiania w MTS.
Pliki mogą być również dozwolone w początkowym podciągu identyfikatora użytkownika, identyfikatora projektu lub klucza programu. W rezultacie może się zdarzyć, że pojedynczy identyfikator użytkownika, identyfikator projektu i klucz programu mogą potencjalnie mieć więcej niż jeden typ dostępu. W takich przypadkach rzeczywisty dostęp jest rozstrzygany zgodnie z następującymi zasadami: (i) identyfikatory użytkowników, samodzielnie lub w połączeniu z kluczami programu, mają pierwszeństwo przed identyfikatorami projektów i kluczami programów, ii) identyfikatory projektów, samodzielnie lub w połączeniu z kluczami programów, mają pierwszeństwo nad kluczami programów, (iii) dłuższe dopasowania podłańcuchów mają pierwszeństwo przed krótszymi dopasowaniami podciągów oraz (iv) jeśli nie ma określonego identyfikatora użytkownika, identyfikatora projektu lub dopasowania klucza programu, używany jest dostęp określony dla „innych”.
Podprogramu PKEY można użyć do skrócenia klucza programu aktualnie uruchomionego programu lub przełączenia klucza programu aktualnie uruchomionego programu na *EXEC i późniejszego przywrócenia klucza programu, umożliwiając programowi dobrowolne ograniczenie dostępu do plików na mocy swojego klucza programowego.
Blokowanie plików
W ramach „naprawdę współdzielonych plików” (etap trzeci powyżej) wprowadzono blokowanie plików w celu kontrolowania równoczesnego dostępu do współdzielonych plików między aktywnymi sesjami MTS (czyli między oddzielnymi uruchomionymi zadaniami lub procesami). Blokowanie plików nie ogranicza ani nie blokuje dostępu do plików w ramach pojedynczej sesji MTS (między podsystemami języka poleceń lub programami użytkownika działającymi w ramach tej samej sesji MTS). Blokowanie plików w MTS jest raczej obowiązkowe niż zalecane. Pliki są blokowane niejawnie przy pierwszym użyciu określonego typu dostępu lub jawnie za pomocą polecenia $LOCK lub podprogramu LOCK. Pliki są odblokowywane niejawnie, gdy ostatnie użycie pliku w zadaniu jest zamykane lub jawnie za pomocą polecenia $UNLOCK lub podprogramu UNLK. Polecenia $LOCKSTATUS lub podprogramów LSFILE i LSTASK można użyć do uzyskania bieżącego stanu blokady pliku lub zadania.
Plik może być „otwarty”, „nieotwarty” lub „oczekujący na otwarcie” i „niezablokowany”, „zablokowany do odczytu”, „zablokowany do modyfikacji”, „zablokowany do zniszczenia”, „oczekujący na odczyt”, „ czeka na modyfikację” lub „czeka na zniszczenie”. Stan otwarcia pliku jest niezależny od jego stanu blokady. Zablokowanie pliku do modyfikacji blokuje również plik do odczytu, a zablokowanie pliku do zniszczenia również blokuje plik do modyfikacji i odczytu. Dowolna liczba zadań może mieć plik zablokowany do odczytu w dowolnym momencie, ale tylko jedno zadanie może mieć plik zablokowany do modyfikacji w danym momencie i tylko wtedy, gdy żadne zadanie nie ma zablokowanego pliku do odczytu ani do zniszczenia. Tylko jedno zadanie może mieć plik zablokowany do zniszczenia w danym momencie i tylko wtedy, gdy żadne zadanie nie ma pliku otwartego, zablokowanego do odczytu lub zablokowanego do modyfikacji.
Gdy próba zablokowania pliku nie może zostać zaspokojona, zadanie wywołujące będzie czekać w nieskończoność lub przez określony czas na odblokowanie pliku przez inne zadanie lub do otrzymania przerwania uwagi. Jeśli plik nie może zostać zablokowany, zwracany jest błąd wskazujący na to. Oprogramowanie do blokowania plików wykrywa zakleszczenia między zadaniami za pomocą algorytmu Warshala i zwraca wskazanie błędu bez blokowania pliku i bez czekania.
Zablokowanie pliku jest w efekcie zablokowaniem nazwy tego pliku. Na przykład następującą sekwencję poleceń można wykonać, pozostawiając PLIK1 zablokowany, mimo że plik o nazwie PLIK1 nie zawsze istnieje:
$lock PLIK1 ZMIEŃ NAZWĘ $zmień nazwę PLIKU1 na PLIK2 $utwórz PLIK1
W późniejszym czasie ta możliwość blokowania nazw pozwoliła na użycie procedur blokowania „plików” do implementacji blokowania na poziomie rekordów między zadaniami uzyskującymi dostęp do centralnie zarządzanego pliku * MESSAGES, który był używany przez system MTS $ Message do przechowywania skrzynek pocztowych i wiadomości dla poszczególnych użytkowników.
Dodanie blokowania plików umożliwiło usunięcie ograniczenia, zgodnie z którym jeden identyfikator użytkownika mógł być wpisany tylko raz. Zamiast tego liczba jednoczesnych logowań była kontrolowana przez maksimum, które mogło być ustawione w ewidencji księgowej użytkownika przez kierownika projektu lub biuro firmy w placówce.
Zapisywanie i przywracanie plików
Kopie zapasowe plików są regularnie zapisywane na taśmie, chyba że zostały oznaczone jako NOSAVE . Proces zapisywania plików obejmuje pełne i częściowe kopie zapasowe. Pełne zapisy są zwykle wykonywane raz w tygodniu, gdy żaden użytkownik nie jest zalogowany do systemu. Częściowe składowanie zapisuje tylko te pliki, które uległy zmianie od ostatniego pełnego lub częściowego składowania i jest zwykle wykonywane raz dziennie późnym wieczorem lub wczesnym rankiem podczas normalnej pracy z użytkownikami zalogowanymi do systemu.
Na Uniwersytecie Michigan wykonano dwie kopie pełnych zapisanych taśm, a jedną kopię przechowywano „poza terenem”. Taśmy zapisu były przechowywane przez sześć tygodni, a następnie ponownie wykorzystane. Taśmy z co szóstego pełnego zapisu były przechowywane „na zawsze”.
Pliki są zapisywane, aby umożliwić odzyskiwanie po „awariach dysku”, w których system plików ulega uszkodzeniu lub uszkodzeniu, zwykle z powodu awarii sprzętu. Ale użytkownicy mogą również przywracać pojedyncze pliki za pomocą programu *RESTORE .
Obsługa terminali
W szczytowym momencie MTS na Uniwersytecie Michigan obsługiwał jednocześnie ponad 600 sesji terminalowych, a także kilka zadań wsadowych.
Terminale są podłączone do MTS za pośrednictwem modemów telefonicznych, dzierżawionych lub dedykowanych obwodów danych oraz połączeń sieciowych. Michigan Communications Protocol (MCP), prosty protokół ramkowania do użytku z połączeniami asynchronicznymi , który zapewnia wykrywanie błędów i retransmisję, został opracowany w celu poprawy niezawodności połączeń terminala z MTS i komputera z MTS.
bardzo szeroka gama terminali , w tym 10 znaków na sekundę (cps) Teletype Model 33 , 30 znaków na sekundę LA-36 i 120 znaków na sekundę LA-120 DECWriter, 14 znaków na sekundę IBM 2741 , a przy stale rosnących prędkościach do 56 000 bitów na sekundę, wyświetlacz VT100 , wyświetlacz Visual 550, wyświetlacze Ontel OP-1 i OP-1/R, wyświetlacze graficzne z serii Tektronix 4000 oraz komputery osobiste firmy Apple (AMIE dla Apple ][), IBM (PCTie dla DOS) i innych z emulacją terminala programy, w tym niektóre opracowane specjalnie do użytku z MTS. Obsługiwana jest również większość terminali zgodnych z dowolnym z tych modeli.
MTS obsługuje również dostęp z 10- lub 12-przyciskowych telefonów z wybieraniem tonowym za pośrednictwem jednostki IBM 7772 Audio Response Unit, a później Votrax Audio Response Unit, konsol IBM 1052 , wyświetlaczy konsoli IBM 3066 i rodziny IBM 3270 podłączonych lokalnie wyświetlaczy (IBM 3272 i 3274 jednostek sterujących, ale nie zdalnych wyświetlaczy 3270).
Procesory komunikacyjne front-end
MTS może i używa kontrolerów komunikacyjnych, takich jak IBM 2703 i Memorex 1270 , do obsługi terminali wdzwanianych i zdalnych stacji wsadowych przez wdzwaniane i dedykowane obwody danych, ale te kontrolery okazały się dość nieelastyczne i niezadowalające w przypadku łączenia dużej liczby różne terminale, a później komputery osobiste z oprogramowaniem do emulacji terminala przy coraz wyższych szybkościach transmisji danych. Większość witryn MTS decyduje się na zbudowanie własnych procesorów front-end lub użycie procesora front-end opracowanego przez jedną z innych witryn MTS w celu zapewnienia obsługi terminali.
Te procesory front-end, zwykle oparte na DEC PDP-8 , PDP-11 lub LSI-11 z lokalnie opracowanym niestandardowym sprzętem i oprogramowaniem, działałyby jako jednostki sterujące IBM podłączone do kanałów wejścia/wyjścia IBM z jednej strony, a do modemów i linii telefonicznych z drugiej. Na Uniwersytecie Michigan procesor front-end był znany jako Data Concentrator (DC). DC został opracowany w ramach projektu CONCOMP przez Dave'a Millsa i innych i był pierwszym urządzeniem innym niż IBM opracowanym do podłączenia do kanału IBM I / O. Początkowo system oparty na PDP-8, DC został zaktualizowany do używania sprzętu PDP-11 i opracowano zdalny koncentrator danych (RDC), który wykorzystywał sprzęt LSI-11, który łączył się z powrotem do DC przez synchroniczny obwód danych. University of British Columbia (UBC) opracował dwa systemy oparte na PDP-11: Host Interface Machine (HIM) i Network Interface Machine (NIM). University of Alberta używał procesora front-end opartego na PDP-11.
Te systemy front-end obsługują własny język poleceń „polecenia urządzenia”, zwykle wiersze poprzedzone znakiem specjalnym, takim jak znak procentu (%), aby umożliwić użytkownikowi konfigurowanie i kontrolowanie połączeń. Polecenie $CONTROL i programy uruchomione na MTS mogą używać podprogramu CONTROL do wydawania poleceń urządzenia do przednich i sieciowych jednostek sterujących.
Wsparcie sieciowe
Z biegiem czasu niektóre interfejsy ewoluowały, aby zapewnić prawdziwą obsługę sieci, a nie tylko obsługę połączeń z MTS.
Merit Network prowadziła równolegle prace rozwojowe mające na celu rozwój obsługi sieci. Węzły Merit były oparte na PDP-11 i wykorzystywały niestandardowy sprzęt i oprogramowanie do zapewniania interaktywnych połączeń między hostami między systemami MTS oraz między MTS a CDC System SCOPE/HUSTLER na Michigan State University (MSU). Węzły Merit były znane jako komputery komunikacyjne (CC) i działały jako jednostki sterujące IBM z jednej strony, zapewniając jednocześnie łącza do innych CC po drugiej stronie. Początkowe interaktywne połączenia między hostami zostały nieco później uzupełnione połączeniami terminal z hostem (TL), a jeszcze później połączeniami wsadowymi między hostami, które umożliwiały wykonywanie zdalnych zadań przesyłanych z jednego systemu (EX) na innym z drukowaniem (PR ) i wyjście karty perforowanej (PU) zwrócone do systemu przesyłającego lub do innego hosta w sieci. Zdalne zadania wsadowe można przesyłać z prawdziwego czytnika kart lub za pośrednictwem *BATCH* za pomocą „karty” #NET z przodu zadania.
Firma Merit zmieniła nazwę swoich komputerów komunikacyjnych na podstawowe procesory komunikacyjne (PCP) i stworzyła drugorzędne procesory komunikacyjne (SCP) oparte na LSI-11. PCP stanowiły rdzeń sieci i były połączone ze sobą przez Ethernet i dedykowane synchroniczne obwody danych. SCP zostały dołączone do PCP przez synchroniczne obwody danych. PCP i SCP ostatecznie zawierałyby Ethernet i obsługiwały przyłącza sieci lokalnej (LAN). PCP służyłyby również jako bramy do sieci komercyjnych, takich jak Telenet firmy GTE (później SprintNet), Tymnet oraz Autonet firmy ADP , zapewniając krajowy i międzynarodowy dostęp sieciowy do MTS. Jeszcze później PCP zapewniały usługi bramowe do TCP/IP , które stały się dzisiejszym Internetem .
Merit PCP i SCP ostatecznie zastąpiły koncentratory danych i zdalne koncentratory danych na Uniwersytecie Michigan. W szczytowym okresie zainstalowano ponad 300 komputerów Merit PCP i SCP obsługujących ponad 10 000 portów terminali.
Środowiska wirtualne
UMMPS zapewnia udogodnienia umożliwiające tworzenie środowisk wirtualnych, maszyn wirtualnych lub wirtualnych systemów operacyjnych. Oba są zaimplementowane jako programy użytkownika działające pod MTS.
Wstępne prace nad pierwszą maszyną wirtualną MTS wykonano na Uniwersytecie Michigan w celu symulacji IBM S/360-67 i umożliwienia debugowania UMMPS i MTS. Później Uniwersytet Kolumbii Brytyjskiej wykonał wstępne prace nad stworzeniem maszyny wirtualnej S/370 MTS. Teoretycznie te maszyny wirtualne mogłyby być używane do uruchamiania dowolnego systemu S/360 lub S/370, ale w praktyce maszyny wirtualne były używane tylko do debugowania MTS, więc mogą istnieć subtelne funkcje, które nie są używane przez MTS, które nie są całkowicie lub poprawnie zrealizowane. Maszyna wirtualna MTS nigdy nie została zaktualizowana do obsługi architektury S/370-XA (zamiast tego do debugowania MTS i IBM użyto innych narzędzi, takich jak SWAT i PEEK VM/XA lub VM/ESA zostały użyte do debugowania UMMPS).
We wczesnych latach siedemdziesiątych na Wayne State University prowadzono prace nad uruchomieniem wersji OS / MVT na zmodyfikowanej maszynie wirtualnej (VOS) w ramach MTS jako usługi produkcyjnej.
Wirtualne maszyny „studenckie” w MTS zostały również stworzone jako narzędzia dydaktyczne. Tutaj system operacyjny działający na maszynie wirtualnej (napisany przez studenta) używa symulowanych urządzeń i nie ma żadnego połączenia z „prawdziwym” światem zewnętrznym (może z wyjątkiem konsoli).
Oprócz maszyn wirtualnych MTS udostępnia dwa programy, które implementują wirtualne środowiska systemu operacyjnego. *FAKEOS , opracowany na Uniwersytecie Michigan, umożliwia uruchamianie programów z OS/360 jako programów użytkownika w MTS. *VSS , opracowany na Uniwersytecie Kolumbii Brytyjskiej, umożliwia uruchamianie programów z OS/VS1 i MVS/370 jako programów użytkownika w MTS. Żaden program w rzeczywistości nie obsługuje systemu operacyjnego IBM, zamiast tego symulują wystarczająco dużo środowiska operacyjnego, aby umożliwić uruchamianie poszczególnych programów opracowanych dla tych systemów operacyjnych. Oba programy można uruchomić bezpośrednio, ale często są one uruchamiane z plików sterownika, co daje użytkownikowi wrażenie, że uruchamia zwykły program użytkownika MTS.
Poczta elektroniczna
Co najmniej trzy różne implementacje poczty e-mail były dostępne w ramach MTS w różnym czasie:
- *MAIL od NUMAC, ale nie jest dostępny we wszystkich witrynach MTS;
- CONFER , komputerowy system konferencyjny napisany przez Roberta Parnesa z UM; I
- $ MESSAGESYSTEM z Centrum Komputerowego Uniwersytetu Michigan.
CONFER i *MAIL wysyłały i odbierały pocztę tylko do i od „lokalnych” użytkowników.
Dostępny dla użytkowników w lipcu 1981 r., $ MESSAGESYSTEM jest ostatnim z trzech wdrożonych systemów i stał się najczęściej używanym. W latach 1981-1993 był używany do wysyłania i odbierania ponad 18 milionów wiadomości na Uniwersytecie Michigan. Może wysłać:
- lokalne i sieciowe wiadomości e-mail,
- wysyłki (natychmiastowe komunikaty wyświetlane na terminalu innego użytkownika, chyba że wysyłki zostały zablokowane przez innego użytkownika),
- biuletyny (wiadomości wysyłane przez operatora systemu do poszczególnych użytkowników dostarczane automatycznie na początku sesji MTS), oraz
- komunikaty logowania (wiadomości wysyłane przez operatora systemu do wszystkich użytkowników dostarczane automatycznie przed rozpoczęciem sesji MTS).
Niektóre godne uwagi funkcje $ MESSAGESYSTEM obejmują możliwość:
- wysyłać do osób według identyfikatora logowania lub nazwy, do grup osób według identyfikatora logowania, identyfikatora projektu lub nazwy grupy lub do operatora systemu;
- wysłać do listy zapisanej w pliku;
- używać programu *USERDIRECTORY do tworzenia i utrzymywania bazy danych nazw e-mail dla osób i grup, w tym nazw i grup obejmujących użytkowników zdalnych lub sieciowych;
- przywoływać/usuwać wiadomości, które nie zostały jeszcze przeczytane;
- dodawać lub usuwać odbiorców wiadomości po ich wysłaniu;
- wyświetlać historię wiadomości w łańcuchu e-mail bez konieczności umieszczania w każdej nowej wiadomości tekstu ze starszych wiadomości;
- ustawić daty i godziny wygaśnięcia oraz wstrzymania wiadomości e-mail;
- wyświetlać stan wiadomości przychodzących i wychodzących;
- do pobierania wiadomości przychodzących i wychodzących przy użyciu modelu bazy danych (przychodzące, wychodzące, nowe, stare/widziane, do odbiorców , od odbiorców , numer wiadomości, data wysłania, data wygaśnięcia, ...);
- zezwolić skrzynce pocztowej na używanie identyfikatorów logowania innych niż właściciel skrzynki pocztowej;
- automatyczne przekazywanie wiadomości z jednej skrzynki pocztowej do drugiej;
- archiwizować starsze wiadomości i
- wysyłać i odbierać wiadomości za pomocą interfejsu podprogramu oprócz poleceń.
Aplikacja dla Apple Macintosh, InfoX (alias MacHost), została opracowana w celu zapewnienia nowoczesnego interfejsu do MTS Message System i *USERDIRECTORY .
W 1984 MTS mógł być używany do zdalnego wysyłania i odbierania e-maili do iz ponad 300 miejsc na całym świecie.
Pierwsza możliwość wysyłania i odbierania wiadomości e-mail do i od użytkowników w systemach zdalnych (zdalne wiadomości lub poczta sieciowa) została wdrożona w 1982 roku w ramach projektu MAILNET, wspólnego wysiłku 16 uniwersytetów i EDUCOM (później EDUCAUSE) wspieranego przez fundusze z Carnegie Corporation . MIT służył jako centrum przekaźnikowe między witrynami MAILNET oraz jako brama do CSNET , ARPANET i BITNET . MTS na University of Michigan wykorzystał swoje połączenia z Merit Network i poprzez Merit do GTE komercyjna sieć X.25 , Telenet (później SprintNet), do komunikacji z MIT. MTS na Uniwersytecie Michigan służył jako miejsce przekaźnikowe dla innych miejsc na kampusie UM oraz dla innych miejsc MTS, które nie miały bezpośredniego dostępu do przekaźnika MAILNET w MIT.
Zdalne adresy e-mail użytkownika MTS z University of Michigan to:
- nazwa @UMich-MTS.Mailnet (z witryn MAILNET i BITNET)
- nazwa %[email protected] (z witryn CSNET i ARPANET)
- nazwa @UM (z innych witryn UM lub MTS)
Aby wysłać e-mail na odległą stronę, użytkownicy MTS z University of Michigan używali adresów w postaci:
- imię @CARNEGIE (do Carnegie-Mellon University na stronie MAILNET)
- nazwa @CARNEGIE.MAILNET (bardziej oficjalna, ale dłuższa nazwa CMU)
- nazwa @WSU (do Wayne State University na stronie MTS)
- nazwa @Wayne-MTS.Mailnet (bardziej oficjalna, ale dłuższa nazwa WSU)
- nazwa %[email protected] (do Brown University i witryny CSNET Phonenet)
- nazwa @cornell.ARPA (do Cornell University strona CSNET lub ARPANET)
- nazwa @STANFORD.BITNET (do Uniwersytetu Stanforda na stronie BITNET)
Z biegiem czasu, gdy coraz więcej komputerów miało bezpośrednie połączenie z Internetem, metoda przekaźnika MAILNET została zastąpiona przez bardziej bezpośrednie i niezawodne dostarczanie poczty e-mail typu peer-to-peer oraz adresy e-mail w stylu domeny internetowej, które są obecnie używane (nazwa @um . cc.umich.edu).
InfoX
InfoX (wymawiane „info-ex”, pierwotnie InfoDisk) to program dla Apple Macintosh opracowany przez Wydział Technologii Informatycznych na Uniwersytecie Michigan. Zapewnia nowoczesny interfejs użytkownika (menu, ikony, okna i przyciski), za pomocą którego można sprawdzać pocztę elektroniczną MTS, uczestniczyć w CONFER II , uzyskiwać dostęp do katalogu użytkowników MTS oraz tworzyć, edytować i manipulować plikami. InfoX dodaje funkcje przetwarzania tekstu w stylu komputerów Macintosh do bardziej tradycyjnych funkcji edycyjnych dostępnych z interfejsów wiersza poleceń MTS, $Message, $Edit i CONFER. Można użyć standardowych poleceń Wytnij, Kopiuj i Wklej w menu Edycja Macintosh, aby przenieść tekst z dowolnego pliku Macintosh.
Księgowość i opłaty
Każdy identyfikator wpisania się ma przydzielone limity zasobów (pieniądze, miejsce na dysku, czas połączenia, ...), które kontrolują ilość i rodzaje pracy, które mogą być wykonane przez identyfikator. Identyfikatory mogą być ograniczone do korzystania tylko z sesji terminala lub tylko zadań wsadowych lub ograniczone do pracy w porach dnia lub dniach tygodnia, w których naliczane stawki są niższe. Każdy identyfikator wpisania się ma przypisaną datę wygaśnięcia.
Zasoby, za które można pobierać opłaty, obejmują:
- Czas procesora — naliczany w sekundach czasu procesora
- Zużycie pamięci — naliczane jako integralna jednostka CPU-VM… np. 40 stron pamięci wirtualnej używanej przez 10 sekund jest rozliczane jako 400 strono-sekund
- Zużycie drukarki — naliczane jako strony papieru i wiersze wydruku (w przypadku drukarek wierszowych) lub strony i arkusze (w przypadku drukarek stronicowych)
- Wykorzystane miejsce na dysku — naliczane w stronach-miesiącach (jedna strona = 4096 bajtów)
- Czas połączenia terminala lub sieci w ciągu kilku minut
- Karty czytane i dziurkowane - ładowane przez kartę
- Taśma papierowa dziurkowana- ładowana przez stopkę
- Zamontowane taśmy i czas użycia napędu taśmowego są naliczane według liczby zamontowanych taśm i minut użytkowania
- Dopłaty do produktów programowych (naliczane dla poszczególnych programów w przypadku niektórych licencjonowanych produktów programowych)
- Inne zasoby (np. plotery, fotoskładarki itp.)
Należy pamiętać, że chociaż jest naliczana opłata za używaną pamięć wirtualną, nie ma opłat za używaną pamięć rzeczywistą. Należy również zauważyć, że nie ma zmian w operacjach przywoływania, chociaż są one uwzględniane w informacjach podsumowujących sesję, które są zgłaszane przy wylogowywaniu.
Różne stawki mogą być zmieniane dla różnych klas projektów (wewnętrznych, zewnętrznych, komercyjnych, ...) oraz dla różnych pór dnia lub dni tygodnia. W zależności od zasad i praktyk w różnych witrynach, opłaty mogą dotyczyć „prawdziwych pieniędzy” lub „miękkich pieniędzy” (pieniądze miękkie są czasami nazywane „śmiesznymi pieniędzmi”, chociaż to, jak zabawne są zwykle, zależy od tego, kto płaci, a kto nie rachunki).
Użytkownicy mogą wyświetlić koszt sesji za pomocą polecenia $DISPLAY COST , mogą wyświetlić salda swoich kont za pomocą polecenia $ACCOUNTING , a koszty sesji i pozostałe saldo konta są wyświetlane po zakończeniu zadania lub sesji. Istnieje również opcja ( $SET COST=ON ), która spowoduje wyświetlenie inkrementalnego i skumulowanego kosztu sesji po wykonaniu każdego polecenia MTS.
Aby uniemożliwić użytkownikowi przekroczenie stanu konta, limit środków jest sprawdzany, gdy użytkownik próbuje się zalogować. Jeśli saldo konta jest zerowe lub ujemne, logowanie jest niedozwolone. W przypadku zadań wsadowych, jeśli saldo konta nie jest wystarczające do pokrycia opłat szacowanych dla zadania, zadanie nie jest uruchamiane. W przypadku sesji terminalowych, gdy saldo konta spadnie poniżej jednego dolara, drukowane jest ostrzeżenie „Skończyły Ci się pieniądze”, po którym następuje bieżące saldo. Ten komunikat „brak pieniędzy” jest powtarzany w regularnych odstępach czasu, dopóki użytkownik się nie wyloguje. Identyfikatory Signon ID mogą wykazywać ujemne saldo, ale zwykle nie jest ono duże ani przypadkowe. W zależności od polityki administracyjnej w danej lokalizacji, projekty często muszą płacić za wykorzystane zasoby, nawet jeśli przekraczają one autoryzowaną kwotę.
Aby zapewnić dodatkową ochronę przed awariami, które mogą szybko zużywać więcej zasobów niż jest to pożądane, użytkownicy mogą również ustawić globalne i lokalne limity wykorzystania czasu procesora. Globalne limity czasu ( $SIGNON ccid T= maxtime ) dotyczą całego zadania lub sesji. Lokalne ograniczenia czasowe dotyczą uruchamiania poszczególnych programów ( $RUN program T= maxtime ). Można również ustawić globalne i lokalne limity liczby stron do wydrukowania oraz liczby kart do dziurkowania ( $SIGNON ccid P= maxpages C= maxcards i $RUN program P= maxpages C= maxcards ). Domyślny limit czasu lokalnego procesora można ustalić za pomocą $SET TIME= maxtime .