Władca procesów

Zwykle nie zdajemy sobie sprawy z jego istnienia. Po prostu jest. Zawsze. Różnie się nazywa, czasem kosztuje, a czasem mamy go za darmo. O czym mowa? O systemie operacyjnym. Zawsze jednak warto wiedzieć, jak działa tajemniczy pan OS

Nowoczesny system operacyjny jest produktem skomplikowanym, musi spełniać zróżnicowane wymagania oraz nadawać się do masowej produkcji i dystrybucji. Zwłaszcza to ostatnie wymaganie zasadniczo odróżnia go od protoplastów z okresu, gdy komputery dostępne były jedynie wąskiemu gronu specjalistów. W tym świetle fakt, że w rękach często zupełnie niewyszkolonych użytkowników dzisiejsze komputery oraz ich systemy operacyjne funkcjonują zupełnie nieźle, bez przeglądów technicznych i autoryzowanych serwisów, świadczy o systemach bardzo dobrze. Jak to możliwe? Aby odpowiedzieć sobie na tak postawione pytanie, warto wiedzieć, co znajduje się „pod maską” systemu operacyjnego i jak powinien on działać.

System? A co to?

Autorzy podręczników akademickich (patrz: ramka „Więcej informacji”) ograniczają się do stwierdzeń w rodzaju „oprogramowanie, dzięki któremu użytkownik może używać sprzętu komputerowego” lub „program, który umożliwia uruchamianie innych programów”. Można też zacytować niewątpliwie najbardziej niepodważalną definicję: „program, który na danym komputerze pracuje przez cały czas”. Może więc ważna jest nie tyle definicja, ile precyzyjne określenie funkcjonalności takiego oprogramowania?

Producentom chodzi o stworzenie łatwego w użyciu środowiska, które umożliwia korzystanie z coraz bogatszych zasobów sprzętowych i oczywiście uruchamianie innych, typowo użytkowych programów. Nie chodzi tu o opracowanie ergonomicznego interfejsu użytkownika, ale o optymalne wykorzystanie możliwości sprzętu. Dziś oznacza to (również w przypadku komputerów domowych) m.in. wielozadaniowość, wielodostępowość (możliwość pracy wielu użytkowników na jednej maszynie za pośrednictwem np. usług Telnet czy SSH), odtwarzanie multimediów, wyświetlanie skalowalnych czcionek czy bezpieczne udostępnianie zasobów w sieci.

Warto zauważyć, że system systemowi nierówny. Nie chodzi przy tym o to, że jeden jest lepszy od drugiego, ale raczej o to, że nie ma na razie systemu najlepszego do wszelkich zastosowań i możliwego do wykorzystania na każdej platformie sprzętowej. Jeśli przypomnimy sobie trochę historię oraz dowiemy się, nad czym pracują dziś projektanci, to będziemy mogli z szerszej perspektywy spojrzeć także na popularne systemy operacyjne naszych własnych komputerów.

Park jurajski

Ewolucja systemów operacyjnych zatoczyła kilka razy koło. Wszystko zaczęło się w roku 1936, kiedy to Konrad Zuse uruchomił pierwszą maszynę zawierającą jednostkę centralną. Za pierwszy komputer uznano jednak EDVAC Johna von Neumanna z roku 1945. Sukcesem było wtedy zbudowanie CPU i pamięci operacyjnej oraz nawiązanie komunikacji z tymi urządzeniami. Te pionierskie konstrukcje potocznie nazywa się dziś „bare machines”, co na polski można przetłumaczyć jako „gołe maszyny”. Oficjalnie mówimy jednak o komputerach pierwszej generacji. Maksymalne ułatwienia, na jakie mógł liczyć operator takiego cudu technologii lampowej, polegały na podłączeniu dalekopisu lub czytnika kart perforowanych. Używano wówczas raczej określenia „operator” niż „użytkownik”. Musiał on bardzo dogłębnie znać konstrukcję maszyny, programował ją wprost w języku wewnętrznym. Jego środowiskiem pracy był tzw. monitor, pozwalający praktycznie tylko na bezpośrednią edycję pamięci. Komputery pierwszej generacji nie miały systemów operacyjnych, miały za to operatorów.

Do połowy lat 50. opracowano interfejs użytkownika w postaci języka JCL (ang. Job Control Language), umożliwiającego sterowanie systemem za pomocą kilku dyrektyw. W roku 1956 uruchomiono pierwsze komputery drugiej generacji zbudowane z tranzystorów, w których pamięć operacyjną stanowiła matryca rdzeni ferromagnetycznych. Sposobem uruchamiania zadań, który wówczas zastosowano, było przetwarzanie wsadowe. Najpierw należało przygotować plik (w dosłownym tego słowa rozumieniu) kart perforowanych, zawierających kolejne polecenia dla systemu, linie kodu źródłowego programu (często już w języku wyższego rzędu, np. Fortran lub Cobol) i dane wejściowe. Następnie wczytywano to karta po karcie. Jeśli wszystko poszło dobrze, udawało się skompilować i uruchomić program. Przygotowanie zadania przez użytkownika odbywało się na oddzielnym stanowisku pracy – dziurkarce kart. Pojawił się wtedy moduł zwany planistą długoterminowym (patrz: rys. „Co „siedzi” w systemie”, $(LC84817:Władca procesów)$), decydujący o kolejności uruchamiania zadań, a wraz z nim problem, według jakiej strategii należy te zadania wybierać. Zasada kolejki FIFO (ang. First In First Out) zbyt często powodowała tzw. efekt konwoju: jedno długie zadanie opóźniało wykonanie wielu krótszych. Próbowano zrealizować strategię wybierającą spośród oczekujących w buforze wejściowym najpierw zadania najkrótsze (SJF – Shortest Job First). Okazywało się to względnie proste, gdyż można było łatwo policzyć wszystkie instrukcje programu.

0
Zamknij

Choć staramy się je ograniczać, wykorzystujemy mechanizmy takie jak ciasteczka, które pozwalają naszym partnerom na śledzenie Twojego zachowania w sieci. Dowiedz się więcej.