• Nie Znaleziono Wyników

SYSTEMY OPERACYJNE

N/A
N/A
Protected

Academic year: 2021

Share "SYSTEMY OPERACYJNE"

Copied!
51
0
0

Pełen tekst

(1)

SYSTEMY OPERACYJNE

dr. hab. Vitaliy Yakovyna

yakovyna@matman.uwm.edu.pl http://wmii.uwm.edu.pl/~yakovyna/

UNIWERSYTET WARMIŃSKO-MAZURSKI W OLSZTYNIE

Wydział Matematyki i Informatyki

(2)

Struktura Systemu

Operacyjnego

(3)

Usługi Systemu

Operacyjnego

(4)

Usługi Systemu Operacyjnego

• System operacyjny zapewnia środowisko do wykonywania programów

• Udostępnia niektóre usługi programom i użytkownikom tych programów

• Usługi te również ułatwiają programistom zadanie programowania

• Określone usługi różnią się w zależności od systemu operacyjnego

(5)

Widok Usług Systemu

Operacyjnego

(6)

Wywołania Systemowe

(7)

Wywołania Systemowe: Przykład

(8)

Interfejs Programowania Aplikacji

• Twórcy aplikacji projektują programy zgodnie z interfejsem programowania aplikacji (API)

• Interfejs API określa zestaw funkcji dostępnych dla programisty, w tym parametry i wartości zwracane

• Najczęstsze interfejsy API:

• Windows API dla systemów Windows

• POSIX API dla systemów POSIX (UNIX, Linux, i macOS)

• Java API dla programów działających na wirtualnej maszynie Java

• Programista uzyskuje dostęp do API za

pośrednictwem biblioteki kodu dostarczonej przez system operacyjny

(9)

API i Wywołania Systemowe

• Każdy system operacyjny ma swoją własną nazwę dla każdego wywołania systemowego

• Funkcje tworzące interfejs API zwykle wywołują rzeczywiste wywołania systemowe w imieniu programisty aplikacji

• Używanie API vs. wywoływanie rzeczywistych wywołań systemowych:

• Przenośność

• Wywołania systemowe mogą być często bardziej

szczegółowe i trudniejsze w obsłudze niż interfejs API

(10)

Środowisko Wykonawcze

• Środowisko wykonawcze (RTE) – pełny pakiet oprogramowania niezbędny do uruchamiania aplikacji napisanych w danym języku

programowania, w tym kompilatorów, bibliotek, programów ładujących itp.

• RTE zapewnia interfejs do wywołań systemowych, który służy jako łącze do wywołań systemowych

• Przechwytuje wywołania funkcji w interfejsie API

• Utrzymuje tabelę indeksowaną zgodnie z numerami wywołań systemowych

• Wywołuje wywołanie systemowe i zwraca jego status

(11)

Obsługa Aplikacji Użytkownika

(12)

Przykład: Biblioteka Standardowa C

(13)

Przekazywanie Parametrów do Systemu Operacyjnego

1) Rejestry

2) Blok w pamięci* 3) Stos*

* Nie ogranicza liczby ani długości parametrów

(14)

Rodzaje Wywołań Systemowych

• Zarządzanie procesami

• Zarządzanie plikami

• Zarządzanie urządzeniami

• Utrzymanie informacji

• Komunikacja

• Ochrona

(15)

Przykłady Wywołań Systemowych Windows i UNIX

Windows UNIX

Zarządzanie procesami CreateProcess() ExitProcess()

WaitForSingleObject()

fork() exit() wait() Zarządzanie plikami CreateFile()

ReadFile() WriteFile() CloseHandle()

open() read() write() close() Zarządzanie urządzeniami SetConsoleMode()

ReadConsole() WriteConsole()

ioctl() read() write() Utrzymanie informacji GetCurrentProcessID()

SetTimer() Sleep()

getpid() alarm() sleep() Komunikacja CreatePipe()

CreateFileMapping() MapViewOfFile()

pipe() shm open() mmap()

Ochrona SetFileSecurity()

InitlializeSecurityDescriptor() SetSecurityDescriptorGroup()

chmod() umask() chown()

(16)

Usługi Systemowe

(17)

Usługi Systemowe

• Usługi systemowe, znane również jako narzędzia systemowe, zapewniają wygodne środowisko do tworzenia i uruchomienia programów

• Niektóre z nich są po prostu interfejsami użytkownika do wywołań systemowych

(18)

Kategorie Usług Systemowych

