Upload
trinhtram
View
224
Download
0
Embed Size (px)
Citation preview
Toruń, 2004
Zbigniew S. Szewczak Podstawy Systemów Operacyjnych
Wykład 12
Linux.
Literatura
☛ A. Silberschatz, P.B. Gavin, Podstawy systemówoperacyjnych, wyd. III, WNT, 2000 (tł. 5th ed.)
☛ D.P. Bovet, M. Cesati, Linux Kernel, Wyd. RM,Warszawa 2001
☛ M. Beck, H. Böhme, M. Dziadzka, U. Kunitz, R.Magnus, D. Verworner, Linux Kernel. Jądrosystemu, MIKOM, Warszawa, czerwiec 1999
☛ M. K. Johnson, E. W. Troan, Oprogramowanieużytkowe w systemie Linux, WNT, 2000
☛ M. Welsh, Linux, Wyd. RM, Warszawa 2000☛
System Linux
☛ Historia & Podstawy projektu☛ Moduły jądra☛ Zarządzanie procesami☛ Planowanie☛ Zarządzanie pamiecią☛ Systemy plików☛ Wejście i wyjście☛ Komunikacja międzyprocesowa☛ Struktura sieci☛ Bezpieczeństwo
Historia
☛ Linux jest nowoczesnym, bezpłatnym systememoperacyjnym opartym o standardy uniksowe
☛ Prace nad nim rozpoczęły się w 1991, kiedy tofiński student Linus Torvalds napisał małe leczkompletne jądro dla procesora 80386☛ zgodność z systemem UNIX była głównym celem
☛ Historia Linuxa to nie mający precedensuprzykład współpracy tysięcy użytkowników zcałego świata poprzez Internet
Historia (c.d.)
☛ Linux został zaprojektowany do wydajnej pracyna PC ale w chwili obecnej działa na wieluplatformach sprzętowych
☛ Jądro w systemie Linux jest oprogramowaniemw całości oryginalnym, wykonanym od podstawprzez społeczność linuksową; zawiera liczneelementy z których jedne napisano od nowa adrugie zapożyczono z innych systemów
Jądro systemu Linux
☛ Pierwsza wersja systemu Linux-0.01 pojawiła się14 Maja 1991☛ nie potrafiła współpracować z siecią☛ działała jedynie na architekturze 80386☛ miała nader ograniczone oprogramowanie urządzeń
zewnętrznych☛ jako system plików dostarczany był jedynie Minix☛ podsystem pamięci wirtualnej był bardzo elementarny
Jądro systemu Linux (c.d.)
☛ Linux-1.0 pojawił się 14 Marca 1994 i zawierał:☛ obsługę standardowych uniksowych protokołów
sieciowych TCP/IP (PPP, SLIP)☛ zgodny z systemem BSD interfejs gniazd☛ IPC, pamięć dzielona, semafory, kolejki komunikatów☛ moduły sterujące do kart Ethernet☛ udoskonalony system plików☛ szereg sterowników dla kontrolerów SCSI☛ obsługa dodatkowego sprzętu: CDROM, dźwięk, myszy☛ emulacja koprocesora matematycznego 80387
☛ Linux-1.2 (Marzec 1995) ostatnie wydaniesystemu jedynie na architekturę IBM PC
Linux 2.0☛ Linux-2.0 (Czerwiec 1996) nowe możliwości:
☛ dostępność wielu architektur, w tym - w pełni 64-bitowegoprocesora Alpha
☛ dostępność dla architektur wieloprocesorowych☛ ulepszony kod zarządzania pamięcią - jednolita pamięć
podręczna dla systemu plików niezależna od pamięcipodręcznych urządzeń blokowych
☛ ulepszone protokoły TCP/IP☛ zorganizowanie wątków wewnątrz jądra☛ manipulowanie zależnościami między modułamiładowalnymi i ich ładowanie na żądanie
☛ standaryzowany interfejs konfiguracji☛ planowanie w czasie rzeczywistym
Linux 2.0 (c.d.)
☛ Pakiety dystrybucyjne systemu Linux oparte nawersji jądra 2.0 są także dostępne dlaprocesorów serii Motorola 68000 oraz systemówSun Sparc i PowerMac
☛ Jądro 2.0 zawierało protokół amatorskich sieciradiowych AX.25 oraz protokół NCP (Novell) iSMB (Microsoft)
☛ Zgodne ze standardem POSIX klasyszeregowania procesów
Linux 2
☛ Linux-2.2 (Styczeń 1999) - poprawianie 2.0☛ UltraSPARC;Firewall; Dyski Acorn, Apple, NT☛ NFS daemon w jądrze
☛ Linux-2.4 (Styczeń, 2001; 2.4.26 - 14.04.2004)☛ obsługa: do 64GB RAM, SMP, USB☛ sterowniki urządzeń:Aironet 802.11, IPv6,NFS v3, ATM☛ TUX WWW Serwer 2.0☛ zwiększone bezpieczeństwo
☛ Linux-2.6 (Grudzień, 2003 )☛ architektura 64-bitowa; 16 procesorów; aplikacje baz danych☛ wydajność i niezawodność
Linux 2.6☛ Linux-2.6 (c.d. )
☛ nowy algorytm planowania zadań ( O(1) ) dla SMP☛ wywłaszczanie procesów w trybie jądra (bez sekcji
krytycznych)☛ poprawiona implementacja wątków (sygnały POSIX)☛ poprawiona zarządzanie pamięcią wirtualną☛ nowa obsługa modułów☛ zmiany w zarządzaniu pamięcią☛ zastąpienie malloc.h przez slab.h☛ asynchroniczne we/wy☛ dodanie IPSec do jądra☛ modyfikacje w systemie plików (sysfs, ext3, NTFS, JFS,XFS)
System Linux
☛ W systemie Linux znajduje zastosowanie wielenarzędzi opracowanych jako część systemuoperacyjnego BSD z Berkeley, systemu XWindow z MIT oraz oprogramowanie projektuGNU kierowanego przez Free SoftwareFoundation
☛ Główne biblioteki systemu wywodzą się zprojektu GNU, jednak wspólnota linuksowawłożyła dużo pracy w ulepszenie tych bibliotekpod kątem usuwania niewydajności i błędów
System Linux (c.d.)☛ Narzędzia administrowania siecią wprowadzono
do systemu Linux z kodu opracowanegopierwotnie dla systemu 4.3BSD, jednakże wostatnich wersjach systemu BSD (np. FreeBSD)zapożyczono w zamian kod z systemu Linux(moduły sterujące urządzeń dzwiękowych)
☛ System Linux jako całość jest utrzymywanyprzez luźną sieć twórców współpracujących zapośrednictwem Internet, w której małe grupylub poszczególne osoby sprawują pieczę nadcałością konkretnych składowych☛ serwery ftp przechowujące kod (np. ftp.cs.helsinki.fi )
Dystrybucje systemu Linux
☛ Standardowy, zawczasu skompilowany zbiórpakietów zwany dystrybucjami, zawiera opróczpodstawowego systemu Linux także specjalnenarzędzia instalowania systemu i zarządzanianim, jak również uprzednio skompilowane igotowe do instalowania pakiety licznych,typowych narzędzi systemu UNIX (gry,edytory)
☛ Pierwsze dystrybucje rozpakowywały wszystkiepliki pakietów w odpowiednie miejsca
Dystrybucje systemu Linux(c.d.)
☛ Współczesne dystrybucje zawierają bazę danychnadzorującą pakiety
☛ Pierwsze kompletne dystrybucje to SLS iSlackware
☛ Do szczególnie popularnych zalicza siędystrybucje Red Hat i Debian inne to Caldera,Craftworks, WorkGroup Solutions, SuSE, Unifix
☛ Pakiet RPM (ang. Red Hat Package Manager)pozwala dodawanie nowych pakietów dosystemu Linux oraz ich uaktualnianie
Licencje systemu Linux
☛ Jądro systemu Linux jest rozpowszechnianewedług praw GNU GPL (General Public Licence)określonych przez konsorcjum Free SoftwareFoundation
☛ System Linux nie jest oprogramowaniem typupublic domain (t.j. takim co do którego autorzyzrzekli się praw autorskich)
☛ System Linux jest oprogramowaniem typu freesoftware (t.j. prawa autorskie są w rękachautorów poszczególnych fragmentów kodu)
Licencje systemu Linux (c.d.)
☛ Oprogramowanie rozpowszechnianego nazasadach GPL nie wolno redystrybuować wformie czysto binarnej
☛ Jeśli ktoś puszcza w obieg oprogramowaniezawierające jakąkolwiek część podlegającąlicencji GPL to musi udostępnić kod źródłowy
☛ Nie ma zakazu tworzenia binarnych dystrybucjiLinux o ile są dostarczane z kodem źródłowym
Podstawy projektu
☛ Linux jest wielodostępnym, wielozadaniowymsystemem z pełnym zestawem narzędzizgodnych z systemem UNIX
☛ System plików systemu Linux pasuje dotradycyjnej semantyki uniksowej i mazrealizowany w pełni sieciowy standard systemuUNIX
☛ Główne cele projektu: szybkość, wydajność istandardyzacja
Podstawy projektu (c.d.)
☛ System Linux zaprojektowano tak, abypozostawał w wyraźnej zgodzie z istotnymiopisami standardu POSIX; co najmniej dwiedystrybucje mają oficjalny certyfikat komitetunormalizacyjnego POSIX
☛ Interfejs programisty w systemie Linuxodpowiada bardziej semantyce systemu SVR4UNIX niż zachowaniu systemu BSD
Składowe systemu Linux
☛ Podobnie jak większość implementacji systemuUNIX system Linux składa się z trzech głównychfragmentów kodu; najważniejsza linia podziałubiegnie między jądrem i całą resztą
☛ jądro jest odpowiedzialne za realizacjęwszystkich istotnych abstrakcji systemuoperacyjnego☛ kod jądra jest wykonywany w trybie jądra (ang. kernel
mode) z pełnym dostępem do wszystkich fizycznychzasobów komputera
☛ kod jądra i wszystkie struktury danych są trzymane wjednej przestrzeni adresowej
Składowe systemu Linux (c.d.)
☛ biblioteki systemowe (ang. systemlibraries) definiują standardowy zbiór funkcji,za pomocą których aplikacje mogą współdziałaćz jądrem i które realizują wiele właściwościsystemu operacyjnego nie wymagającychpełnych przywilejów kodu jądra
☛ pomoce systemowe (ang. system utilities)wykonują specjalizowane zadaniaadministracyjne (np. demony (ang. daemons)działają nieustannie )
Składowe systemu Linux
wspólne bibliotetki systemu
jądro systemu Linux
ładowalne moduły jądra systemu
kompilatory procesy użytkowe
pomocnicze programy użytkowe
programy zarządzania systemem
Struktura katalogowa koduźródłowego systemu Linux
linux
modules mm net kernel init lib include ipc
fs arch driverslinuxunix inet
asm-alpha
asm-i386
asm-m68k
asm-generic
asm-mips
asm-sparc
net
char
block
scsi
sound
mips
alpha
sparc
ppc
i386
nfs
proc
minix
msdos
sysv
ext
ext2
xiafs
isofs
hpfs
umsdos kernel boot mm math-emu
Struktura kodu źródłowego☛ init - kod inicjujący jądro: wersja☛ kernel - rdzeń jądra: procesy, zegary,moduły,..☛ mm - zarządzanie pamięcią: swap, vm☛ arch - kod zależny od architektury
☛ i386 - IBM PC☛ kernel - rdzeń jądra☛ mm - zarządzanie pamięcią☛ math-emu - emulator zmiennoprzecinkowy☛ lib - zależne od sprzętu funkcje pomocnicze☛ boot - ładowanie systemu
☛ compressed - obsługa skompresowanego jądra☛ tools - programy do tworzenia skompresowanego obrazu jądra
☛ alpha - architektura Compaq Alpha
Struktura kodu źródłowego (c.d)☛ arch (c.d.)
☛ s390 - IBM System/390☛ sparc - Sun SPARC☛ sparc64 - Sun Ultra-SPARC☛ mips - Silicon Graphics MIPS☛ ppc - Motorola-IBM PowerPC☛ m68k - Motorola MC680x0☛ arm - Procesor ARM☛ cris - Procesor ETRAX☛ inne: ia64, parisc, ppc64, mips64, sh
☛
Struktura kodu źródłowego (c.d)☛ fs -systemy plików
☛ proc - wirtualny system plików /proc☛ devpts - wirtulany system plików /dev/pts☛ ext2, ext3 - systemy plików ext2 i ext3☛ isofs - system plików ISO9660 (CD-ROM)☛ nfs - sieciowy system plików☛ nfsd - serwer systemy plików nfs☛ fat - kod dla systemów plików FAT☛ msdos - system plików MS-DOS☛ vfat - system plików Windows☛ nls - wsparcie dla języków☛ ntfs - system plików Windows NT
Struktura kodu źródłowego (c.d)☛ fs - (c.d.)
☛ smb - system plików SMB (Samba)☛ umsdos - nakładka na system plików MSDOS☛ minix - system plików MINIX☛ hpfs - system plików IBM OS/2☛ sysv - system plików SV, SCO, Xenix, Coherent, V7☛ ncpfs - system plików Netware (Novell)☛ ufs - system plików BSD, SunOS, NeXTStep☛ affs - system plików Amiga Fast File System☛ coda - sieciowy system plików Coda☛ hfs - system plików Apple Macintosh
☛
Struktura kodu źródłowego (c.d)☛ fs - (c.d.)
☛ adfs - system plików Acorn Disc Filing☛ efs - system plików SGI IRIX EFS☛ qnx4 - system plików dla QNX 4 OS☛ romfs - niewielki system plików tylko do odczytu☛ autofs - wsparcie dla automatyczcnego montowania☛ lockd - wsparcie dla zdalnego blokowania plików☛ cramfs - system plików na małe pamięci ROM☛ romfs - system plików (ro) dla RAM dysków☛ bfs - system plików SCO Unixware☛ inne: reiserfs, ffs, jfs, xfs.... -> Filesystems-HOWTO
☛
Struktura kodu źródłowego (c.d)☛ net - kod sieciowy: ax25, ipv6, sunrpc, rose,...☛ ipc - komunikacja międzyprocesowa SV☛ drivers - moduły sterujące
☛ block - urządzenia blokowe: floppy,..☛ paride - urządzenia IDE przez port równoległy
☛ scsi - urządzenia SCSI☛ char - urządzenia znakowe
☛ joystick, ftape☛ hfmodem - urządzenia radiowe ham☛ ip2 - wieloportowe karty szeregowe IntelliPort
☛ net - urządzenia sieciowe: hamradio, wireless, pcmcia...☛ sound, video
Struktura kodu źródłowego (c.d)☛ drivers - (c.d.)
☛ cdrom - urządzenia CDROM (nie ATAPI i SCSI)☛ isdn, bluetooth, atm☛ ap1000 - urządzenia Fujitsu AP100☛ macintosh - urządzenia Macintosh☛ sgi - urządzenia Silicon Graphics☛ fc4 - urządzenia Fibre Channel☛ acorn - urządzenia Acorn☛ misc - różne urządzenia☛ pnp - wparcie dla Plug-and-Play☛ usb - wsparcie dla Universal Serial Bus
☛
Struktura kodu źródłowego (c.d)☛ drivers - (c.d.)
☛ pci - wsparcie dla szyny PCI☛ sbus - wsparcie dla Sun SPARC Sbus☛ nubus - wsparcie dla Apple Macintosh Nubus☛ zorro - wsparcie dla szyny Amiga Zorro☛ dio - wsparcie dla szyny Hewlett-Packard HP300 DIO☛ tc - wsparcie dla Sun TurboChannel
☛ lib - funkcje jądra ogólnego przeznaczenia
Struktura kodu źródłowego (c.d)☛ include - pliki nagłówkowe
☛ linux - rdzeń jądra☛ lockd - zdalne blokowanie plików☛ nfsd - sieciowy serwer nfs☛ sunrpc - Sun RPC☛ byteorder - funkcje zmiany porządku bajtów☛ modules - wsparcie dla modułów☛ raid - dyski RAID
☛ asm- generic - niezależne od architekturyniskopoziomowe pliki nagłówkowe
☛ asm-i386 - IBM PC☛ asm-alpha - Compaq Alpha☛ asm-mips - Silicon Graphics MIPS
Struktura kodu źródłowego (c.d)☛ include - (c.d.)
☛ asm-m68k - Motorola MC680x0☛ asm-ppc - Motorola-IBM PowerPC☛ asm-s390 - IBM System/390☛ asm-sparc - Sun SPARC☛ asm-sparc64 - Sun Ultra-SPARC☛ asm-arm - procesor ARM☛ net - wsparcie dla sieci☛ scsi - wsaprcie dla SCSI☛ video - wsparcie dla kart video☛ config - pliki nagłówkowe zawierające makra definiujące
konfiguracje jądra
Struktura kodu źródłowego (c.d)☛ scripts - zewnętrzne programy do budowania
obrazu jądra
☛ Documentation - pliki tekstowe z ogólnymiwyjaśnieniami i wskazówkami na tematskładników jądra systemu
☛ Kod źródłowy - ok. 2 mln linii (Netscape 17 mln)
Moduły jądra
☛ Jądro systemu Linux potrafi ładować i usuwaćdowolną część swego kodu zależnie od potrzeb
☛ Moduł jądra zwykle steruje pracą urządzenia,specyficznym systemem plików lub protokołemsieciowym
☛ Kod źródłowy systemu Linux jest w wolnymobiegu, więc każdy może skompilować izaładować do jądra moduł sterujący urządzenialub systemu plików; binarne moduły sterującemogą być dystrybuowane z pominięciem GPL
Moduły jądra (c.d.)
☛ Moduły jądra pozwalają na wygenerowanieminimalnego jądra systemu Linux bezwbudowywania w nie żadnych dodatkowychmodułów sterujących urządzeń
☛ Moduły w systemie Linux są wspomagane przeztrzy składowe:☛ zarządzanie modułami (ang. module management)☛ rejestracja modułów sterujących (ang. driver registration)☛ mechanizm rozwiązywania konfliktów (ang. conflict
resolution)
Zarządzanie modułami
☛ Linux pozwala na zintegrowanie modułu zkodem jądra w taki sposób jakby on byłwłączonym podczas kompilacji fragmentemkodu
☛ Ładowanie modułu przebiega w dwóch etapach:☛ program ładujący modułu (ang. module-loader) uzyskuje
od jądra ciągły obszar pamięci wirtualnej jądra w któryprzemieszczony będzie kod wynikowy modułu
☛ wywołanie systemowe przemieszcza kod wynikowy iaktualizuje tablicę symboli jądra za pomocą tablicysymboli modułu
Zarządzanie modułami (c.d.)
☛ Procedura zamawiania modułu (ang. modulerequestor ) pozwala dynamicznie ładowaćmoduły nie bedące w jądrze w sytuacjizapotrzebowania procesu na moduł sterującypliku, urządzenia lub usług sieciowych; takżeodpytuje regularnie jądro, sprawdzając, czyzaładowany moduł pozostaje w użyciu, a gdynie jest już potrzebny, powoduje jego usunięciez pamięci
Zarządzanie modułami - polecenia
☛ /lib/modules/☛ /sbin/depmod☛ /etc/modules.dep☛ modprobe☛ lsmod☛ insmod☛ rmmod☛ funkcje systemowe
☛ query_module, request_module, exec_modprobe, delete_module
Rejestrowanie modułu sterującego
☛ Pozwala poinformować jądro, że nowy modułsterujący został udostępniony
☛ Jądro utrzymuje dynamiczne tablice wszystkichznanych modułów sterujących i dostarczaprocedur umożliwiających dodawanie do nichlub usuwanie z nich modułów w dowolnej chwili
☛ Tablice rejestracyjne zawierają:☛ moduły sterujące urządzeń - np. karta sieeciowa☛ systemy plików - np. NFS☛ protokoły sieciowe - IPX, AX.25☛ format binarny - ELF
Rozwiązywanie konfliktów
☛ Linux wprowadza centralny mechanizmrozwiązywania konfliktów, pomagajacrozstrzygać o dostępie do pewnych zasobówsprzętowych
☛ Ma to zapewnić:☛ ochronę modułów przed rywalizacją o dostęp do zasobów
sprzętowych☛ zapobieganie zaburzaniu działania autosondy (ang.
autoprobes) przez istniejące moduły☛ rozwiązywanie konfliktów między modułami sterującymi
usiłującymi skorzystać z tego samego sprzętu☛ moduł plip.o i moduł lp.o
Zarządzanie procesami
☛ Podstawową zasadą zarządzania procesami wsystemie UNIX jest podział na dwie odrębneoperacje: tworzenie nowych procesów iwykonywanie nowych programów☛ funkcja systemowa fork tworzy nowy proces☛ funkcja systemowa execve wykonuje nowy proces
☛ W systemie UNIX proces obejmuje całośćinformacji, które system operacyjny musiutrzymywać, aby śledzić kontekst wykonaniaindywidualnego programu
Zarządzanie procesami (c.d.)
☛ W systemie Linux kontekst ten można podzielićna trzy grupy określające cechy procesu☛ tożsamość procesu (ang. process’s identity)☛ środowisko (ang. environment) procesu☛ kontekst (ang. context) procesu
Tożsamość procesu
☛ Identyfikator procesu (ang. Process ID)(PID) - każdy proces ma unikalny identyfikator;aplikacja odwołująca się do systemu w celusygnalizacji, zmiany lub zaczekania na innyproces określa procesy systemowi operacyjnemuza pomoca identyfikatorów PID
☛ Uwierzytelnienia (ang. Credentials) - każdyproces musi mieć skojarzony z nim identyfikatorużytkownika oraz jeden lub więcejidentyfikatorów grup określających prawaprocesu do sięgania po zasoby systemowe i pliki
Tożsamość procesu - (c.d.)
☛ Indywidualność (ang. Personality) - niewystępuje w tradycyjnych systemach UNIX, zato w systemie Linux każdy proces ma przypisanyidentyfikator indywidualności, który może niecozmieniać semantykę niektórych funkcjisystemowych; korzystają z tego biliotekiemulacji, aby powodować, że funkcjesystemowe będą zgodne z pewnymi ichszczególnymi odmianami występującymi wsystemach uniksowych
Środowisko procesu☛ Proces dziedziczy środowisko po procesie
macierzystym; składa się ono z dwu wektorówzakończonych znakiem pustym☛ wektor argumentów (ang. argument vector) to wykaz
argumentów wpisanych przez użytkownika w wierszuwywołania programu; na mocy konwencji zaczyna się onod nazwy samego programu
☛ wektor środowiska (ang. environment vector) jestwykazem par “NAZWA=WARTOŚĆ” , kojarzącychnazwane zmienne środowiskowe z dowolnymi wartościamitekstowymi
Środowisko procesu (c.d.)☛ Przekazywanie zmiennych środowiskowych z
jednego procesu do drugiego oraz ichdziedziczenie przez proces potomny dostarczaelastycznych środków przekazywania informacjido różnych składowych oprogramowaniasystemowego na poziomie użytkowym
☛ Mechanizm zmiennych środowiskowychumożliwia dostosowywanie (ang. customization)systemu operacyjnego do specjalnych potrzebprzez zestawianie go z procesów, a niekonfigurowanie jak systemu rozpatrywanegocałościowo (ulubione edytory, języki, itp.)
Kontekst procesu
☛ Kontekst procesu, jako stan wykonywanegoprocesu rozpatrywany w danej chwili, zmieniasię nieustannie ( przeciwnie niż tożsamość iśrodowisko procesu)
☛ kontekst planowania (ang. schedulingcontext) - najważniejsza część kontekstuprocesu; są to informacje potrzebne planiście dozawieszania i wznawiania procesu
☛ rozliczanie (ang. accounting) - informacje ozasobach zużywanych na bieżąco przez każdy zprocesów, jak również o ich łącznej ilości zużytejod momentu startu procesu
Kontekst procesu (c.d.)
☛ tablica plików (ang. file table) zawierawskaźniki do jądrowych struktur plików;wykonując systemowe operacje we/wy, procesyodwołują się do plików za pomocą indeksów dotej tablicy
☛ kontekst systemu plików (ang. file-systemcontext) odnosi się do zamówień na otwarcienowych plików; przechowuje się w tym celuinformacje o bieżącym katalogu głównym oraz okatalogach używanych zastępczo doposzukiwania nowych plików
Kontekst procesu (c.d.)
☛ tablica obsługi sygnałów (ang. signal-handler table) określa procedurę wprzestrzeni adresowej procesu, która ma byćwywołana po nadejściu konkretnego sygnału
☛ kontekst pamięci wirtualnej (ang. virtual-memory context) opisuje całą zawartośćprywatnej przestrzeni adresowej procesu
Procesy i wątki
☛ Linux stosuje dokładnie tą samą wewnętrznąreprezentację dla procesów i wątków; wątekjest po prostu nowym procesem, któremuprzychodzi dzielić ze swoim rodzicem tą samąprzestrzeń adresową
☛ Rozróżnienia między procesem i wątkiemdokonuje się tylko podczas tworzenia nowegowątku za pomocą funkcji systemowej clone☛ fork tworzy nowy proces z własnym, całkowicie nowym
kontekstem☛ clone tworzy odrębny proces z odrębną tożsamością,
któremu pozwala się dzielić struktury danych rodzica
Procesy i wątki (c.d.)
☛ Linux przechowuje konteksty w oddzielnychstrukturach danych w postaci podkontekstów anie w głównej strukturze danych procesu;struktura danych procesu zawiera jedyniewskaźniki do tamtych struktur
☛ Funkcja systemowa clone tworząc nowy proces,przyjmuje argument określający, którepodkonteksty należy skopiować, a które mająbyć wspólne☛ fork jest specjalnym przypadkiem clone, w którym
kopiowane są wszystkie podkonteksty
Procesy i wątki (c.d.)
☛ Proces reprezentuje struktura task_struct☛ Linux stosuje kopiowanie przy zapisie☛ Stany wykonania procesu
☛ aktywny (ang. running) - proces wykonywany albo gotowy☛ interruptable - proces zablokowany, czekający na zasób lub
zdarzenie☛ uninterruptable - proces zablokowany, czekający na zdarzenie
sprzętowe☛ stopped - proces może być wznowiony jedynie przy pomocy
innego procesu (np. debugging)☛ zombie - proces zakończył, lecz dalej jest w strukturach tablic
procesów
Unikanie impasu
☛ Impas stanowi problem przy wzroście liczbysemaforów
☛ Linux omija ten problem przez ograniczenieliczby semaforów oraz żądanie semaforów wkolejnościi rosnącej
Planowanie
☛ Przez planowanie rozumie się przydzielanieczasu jednostki centralnej różnym zadaniomsystemu operacyjnego
☛ W systemie Linux planowanie jako ciąg działań iprzerwań procesów obejmuje takżewykonywanie różnych zadań jądra (ang. kerneltasks)
☛ Wykonywanie zadań jądra obejmuje zarównozadania zlecane przez działający proces, jak izadania działające wewnętrznie na zamówieniemodułu sterującego jakiegoś urządzenia
Synchronizacja jądra
☛ Zamówienie na działanie w trybie jądra możnawykonać na dwa sposoby:☛ Wykonywany program może zamówić usługę systemu
operacyjnego jawnie - za pomocą wywołania systemowego- lub niejawnie, na przykład wskutek braku strony
☛ Może też wystąpić przerwanie pochodzące od modułusterującego urządzenia, które spowoduje, że jednostkacentralna zacznie wykonywać kod zdefiniowanej w jądrzeprocedury obsługi przerwania
☛ Synchronizacja jądra - regulacje pozwalające nawykonywanie sekcji krytycznych jądra bezprzerwań od pochodzacych innych sekcji jądra
Synchronizacja jądra (c.d.)
☛ techniki do ochronych sekcji krytycznych:1. Zwykły kod jądra jest niewywłaszczalny
– gdy przerwanie zegarowe wystąpi w czasie gdy proces wykonuje jądrową procedurę obsługi, znacznik need_resched jest ustawiany aby poinformować jądro o zapotrzebowaniu na planistę po zakończeniu tej procedury i przed wejściem w tryb użytkownika
2. Druga technika dotyczy tych sekcji krytycznych, które występująw procedurach obsługi przerwań– przez wprowadzenie zakazu przerwań w trakciewykonywania sekcji krytycznej jądro gwarantuje, że jejwykonanie przebiegnie bez ryzyka dla współbieżnego dostępu dodzielonych (krytycznych) struktur danych
Synchronizacja jądra (c.d.)
☛ Aby uniknąć pogorszenia wydajności (rozkazywłączania i wyłączania przerwań są kosztowne),w jądrze systemu Linux zastosowanoarchitekturę synchronizacji umożliwiającąwykonywanie długich sekcji krytycznych bezwyłączania przerwań na czas trwania całej sekcji
☛ Procedury obsługi przerwań są podzielona nagórną i dolną połowę (ang. top & bottom half)☛ górna połowa jest zwykłą procedurą przerwania; jej
wykonanie ma wyłączone rekurencyjne przerwania
Synchronizacja jądra (c.d.)
☛ dolna połowa przebiega z włączonymi wszystkimiprzerwaniami i jest nadzorowana przez miniaturowegoplanistę, który zapewnia, że dolne połowy nigdy nieprzerywają się wzajemnie
☛ architektura ta jest uzupełniana przez mechanizmwyłączania wybranych dolnych połów podczaswykonywania zwykłego, pierwszoplanowego kodu jądra
☛ sekcje krytyczne procedur obsługi przerwań sązaprogramowane jako dolne połowy i gdy jądro działającpierwszoplanowo, zechce wejść do sekcji krytycznej,wówczas może zabronić działania dowolnych z dolnychpołów w celu obronienia się przed przerwaniem zniepożądanej sekcji krytycznej
Poziomy ochrony przedprzerwaniami
górne połowy procedur obsługi przerwań
dolne połowy procedur obsługi przerwań
systemowe procedury jądrowe (niewywłaszczalne)
programy trybu użytkownika (wywłaszczalne) zwię
ksze
nie
prio
ryte
tu
Poziomy ochrony przedprzerwaniami (c.d.)
☛ Każdy poziom może być przerwany przez kodwykonywany na wyższym poziomie, ale nigdynie będzie przerwany przez kod wykonywany natym samym lub niższym poziomie
☛ Kody w trybie użytkownika mogą być zawszewywłaszczane przez inne procesy w chwilachokreślonych przerwaniami zegarowymisłużącymi podziałowi czasu
Planowanie procesów
☛ Linux ma dwa oddzielne algorytmy planowaniaprocesów:☛ algorytm z podziałem czasu do sprawiedliwego
planowania z wywłaszczeniami działania wielu procesów☛ algorytm planowania czasu rzeczywistego, w którym
priorytety bezwzględne są ważniejsze niż sprawiedliwość
☛ W skład tożsamości procesu wchodzi klasadefiniująca, który z algorytmów ma byćzastosowany do procesu
Planowanie procesów (c.d.)☛ Dla procesów z podziałem czasu system Linux
używa algorytmu priorytetowego, opartego nakredytowaniu
☛ Kiedy należy wybrać nowy proces wybiera sięproces z największym kredytem, jeśli każdyproces wyczerpał kredyt udziela się go☛ wzór na kredytowanie:
nowy_kredyt = 0.5*kredyt + priorytetuzględnia dwa czynniki historię procesu i jego priorytet
☛ Ten system kredytowania automatycznie preferujeprocesy interakcyjne, ograniczone przez we/wy, dlaktórych istotny jest czas odpowiedzi
Planowanie procesów (c.d.)☛ Linux realizuje dwie klasy planowania w czasie
rzeczywistym: FCFS i RR; w obu przypadkachoprócz klasy planowania każdy proces marównież priorytet☛ planista wykonuje proces o największym priorytecie;
spośród procesów o jednakowym priorytecie planistawybiera proces najdłużej oczekujący
☛ procesy FCFS działają do końca lub do zablokowania☛ proces rotacyjny zostanie po chwili wywłaszczony i
przesunięty na koniec kolejki planowania, tak więcprocesy rotowane o równych priorytetach będąautomatycznie dzieliły czas między siebie
☛ planowanie w systemie Linux: łagodne a nie rygorystyczne
Wywołania systemowe -planowanie procesów
☛ nice () - zmienia priorytet zwykłego procesu☛ getpriority () - pobiera maxymalny priorytet grupy zwykłych
procesów☛ setpriority () - ustawia priorytet grupy zwykłych procesów☛ sched_getscheduler () - pobiera strategię planowania procesu☛ sched_setscheduler () - ustawia strategię planowania procesu☛ sched_getparam () - pobiera priorytet planowania procesów☛ sched_setparam () - ustawia priorytet procesu☛ sched_yield () - dobrowolnie oddaje sterownie bez blokownia☛ sched_get_priority_max () - pobiera maxymalny priorytet☛ sched_get_priority_min () - pobiera minimalny priorytet☛ sched rr get interval () - pobiera kwant czasu
Wieloprzetwarzanie symetryczne
☛ Linux-2.0 był pierwszym stabilnym jądremsystemu wspierającym symetryczny sprzętwieloprocesorowy (ang. Symmetricmultiprocessor - SMP); poszczególne procesy iwątki mogą być wykonywane na oddzielnychprocesorach
☛ W celu spełnienia niewywłaszczeniowychwymagań synchronizacji jądra implementacjaSMP w tym jądrze narzuca ograniczenie, że wdanej chwili tylko jeden procesor możewykonywać kod w trybie jądra
Zarządzanie pamiecią
☛ Dwie skłądowe:☛ system zarządzania pamiecią fizyczną (ang.
physical memory-management system), któryzajmuje się przydzielaniem i zwalnianiem stron,ich grup i małych bloków pamięci
☛ mechanizmy do obsługi pamięci wirtualnej,będącej odwzorowaniem pamięci operacyjnej naprzestrzenie adresowe wykonywanych procesów
Zarządzanie pamięcią fizyczną☛ Dyspozytor stron (ang. page allocator) w jądrze
odpowiada za przydział i zwalnianie wszystkichfizycznych stron i jest w stanie przydzielać nazamówienie partie stron fizycznie ze sobąsąsiadujących
☛ Dyspozytor stosuje algorytm sąsiednich stert(buddy-heap) w celu rejestrowania dostępychramek☛ wszystkie bloki są zgrupowane w 13 listach: po 32, 64,
128, 256, 512,...., 131072 bajtów☛ każdy obszar zdatnej do przydziału pamięci ma
przyległego partnera, czyli sąsiada ( stąd nazwa)
Zarządzanie pamięcią fizyczną(c.d.)
☛ Dyspozytor stron (c.d.)
☛ Ilekroć dwa sąsiadujace obszary są zwalniane, łaczy się je wwiększy obszar
☛ Z drugiej strony, gdy małe zamówienie na pamięć nie możebyć zrealizowane przez przydział istniejącego, małegowolnego obszaru, wówczas w celu zrealizowaniazamówienia większy wolny obszar zostanie podzielony nadwa sąsiednie
Podział pamięci w algorytmiesąsiednich stert
16 kB
8 kB
8 kB
8 kB
4 kB
4 kB
Zarządzanie pamięcią fizyczną(c.d.)
☛ Udoskonalenie: alokator płytowy (Solaris 2.4)☛ Obszar pamięci głównej, zawierający pamięci
podręczne, jest podzielony na płyty (ang. slabs);każda płyta zawiera bloki zaalokowane i wolne
☛ Alokator płytowy grupuje obiekty w pamięcipodręcznej☛ np. przy otwieraniu pliku obszar pamięci potrzebny do
przechowania obiektu “otwartego pliku” jest pobierany zpamięci podręcznej alokatora płytowego filp (ang. File pointer)
☛ W celu uniknięcia reinicjowania obiektu, alokatorpłytowy pozostawia go w pamięci
☛ Płyty są alokowane za pomocą algorytmu stert
Zarządzanie pamięcią fizyczną(c.d.)
☛ slabinfo - version: 1.0kmem_cache 28 42pio_request 0 0tcp_tw_bucket 0 0tcp_bind_bucket 11 127tcp_open_request 0 0skbuff_head_cache 0 25sock 37 40filp 278 294signal_queue 0 29buffer_head 593 630mm_struct 32 62vm_area_struct 1292 1323dentry_cache 2007 2015files_cache 31 36uid_cache 4 127
size-131072 0 0size-65536 0 0size-32768 0 0size-16384 0 0size-8192 0 0size-4096 8 8size-2048 40 44size-1024 12 16size-512 18 24size-256 27 28size-128 428 450size-64 108 126size-32 384 441slab_cache 20 63
Zarządzanie pamięcią fizyczną(c.d.)
☛ Przydziały pamięci w jądrze systemu Linux sąalbo zarezerwowane statycznie przez modułysterujące w postaci ciągłych obszarów pamięci,przydzielanych w czasie rozruchu (ang. boottime) albo dynamicznie za pomocą dyspozytorastron
☛ Funkcje jądra nie muszą używać dyspozytorastron
Zarządzanie pamięcią fizyczną(c.d.)☛ Specjalizowane podsystemy zarządzania w
Linuxie (korzystają z usług dyspozytora stron)☛ Podsystem pamięci wirtualnej (omawiany dalej)☛ Dyspozytor obszarów zmiennej długości
☛ funkcja kmalloc przydziela na żądanie całe strony a potemdzieli je na mniejsze kawałki
☛ Dwie trwałe pamięci podręczne☛ podręczna pamięć buforów w kontakcie z urządzeniami
blokowymi (dyski) stanowi podstawę operacji we/wy☛ podręczna pamięć stron do przechowywania całych
zawartości plików (NFS, dyskowe systemy plików)
☛
Pamięć wirtualna
☛ System pamięci wirtualnej systemu Linuxodpowiada za opiekę nad przestrzenią adresowąwidoczną dla każdego z procesów. Tworzy onstrony pamięci wirtualnej na żądanie i zarządzasprowadzaniem ich z dysku lub ich wynoszniemz powrotem na dysk w razie potrzeby
Pamięć wirtualna (c.d.)
☛ W systemie Linux zarządca pamięci wirtualnejutrzymuje dwa osobne obrazy przestrzeniadresowej procesu:☛ obraz logiczny odzwierciedlający rozkazy, za pomocą
których system pamięci wirtualnej ukształtował wyglądprzestrzeni adresowej; na tym obrazie przestrzeń adresowaskłada się ze zbioru nie zachodzących na siebie obszarówreprezentujących ciągłe podzbiory przyległych stronprzestrzeni adresowej
☛ obszar pamięci jest opisany przez strukturę vm_area_struct
☛ obraz fizyczny każdej przestrzeni adresowej pamiętany wsprzętowej tablicy stron procesu
Pamięć wirtulana (c.d.)☛ Obszary pamięci wirtualnej są określone przez:
☛ zaplecze obszaru (ang. backing store), określająca skądpochodzą strony; większość obszarów ma jako swojezaplecze pliki lub nie ma żadnego obszaru ( obszar ozerowych wymaganiach (ang. demand-zero) )
☛ sposób jego reagowania na pisanie (wspólne (ang. pagesharing) lub prywatne(ang. copy-on-write) )
☛ Jądro tworzy nową wirtualną przestrzeńadresową w dokładnie dwu sytuacjach:1. Gdy proces rozpoczyna wykonanie nowego programu za
pomocą funkcji systemowej exec2. Przy tworzeniu nowego procesu za pomocą funkcji
systemowej fork
Pamięć wirtualna (c.d.)
☛ Kiedy następuje wykonanie nowego procesu(exec), wtedy proces otrzymuje nową,całkowicie pustą przestrzeń wirtualną;zapełnianie tej przestrzeni adresowej obszaramipamięci wirtualnej należy do procedurładujących program
☛ Tworzenie procesu za pomocą funkcji forkobejmuje utworzenie pełnej kopii wirtualnejprzestrzeni adresowej istniejącego programu
Pamięć wirtualna (c.d.)
☛ (c.d.)☛ jądro kopiuje deskryptory vm_area_struct procesu
macierzystego, a następnie tworzy nowy zbiór tablic strondla procesu macierzystego
☛ tablice stron procesu macierzystego są kopiowane wprostdo tablic procesu potomnego ze zwiększeniem licznikaodwołań każdej strony
☛ po operacji fork procesy macierzysty i potomny dzielą wswoich przestrzeniach adresowych te same fizyczne stronypamięci
Pamięć wirtualna (c.d.)☛ Linux nie implementuje wymiany całego procesu☛ System stronicowania pamięci wirtualnej zajmuje się
przemieszczaniem stron pamięci z pamięci operacyjnejna dysk, kiedy występuje zapotrzebowanie na pamięćoperacyjną
☛ System stronicowania można podzielić na dwie części:☛ algorytm postępowania (ang. pageout-policy) decydujący o tym,
które strony zapisywać na dysku i kiedy; zmodyfikowana wersjaalgorytmu drugiej szansy z postarzaniem stron (LFU)
☛ mechanizm stronicowania (ang. paging mechanism), któryrealizuje przesłania i który sprowadza strony danych z powrotemdo pamięci fizycznej, kiedy staną się potrzebne; algorytm next-fit
Pamięć wirtualna (c.d.)
☛ Jądro systemu Linux rezerwuje stały, zależny odarchitektury obszar wirtualnej przestrzeni adresowejkażdego procesu do swego wewnętrznego użytku
☛ Strefa wirtualnej pamięci jądra zawiera dwa obszary:☛ obszar statyczny zawierający odwołania tablicy stron do każdej
dostępnej, fizycznej strony pamięci w systemie☛ upraszczenie tłumaczenia adresów fizycznych na wirtualne w czasie
wykonywania kodu jądra
☛ reszta zarezerwowanego obszaru nie jest zarezerwowana wżadnym konkretnym celu
☛ wpisy tablicy stron odnoszące się do tego przedziału adresówmogą być zmieniane przez jądro, aby stosownie do potrzebwskazywać dowolne inne fragmenty pamięci
Pamięć wirtualna (c.d.)☛ Funkcja vmalloc przydziela dowolną liczbę stron
pamięci i odwzorowuje je w jeden obszarwirtualnej pamięci jądra, pozwalając naprzydział wielkich, ciągłych porcji pamięci nawetwtedy, kiedy do zrealizowania zamówienia niema wystarczającej liczby przylegających dosiebie stron fizycznych
☛ Funkcja vremap odwzorowuje ciąg adresówwirtualnych w celu wskazania obszaru pamięciużywanego przez moduły sterujące doodwzorowywania plików pamięci
Wykonywanie i ładowanieprogramów użytkownika
☛ Wykonanie programów użytkownika w systemieLinux następuje przez wywołanie funkcji exec
☛ Linux operuje tablicą możliwych funkcjiładujących dając każdej z nich szansęspróbowania umieszczenia w pamięci danegopliku podczas wykonywania funkcji systemowejexec
☛ Zezwalając na zarejestrowanie wielu procedurładujących Linux może łatwo dostarczać wramach jednego systemu zarówno format ELFjak i a.out (popularny w starszych Unixach)
Wykonywanie i ładowanieprogramów użytkownika (c.d.)
☛ Linux nie używa programu ładującego (loader)☛ Odwzorowanie stron pliku binarnego w obszary
pamięci wirtualnej☛ Obowiązkiem procedur ładujących jądra jest
ustalenie początkowego odwzorowania pamięci☛ w tym określenie licznika rozkazów
☛ Załadowanie strony do pamięci fizycznej jestpowodowane dopiero po nieudanej próbieodwołania do niej przez program
Wykonywanie i ładowanieprogramów użytkownika (c.d.)
☛ Plik binarny formatu ELF składa się z nagłówka,oraz z sekcji kończących się i rozpoczynających sięna granicach stron
☛ Program ładujący formatu ELF czyta nagłówek iodwzorowywuje sekcje pliku na osobne obszarypamięci wirtualnej☛ stos zawiera kopie argumentów i zmienne środowiskowe☛ kod binarny jest odwzorowany jako obszar do czytania☛ dane są odwzorowane jako obszar do zapisu☛ obszar o zmiennej długości, którego granicę określa wskaźnik
brk
Wygląd pamięci w formacie ELF
dane tworzone podczas wykonywania programu
pamięć wirtualna jądra
stos
obszar odwzorowywany w pamięci
obszar odwzorowywany w pamięci
obszar odwzorowywany w pamięci
dane bez wartości początkowych
dane z wartościami początkowymi
tekst programu
obszar zakazany
wskaźnik brk
pamięć niewidoczna dla kodu z poziomu użytkownika
Łączenie statyczne i dynamiczne
☛ Program, którego niezbędne funkcje z biblioteksystemowych zostały osadzone wprost wwykonywalnym pliku binarnym jest statycznie(ang. statically) połączony z bibliotekami
☛ Podstawową wadą łączenia statycznego jest to,że każdy wygenerowany program musi zawieraćkopie dokładnie tych samych, popularnychsystemowych funkcji bibiliotecznych
Łączenie statyczne idynamiczne (c.d.)☛ Łączenie dynamiczne (ang. dynamic) jest
bardziej wydajne pod względem wykorzystaniazarówno pamięci operacyjnej jak i dyskowejponieważ ładuje biblioteki systemowe dopamięci tylko raz
☛ Każdy program łączony dynamicznie zawieramałą, statycznie dołączaną funkcję, któraodwzorowuje bibliotekę łączenia modułówprogramu w pamięci i wykonuje jej kod
☛ Biblioteki są kompilowane w kodzie niezależnymod położenia (ang. position-independent codePIC) - można wykonywać pod każdym adresem
Systemy plików
☛ Dla użytkownika system plików systemu Linuxwygląda jak hierarchiczne drzewo katalogów osemantyce uniksowej
☛ Wewnątrz systemu Linux zastosowano warstwęabstrakcji, zwaną wirtualnym systemem plików(ang. virtual file system (VFS)), pozwalającą nazarządzanie różnymi systemami plików
Systemy plików (c.d.)
☛ VFS systemu Linux został zaprojektowany nazasadach obiektowych i ma dwie składowe:☛ zbiór definicji, jak powinien wyglądać obiekt o nazwie
plik; w VFS zdefiniowano trzy podstawowe typy obiektów☛ struktury obiektu i-węzła (ang. inode-object) i obiektu pliku
(ang. file-object) reprezentujące poszczególne pliki☛ obiekt systemu plików (ang. file system object)
reprezentujący cały system plików
☛ warstwa oprogramowania do działań na takich obiektach
☛ obowiązkiem VFS jest udostępnianie i-węzłów☛ identyfikacja i-węzeła: (system plików, numer_i-węzła)☛ VFS definiuje operacje katalogowe w obiekcie i-węzła a
nie na obiekcie pliku
System plików Linux Ext2fs (1)
☛ Ext2fs (ang. second extended file system)wykorzystuje mechanizm podobny dostosowanego w szybkim systemie plików BSD(ang. Fast File System - (ffs)) mechanizmuodnajdowywania bloków danych należących dokonkretnego pliku, który przechowuje wskaźnikido bloków danych w blokach pośrednich,spiętrzanych w całym systemie aż do trzeciegopoziomu
System plików Linux Ext2fs (2)
☛ Główna różnica międy ext2fs i ffs dotyczysposobu przydziału dysku☛ w systemie ffs dysk jest przydzielany plikom blokami
wielkści 8KB, z dzieleniem bloków na porcje 1 KB w celupamiętania małych plików lub niepełnych bloków nakońcach plików
☛ ext2fs nie używa w ogóle bloków cząstkowych, natomiastdokonuje wszystkich przydziałów za pomocą mniejszychjednostek. Domyślny rozmiar bloku w ext2fs wynosi 1KB, choć stosuje się bloki długości 2KB i 4KB
System plików Linux Ext2fs (3)
☛ (c.d.)☛ ext2fs stosuje politykę przydziału zmierzającą do
umieszczania logicznie sąsiadujących bloków pliku wfizycznie przylegajacych blokach dyskowych, dziękiczemu może on w jednej operacji przedkładać zamówieniawe/wy dla kilku bloków
☛ ext2fs można podzielić na dwie części☛ przydział grupy bloków☛ przydział (w miarę możliwości) ciągły wewnątrz grupy
bloków na podstawie mapy bitowej wszystkich wolnychbloków w grupie
☛ najpierw szuka się całego wolnego bajtu w mapie bitowej☛ jeśli nie ma wolnego bajtu szuka się wolnego bitu
Zasady przydziału bloków -ext2fs
blok zajęty
blok wolny
granica bitu
granica bajtu
blok wybrany przez procedurę przydziału
kierunek przeszukiwania mapy bitów
przydzielenie przyleglych wolnych bloków
przydzielenie rozrzuconych wolnych bloków
System plików Linux Proc
☛ Procesowy system plików (ang. proc filesystem) jest systemem plików, którego dane niesą nigdzie pamiętane, natomiast oblicza się jena żądanie, stosownie do wydawanych przezużytkownika zamówień we/wy☛ oprócz systemu Linux stosowany w SVR4 UNIX
☛ proc musi realizować strukturę katalogów orazdocieranie do zawartości pliku; musi definiowaćniepowtarzalny i trwały numer i-węzła dlakażdego katalogu i skojarzonych z nim plików
System plików Linux Proc (c.d.)
☛ (c.d.)☛ korzysta z numerów i-węzła w celu rozpoznania operacji
potrzebnej wówczas, gdy użytkownik próbuje czytać dane zjakiegoś i-węzła lub odnaleźć coś w i-węźle katalogu
☛ podczas czytania danych z któregoś z tych plików, systemplików proc będzie gromadził odpowiednie informacjenadając im formę tekstową i będzie umieszczał w buforzezamawiającego je procesu
☛ cat /proc/meminfo☛ /proc/sys jest osiągane za pomocą wywołania systemowego
sysctl
Wejście/wyjście
☛ Systemy plików systemu Linux udostępniająpamięć dyskową poprzez dwie pamięcipodręczne:☛ pamięć podręczną stron, jednolitą z systemem pamięci
wirtualnej☛ pamięć podręczną buforów indeksowaną fizycznymi
blokami dyskowymi
Wejście/wyjście (c.d.)
☛ Linux dzieli wszystkie urządzenia na trzy klasy:☛ urządzenia blokowe (ang. block devices) pozwalające na
dostęp swobodny do całkowicie niezależnych, o stałymrozmiarze bloków danych (dysk, CD-ROM)
☛ urządzenia znakowe (ang. character devices) obejmująwiele innych urządzeń i nie muszą mieć wszystkichwłasności regularnych plików
☛ urządzenia sieciowe(ang. network devices) komunikacja zużytkownikiem za pomocą podsystemu sieciowego jądra
Struktura blokowa modułówsterujących urządzeń
system plików
moduł sterującyprotokołu
moduł sterujący urządzenia SCSI
zarządca SCSI
zarządca zamówień
bufor pamięci podręcznej
plik urządzenia blokowego
plik urządzenia znakowego
moduł sterujący urządzenia znakowego
moduł sterujący TTY
warunki pracy linii
gniazdo sieciowe
moduł sterującyurządzenia blokowego
moduł sterujący urządzenia sieciowego
aplikacja użytkownika
Urządzenia blokowe☛ Dostarczają podstawowego interfejsu do
wszystkich dysków w systemie☛ Podręczna pamięć buforów (ang. block buffer)
służy dwu głównym celom:☛ działa jako pula buforów dla operacji we/wy będących w
toku☛ działa jako pamięć podręczna zakończonych operacji
we/wy
☛ Zarządca zamówień (ang. request manager)administruje czytaniem buforów z modułuobsługi urządzenia blokowego i zapisywaniemich zawartości w tym module ( ll_rw_block )
Urządzenia znakowe
☛ Modułem sterującym urządzenia znakowegomoże być moduł obsługi niemal dowolnegourządzenia, które nie oferuje swobodnegodostępu do bloków o stałej długości
☛ Moduły sterujące urządzeń znakowychzarejestrowane w jądrze systemu Linux musząteż rejestrować zbiór funkcji realizującychróżnorodne plikowe działania we/wy, które danymoduł potrafi wykonywać
Urządzenia znakowe (c.d.)☛ Jądro prawie wcale nie przetwarza wstępnie
zamówienia na czytanie lub pisanie na urządzeniuznakowym i przekazuje po prostu zamówienie dowytypowanego urządzenia, pozostawiając muobsługę zamówienia
☛ Głównym wyjątkiem od tej reguły jest specjalnypodzbiór modułów sterujących urządzeńznakowych, oprogramowujących terminale;standartdowy interfejs z terminalami jądroobsługuje za pomocą struktur tty_struct
☛ Ogranizacja linii (ang. line discipline) to sposobyinterpretacji danych z terminali (np. tty, PPP)
Komunikacja międzyprocesowa☛ Podobnie jak UNIX, Linux powiadamia procesy o
wystąpieniu zdarzenia przesyłając sygnał☛ Liczba dostępnych sygnałów jest skończona i nie
mogą przenosić one informacji: proces stajewyłącznie wobec faktu, że sygnał wystąpił
☛ Jądro systemu Linux nie korzysta wewnętrznie zsygnałów w celu komunikowania się z procesamiwykonywanymi w trybie jądra; zamiast tegokomunikacja w jądrze związana z pojawiającymisię asynchronicznie zdarzeniami będzie sięodbywać za pomocą planowania stanów istruktur wait_queue
Przekazywanie danych międzyprocesami☛ Uniksowy mechanizm potoku (ang. pipe)
umożliwia procesowi potomnemu (ang. child)dziedziczenie kanału komunikacyjnego doswojego przodka (ang. parent), dane zapisanena jednym końcu potoku mogą być czytane nadrugim
☛ Potoki wyglądają jak pewien typ z VFS i-węzła imają dwie kolejki wait_queue do synchronizacjipisania i czytania
☛ Pamięć dzielona (ang. shared memory) jestnajszybszym środkiem przekazywania wielkichlub małych ilości danych
Przekazywanie danych międzyprocesami (c.d.)
☛ Wszelkie dane zapisane przez proces w obszarzepamięci dzielonej mogą być czytane natychmiastprzez inny proces, który ma ten obszarodwzorowany w swojej pamięci adresowej
☛ Główna wada pamięci dzielonej to braksynchronizacji i dlatego nabiera szczególnejużyteczności w połączeniu z innymmechanizmem komunikacji międzyprocesowej,który taką synchronizację zapewni
Obiekt pamięci dzielonej
☛ Obszar pamięci dzielonej w systemie Linux jestobiektem trwałym, który może być tworzony iusuwany przez procesy
☛ Obiekt taki jest traktowany tak, jakby to byłamała, niezależna przestrzeń adresowa
☛ Obiekt pamięci dzielonej zachowuje się jakpamięć pomocnicza dla obszarów pamięcidzielonej, na podobieństwo pliku pełniącegofunkcje pamięci pomocniczej dla obszarówpamięci odwzorowywanych w pamięcioperacyjnej
Obiekt pamięci dzielonej (c.d.)
☛ Gdy następuje odwzorowanie pliku w obszarzewirtualnej przestrzeni adresowej, wówczaswszelkie pojawiające się braki stron powodująodwzorowanie w pamięci wirtualnejodpowiednich stron pliku
☛ Podobnie, braki bezpośrednich odwzorowaństron pamięci dzielonej powodują odwzorowaniestron z trwałego obiektu pamięci dzielonej
☛ Obiekty pamięci dzielonej utrzymują swojązawartość nawet wtedy, gdy aktualnie żadenproces nie odwzorowuje ich pamięci wirtualnej
Struktura sieci
☛ Działania sieciowe są kluczowym obszaremfunkcjonalności systemu Linux☛ Linux dostarcza standardowych protokołów
internetowych, stosowanych w większości usługkomunikacyjnych między systemami uniksowymi
☛ Linux realizuje pewną liczbę protokołów właściwych dlainnych nieuniksowych systemów operacyjnych (Appletalk,IPX, AX25)
Struktura sieci (c.d.)☛ Praca w sieci jest wewnętrznie w jądrze systemu
Linux implementowana za pomocą trzechwarstw oprogramowania:☛ interfejsu gniazd (ang. socket interface)
☛ aplikacje użytkownika dokonują wszelkich zamówień nausługi sieciowe za pomocą interfejsu gniazd BSD (funkcjasystemowa socket)
☛ sieciowa część interfejsu gniazd: struktura INET
☛ modułów obsługi protokołów (ang. protocol drivers)☛ łączność między warstwami za pomocą struktur skbuff
(/usr/include/linux/skbuff.h)☛ fragmentacja i defragmentacja pakietów
☛ modułów sterujących urządzeń sieciowych (ang. networkdevice drivers)
Struktura sieci (c.d.)
☛ Najważniejszym zbiorem protokołów w systemiesieciowym systemu Linux jest kompletprotokołów internetowych (IP)☛ protokół wyznaczania tras (ang. routing protocol)
dokonuje wyboru tras między różnymi komputeramimacierzystymi położonymi w dowolnym miejscu sieci
☛ na szczycie protokołu wyznaczania tras są zbudowaneprotokoły UDP, TCP
Struktura sk_buffsk
stampdev
hnh
macdstcblen
csumprotocoltruesize
headdatatailend
destructor
Pointer to owning socketArrival timePointer to receiving/transmiting devicePointer to transport layer headerPointer to network layer headerPointer to link layer headerPointer to dst_entryTCP per-packet control informationActual data lengthChecksumPacket network protocolBuffer sizePointer to head of bufferPointer to data headPointer to tailPointer to endPointer to destruct function
Linux - struktura sieci
aplikacja sieciowa
gniazda BSD
gniazda INET
TCP UDP
IP
PPP SLIP Ethernet
ARP
jądro
użytkownik
Bezpieczeństwo
☛ Uwierzytelnianie (ang. authentication) -zapewnienie, że nikomu nie uda się uzyskaćdostępu do systemu bez wykazania, że ma dotego prawo
☛ Kontrola dostępu (ang. access control) -mechanizmy sprawdzania czy użytkownik maprawo dostępu do danego obiektu
Bezpieczeństwo (c.d.)
☛ System dołączalnych modułów uwierzytelniania(ang. pluggable authentication modules (PAM))jest dostępny w systemie Linux
☛ PAM korzysta ze wspólnej biblioteki, którą możesię posłużyć dowolna składowa systemupotrzebująca uwierzytelniać (ang. authenticate)użytkowników
☛ Kontrolowanie dostępu (ang. access control) wsystemach uniksowych, włączając w to systemLinux, odbywa się za pomocą niepowtarzalnychidentyfikatorów numerycznych
Bezpieczeństwo (c.d.)☛ Identyfikator użytkownika (ang. user identifier -
uid ) określa jednego użytkownika lub jedenzbiór praw dostępu; identyfikator grupy (ang.group identifier - gid) można stosować dowielu użytkowników
☛ System Linux nadzoruje dostępy przezprzypisywanie obiektom masek ochronnych(ang. protections mask), określających, któretryby dostępu: pisanie, czytanie lubwykonywanie są udzielane procesom zdostępem właściciela, grupy lub świata (ang.world access)
Bezpieczeństwo (c.d.)
☛ W systemie Linux zrealizowano standardowy,uniksowy mechanizm setuid (zwiększenierzeczywistych przywilejów procesu przez skutecznyidentyfikator pliku) rozszerzony na dwa sposoby:☛ zaimplementowano określony w normie POSIX mechanizm
chronionego identyfikatora użytkownika (ang. saved user-id),który pozwala procesowi raz po razie pozbywać się i ponownienabywać swój identyfikator skuteczny (ang. effective uid)
☛ zaimplementowano dodawanie charakterystyki procesu, copowoduje udzielanie jedynie podzbioru praw skutecznegoidentyfikatora użytkownika (cechy procesu fsuid, fsgid mogąbyć określane niezależnie od identyfikatorów skutecznych coumożliwia dostęp do plików w imieniu innego użytkownika)
Bezpieczeństwo (c.d.)
☛ Linux ma jeszcze jeden mechanizm, któryspopularyzował się w nowoczesnych systemachuniksowych jako środek elastycznegoprzekazywania praw od jednego programu dodrugiego; po utworzeniu między dowolnymiprocesami w systemie lokalnego gniazdasieciowego każdy z procesów może wysyłaćdrugiemu deskryptor jednego ze swoichotwartych plików; umożliwia to klientowiwybiórcze przekazanie praw dostępu do plikówjakiemuś procesowi serwera, bez dawania mujakichkolwiek innych przywilejów
Podsumowanie (1)
☛ Linux to nowoczesny, darmowy, systemoperacyjny, którego podstawą są standardysystemu Unix☛ działa na wielu architekturach☛ interfejs programowy i użytkowy są zgodne ze
standardowymi systemami uniksowymi
☛ Jądro systemu operacyjnego Linux wykonane wtradycyjnej monolitycznej postaci jestoryginalne i umożliwia wykonywanie sporej ilościoprogramowania uniksowego
Podsumowanie (2)
☛ Linux jest systemem wielodostępnym zpodziałem czasu☛ nowe procesy mogą dzielić wybrane części swegośrodowiska co umożliwia wielowątkowość
☛ komunikację międzyprocesową zapewniają mechanizmysystemu V (semafory, kolejki, pamięć dzielona) jak iinterfejs gniazd BSD
☛ Systemy plików urządzeń kontaktują się zpamięcią dyskową za pomocą dwóch pamięcipodręcznych: stron i buforów
Podsumowanie (3)
☛ System zarządzania pamięcią posługuje siędzieleniem stron i techniką kopiowania przyzapisie
☛ Strony są ładowane na żądanie z chwiląpierwszego do nich odwołania, a w przypadkukonieczności odzyskania pamięci operacyjnejpowrotne kopiowanie stron do pamięcipomocniczej odbywa się według algorytmu LFU