Dyskowy system operacyjny CP/M (część pierwsza)
Wstęp
Historia systemu CP/M (Control Program for Microcomputer) sięga już 11 lat. W roku 1974 kanadyjczyk Gary Kildall stworzył pierwszą wersję CP/M dla swego mikrokomputera IMSAI. Istniały wprawdzie wcześniejsze rozwiązania monitorów dotyczące mikrokomputerów z pamięcią masową w postaci dysków elastycznych, były to jednak czasy, w których bezsprzecznie królowała taśma papierowa. Niemniej jednak przedsięwzięcie Kildalla — stworzenie systemu operacyjnego dla mikrokomputera z pamięcią masową o organizacji plikowej, z definiowanymi strumieniami wejścia i wyjścia, przy pamięci operacyjnej ok. 16 KB było epokowym wydarzeniem w historii mikroinformatyki.
W chwili obecnej system operacyjny CP/M jest standardem de facto, jeśli chodzi o mikrokomputery ośmiobitowe z pamięcią masową w postaci dysków elastycznych. Kolejno na rynku oprogramowania pojawiały się coraz nowsze wersje tego systemu: 1.3, 1.4, 2.0, 2.1 i 2.2. Stało się to za sprawą samego Kildalla i jego współpracowników z firmy Digital Research (Pacific Grove California). Ale prawdziwy sukces handlowy zawdzięcza CP/M przedsiębiorczemu Tony’emu Goldowi, który założył w Nowym Jorku firmę handlową (software house) Lifeboat Associates. Firma ta zajmuje się głównie dystrybucją systemu CP/M i programów pracujących pod jego nadzorem. Warto dodać, że biblioteka programów zgodnych z systemem CP/M, z wielu różnych firm, sięga 3 tys. pozycji. Bardzo istotnym elementem sukcesu systemu CP/M był fakt, że napisany początkowo na MDS 800, dzięki umiejętnym modyfikacjom, stał się systemem najłatwiej przenoszonym i instalowanym na różnych mikrokomputerach. Pracuje na mikroprocesorach 8080, 8085 i Z 80. Istotną, aczkolwiek mającą obecnie coraz mniejsze znaczenie zaletą jest także niewielka wymagana pamięć operacyjna (16 KB dla wersji 1.4 i 20 KB dla wersji 2.0 i późniejszych). Łatwość przystosowania programu do środowiska sprzętowego, konfiguracji, typu pamięci dyskowej (dyski elastyczne lub sztywne) oraz niekorzystanie z przerwań — były to wszystko przyczynki do sukcesu, w którym połączono dobry produkt z umiejętnym marketingiem.
Charakterystyka systemu CP/M
Ograniczymy się tutaj do wersji 2.2, która z jednej strony stanowi produkt w pełni dojrzały, z drugiej — osiągalny za niewielką, bo ok. 120 dol. sumę, a na dodatek dostępny mikroinformatykom w Polsce.
System CP/M 2.2 jest uniwersalnym, jednostanowiskowym systemem operacyjnym dla mikrokomputerów wyposażonych w mikroprocesor Intel 8080 lub zgodne z nim mikroprocesory 8085 i Z 80 oraz pamięć masową na dyskach elastycznych pojedynczej gęstości — standard IBM 3740 lub podwójnej gęstości — standard IBM 34, 8 lub 5.25". Wymaga ciągłego bloku pamięci RAM o wielkości minimalnej 20 KB począwszy od adresu 0. Oprogramowanie napisane i działające pod nadzorem systemu CP/M daje się w pełni przenieść na dowolną maszynę wyposażoną w ten sam system operacyjny. Blok programów komunikacji z pamięcią masową jest oparty na tzw. tablicach parametrów dyskowych, umożliwiających łatwą zmianę konfiguracji zasobów sprzętowych mikrokomputera. Informacja na dyskietkach ma postać plików o unikalnych nazwach.
Oryginalne oprogramowanie dostarczane przez Digital Research lub innego autoryzowanego dystrybutora jest przekazywane odbiorcy na dysku elastycznym wraz z 7 tomami dokumentacji opisującej poszczególne fragmenty systemu, ich przeznaczenie i sposób użytkowania oraz programy usługowe, tzw. utilities.
System CP/M jest systemem jednoprogramowym, z możliwością realizacji wieloprocesorowości. Jest to system na tyle dobrze zaprojektowany, że użytkownik może zapomnieć o fizycznym istnieniu dysków. Wydaje się jednak celowe poznanie architektury i sposobu pracy systemu, gdyż takie podejście zawsze pozwoli racjonalniej użytkować dostępne zasoby, ułatwi zrozumienie reakcji systemu na poszczególne sytuacje i w efekcie da możliwość wyzyskania wszystkich zalet tego systemu operacyjnego.
Budowa systemu
System operacyjny CP/M 2.2 dzieli się logicznie na 5 części. Podział ten wynika ze struktury pamięci operacyjnej, a właściwie ze sposobu wykorzystania poszczególnych jej obszarów i rezydujących w nich programów.
Stronica zerowa (Page Zero, PZ)
Obszar zapewniający łączność między rezydującą częścią systemu i programami użytkownika. Zawiera skoki do programu ładującego i do modułu bazowego. Oprócz tego są w nim umieszczone niektóre pola robocze oraz bufor dla operacji dyskowych i komunikacji z konsolą. Stronica zerowa jest generowana podczas startu lub ponownego startu systemu przez program z modułu BIOS.
Obszar programów nie rezydujących
(Transient Program Area, TPA)
Obszar pamięci, począwszy od adresu 100H, do którego są wprowadzane z dyskietek programy użytkownika. W tym obszarze są także wykonywane tzw. polecenia systemowe.
Procesor komend operatorskich
(Console Command Processor, CCP)
Obszar, do którego jest przepisywany — podczas wprowadzania systemu z dyskietki — program obsługujący komunikację z operatorem oraz wykonujący rezydentne polecenia systemowe. Ten program wprowadza do obszaru TPA wywołane polecenia nierezydentne i programy użytkownika.
Bazowy system operacyjny
(Basic Disc Operating System, BDOS)
Jądro systemu operacyjnego. Jest to zestaw programów wprowadzanych z dyskietki podczas inicjalizacji systemu zawierający zbór procedur obsługujących pliki, obsługujących 1 do 16 jednostek pamięci na dyskach elastycznych, znakowe strumienie wejścia i wyjścia oraz zarządzanie pamięcią RAM. Jest to obszar który nie może być niszczony przez programy użytkowe.
Bazowy system wejścia/wyjścia
(Basic I/O System, BIOS)
Zbiór programów i tablic zapewniających fizyczną komunikację ze sprzętem w danej instalacji. Jest to jedyny moduł systemu CP/M, który jest zależny od środowiska sprzętowego i musi być wygenerowany dla danego mikrokomputera indywidualnie. Wprowadza się go z dyskietki podczas inicjalizacji, aczkolwiek zawiera on także część będącą zazwyczaj w pamięci stałej typu ROM (programy obsługi we/wy) Moduł ten nie może być niszczony przez programy pracujące pod kontrolą systemu CP/M.
Poszczególne części systemu CP/M zajmują kolejne, przyległe obszary pamięci operacyjnej mikrokomputera, a więc pamięć, która znajduje się powyżej obszaru modułu BIOS, nie jest przez system używana i może mieć dowolne przeznaczenie. Jedynie stronica zerowa BDOS i BIOS są elementami systemu CP/M, które muszą pozostawać w pamięci przez cały czas pracy systemu. Obszar zajmowany przez moduł CCP może być nakładkowany, jeśli to okaże się potrzebne. W takim przypadku powrót do systemu po wykonaniu programu musi być poprzedzony ponownym startem CP/M, tzw. gorącym startem.
Pamięć masowa
W systemie operacyjnym CP/M 2.2 pamięcią masową jest pamięć na dyskach elastycznych 8 lub 5.25 ". Dzięki dużej elastyczności systemu może to być także dowolna pamięć na dyskach sztywnych. Do systemu można dołączyć do 16 jednostek logicznych pamięci o pojemności do 8 MB każda. Tak więc dość prosty, mały system operacyjny może zarządzać pamięcią masową o pojemności do 128 MB. Pojedynczy plik może osiągnąć wielkość co najwyżej równą pojemności jednostki dyskowej, a więc 8 MB. Tych kilka liczb jednoznacznie obrazuje możliwości systemu operacyjnego CP/M w takich dziedzinach, jak np. zarządzanie bazą danych, nie odchodząc ani o krok od założenia, że jest to system operacyjny dla mikrokomputera.
Pliki
Plikiem w systemie CP/M jest ciąg rekordów — jednostek niepodzielnych z punktu widzenia modułu BDOS i transmisji dyskowych. Rekord stanowi jednostka informacji o długości 128 B, co na ogół odpowiada rozmiarowi sektora dyskowego w standardzie IBM 3740.
Opis pliku składa się z trzech elementów
(d:) < nazwa pliku > (typ pliku)
przy czym
d: oznacza logiczny numer jednostki dyskowej;
nazwa pliku — unikalny w obrębie jednostki dyskowej ciąg znaków o długości nie większej niż 8.
typ pliku — najwyżej trzyznakowe rozszerzenie nazwy, przeznaczone do rozróżnienia plików tworzonych podczas pracy niektórych programów.
W obrębie jednego dysku nie mogą istnieć dwa pliki o identycznych nazwach i typach należące do tego samego użytkownika
W systemie CP/M 2.2 dysk może być dzielony między 16 użytkowników. Ich pliki są niezależne i wyłączne, bez możliwości wzajemnego niszczenia lub dostępu. Ponieważ w systemie zawsze jest przyłączony logicznie któryś z dysków, możemy nie podawać nazwy jednostki dyskowej, jeżeli potrzebny plik znajduje się na przyłączonym dysku W przypadku innego ulokowania pliku jest konieczne podanie jego położenia Przyjęto zasadę, w myśl której jednostki dyskowe są oznaczone literami od A do P, zamiast numerów 1–16 (numer 0 oznacza domyślną jednostkę dyskową, w danej chwili przyłączoną). Typ pliku może być dowolny, w szczególności można go pominąć, natomiast system i programy systemowe używają plików lub tworzą pliki następujących typów:
.COM — typu “obraz pamięci” do bezpośredniej realizacji
.HEX — wynikowy w formacie szesnastkowym, standard INTELLEC–a
.ASM — źródłowy tekstu programu w języku symbolicznym
.MAC — źródłowy tekstu programu w języku makroasemblera
.PRN — raportu z kompilacji
.SYM — tablicy symboli z kompilacji
.REL — modułu programowego przemieszczalnego dla LINKERA
.TXT — tekstowy ASCII dla FORMATERA TEKSTU
.BAK — kopia pliku pierwotnego tworzona przez EDYTOR
.LIB — makrodefinicji bibliotecznych
.BAS — źródłowy w Basicu
.FOR — źródłowy w Fortranie
.SUB — sterujący pracą programu SUBMIT przy przetwarzaniu wsadowym
.SSS — tymczasowy roboczy tworzony przez niektóre programy, automatycznie niszczony przy końcu sesji
Przy organizowaniu dostępu do plików można stosować grupowy opis plików. W takim opisie * (gwiazdka) oznacza dowolną nazwę lub typ, a ? (znak zapytania) zastępuje w tym miejscu wszystkie inne dozwolone znaki.
Ciąg dalszy w następnym numerze
Andrzej Majewski
Instytut Informatyki Politechniki Gdańskiej