• Zarządzanie plikami (manipulowanie plikami i katalogami)

• Informacje o stanie (data, godzina, dostępna pamięć)

• Modyfikację treści pliku (edytory tekstu)

• Obsługa języka programowania (kompilatory, asemblery, debuggery)

• Ładowanie i wykonanie programu (ładowarki, edytory linków, ładowarki overlay)

(19)

Kategorie Usług Systemowych (2)

• Komunikacja (tworzenie połączeń, wysyłanie wiadomości, przeglądanie stron internetowych, logowanie się zdalnie)

• Usługi w tle. Ciągle działające procesy systemowe nazywane są usługami, podsystemami lub

demonami.

(20)

Linkery i Ładowarki

(21)

Kompilowanie i Linkowanie Programu

• Pliki źródłowe są kompilowane do plików obiektowych, które są zaprojektowane do załadowania do dowolnej fizycznej lokalizacji pamięci – relokowalny plik obiektowy.

• Następnie linker łączy te relokowalne pliki

obiektów w jeden binarny plik wykonywalny.

Podczas fazy łączenia mogą być również zawarte inne pliki obiektowe lub biblioteki.

(22)

Ładowanie Programu

• Program ładujący służy do załadowania binarnego pliku wykonywalnego do pamięci, gdzie można go uruchomić w rdzeniu procesora.

• Aktywnością związaną z łączeniem i ładowaniem jest relokacja, która przypisuje końcowe adresy do części programu i dostosowuje kod i dane w

programie do tych adresów.

(23)

Rola linkera i ładowarki

(24)

Dynamicznie Połączone Biblioteki

• Biblioteki mogą być łączone w pliku wykonywalnym i ładowane do pamięci.

• Większość systemów pozwala dynamicznie łączyć biblioteki w trakcie ładowania programu.

• Dynamicznie połączone biblioteki (DLL).

• Wiele procesów może współdzielić dynamicznie połączone biblioteki – znaczne oszczędności w wykorzystaniu pamięci.

(25)

Formaty plików obiektowych i wykonywalnych

• Obejmują one skompilowany kod maszynowy i tabelę symboli zawierającą metadane dotyczące funkcji i zmiennych, do których odwołuje się

program.

• Pliki wykonywalne zawierają punkt wejścia

programu, tj. adres pierwszej instrukcji, która ma zostać wykonana po uruchomieniu programu.

• UNIX i Linux – ELF (Executable and Linkable

Format); Windows – Portable Executable (PE);

MacOS – Mach-O format.

(26)

Dlaczego Aplikacje Są

Specyficzne dla Systemu

Operacyjnego?

(27)

Aplikacje Specyficzne dla Systemu Operacyjnego

• Zasadniczo aplikacje skompilowane w jednym

systemie operacyjnym nie mogą być uruchomione w innych systemach operacyjnych

• Część problemu — każdy system operacyjny

zapewnia unikalny zestaw wywołań systemowych

(28)

Wykonywanie Aplikacji w Różnych Systemach Operacyjnych

1) Aplikacja może być napisana w języku

interpretowanym (takim jak Python lub Ruby), który ma interpreter dostępny dla wielu SO.

2) Aplikacja może być napisana w języku

zawierającym maszynę wirtualną w której aplikacja zostanie uruchomiona (np. Java).

3) Standardowy język lub API: kompilator generuje pliki binarne w języku specyficznym dla maszyny i SO. Program musi zostać przeniesiony do każdego SO, na którym będzie uruchamiany.

(29)

Aplikacje Wieloplatformowe:

Wyzwania

• Biblioteki dostarczane z systemem operacyjnym zawierają różne interfejsy API w celu zapewnienia funkcji takich jak interfejs GUI

• Każdy system operacyjny ma format binarny dla aplikacji, więc system operacyjny może otworzyć plik i załadować aplikację

• Procesory mają różne zestawy instrukcji

• Wywołania systemowe różnią się w zależności od systemów operacyjnych pod wieloma względami

(30)

Interfejs Binarny Aplikacji

• Interfejsy API określają pewne funkcje na poziomie aplikacji

• Na poziomie architektury stosuje się interfejs

binarny aplikacji (ABI), aby określić, w jaki sposób różne składniki kodu binarnego mogą łączyć się z danym SO w danej architekturze

• ABI określa szczegóły niskiego poziomu, w tym szerokość adresu, metody przekazywania

parametrów do wywołań systemowych, binarny format bibliotek, rozmiar typów danych itp.

