Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie Aplikacji Lokalnych w Środowisku.NET Architektura systemu, jądro systemu, obiekty jądra, uchwyty Wielozadaniowość, procesy, zadania, wątki,

Podobne prezentacje


Prezentacja na temat: "Programowanie Aplikacji Lokalnych w Środowisku.NET Architektura systemu, jądro systemu, obiekty jądra, uchwyty Wielozadaniowość, procesy, zadania, wątki,"— Zapis prezentacji:

1 Programowanie Aplikacji Lokalnych w Środowisku.NET Architektura systemu, jądro systemu, obiekty jądra, uchwyty Wielozadaniowość, procesy, zadania, wątki, szeregowanie zadań

2 pptPlex Section Divider [ Jądro i inni ] The slides after this divider will be grouped into a section and given the label you type above. Feel free to move this slide to any position in the deck.

3 Literatura MSDN C. Petzhold Programowanie Windows 98/98/NT/Win2k J. Richter CLR via C# 3-rd ed. J. Richter Applied Microsoft.NET Framework Programming

4 ASCII vs UNICODE Strony kodowe, UTF8-32 Win98 - natulalna reprezentacja ASCII (istnieją funkcje UNICODE niestety sporo błędów/atrap) Win NT, 2K, XP, naturalna reprezentacja UNICODE funkcje istnieją w wersjach xxxxW i xxxxA (A->U) COM (+) - UNICODE (Win98 + COM = kłopoty ???).NET – UTF 16 (niekiedy UTF8 wewnetrznie)

5 ASCII vs UNICODE Systemowe API CompareString, CharUpper, IsCharAlpha IsTextUnicode, MultiByteToWideChar System.Text.Encoding.UnicodeEncoding IsMailNewsSave, WebName, WindowsCodePage,... GetChars, GetBytes, GetByteCount, GetCharCount, GetDecoder, GetEncoder, GetString,....NET – UTF 16 (niekiedy UTF8 wewnetrznie) C# char c = '\u0066

6 Zarys architektury systemu Systemowe procesy pomocnicze np. menedźer sesji, proces logowania Procesy usługowe Aplikacje użytkownika: Win 32 win16 DOS POSIX/ OS/2 Podsystemy środowiskowe win32*** OS/2 POSIX biblioteki podsystemów tryb użytkownika tryb jądra System okien*** Grafika*** Centrum wykonawcze * jądro *sterowniki urządzeń Warstwa niezalezna od sprzętu HAL ** *ntoskrnl.exe/ntkrnlpa.exe, ntdll.dll, ** hal.dll, *** kernel32.dll, adwapi32.dll,user32.dll, gdi32.dll, win32k.sys, csrss.exe

7 Centrum wykonawcze funkcje systemowe dostepne z trybu użytkownika za pośrednictwem NTDLL (np LPC) funkcje systemowe dostepne z trybu jadra funkcje wewnętrzne Menedżer konfiguracji Menedżer procesów i watków Monitor bezpieczeństwa Menedżery I/O, P&P, energii Procedury WMI Menedżery pamięci podręcznej/virtualnej Menedżery obiektów/LPC

8 Jądro systemu operacyjnego Podstawowe zadania Identyfikacja i zarządzanie obiektami systemowymi Zarządzanie pamięcią Zarządzanie systemem plików Zarządzanie procesami i wątkami wykonania Synchronizacja Komunikacja

9 Procesy systemowe Proces jałowy (jeden watek dla każdego procesora) Proces systemowy (większośc wątków trybu jądra) Menedzer sesji (smss.exe) Podsystem win32.exe (csrss.exe) Proces logowania (winlogon.exe) m.in. obsługa CTRL+ALT+DEL, uruchamia userinit.exe- >explorer.exe Lokalny serwer bezpieczeństwa (lsas.exe) weryfikuje użytkownika podczas logowania, tworzy znaczniki dostępu Menedzer kontroli usług (services.exe)

10 Obiekty systemowe Tworzone i zarządzane przez system Użytkownik nie odwołuje się bezpośrednio do obiektu, manipuluje nim za pośrednictwem uchwytu Brak dostępu kodu użytkownika do obiektu (bezpieczeństwo) Czasu życia obiektu kontrolowany przez system (zliczanie referencji)

