‹#›/43 Struktura a rozhraní OS PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ 03 ‹#›/43 lSpráva procesů lSpráva operační paměti lSpráva souborů lSpráva I/O zařízení lSpráva sekundárních pamětí lSpráva síťových služeb lOchranný systém lInterpret příkazů (shell) KOMPONENTY OS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 user and other system programs hardware STRUKTURA OS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ operating system services system calls GUI batch command line user interfaces program execution I/O operations communication file systems resource allocation accounting protection and security error detection ‹#›/43 lProces (aktivní entita) je spuštěný program (pasivní entita) ●jeden program může být zároveň spuštěn řadou uživatelů ●proces je jednotkou práce systému ●procesy jádra OS ●uživatelské procesy lProces pro svou činnost potřebuje zdroje ●procesor, paměť, soubory ●zdroje se alokují při spuštění nebo při běhu SPRÁVA PROCESŮ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lTypické aktivity OS v oblasti správy procesů ●vytváření a ukončování uživatelských a systémových procesů ●potlačování (suspending) a obnovování (resuming) procesů ●mechanismy pro synchronizaci procesů ●mechanismy pro komunikaci mezi procesy ●mechanismy pro detekci a řešení uváznutí (deadlock) SPRÁVA PROCESŮ (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lPři spuštění procesu musíme program nahrát do paměti lPozději může proces vyžadovat dodatečnou paměť pro data a tuto paměť OS vracet lJakmile proces končí, musí OS veškerou paměť užívanou procesem opět uvolnit SPRÁVA OPERAČNÍ PAMĚTI PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lTypické aktivity OS v oblasti správy paměti ●znalost, která část paměti je využívána a kým (kterým procesem) ●přidělování (alokace) a uvolňování (dealokace) paměti podle požadavků procesů ●rozhodování o tom, který proces kdy zavést do paměti SPRÁVA OPERAČNÍ PAMĚTI PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lSoubor ●kolekce souvisejících informací definovaná svým tvůrcem ●může mít strukturu, ale nemusí ●z hlediska OS typicky jen posloupnost bajtů lI/O zařízení na kterých jsou soubory uloženy mohou být nejrůznějšího typu ●magnetické disky, optické disky, magnetické pásky ●OS zavádí abstraktní koncept souboru SPRÁVA SOUBORŮ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lTypické aktivity OS v oblasti správy souborů ●vytváření a rušení souborů ●vytváření a rušení adresářů (složek) ●základní operace pro manipulaci se soubory a adresáři (např. čtení ze souboru, zápis do souboru, seznam souborů v adresáři) ●zálohování SPRÁVA SOUBORŮ (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lSnaha o skrytí specifik jednotlivých I/O zařízení ●co nejjednotnější přístup k jednotlivých I/O zařízením ●mnoho OS zpřístupňuje I/O zařízení přes speciální soubory ●/dev/sda, /dev/lp0 v UNIXu ●\\.\PHYSICALDRIVE2, CONIN$ ve Win32 lOvladače jednotlivých HW komponent lŘízení bufferů, kešování, spooling SPRÁVA I/O ZAŘÍZENÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lTypické sekundární paměti jsou disky lSpráva sekundárních pamětí obvykle formou souborů – souborového systému lTypické aktivity OS ●správa volného místa ●přidělování místa ●plánování činnosti disku (které požadavky kdy vyřídit) SPRÁVA SEKUNDÁRNÍ PAMĚTI PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lKomunikace je řízena protokolem ●protokol je několikastranný algoritmus pro dosažení určitého cíle lSnaha o transparentnost ●síťové souborové systémy (SMB, NFS, …) ●API podobné jako přístup k souborům ● SPRÁVA SÍŤOVÝCH SLUŽEB PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lV multitaskingovém a multiuživatelském OS musíme jednotlivé procesy navzájem chránit lOchrana je mechanismus, který řídí přístup programů, procesů a uživatelů ke zdrojům počítačového systému ●HW za pomocí OS zajišťuje, že proces může používat pouze adresy svého adresového prostoru ●časovač brání jednomu procesu v získání plného přístupu k CPU ●režim CPU brání uživatelským procesům spouštět privilegované instrukce lOchranný mechanismus rozlišuje autorizované a neautorizované použití prostředků OCHRANNÝ SYSTÉM PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lInterpret příkazů, neboli command-line interpreter (command line interface - CLI), neboli shell ●úkolem je získávat příkazy od uživatele a provádět je lZa tento interpret příkazů můžeme považovat i moderní GUI lNěkdy je interpret příkazů přímo součást jádra operačního systému, někdy je to jen speciální program INTERPRET PŘÍKAZŮ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lZabezpečují efektivní provoz samotného OS lAlokace zdrojů ●plánovací algoritmy pro přidělování CPU ●přidělování přístupu k tiskárnám apod. lÚčtování ●máme přehled o tom, kteří uživatelé kdy využily které zdroje lOchrana ●autentizace, řízení přístupu INTERNÍ SLUŽBY OS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lSystémová volání tvoří rozhraní mezi uživatelským procesem a OS ●typicky jsou popsána jako instrukce assembleru a jsou uvedena v programátorském manuálu k OS ●vyšší programovací jazyky obsahují některé funkce, které odpovídají systémovým voláním (např. open, write) a dále knihovní funkce, které poskytují vyšší funkčnost a v rámci této spouští (třeba hned několik) systémových volání (např. fopen, fwrite). l SYSTÉMOVÁ VOLÁNÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 SYSTÉMOVÁ VOLÁNÍ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ open () user mode kernel mode open () system call interface i implementaion of open () system call return user application ‹#›/43 lRůzné OS a různé HW platformy mívají různé způsoby jak volat služby OS a různou strukturu těchto služeb. lNicméně existují určité standardy, které usnadňují přenositelnost programového kódu ●v oblasti UNIXu: POSIX (Portable Operating System Interface) ●V oblasti Windows: Win32 (Windows API) lTeoreticky kód, který bude psán podle standardu bude přeložitelný na kompatibilních platformách, v praxi však existuje celá řada verzí standardu a mnoho výjimek, co je a není implementováno. SYSTÉMOVÁ VOLÁNÍ (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lOd POSIX.1 (1988) po POSIX:2008 ●IEEE Std 1003.1-2008 ●ISO/IEC/IEEE 9945:2009 ●The Open Group Technical Standard Base Specifications, Issue 7 lV části „System interfaces“ je popsáno 1191 položek. l POSIX PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 POSIX PŘÍKLAD - READDIR PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 POSIX - DETAILY PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 POSIX KOMPATIBILITA PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Zdroj: Wikipedia, heslo POSIX ‹#›/43 lWindows API rozděluje funkce do přibližně 100 kategorií WINDOWS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lPopis parametrů funkce ReadFile() ●HANDLE file — deskriptor otevřeného souboru ●LPVOID buffer — buffer pro čtená data ●DWORD bytesToRead — počet bajtů, které chceme číst ●LPDWORD bytesRead — kam uložit počet načtených bajtů ●LPOVERLAPPED ovl — pro asynchronní I/O l PŘÍKLAD VOLÁNÍ API (WIN32) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ return value function value parameters BOOL ReadFile c ( HANDLE file, LPVOID buffer, DWORD bytes To Read, LPDWORD bytes Read, LPOVERLAPPED ovl); ‹#›/43 lFunkce Win32 „CreateProcessAsUser“ lBOOL CreateProcessAsUser( HANDLE hToken, // handle to a token representing the logged-on user LPCTSTR lpApplicationName, // pointer to name of executable module LPTSTR lpCommandLine, // pointer to command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes BOOL bInheritHandles, // whether new process inherits handles DWORD dwCreationFlags, // creation flags LPVOID lpEnvironment, // pointer to new environment block LPCTSTR lpCurrentDirectory, // pointer to current directory name LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION ); lWindows NT: Requires version 3.51 or later. Windows: Unsupported. Windows CE: Unsupported. Header: Declared in winbase.h. Import Library: Use advapi32.lib. Unicode: Implemented as Unicode and ANSI versions on Windows NT. l PŘÍKLAD VOLÁNÍ API (WIN32) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lProgramátorské rozhraní není definováno na úrovni systémových volání jádra lWindows API ●dříve Win32 ●kernel32.dll, user32.dll, dgi32.dll lNižší vrstva ntdll.dll WINDOWS API PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Session Manager WinLogon Win32 API (Kernel32.dll, User32.dll, GD32.dll) Environment Functions Hardware NTDLL.DLL Win32 Subsystem User Applications User Mode System Processes Executive Services Runtime Library Functions Process and Thread Manager Object Manager Virtual Memory Manager Kernel Mode System Processes System Services Kernel Hardware Abstraction Layer (HAL) I/O Manager Cache Manager File System Manager Hardware Device Drivers Win32K.SYS Windows Manager Graphical Digital Interface Graphics Device Drivers ‹#›/43 lRegistry ●mov ah,01h ●mov cx,2000h ●int 10h lZásobník ●mov ax,0001h ●push ax ●int 10h lBlok (struktura, tabulka) v paměti & pointer ●mov ax,0001h ●mov [tabulka1],ax ●mov bx,tabulka1 ●int 10h ZPŮSOB PŘEDÁNÍ PARAMETRŮ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lPřerušení 0x2E lPříklad ReadFile z ntdll.dll: ●Ntdll!ZwReadFile 77f8c552 mov eax, 0xa1 ; the service number 77f8c557 lea edx, [esp+4] 77f8c55b int 2e 77f8c55d ret 0x24 lPříklad používající SYSENTER: ●mov aex, 112h mov edx, 7FFE0300h call dword prt ds:[edx] retn 24 ●Přičemž voláme funkci s kódem: mov edx, esp sysenter l SYSTÉMOVÁ VOLÁNÍ WINDOWS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 l„The SYSENTER instruction is part of the "Fast System Call" facility introduced on the Pentium® II processor. The SYSENTER instruction is optimized to provide the maximum performance for transitions to protection ring 0 (CPL = 0). The SYSENTER instruction sets the following registers according to values specified by the operating system in certain model-specific registers. ●CS register set to the value of (SYSENTER_CS_MSR) ●EIP register set to the value of (SYSENTER_EIP_MSR) ●SS register set to the sum of (8 plus the value in SYSENTER_CS_MSR) ●ESP register set to the value of (SYSENTER_ESP_MSR)“ lSYSENTER/SYSEXIT pro procesory Intel (od Pentia II) lSYSCALL/SYSRET pro procesory AMD (od K7) PŘÍKLAD: SYSENTER PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 SYSTÉMOVÁ VOLÁNÍ WINDOWS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lDOS interrupts ●INT 20H Terminate a program ●INT 21H DOS Services ●INT 25H/26H Absolute Disk Read/Write ●INT 27H Terminate but Stay Resident ●INT 28H DOS Safe Interrupt / DOS Timeslice (UNDOCUMENTED) ●INT 2eH Perform DOS Command (UNDOCUMENTED) ●INT 2fH Multiplex Interrupt (print spooler, TSR control) ●INT 33H Mouse Support ●INT 67H Expanded Memory Manager (LIM-EMS) lAddress Pointers (not used as software interrupts) ●INT 22H Terminate address ●INT 23H Control-Break address ●INT 24H Critical Error Handler address lVolání služeb DOSu: ●AH = číslo služby ●ostatní registry (AL, DL, DX, CX, DS:DX, DS:SI, ES:DI, ES:BX) = parametry ●INT 21H ●návratová hodnota bývá v AL PŘÍKLAD 1: MS-DOS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lSystémové volání pro otevření existujícího souboru lDOS Fn 3dH: Open a File Handle ●Expects: ●AH=3dH ●DS:DX=address of an ASCIIZ string of a filespec ●AL=Open Mode ●AL = 0 to open for reading ●AL = 1 to open for writing ●AL = 2 to open for reading and writing ●Returns: AX=error code if CF is set to CY l =file handle if no error PŘÍKLAD 1: MS-DOS (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lProgramový kód l lfilename: DATA “c:\autoexec.bat”,0 l lmov ax,3d00h lmov dx,[filename] lint 21h PŘÍKLAD 1: MS-DOS (3) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lSystémová volání ●standardně přes int 0x80 ●nově i přes instrukci syscall (sysenter) lČíslo systémového volání ●v registru eax ●v jádře 2.2 přibližně 200 volání, v jádře 2.6 přes 300 volání lParametry systémového volání ●v registrech ebx, ecx, edx, esi, edi, ebp ●kromě fce 117 (parametrem je odkaz na strukturu) lVýsledek ●uložen v eax PŘÍKLAD 2: LINUX PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lHello world v assembleru pod Linuxem ●section .text ●global _start ●msg db 'Hello, world!',0xa ●len equ $ - msg ●_start: ● mov edx,len ;message length ● mov ecx,msg ;message to write ● mov ebx,1 ;file descriptor (stdout) ● mov eax,4 ;system call number (sys_write) ● int 0x80 ;call kernel ● mov eax,1 ;system call number (sys_exit) ● int 0x80 ;call kernel PŘÍKLAD 2: LINUX (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 PŘÍKLAD 2: LINUX (3) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ user mode kernel mode standard C library write () write () system call #include int main () { printf („Greetings“); return 0; } ‹#›/43 lanxur:~$ strace echo "Ahoj“ execve("/bin/echo", ["echo", "Ahoj"], [/* 33 vars */]) = 0 brk(0) = 0x1a4fe000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b0d6f209000 uname({sys="Linux", node="anxur.fi.muni.cz", ...}) = 0 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=104404, ...}) = 0 close(3) = 0 open("/lib64/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\332\1Y7\0\0\0"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1717800, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b0d6f224000 close(3) = 0 arch_prctl(ARCH_SET_FS, 0x2b0d6f225260) = 0 munmap(0x2b0d6f20a000, 104404) = 0 open("/usr/lib/locale/locale-archive", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=56454288, ...}) = 0 mmap(NULL, 56454288, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b0d6f226000 close(3) = 0 brk(0) = 0x1a4fe000 brk(0x1a51f000) = 0x1a51f000 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 110), ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b0d727fd000 write(1, "Ahoj\n", 5Ahoj) = 5 close(1) = 0 exit_group(0) = ? PŘÍKLAD 2: LINUX (4) - STRACE PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 PŘÍKLAD 2: LINUX (5) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ System Call Quick Reference No Func Name Description Source 1 exit terminate a current process kernel/exit.c 2 fork create a child process arch/i386/kernel/proces.c 3 read read from a file descriptor fs/read_write.c 4 write write to a file descriptor fs/read_write.c 5 open open a file or device fs/open.c 6 close close a file descriptor fs/open.c 7 waitpid wait for process termination kernel/exit.c 8 creat create a file or device ("man 2 open" for information) fs/open.c 9 link make a new name for a file fs/namei.c 10 unlink delete a name and possibly the file it refers to fs/namei.c 11 execve execute program arch/i386/kernel/proces.c 12 chdir change working directory fs/open.c 13 time get time in seconds kernel/time.c 14 mknod create a special or ordinary file fs/namei.c 15 chmod change permissions of a file fs/open.c 16 lchown change ownership of a file fs/open.c ‹#›/43 lSystémová volání ●přes VOLÁNÍ FUNKCE, která obsahuje int 0x80 ●nebo přes volání brány call 7:0 lČíslo systémového volání ●v registru eax lParametry systémového volání ●na zásobníku (první parametr je ukládán poslední) lVýsledek ●v registru eax ●volající proces musí vyčistit zásobník (parametry) PŘÍKLAD 3: FREEBSD PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lHello World v assembleru ve FreeBSD ●section .text ● global _start ●msg db "Hello, world!",0xa ●len equ $ - msg ● _syscall: int 0x80 ;system call ● ret ●_start: ;tell linker entry point ● push dword len ;message length ● push dword msg ;message to write ● push dword 1 ;file descriptor (stdout) ● mov eax,0x4 ;system call number (sys_write) ● call _syscall ;call kernel ● add esp,12 ;clean stack (3 arguments * 4) ● push dword 0 ;exit code ● mov eax,0x1 ;system call number (sys_exit) ● call _syscall ;call kernel PŘÍKLAD 3: FREEBSD (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/43 lPočet systémových volání OS / API volání KOMPLEXITA OS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ OS Rok Počet systémových/API volání UNIX 1971 33 UNIX 1979 47 Windows 1985 450 SunOS 1985 171 4.3 BSD 1991 136 SunOS 1992 219 SunOS 1997 190 Linux 1998 229 NT 4.0 1999 3443 Linux 2009 336 ‹#›/43 lRozsah zdrojového kódu Windows KOMPLEXITA OS (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Verze Rok Miliony řádků NT 3.1 1993 4-5 NT 3.5 1994 7-8 95 1995 10 NT 4.0 1996 11-12 98 1998 18 2000 2000 29 XP 2001 40 2003 Svr 2003 50 Vista 2009 64 ‹#›/43 Výukovou pomůcku zpracovalo Servisní středisko pro e-learning na MU http://is.muni.cz/stech/ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