(31)

Interfejs Binarny Aplikacji (2)

• Zazwyczaj ABI jest określony dla danej architektury

• ABI jest odpowiednikiem API na poziomie architektury

• Jeśli binarny plik wykonywalny został skompilowany i połączony zgodnie z konkretnym ABI (np. ARMv8), powinien być w stanie działać na różnych

systemach obsługujących ten ABI

• Jednak określony ABI jest zdefiniowany dla

określonego systemu operacyjnego działającego w danej architekturze

(32)

Struktura Systemu

Operacyjnego

(33)

Struktura Monolityczna

• Jądro jest monolityczne, ponieważ działa w trybie jądra w jednej przestrzeni adresowej

• Trudna do wdrożenia i rozszerzenia

• Wyraźna przewaga wydajności

(34)

Struktura Monolityczna: UNIX i

Linux

(35)

Podejście Warstwowe

• Podejście monolityczne – ściśle połączony system, zmiany w jednej części systemu mogą mieć szeroki wpływ na inne części

• Luźno połączony, np. podejście warstwowe:

system operacyjny dzieli się na kilka warstw

• Typowa warstwa systemu operacyjnego składa się ze struktur danych i zestawu funkcji, które mogą być wywoływane przez warstwy wyższego poziomu

• Podejście warstwowe jest stosowane w sieciach komputerowych i aplikacjach internetowych

(36)

Podejście Warstwowe: Zalety i Wady

• Główną zaletą – prostota konstrukcji i debugowania

• Wyzwania związane z odpowiednim

zdefiniowaniem funkcjonalności każdej warstwy

• Ogólna wydajność jest słaba

• Niektóre nawarstwianie jest

powszechne we współczesnych systemach operacyjnych

(37)

Mikrojądro

• Ta metoda strukturuje SO, usuwając wszystkie

nieistotne składniki z jądra i implementując je jako programy na poziomie użytkownika, które znajdują się w oddzielnych przestrzeniach adresowych

(38)

Mikrojądro: Zalety i Wady

• Rozszerzanie systemu operacyjnego jest łatwiejsze

• System operacyjny można łatwiej przenosić z jednej architektury sprzętowej na drugą

• Mikrojądro zapewnia również większe

bezpieczeństwo i niezawodność, ponieważ

większość usług działa jako procesy użytkownika

• Wydajność mikrojądra może ucierpieć ze względu na zwiększone koszty operacyjne

(39)

Moduły

• Być może najlepsza aktualna metodologia

projektowania systemu operacyjnego polega na wykorzystaniu ładowalnych modułów jądra (LKM)

• Jądro ma zestaw podstawowych komponentów i może łączyć się z dodatkowymi usługami za

pośrednictwem modułów, zarówno w czasie startu lub w czasie wykonywania

• Nowoczesne implementacje systemu UNIX, takie jak Linux, macOS i Solaris, a także Windows

(40)

Systemy Hybrydowe

• W praktyce bardzo niewiele systemów

operacyjnych przyjmuje jedną, ściśle określoną strukturę

• Łączą różne struktury, w wyniku czego powstają systemy hybrydowe, które dotyczą kwestii

wydajności, bezpieczeństwa i użyteczności

(41)

Systemy Hybrydowe: macOS i iOS

Architektura systemów operacyjnych Apple macOS i iOS

Struktura Darwina

(42)

Systemy Hybrydowe: Android

• Środowisko wykonawcze Android (ART) – kompilacja z

wyprzedzeniem (AOT)

• Natywny interfejs Java (JNI) – programy nie są przenośne

• Standardowa biblioteka C dla Androida Bionic

(43)

Uruchamianie Systemu

Operacyjnego

(44)

Rozruch Systemu

• Proces uruchamiania komputera przez ładowanie jądra jest nazywany uruchamianiem systemu

• Proces rozruchu:

1. Mały kawałek kodu, znany jako program ładujący (boot loader), lokalizuje jądro

2. Jądro jest ładowane do pamięci i uruchamiane 3. Jądro inicjalizuje sprzęt

4. Główny system plików jest montowany

(45)

BIOS i UEFI

• Wielostopniowy proces uruchamiania:

• Mały program ładujący umieszczony w nieulotnej pamięci (BIOS) działa przy włączeniu zasilania

• Początkowy program ładujący ładuje drugi program

ładujący, który znajduje się w stałej lokalizacji na dysku - bloku startowym (boot block)

