T: Rodzaje oprogramowania.

Komputer jako urządzenie służące do przetwarzania informacji wprowadzanych przez użytkownika, wymaga odpowiedniego zestawu programów zarządzających jego pracą oraz pośredniczących między programami a użytkownikiem.

Oprogramowanie komputerów dzielimy na:

Oprogramowanie systemowe stanowi wszystkie programy, które służą do wprowadzania i uruchamiania programów użytkowych. W tej grupie znajdują się systemy operacyjne, programy testujące, programy komunikacyjne. Najczęściej programy zapisane są w pamięci ROM.

Oprogramowanie narzędziowe – rodzaj oprogramowania, który wspomaga zarządzanie zasobami sprzętowymi poprzez dogodne interfejsy użytkowe oraz usprawnia, modyfikuje oprogramowanie systemowe w celu usprawnienia wykonywania programów w bardziej wygodny i wydajny sposób a przy tym pozbawiony błędów. Do oprogramowania narzędziowego należą programy zarządzające zbiorami na dysku.

Oprogramowanie użytkowe (zwane też aplikacyjnym, aplikacjami) – określają sposoby w jaki zostają użyte zasoby systemowe do rozwiązywania problemów obliczeniowych zadanych przez użytkownika (kompiler, systemy baz danych, gry, oprogramowanie biurowe), zazwyczaj program który ma bezpośredni kontakt z użytkownikiem i nie jest częścią większego programu, z technicznego punktu widzenia jest to oprogramowanie korzystające z usług oprogramowania systemowego. Oprogramowanie użytkowe stanowią programy wspomagające obsługę biur, sekretariatów oraz ułatwiające zarządzanie przedsiębiorstwami. Należą do tej grupy programy:

Programy użytkowe możemy podzielić w zależności od ich funkcji np.:

System operacyjny jest programem nadzorującym pracę wszystkich urządzeń systemu komputerowego (pamięci operacyjnej oraz urządzeń wejścia i wyjścia), tworzy środowisko, w którym pracują inne programy, umożliwia obsługę zbiorów dyskowych. Jednym z systemów operacyjnych jest MS DOS, przeznaczony dla komputerów z procesorami Intel i pokrewnymi. Po uruchomieniu komputera na ekranie pojawia się znak gotowości systemu do pracy C:\>.

Historia systemów operacyjnych - Początkowo systemy operacyjne były bardzo proste, wręcz - prymitywne. Praca z komputerem wymagała dużej wiedzy o szczegółach jego budowy, architekturze, wymagała dobrej znajomości języka wewnętrznego na poziomie binarnym.

Człowiek - operator ręcznie sterował pracą komputera poprzez bezpośrednie wprowadzanie do komórek pamięci operacyjnej komputera kolejnych rozkazów w języku wewnętrznym. Taki tryb pracy nazwano trybem interakcyjnym .

W pierwszym kroku ewolucji systemów operacyjnych rozdzielono funkcje programisty (nadal jednak reprezentującego użytkownika) od funkcji operatora komputera, a następnie wprowadzono grupowanie podobnych zadań w tak zwany wsad oraz możliwość wcześniejszego "ładowania" do pamięci "wsadu" oraz automatycznego jego uruchamiania.

Kolejnym krokiem rozwoju było zastosowanie metody automatycznego porządkowania zadań oraz możliwości automatycznego przekazywania sterowania od jednego zadania do innego. Pojawił się program zwany monitorem rezydującym (bo stale był w pamięci operacyjnej komputera).

Wprowadzono tzw. pracę pośrednią (off-line) wolnych urządzeń zewnętrznych (czytników tasiemki papierowej, czytników kart dziurkowanych, dziurkarek taśmy i kart, drukarek):

Wyprowadzanie wyników przetwarzania było zorganizowane podobnie

Stopniowo wyeliminowano wolne urządzenia wejściowe typu dziurkarki oraz czytniki taśm i kart papierowych – na rzecz bezpośredniego wprowadzania danych na taśmę magnetyczną przez pracowników zwanych operatorami przygotowania maszynowych nośników informacji.

Aby uzyskać korzyści pracy pośredniej w czasie samego przetwarzania w komputerze – wprowadzono buforowanie i spooling, co umożliwiło równoległą pracę procesora (wykonywanie obliczeń) oraz operacji wejścia-wyjścia. Wiązało się to ze znacznymi zmianami architektury komputera.

Spooling polega na wykorzystaniu dysku jako dużego bufora dla operacji wejścia/wyjścia.

Wprowadzono rozróżnienie między fizycznymi a logicznymi urządzeniami wejścia/wyjścia – co uniezależniało programistów przy tworzeniu aplikacji od pisania pod konkretne typy urządzeń wejścia-wyjścia (oraz zwalniało od konieczności dokładnej znajomości budowy, zasad pracy oraz kodów sterujących tych urządzeń) – osiągnięto większą uniwersalność oraz elastyczność tworzonych programów użytkowych.

