140 likes | 267 Vues
Sistemsko programiranje. I. poglavlje Uvod. WINDOWS NT kao familija operacijskih sustava. Windows 32-bitni operacijski sustav ima sve potrebne elemente za osobnu, a također i upotrebu u poduzećima. 64-bit sustavi također dolaze Osnovni elementi uključuju:
E N D
Sistemsko programiranje I. poglavlje Uvod
WINDOWS NT kao familija operacijskih sustava • Windows 32-bitni operacijski sustav ima sve potrebne elemente za osobnu, a također i upotrebu u poduzećima. • 64-bit sustavi također dolaze • Osnovni elementi uključuju: • Memorija: velika, linearna, adresni prostor za virtualnu memoriju • Sustavi spremanja datoteka (File systems), konzolni rad, i ostali I/O • Multitasking: procesi i niti • Komunikacija i sinkoronizacija • Zasebni i umreženi sustavi • Sigurnost
WINDOWS - verzije • Windows XP (Home, Professional) - pojedinačni korisnici • Windows Server 2003 - poduzeća, serveri (Novi, Win64 standard nastaje baš iz ove implementacije) • Windows 2000 (Professional i neke druge server verzije) - više se ne prodaje, ali na njemu su nastali XP i buduće verzije. • Windows Embedded, Windows CE, Tablet PC, Windows Mobile (palmtop, ugrađeni procesori, mobiteli itd.) - imaju veliki podskup osnovnih elemenata Windowsa • Prijašnje (već napuštene) verzije: Windows NT 3.5, 3.5.1, 4.0 datiraju još od 1993. godine. Windows 95, Windows 98, Windows ME (sve zajedno zvat ćemo Windows 9x) - osobna desktop i laptop računala, nemamo sigurnosne elemente kao NT
Windows API • “Windows” je u biti 32-bitni API koji je korišten u: • Windows 9X (95, 98, Me) • Windows NT • Windows CE (palmtop, ugrađeni sustavi, itd.) • Win64 je vrlo sličan na nivou source-a * Podržano na Windows 2003 i Itanium familiji procesora • Windows naredbe skoro uvijek odgovaraju Win64 • Postoji nekoliko velikih podjela, koje primjerice uključuju: • Rukovanje prozorima (Windows Management) • GDI (Graphics Device Interface) • Servisi OS-a (System Services) • Multimedija • RPC (Remote Procedure Calls)
WINDOWS 9x, NT • Windows 9X radi samo na Intel x86 arhitekturi • Samo NTpodržava SMP (symmetric multiprocessing) • Windows NT koristi UNICODE internacionalni skup znakova • Windows NT ima potpuno zaštićenu jezgru (kernel) • Windows NT podržava NTFS, robustni file system • Windows 9X i CE ne podržavaju jako puno resursa • Otvorenih datoteka, procesa, itd. • Mnoge funkcije Windows 9X imaju ograničene implementacije Općenito, Windows programi su portabilni između različitih platformi na nivou soruce-a, a u većini i na binarnom nivou.
WindowsProgram Aplikacije Windows Subsystem Protected Subsystems NTExecutive Systems Services Process Manager I/O Manager Virtual Memory Manager KERNEL HAL: Hardware Abstraction HARDWARE
Osnovni principi WINDOWS-a 1/2 • Skoro svaki resurs je “object” identificiran i adresiran preko rukovatelja (“handle”) tipa HANDLE • Objektima jezgre (Kernel-a) manipulira se pomoću WindowsAPI funkcija • Tip podataka HANDLE uključuje objekte: • datoteke pipes • procese mapiranje memorije • niti događaji (events), semafori • Windows je bogat i fleksibilan sustav • Više funkcija koje obavljaju iste ili slične poslove • Svaka funkcija ima brojne parametre i zastavice
Osnovni principi WINDOWS-a 2/2 • Windows nit (thread) je osnovna jedinica izvršavanja, osnovnija od procesa • Proces može imati jednu ili više niti • Svaki proces ima svoj kod i svoj adresni prostor • Niti dijele adresni prostor procesa • Niti su “laganije” i učinkovitije od procesa • Koriste se za servere, asinkroni I/O, ...
Konvencije oko imenovanja kod Windows-a • Duga i opisna imena • WaitForSingleObjectWaitForMultipleObjects • Preddefinirani opisni tipovi podataka uvijek velikim slovima • BOOL, DWORD, LPDWORD, ... • Kod preddefiniranih tipova izbjegava se operator *: • LPTSTR (definira TCHAR *) i • LPCTSTR (definira const TCHAR *) • Imena varijabli kod API-ja koriste “Hungarian”-ovu notaciju - mi ćemo često izbjegavati ovu konvenciju • lpFileName — long pointer [na string koji u C-stilu završava nulom]
Konvencije kod programiranja za Windows • <windows.h> se uvijek uključuje • Svi objekti identificirani su pomoću varijable tipa HANDLE • CloseHandle funkcija se primjenjuje na skoro sve objekte • Simboličke konstante i zastavice koje objašnjavaju njihovo značenje • INVALID_HANDLE_VALUE i GENERIC_READ • ReadFile, WriteFile, i mnoge druge Windows funkcije vraćaju Boolean vrijednosti (TRUE/FALSE) • Kodovi sistemskih greški se dobivaju pomoću GetLastError () • C biblioteka je uvijek dostupna • Ali se s njome ne može u potpunosti iskoristiti Windows
Primjer: Windows FILE COPY (1/3) • /* Basic cp file copy program */ • /* cp file1 file2: Copy file1 to file2 */ • #include <windows.h> /* Always required for Windows */ • #include <stdio.h> • #define BUF_SIZE 256 /* Increase for faster copy */ • int main (int argc, LPTSTR argv []) • { • HANDLE hIn, hOut; /* Input and output handles */ • DWORD nIn, nOut; /* Number bytes transferred */ • CHAR Buffer [BUF_SIZE]; • if (argc != 3) { • printf ("Usage: cp file1 file2\n"); • return 1; • }
Primjer: Windows FILE COPY (2/3) • /* Create handles for reading and writing. Many */ • /* default values are used */ • hIn = CreateFile (argv [1], GENERIC_READ, 0, NULL, • OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); • if (hIn == INVALID_HANDLE_VALUE) { • printf ("Cannot open input file\n"); • return 2; • } • hOut = CreateFile (argv [2], GENERIC_WRITE, 0, NULL, • CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); • if (hOut == INVALID_HANDLE_VALUE) { • printf ("Cannot open output file\n"); • return 3; • }
Primjer: Windows FILE COPY (3/3) • /* Input and output file handles are open. */ • /* Copy file. Note end-of-file detection */ • while (ReadFile (hIn, Buffer, BUF_SIZE, • &nIn, NULL) && nIn > 0) • WriteFile (hOut, Buffer, nIn, &nOut, NULL); • /* Deallocate resources, such as open handles */ • CloseHandle (hIn); CloseHandle (hOut); • return 0; • }
U korak s Win64 • Ciljevi: • da Win32 binarne datoteke rade u 64-bitnom okruženju • Source kod se može re-kompajlirati za 64-bitno okruženje • Oprez: • Ne smije se uzeti da su cijelobrojni podaci i pokazivači iste duljine • Win64 uvodi 64-bitne pokazivače (pointere) • Novi tipovi podataka • DWORD32, DWORD64 • POINTER_32, POINTER_64 • LONG32, LONG64