• UEFI (Unified Extensible Firmware Interface):

• Lepsze wsparcie dla 64-bitowych systemów i większych dysków

• UEFI jest pojedynczym, kompletnym menedżerem rozruchu i dlatego jest szybszy niż BIOS

(46)

Struktura Systemu Operacyjnego.

Streszczenie

(47)

Streszczenie (1)

• System operacyjny zapewnia środowisko do wykonania programów, udostępniając usługi użytkownikom i programom.

• Wywołania systemowe stanowią interfejs do usług udostępnianych przez system operacyjny.

Programiści używają interfejsu programowania aplikacji (API) dla dostępu do usług wywołania systemowego.

(48)

Streszczenie (2)

• Wywołania systemowe można podzielić na sześć głównych kategorii: (1) zarządzanie procesami, (2) zarządzanie plikami, (3) zarządzanie urządzeniami, (4) obsługa informacji, (5) komunikacja i (6)

ochrona.

• Standardowa biblioteka C udostępnia interfejs wywołania systemowego dla systemów UNIX i Linux.

• Systemy operacyjne obejmują również zbiór programów systemowych, które udostępniają narzędzia użytkownikom.

(49)

Streszczenie (3)

• Linker łączy kilka relokowanych modułów

obiektowych w jeden binarny plik wykonywalny.

Program ładujący ładuje plik wykonywalny do pamięci, gdzie może zostać uruchomiony na dostępnym procesorze.

• Aplikacje są specyficzne dla systemu operacyjnego.

Obejmują one różne formaty binarne dla plików wykonywalnych, różne zestawy instrukcji dla

różnych procesorów i wywołania systemowe, które różnią się w zależności od systemu operacyjnego.

(50)

Streszczenie (4)

• Monolityczny SO nie ma żadnej struktury; cała funkcjonalność jest zapewniona w pojedynczym, statycznym pliku binarnym, który działa w

pojedynczej przestrzeni adresowej. Chociaż takie

systemy są trudne do modyfikacji, ich główną zaletą jest wydajność.

• Warstwowy SO jest podzielony na kilka oddzielnych warstw, w których dolna warstwa jest interfejsem sprzętowym, a najwyższą warstwą jest interfejsem użytkownika. Takie podejście zazwyczaj nie jest

idealne do projektowania systemu operacyjnego ze względu na problemy z wydajnością.

(51)

Streszczenie (5)

• Podejście mikrojądra wykorzystuje minimalne jądro; większość usług działa jako aplikacje na

poziomie użytkownika. Komunikacja odbywa się za pośrednictwem przekazywania wiadomości.

• Modularne podejście zapewnia usługi SO za pomocą modułów, które mogą być ładowane i

usuwane podczas pracy. Wiele współczesnych SO zbudowanych jest w postaci systemów

hybrydowych wykorzystujących kombinację monolitycznego jądra i modułów.

• Program ładujący ładuje SO do pamięci, wykonuje inicjowanie i rozpoczyna wykonywanie systemu.

Cytaty

Powiązane dokumenty

• Gdy jeden proces jest wykonywany w sekcji krytycznej, żaden inny proces nie może być wykonywany we własnej sekcji krytycznej.. • Problemem sekcji krytycznej jest zaprojektowanie

• Jeśli wątek zażąda zasobu, który jest obecnie dostępny, może nadal wymagać oczekiwania → wykorzystanie zasobów może być niższe..

• Wartość w rejestrze relokacji jest dodawana do każdego adresu wygenerowanego przez proces użytkownika w momencie wysyłania adresu do pamięci..

• zadania klasy SCHED_FIFO – gotowe do uruchomienia zadanie tej klasy jest szeregowane przez zadaniami SCHED_OTHER i nie otrzymują kwantu czasu (wykonują się do zawieszenia lub

Spopularyzowanie obliczeń czasu rzeczywistego, choć pierwsze tego typu systemy pojawiły się w 1964r.. SYSTEMY CZASU

 Aby dodać pierwszą przystawkę, należy z Aby dodać pierwszą przystawkę, należy z menu Plik wybrać opcję .. menu Plik wybrać opcję  Dodaj/usuń Dodaj/usuń

Zapisujemy konsolę MMC na Pulpicie, po czym należy się wylogować i zalogować ponownie jako administrator.... We need a

Nie można pracować bezpośrednio z podstawową częścią systemu linuksowego, jaką jest jego jądro (kernel) - niezbędny jest do tego program pośredniczący, czyli właśnie