Następnym krokiem optymalizacji wykorzystania zasobów komputera przez system operacyjny było umożliwienie wieloprogramowości. Wieloprogramowość polega na tym, że w czasie gdy wykonywany program musi na coś zaczekać ( na przykład na wczytanie danych), system operacyjny przełącza procesor na wykonywanie innego programu. System musi wszystkie programy trzymać równocześnie w pamięci operacyjnej, odpowiednio nią zarządzać, planować przydział procesora itp. itd.

Równocześnie może być uruchomionych wiele programów, ale w danym momencie przetwarzany jest przez procesor jeden i tylko jeden rozkaz jednego i tylko jednego programu.

Logicznym rozszerzeniem wieloprogramowości jest wielozadaniowość.

Wielozadaniowość to naprzemienne wykonywanie wielu zadań – poprzez przydzielenie każdemu operatorowi określonego przedziału czasu jednostki centralnej (podział czasu statyczny lub dynamiczny). Równocześnie pracuje – w interakcyjny sposób – wielu operatorów; każdemu z nich wydaje się, że ma na wyłączność jednostkę centralną.

Systemy takie pojawiły się w latach siedemdziesiątych przez rozwinięcie technologii systemów wielodostępnych oraz zastosowanie terminalowych konsol operatorskich - często w dużej odległości (poprzez stałe, dzierżawione łącza telefoniczne).

W latach osiemdziesiątych popularna stała się koncepcja systemów otwartych.

Otwartość systemów to standardyzacja (formalna i nieformalna) modułów systemów operacyjnych oraz procedur komunikacyjnych zapewniająca współdziałanie różnych systemów, wymienność danych oraz programów, skalowalność oraz łatwą modernizację systemów.

Systemy otwarte zapewniaja użytkownikowi:

Inną popularną i realizowaną obecnie koncepcją są systemy rozproszone.

W systemach rozproszonych przetwarzanie rozdzielane jest między:

Rozproszone systemy operacyjne zapewniają:

Najważniejszymi problemami w systemach rozproszonych są:

Głównym celem współczesnych projektantów systemu jest osiągnięcie maksymalnej przezroczystości systemu (sprzętu i programów) dla użytkownika. Powoduje to zatarcie różnic między zasobami lokalnymi a zdalnymi środowiska rozproszonego, pozwala na mobilność użytkownika, zmniejszenie wymagań co do jego kwalifikacji i umiejętności.

Ważną cechą systemu jest odporność na zakłócenia. Używa się określenia poziomu SFT (System Fault Tolerance). System musi działać poprawnie nawet po wyłączeniu z pracy (w sposób planowany, lub w efekcie awarii) jego części.

Niezawodność systemu wynika na ogół z nadmiarowości układów, powiązań czy modułów.

Innym priorytetem współczesnych twórców systemu jest - skalowalność. Skalowalnością nazywamy zdolność systemu do sprostania wzrastającemu zapotrzebowaniu na zasoby i usługi systemu. Wiąże się to na ogół z możliwością rozbudowy elementów systemu o określone, skwantowane części.

Wyzwaniem dla twórców systemów operacyjnych jest sprawa bezpieczeństwa informacji, zabezpieczenie przed niekontrolowaną przez osoby uprawnione ingerencją w system, infekcją wirusową, kradzieżą informacji itd.

Ważnym rodzajem systemów operacyjnych są systemy czasu rzeczywistego pracujące w układach automatyki przemysłowej i domowej oraz elektroniki. W tych systemach obowiązują bardzo ostre wymagania czasowe - ograniczenia dotyczące czasu wykonania określonych procesów - praktycznie on-line.

Rozwój systemów operacyjnych jest ściśle powiązany z rozwojem architektury sprzętowej komputera.

Na przykład: wieloprogramowość oraz podział czasu możliwe stały się dzięki opracowaniu i implementacji sprzętowej mechanizmów DMA oraz systemu przerwań.

Inne elementy nowej architektury komputera, związane z ewolucją systemu operacyjnego w kierunku większej niezawodności, to:

Tendencja unifikacji konstrukcji komputerów doprowadziła do pojawienia się jednolitych koncepcyjnie rodzin komputerów (np. PC na procesorach Intel, czy Motorola, SPARC itd) charakteryzujących się podobną architekturą, typem procesora.

Taką rodzinę komputerów określa się terminem platformy sprzętowej. Na jednej platformie sprzętowej można uruchamiać taki sam system operacyjny i takie same aplikacje.

Oczywiście systemy operacyjne pisane dla całej platformy sprzętowej nie mogą już być w całości pisane w języku wewnętrznym komputera (asemblerze), ale w języku wyższego rzędu, mniej zależnym od sprzętu.

Najpowszechniej stosowano (i stosuje się) język C jako język programowania popularnych systemów operacyjnych. Ostatnio zyskują popularność języki obiektowe: C++, Java.