11 Uchwyt obiektu systemowego Systemowy identyfikator wewnętrznej struktury danych reprezentującej obiekt systemowy obiekty jądra systemowego (np.: proces, wątek, zadanie, plik, nazwany potok, semafor, gniazdo) obiekty GDI (np.: czcionka, obraz, pisak, pędzel) obiekty USR (np.: okno, menu, kursor, tablica skrótów klawiszowych) Powielenie uchwytu obiektu jądra systemowego (NT/2K/XP) DuplicateHandle Unieważnienie uchwytu obiektu jądra systemowego (NT/2K/XP) CloseHandle

12 Obiekty jądra Tablica uchwytów 2 1 h = 2 h = 6 Jądro h = CreateXXX(Nazwa,..., sd,...) h = OpenXXX(Nazwa,..., sdo,...)

13 Sposoby współdzielenia obiektów jądra dziedziczenie uchwytów.Net -> wołanie DuplicateHandle.Net -> wołanie nazywanie obiektów

14 Obiekt jądra Nazwa, jeśli jest, ma charakter globalny Terminal server: oddzielne przestrzenie nazw: przestrzeń globalna - serwisy, sesje Duplikowanie uchwytu: NTSTATUS DuplicateHandle ( HANDLE SourceHandle, PHANDLE DestinationHandle ); BOOL DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE hTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions); dwOptions: DUPLICATE_SAME_ACCESS, DUPLICATE_CLOSE_SOURCE

15 Dostęp do obiektów jądra Windows 98x/Me ignorują deskryptory zabezpieczeń Jeśli nie wyspecyfikujemyu SD=NULL– domyślny poziom uprawnień (Właściciel+Administratorzy) Przy otwieraniu obiektu jądra sprawdzana jest przynależność użytkownika do odpowiednich grup CreateFileMapping( , LPSECURITY_ATTRIBUTES lpSecurityAttributes,....); CreateFile( , LPSECURITY_ATTRIBUTES lpSecurityAttributes,....);

16 Security Descriptor NT, Win2K, XP typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; LPVOID lpSecurityDescriptor; BOOL bInheritHandle; } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES; BOOL InitializeSecurityDescriptor( PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision ); Set/GetSecurityDescriptorControl() SE_DACL_AUTO_INHERIT_REQ SE_DACL_AUTO_INHERITED SE_DACL_PROTECTED SE_SACL_AUTO_INHERIT_REQ SE_SACL_AUTO_INHERITED SE_SACL_PROTECTED... Sacl() /... Dacl() /...Owner() /...Group()

17 Wielozadaniowość Wielozadaniowość w 32-bitowym systemie (Windows NT/2000/XP/7, Windows 9x/ME) wywłaszczanie wątków priorytety dostępu do procesora przetwarzanie w tle: dodatkowe wątki procesu (peekMessage) Systemowe prymitywy: proces - program w trakcie wykonywania wątek - podstawowy wykonywalny składnik procesu zadanie (job) – grupa procesów zarządzana razem włókna

18 pptPlex Section Divider [ Procesy ] The slides after this divider will be grouped into a section and given the label you type above. Feel free to move this slide to any position in the deck.

19 Proces Obiekt jądra reprezentujący proces Przestrzeń adresowa przydzielona procesowi (oddzielna dla poszczególnych procesów – w Win 9x procesy wspołdzieliły obszar niskiej pamięci) Proces obejmuje co najmniej jeden wątek – wątek główny Monitorowanie procesow ProcessExplorer.- stan procesów w systemie TaskManager WMI

20 Kończenie procesu ExitProces() - z wnętrza procesu TerminateProcess() Zakończenie wszystkich wątków typu foreground - > Exit/TerminateThread() Dawniej powrót z funkcji głównej procesu Pot. problem: destruktory obiektów Unieważnienie uchwytów procesu/utworzonych/otwartych obiektów (likwidowane gdy # = 0) Obiekt procesu zostaje zasygnalizowany Kod wyjścia zgodny z argumentem Exit / TerminateProcess () –> GetExitCode (hprocess,...)

21 System.Diagnostics.Proces ProcessName, BasePriority, EnableRaisingEvents, StartInfo, StartTime, ExitCode, ExitTime, HasExited, Id..., Processes Modules, MainModule, MainWindowHandle, MainWindowTitle... MaxWorkingSet, MinWorkingSet, NonpagedSystemMemorySize, PeakVirtualMemorySize, PagedMemorySize, TotalProcessorTime, UserProcessorTime.... PriorityBoostEnabled, PrivilegedProcessorTime... StandardInput, StandardOutput, StandardError... Handle, Threads...

22 System.Diagnostics.Process Start() WaitForExit(), Kill() GetProcesses(), GetProcessesById(), Processes Process.ProcessStartInfo FileName, Arguments, PriorityClass CreateNoWindow, ErrorDialog, UseShellExecute, WindowStyle, WorkingDirectory RedirectStandardInput, RedirectStandardError, RedirectStandardOutput WorkingDirectory, WindowStyle

23 System.Diagnostics.Process Start() Start(ProcessStartInfo info) Start(string fileName, string arguments) Start(string fileName, string userName, SecureString password, string domain )...

24 Process - monitorowanie TotalProcessorTime, UserProcessorTime, VirtualMemorySize, WorkingSet Process. WaitForExit Process.WaitForInputIdle Exited -> event

25 CreateProcess - WINAPI BOOL CreateProcess ( LPCTSTR lpszApplicationName,// nazwa programu LPCTSTR lpszCommandLine*,// linia polecenia LPSECURI lpProcessAttributes,** LPSECURI lpThreadAttributes, ** BOOL bInheritHandles***,// dziedziczenie obiektów DWORD dwCreationFlags,// rodzaj i priorytet procesu LPVOID lpEnvironment,// zmienne środowiska LPTSTR lpszCurDir,// bieżący napęd i katalog LPSTARTUPINFO lpStartInfo,// stan okna podstawowego LPPROCESS_INFORMATION lpProcInfo// wynik ) ; * - niekiedy modyfikowane przez proces ** - atrybuty dostępu *** - dziedziczenie uchwytów

26 CreationFlags - WINAPI DEBUG_PROCESS – przechw. zdarzeń z procesu i pot. DEBUG_ONLY_THIS_PROCESS – jw. ale tylko procesu CREATE_SUSPENDED - inicjalnie suspended DETACHED_PROCESS - zablokowana konsola rodz. CREATE_NEW_CONSOLE - nowa konsola CREATE_NO_WINDOW - bez konsoli CREATE_NEW_PROCESS_GROUP - grupa (^C, ^Break) CREATE_DEFAULT_ERROR_MODE - dziedziczy Er.m. CREATE_FORCEDOS - wymusza 16 bit CREATE_SEPARATE_WOW_VDM - 16bit., nowy VDM CREATE_SHARED_WOW_VDM - 16bit, wspólny VDM domyślnie: HKEYLOCAL_MACHINE\System\CurrentControlSet\ Control\WOW\DefaultSeparateVDM\default=yes CREATE_UNICODE_ENVIRONMENT CREATE_BREAKAWAY_FROM_JOB – proces poza zadaniem (o ile konfiguracja zadania na to pozwala) priorytet: XX_PRIORITY_CLASS

27 Środowisko Win2K/Xp HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Session Manager\Environment HKEY_CURRENT_USER\Environment WM_SETINICHANGE SendMessage( HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) TEXT(Environment) ) Get / GetEnvironmentVariable () ExpandEnvironmentStrings () wpisy w rejestrze %nazwa_zmiennej% np. %USERPROFILE%\My Documents

28 System: Tworzenie procesu Otwarcie pliku binarnego Utworzenie obiektu centrum wykonawczego Utworzenie wątku poczatkowego Notyfikacja podsystemu Win32 Rozpoczęcie wykonywania wątku (CREATE_SUSPENDED) dokończenie inicjalizacji przestrzeni adresowej (moduły DLL)* * istotne np. przy zakładania hooka na proces potomny

29 h = CreateXXX(Nazwa,..., sd,...) Tablica uchwytów 1 2 h = 5 h = ? Jądro ND D CreateProcess(..., true,...) IPC Dziedziczenie obiektu jądra

30 Dziedziczenie uchwytów CreateProcess(..., true,...) – zezwolenie na dziedziczenie SD obiektu – musi zezwalać na dziedziczenie ew. zmiana SD: Get / SetHandleInformation () Przekazywanie wartosci odziedziczonego uchwytu: Linia poleceń Zmienne środowiska IPC Wymagane wołanie api np. przez pInvoke

31 Zadania (Job objects) Zarządzanie grupą procesów Monitorowanie grupy: TotalUser / TotalKernelTime, Total / ActiveProcesses / TotalTerminatesProcesses, TotalPageFaults Ograniczenia wspólne dla grupy procesów – model piaskownicy Czas/pamięć per process/zadanie, Liczba aktywnych procesów Dopuszczalne CPU, Priorytet, względna część czasu Wylogowywanie/zamykanie systemu, dostęp do schowka Zmiana parametrów systemu / ekranu Tworzenie desktpów/ dostęp do obiektów USER spoza zadania DIE_ON_UNHANDLED_EXCEPTION -> SEM_NOGPFAULTERRORBOX Maska nakładana na SID Wymagane wołanie API

32 Zadania (Job objects) WINAPI tworzenie nowego zadania: CreateJobObject otwarcie zadania: OpenJobObject przypisanie procesu AssignProcessToJobObject ( -> CREATE_SUSPENDED) tej operacji nie można cofnąć likwidacja zadania CloseHandle zakończenie wszyskich stowarzyszonych procesów TerminateJobObject informacje o zadaniu Set/QueryInformationJobObject Informacje o procesach bez zadań GetProcessIoCounters

33 Powiadomienia WINAPI Przekroczenie limitu czasu -> zasygnalizowanie zadania (i domyślnie zabicie procesów składowych->) Monitorowanie zdarzeń -> porty dokańczania GetQueuedCompletitionInfo JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO JOB_OBJECT_MSG_END_OF_PROCESS_TIME JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT JOB_OBJECT_MSG_JOB_MEMORY_LIMIT JOB_OBJECT_MSG_NEW_PROCESS JOB_OBJECT_MSG_EXIT_PROCESS JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS JOB_OBJECT_MSG_END_OF_JOB_TIME

34 .NET vs API Wołanie funkcji unmanage – wymaga ich zaimportowania: [DllImport("msvcrt.dll")] using System; using System.Runtime.InteropServices; class PlatformInvokeTest { [DllImport("msvcrt.dll")] public static extern int puts(string c); [DllImport("msvcrt.dll")] internal static extern int _flushall(); public static void Main() { puts("Test"); _flushall(); } MSDN -> Platform Invoke Tutorial

35 pptPlex Section Divider [ Wątki ] The slides after this divider will be grouped into a section and given the label you type above. Feel free to move this slide to any position in the deck.

36 Wątki wykonania Współdzielą przestrzeń adresową ( procesu ) Indywidualny stan rejestru zestaw zmiennych lokalnych TLS (System.Threading.ThreadLocal ) Dużo mniej kosztowne niż proces Znacznie łatwiejsza komunikacja Dużo słabsza separacja niż procesów Stan wątku: IsAlive

37 Diagnostics.ProcesThread BasePriority, CanRaiseEvents, Container, CurrentPriority, DesignMode, Events, Id, IdealProcessor, PriorityBoostEnabled, PriorityLevel, PrivilegedProcessorTime, ProcessorAffinity, Site, StartAddress, StartTime, ThreadState, TotalProcessorTime, UserProcessorTime, WaitReason

38 System.Threading.Thread Thread t = new Thread ( () => Console.WriteLine ("Hello!") ); t.Start(); Name, Priority, ThreadState IsAlive, IsBackground, IsThreadPoolThread CurrentThread, CurrentPrincipal Threads Start (), Join (), Sleep (), Resume (), Suspend (), SpinWait () Abort(), ResetAbort (), Interrupt (), VolatileRead (), VolatileWrite() GetDomain (), GetData (), AllocateNamedDataSlot (), AllocateDataSlot ()

39 System.Threading... classes AutoResetEvent Interlocked ManualResetEvent Monitor Mutex ReaderWriterLock RegisteredWaitHandle WaitHandle Timer ThreadPool XXXXException

40 wykonywanie oczekiwanie wstrzymanie GetMessage Sleep SuspendThread CREATE_SUSPENDED ResumeThread SuspendThread szeregowanie wątków synchronizacja Przełączanie wątków wykonania

41 Szeregowanie zadań Wykonywany jest wątek o najwyższym priorytecie Po zawieszeniu/wykorzystaniu czasu uaktualniany jest jego kontekst Wybierany jest kolejny wątek o najwyższym priory- tecie gotowy do wykonania (być może ten sam) Sporadycznie wybierane są również wątki o niskim priorytecie Długość kwantu czasu: równy kwant d. każdego procesu ok 20ms dłuższy dla proces. pierwszoplan. o priorytecie Normalny

42 Zawieszanie wątkow Wywołania Suspend i Resume powinny być zbilansowane API: SwitchToThread () – umożliwia wznowienie watek o niższym priorytecie np. dla zwolnienie przez niego zasobu Zawieszenie wszystkich wątków – pot. problem dynamika wątków (powstawanie/usuwanie) wątków

43 Kończenie wątków Interupt (wyjątek ThreadInterruptedException zostanie rzucony przy najbliższym przejściu w stan zablokowany wait, sleep, lub join) Abort rzuca wyjątek ThreadAbortException – moze byc obsluzony ale automatycznie jest wyrzucany ponownie po zakonczeniu catch Ani Interupt ani Abort nie dzialaja na watki czekajace na unamanged wait. Na wait managed watek jest wybudzany.

44 Nieosłużone wyjątki nie zatrzymuja wątków z puli w watkach powodują terminowane wątku Dla.Net>=2.0 powodują terminowanie procesu Powinny być obsłużone!!! AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler( CurDomain_MyHandler); Niezalecane wlaczenie zachowania legacy SEH – StructuralExceptionHandling – niezarzadzalny handler - obejmuje każdy wątek

45 Foreground vs Background Foreground utrzymują proces przy życiu, Background: nie Przy zatrzymywaniu Background z powodu zamykania aplikacji nie jest rzucany wyjątek Przy zwolnieniu AppDomain wyjatek AppDomainUnloadedException) jest rzucany dla obu typów wątków Wątki z puli są typu Background Thread.IsBackground = true/false

46 Proces > App Domain >Thread Izolacja Zabezpieczenia Kontrolowane wyładowanie Można załadować assembly do oddzielnej AppDomain

47 Priorytet procesu zmiana/pobranie priorytetu Process.PriorityClass proces w tle: IDLE_PRIORITY_CLASS obniżony prioryt: BELOW_NORMAL_PRIORITY_CLASS proces normalny: NORMAL_PRIORITY_CLASS podwyższony priorytet: ABOVE_NORMAL_PRIORITY_CLASS wysoki priorytet: HIGH_PRIORITY_CLASS proces czasu rzeczywistego: REALTIME_PRIORITY_CLASS

48 Priorytet wątku zmiana/pobranie priorytetu: Thread.Priority THREAD_PRIORITY_IDLE THREAD_PRIORITY_LOWEST THREAD_PRIORITY_BELOW_NORMAL THREAD_PRIORITY_NORMAL THREAD_PRIORITY_ABOVE_NORMAL THREAD_PRIORITY_HIGHEST THREAD_PRIORITY_TIME_CRITICAL

49 Efektywny priorytet jest określony przez kombinację priorytetów procesu i wątku Iddle Lowest Below n Normal Above n Highest 15 31Critical LowBelowNormalAboveHighReal time P r o c e s y W ą t k i

50 Dynamiczny priorytet timer/mysz/klawiatura – mogą wymuszać dynamiczną zmianę priorytetu wątku (dla wątków o priorytecie bazowym 0-15) w Win NT/2K/XP użytkownik może decydować o dynamicznej zmianie prorytetu Process.PriorityBoostEnabled

51 pptPlex Section Divider [ Włókna ] The slides after this divider will be grouped into a section and given the label you type above. Feel free to move this slide to any position in the deck.

52 Włókna Przenoszenie aplikacji z UNIXa Wątek może obejmować wiele włókien Tylko jedno włókno jest wykonywane na raz Przełączenie wiąże się z zapamiętaniem kontekstu, stanu rejestrów itd Przełączanie jest zarządzane przez kod użytkownika Brak wywłaszczania na poziomie włókien (dostępne jest wywłaszczanie na poziomie wątków) Włókna są obsługiwane w trybie użytkownika (a nie jądra)

53 Tworzenie włókien WINAPI Pierwsze włókno: PVOID ConvertThreeadToFiber(PVOID pvParam) Następne: PVOID CreateFiber(DWORD dwStackSize, PFIBER_START_ROUTINE pfnStartAdress, PVOID pvParam) Wynik:adres kontekstu wykonania Pobranie parametru włókna: PVOID GetFiberData() Punkt wejścia do włókna: VOID WINAPI FiberFunc(PVOID pvParam) {... }

54 Szeregowanie włókien Zmiana bieżącego włókna: void SwitchToFiber(PVOID pvFiberExecutionContext) Pobranie bieżącego włókna: PVOID GetCurrentFiber() Kończenie włókna: void DeleteFiber(PVOID pvFiberExecutionContext)


Pobierz ppt "Programowanie Aplikacji Lokalnych w Środowisku.NET Architektura systemu, jądro systemu, obiekty jądra, uchwyty Wielozadaniowość, procesy, zadania, wątki,"

Podobne prezentacje


Reklamy Google