POLITECHNIKA WARSZAWSKA WYDZIAŁ ELEKTRYCZNY INSTYTUT ELEKTROTECHNIKI TEORETYCZNEJ I SYSTEMÓW INFORMACYJNO-POMIAROWYCH

Wielkość: px
Rozpocząć pokaz od strony:

Download "POLITECHNIKA WARSZAWSKA WYDZIAŁ ELEKTRYCZNY INSTYTUT ELEKTROTECHNIKI TEORETYCZNEJ I SYSTEMÓW INFORMACYJNO-POMIAROWYCH"

Transkrypt

1 POLITECHNIKA WARSZAWSKA WYDZIAŁ ELEKTRYCZNY INSTYTUT ELEKTROTECHNIKI TEORETYCZNEJ I SYSTEMÓW INFORMACYJNO-POMIAROWYCH PRACA DYPLOMOWA MAGISTERSKA Na kierunku INFORMATYKA Jakub Jóźwicki Nr albumu Rok akademicki: 2007/08 Warszawa, 8 grudnia 2008 INTERFEJS WWW DO ZARZĄDZANIA MASZYNAMI WIRTUALNYMI VMWARE Zakres pracy: Wprowadzenie Wirtualizacja a architektura x86, w tym: rejestry procesora obsługa przerwań i zarządzanie pamięcią przełączanie zadań implementacja i wydajność wirtualizacji Architektura aplikacji, w tym: VMware VIX API i dowiązania Javy interfejs WWW Instrukcja użytkownika i administratora Podsumowanie (Podpis i pieczątka Kierownika Zakładu Dydaktycznego) Opiekun naukowy: dr inż. B. Sawicki Recenzent: Termin wykonania: 8 grudnia 2008 Praca wykonana i zaliczona jest własnością Instytutu i nie będzie zwrócona wykonawcy Strona 1 z 68

2 Spis treści 1. Wprowadzenie Wirtualizacja a architektura x Rejestry procesora Zaawansowany programowalny kontroler przerwań Zarządzanie pamięcią Przełączanie zadań Implementacja wirtualizacji Wydajność wirtualizacji Architektura aplikacji VMApp VMware VIX API Dowiązania Javy dla VIX API Interfejs Analiza działania aplikacji Echo Instrukcja użytkownika i administratora Podsumowanie Bibliografia...68 Strona 2 z 68

3 1. Wprowadzenie Celem pracy jest stworzenie interfejsu WWW do zarządzania maszynami wirtualnymi działającymi pod kontrolą oprogramowania VMware Server 1.0 dla systemu Linux. Interfejs powinien umożliwiać takie operacje administracyjne jak uruchamianie, wyłączanie, hibernowanie, blokowanie, edycję konfiguracji oraz tworzenie nowych wirtualnych systemów. Aplikacja powinna być kompatybilna z wszystkimi ważniejszymi przeglądarkami internetowymi i bazować na VMware VIX API dostarczanym przez producenta w postaci bibliotek C/C++. W celu rozwiązania tak postawionego zadania, zostały wybrane dwa szkielety aplikacyjne: Grails i Echo3, podążające za trendem Web 2.0 i zasadami zwinnego programowania, przeznaczone dla środowiska Javy. Tradycyjnym sposobem łączenia Javy z C/C++ jest technologia JNI, która została zastosowana w projekcie pośrednio poprzez stworzenie biblioteki umożliwiającej dynamiczne wywoływanie funkcji C/C++, zawartych w bibliotekach współdzielonych, na podstawie podanej nazwy i argumentów Javy. Opracowana biblioteka, docelowo przeznaczona dla systemu Linux, działa także w systemach Windows. Oprogramowanie jest uniwersalne i może być użyte w dowolnym projekcie wymagającym połączenia kodu C z kodem Javy. Wstępem do opisu zagadnień związanych z implementacją aplikacji jest analiza architektury x86 z uwzględnieniem tych elementów, które muszą być brane pod uwagę w procesie wirtualizacji (rejestry procesora, przerwania, zarządzanie pamięcią, przełączanie zadań). W rozdziale 2. omówione są: zaawansowany programowalny kontroler przerwań, tablice deskryptorów przerwań, drzewiasta struktura tablic stron pamięci, stronicowanie i segmentacja pamięci, poziomy zabezpieczeń w architekturze x86 (tzw. pierścienie), przełączanie zadań w oparciu o deskryptory zadań oraz sposoby implementacji wirtualizacji (podejście programowe i sprzętowe). Rozdział kończą testy wydajnościowe oprogramowania VMware oraz konkurencyjnych produktów. Opis architektury aplikacji, obecny w rozdziale 3., zawiera informacje o VMware VIX API z uwzględnieniem poszczególnych funkcji, sposobie stworzenia dowiązań Javy (które w celu dostarczenia pożądanej funkcjonalności muszą nadrabiać braki oryginalnych bibliotek i radzić sobie z błędami w nich zawartymi) i technologiach odpowiedzialnych za przyjazny dla użytkownika interfejs graficzny. Strona 3 z 68

4 Rozdział 4. omawia instalację, konfigurację i użytkowanie oraz możliwości stworzonej aplikacji. VMware Workstation 1.0 pojawił się w roku 1999 jako odpowiedź na problem kompatybilności programów DOS i Windows 9x z wprowadzanym przez Microsoft systemem Windows W ciągu następnych lat oprogramowanie znalazło szereg zastosowań i stało się przemysłowym standardem wirtualizacji architektury x86. Konkurencja z produktami takimi jak Microsoft VirtualPC i Citrix XEN sprawiła, że na rynku pojawił się darmowy produkt VMware Server, dostępny dla systemów Windows i Linux. W ramach niniejszej pracy powstała aplikacja WWW do zarządzania maszynami wirtualnymi VMware Server 1.0. Rys. 1. Wirtualny Windows 98 w systemie Mandrake Linux, rok 2000 Wirtualizacja to oszczędność na fizycznych komputerach zarówno dla dewelopera, który na jednym pececie może rozwijać oprogramowanie dla kilku systemów operacyjnych na raz, jak i dla administratora serwerowni, który może skonsolidować mało używane maszyny, tnąc koszty utrzymania (polski oddział Novella dzięki wirtualizacji pozbył się problemu wymiany klimatyzacji oraz rozbudowy / zmiany lokalizacji serwerowni). W dużych farmach serwerów, dla których koszt energii elektrycznej jest znaczny, wirtualizacja Strona 4 z 68

5 oznacza zielone IT. Oprogramowanie takie jak VMware, dzięki funkcjonalności migawek i klonowania maszyn wirtualnych, zapewnia bezpieczne uaktualnienia oprogramowania oraz zwiększa niezawodność infrastruktury. Duże firmy wykorzystują obrazy wirtualnych maszyn jako sposób dystrybucji testowych wersji oprogramowania i/lub środowiska szkoleniowe (w ten sposób postępował Microsoft używając technologii VMware, zanim przejął firmę Connectix i VirtualPC). Wirtualizacja dostępna dla użytkownika końcowego poprzez cienkiego klienta to coraz częstszy sposób funkcjonowania wielu organizacji (zdalny pulpit do wirtualnego systemu Windows to metoda Microsoftu na ewaluację oprogramowania Visual Studio). Produkty takie jak VMware stanowią także obejście problemu bezpieczeństwa starego oprogramowania, dla którego producent nie zapewnia wsparcia technicznego w postaci poprawek, a nie może być ono w prosty sposób wycofane lub zastąpione przykładowo Microsoft zaleca migrację fizycznego Windows NT 4.0 do postaci wirtualnej. Dla zwykłego użytkownika wirtualizacja to bezpieczny sposób na poznawanie innych systemów operacyjnych. Cel niniejszej pracy to stworzenie interfejsu WWW do zarządzania maszynami wirtualnymi VMware, umieszczonymi na systemie operacyjnym Linux (darmowy VMware Server darmowy OS). Oprogramowania VMApp zostało napisane z wykorzystaniem języków: Java, Groovy, C++, assembler. Dzięki podobieństwu w obsłudze dynamicznych bibliotek w systemach Unix i Windows aplikacja może być także uruchamiana w środowisku produkcji Microsoftu. W dalszej części pracy omawiana jest 32-bitowa architektura Intel x86 pod kątem elementów związanych z wirtualizacją, implementacja wirtualizacji, wydajność oprogramowania VMware i konkurencyjnych produktów oraz architektura aplikacji VMApp. Pod koniec pracy opisany jest interfejs WWW do zarządzania maszynami wirtualnymi VMware widziany oczami użytkownika. Strona 5 z 68

6 2. Wirtualizacja a architektura x86 Obok słowa wirtualizacja pojawia się często emulacja. W przypadku wirtualizacji wiele systemów operacyjnego widzi w tym samym czasie ten sam procesor. Inne zasoby sprzętowe, przede wszystkim urządzenia wejścia/wyjścia, muszą być emulowane czyli zaimplementowane programowo wzorując się na rzeczywistych odpowiednikach. Istnieją technologie pozwalające niejako na emulację procesora takie jak Apple Rosetta1 (oryginalny produkt firmy Transitive wykupionej przez IBM-a), dzięki której kod PowerPC może być wykonywany na x86. Czy podobne zabiegi są konieczne przy wirtualizacji pecetów? Do prawdziwego zrozumienia sposobu działania wirtualizacji niezbędna jest wiedza o budowie architektury x86 oraz o tym, w jaki sposób system operacyjny używa sprzętu i wchodzi z nim w interakcję. Zagadnienia te zostaną przedstawione począwszy od opisu rejestrów procesora, przechodząc dalej do przerwań i sposobu zarządzania pamięcią. Kolejnym tematem jest przełączanie zadań w systemie operacyjnym. Stąd już blisko do opisu implementacji wirtualizacji (która tak naprawdę może być traktowana jako trzeci tryb pracy obok trybu jądra i użytkownika, w dodatku nierozróżnialny dla planisty systemowego). Wiedza teoretyczna o maszynach wirtualnych zostanie skonfrontowana z rzeczywistością w testach wydajnościowych przeprowadzonych za pomocą popularnych narzędzi SiSoft Sandra i PCMark. Dla początkującego programisty assemblera istnieją tylko rejestry podstawowe (EAX, EBX,..., ESP), tymczasem dla zaawansowanego programisty języka maszynowego, tworzącego system operacyjny, rejestrów jest dużo więcej, a ich znajomość niezbędna jest do napisania kodu startującego ten system. W rejestrach procesora ukryte są struktury odpowiedzialne za to, że aplikacje użytkownika mogą alokować obiekty w pamięci i kończą swój żywot w przypadku wyjątku dzielenia przez zero. Procesor oprócz rejestrów to także wyspecjalizowane jednostki logiczne odpowiedzialne za obsługę przerwań oraz pamięci. Do tego skomplikowanego sprzętu dochodzą jeszcze dyski twarde oraz karty graficzne z buforem ramki (obszar pamięci widoczny bezpośrednio dla użytkownika jako obraz). Architektura x86 czekała 20 lat na możliwość jej wirtualizacji (procesor Strona 6 z 68

7 wprowadzono na rynek w 1978 roku2), a VMware Workstation 1.0, który tego dokonał w 1999 roku, wprawił w osłupienie wielu użytkowników możliwością uruchamiania dwóch systemów operacyjnych równocześnie na jednym komputerze. 2 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1, Rozdział 2.1 Brief history of Intel 64 and IA-32 Architecture Strona 7 z 68

8 2.1. Rejestry procesora Standardowe rejestry 32-bitowego procesora x86 można podzielić na3: Podstawowe: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI Segmentowe: ES, CS, SS, DS, FS, GS EFLAGS rejestr zawierające różne flagi, bit 9. wskazuje stan włączenia przerwań EIP wskaźnik instrukcji GDTR rejestr zawierający adres GDT (globalnej tablicy deskryptorów segmentów pamięci) LDTR rejestr zawierający adres LDT (lokalnej tablica deskryptorów segmentów pamięci) IDTR rejestr zawierający adres IDT (tablicy deskryptorów przerwań) CR0 najstarszy 31. bit (PG) wskazuje czy włączone jest stronicowanie (użycie tablic stron do mapowania adresów wirtualnych na adresy fizyczne), czy też aktywne jest adresowanie segmentowe, bit zerowy (PE) wskazuje czy procesor działa w trybie chronionym, bit 2. (EM) wskazuje czy funkcje koprocesora mają być emulowane, bit 3. (TS) wskazuje czy nastąpiło przełączenie zadania, bit 4. (ET) wskazuje rodzaj koprocesora, CR2 rejestr, który przy aktywnym stronicowaniu i awarii strony zawiera adres wirtualny, który spowodował wyjątek CR3 rejestr, który przy aktywnym stronicowaniu zawiera adres globalnego katalogu stron PGD, nazywany także PTBR (Page Table Base Register) TR rejestr wskazujący na dane definiujące aktualnie wykonywany proces (Task State Segment, który zawiera m.in. kopie rejestrów podstawowych, segmentowych, EFLAGS i EIP, selektor TSS poprzedniego zadania, selektor LDT, kopię PTBR, wskaźniki stosów dla poszczególnych poziomów ochrony, mapę adresów I/O; deskryptor TSS może znajdować się tylko w GDT), zapis do rejestru odbywa się poprzez uprzywilejowaną instrukcję LTR, zmiana TSS powoduje przełączenie zadania. 3 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1, Rozdział 3.2 Overview of the basic execution environment ; Rozdział 3.4 Basic program execution registers Strona 8 z 68

9 W większości systemów operacyjnych każdy proces zawiera kopie określonych rejestrów, które są przez niego wykorzystywane podczas pracy, a zapisywane podczas odsuwania od działania przez planistę systemowego. Strona 9 z 68

10 2.2. Zaawansowany programowalny kontroler przerwań4 Praca procesora nie może być blokowana przez urządzenia wejścia/wyjścia takie jak dysk twardy czy klawiatura, dlatego obsługa I/O odbywa się asynchronicznie. W tym celu zastosowano przerwania5 przykładowo: system zleca odczytanie bloku danych z dysku twardego, a informację o zrealizowaniu żądania otrzymuje w przerwaniu. Fizycznie przerwanie jest pojawieniem się napięcia na jednej z nóżek procesora, co skutkuje w przerwaniu jego pracy i zmianie aktualnie wykonywanego zadania na obsługę przerwania. Aby rozszerzyć liczbę urządzeń mogących generować przerwania dla procesora oraz ustandaryzować procesy z nimi związane powstał dedykowany układ Intel Pojawił się on w komputerach x86 wraz z procesorem Intel 8085 i 8086, jako zaszłość historyczna funkcjonuje jednak także w obecnych pecetach, będąc wbudowanym w mostek południowy chipsetów. Pojedynczy układ 8259 ma osiem linii żądania przerwań (IRQ0 IRQ7), aczkolwiek układ może być łączony kaskadowo, co oznacza, że można podłączyć do niego drugi taki sam kontroler (zazwyczaj jest on podpięty pod pin IRQ2) i wtedy do dyspozycji pojawia się 15 przerwań. Układ 8259 posiada linię wyjściową żądania przerwania INTR oraz linię akceptacji przerwania INTA, linie D0-D7 związane z poziomem przerwania/wektorem przerwań. Układ 8259 ma wbudowane rejestry IMR (Interrupt Mask Register maskowanie przerwań), IRR (Interrupt Request Register) oraz ISR (In-Service Register). IMR zawiera maskę przerwań, które nie powinny być obsługiwane, IRR maskę przerwań nie potwierdzonych, ISR maskę przerwań, które czekają na zakończenie obsługi. Obecnym standardem związanym z obsługą przerwań jest APIC opracowany przez firmę Intel (Advanced Programmable Interrupt Controller6 Zaawansowany Programowalny Kontroler Przerwań), przeznaczony pierwotnie dla systemów wieloprocesorowych. APIC składa się z komponentów dwu rodzajów: lokalnego APIC zintegrowanego z pojedynczym procesorem i I/O APIC przeznaczonego dla obsługi operacji wejścia/wyjścia urządzeń peryferyjnych. W systemach z układem 8259, może być on podłączony do lokalnego APIC lub I/O APIC. Lokalny APIC zarządza wszystkimi zewnętrznymi przerwaniami, które muszą być dostarczone do procesora. Może generować i akceptować przerwania między4 J. Jóźwicki, Testy RT: QNX, Linux, Solaris, rozdział 1. 5 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A, Rozdział 5 Interrupt and exception handling 6 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A, Rozdział 9 Advanced Programmable Interrupt Controller (APIC) Strona 10 z 68

11 procesorowe (IPI inter-processor interrupt), służące do synchronizacji procesorów w systemach SMP. LAPIC może obsługiwać do 224 wektorów przerwań IRQ z I/O APIC. Wektory 0-31 są zarezerwowane do obsługi wyjątków procesora x86. I/O APIC zawiera tablicę routingu przerwań z urządzeń zewnętrznych, za pomocą której przerwania z tychże urządzeń są przekierowywane do lokalnego APIC. Przerwania sprzętowe umożliwiają asynchroniczny dostęp do sprzętu, przerwania programowe pozwalają m.in. na przełączanie systemu z trybu użytkownika do trybu jądra (wywołania funkcji systemowych open, read, write itd.). Przerwania można podzielić na synchroniczne pojawiające się w określonym czasie (np. w związku z zaprogramowaniem zegara) oraz asynchroniczne zazwyczaj sprzętowe. Ze względu na fizyczną implementację przerwania można podzielić na generowane przez poziom sygnału (level-triggered), zbocze (edge-triggered), komunikat (message-signaled). Przerwania generowane przez poziom sygnału obecność nieobsłużonego przerwania sygnalizowana jest przez wysoki poziom sygnału na linii żądania przerwania, poziom ten utrzymuje się aż do chwili obsłużenia IRQ, a następnie wraca do poziomu niskiego. Procesor co jakiś czas sprawdza stan linii sygnałowej i w ten sposób wykrywa przerwania przerwanie. będące Próbkowanie wynikiem pozwala szumu także elektrycznego. wyeliminować Ten typ fałszywe przerwania wykorzystywany jest przez urządzenia PCI. W przypadku współdzielonego przerwania i braku obsługi jednego z urządzeń podłączonych do linii sygnałowej, może dojść do zablokowania systemu, gdyż nie obsłużone urządzenie będzie stale generowało wysoki poziom sygnału. Przerwania generowane przez zbocze sygnału przerwanie sygnalizowane jest przez przejście stanu linii na przeciwny (zazwyczaj niski->wysoki, puls sygnału). Ten typ przerwania wykorzystywany był przez urządzenia przeznaczone dla magistrali ISA. Współdzielenie przerwania zazwyczaj nie jest problematyczne (przy założeniu, że pulsy sygnału generowane są z odpowiednimi dylatacjami czasowymi). Przerwania generowane przez komunikat przerwanie sygnalizowane jest przez wysłanie określonego krótkiego komunikatu po medium, może być to zapis do pamięci. Przerwania sygnalizowane komunikatami używane są przez urządzenia PCIExpress. Bezproblemowe współdzielenie przerwania możliwe jest dzięki temu, że komunikaty są różne dla różnych urządzeń. Strona 11 z 68

12 Istnieją też przerwania hybrydowe (zazwyczaj typu NMI niemaskowalne), generowane pulsem sygnału, odróżniane od fałszywych przerwań odpowiednio długo utrzymującym się poziomem sygnału). Przerwania używane są przez zegary systemowe, kontrolery dysków, sygnały wyłączania zasilania, pułapki (np. wykryte przez procesor arytmetyczne operacje dzielenia przez zero), transfery danych np. w obrębie karty sieciowej. W nowocześnie zaprojektowanych systemach operacyjnych program obsługi przerwania zazwyczaj podzielony jest na dwie części: pierwszego poziomu (FLIH First-Level Interrupt Handler) obsługa twarda/szybka/górna oraz drugiego poziomu (Second Level) obsługa w wątku/wolna/dolna. W odpowiedzi na przerwanie system dokonuje najpierw szybkiej obsługi FLIH następuje przełączenie kontekstu i zaplanowanie wykonania właściwego kodu obsługi przerwania SLIH. Na czas wykonywania FLIH zazwyczaj maskuje przerwania tego samego typu, co aktualnie obsługiwane. W niektórych architekturach komputerów implementacja FLIH może być realizowana w całości przez hardware. SLIH może mieć dedykowane wątki jądra, czekające na swój przydział czasu od procesora (obsługiwane przez planistę systemowego w ten sam sposób co procesy), operujące na kolejkach, na które otrzymują dane związane z obsługą przerwania. Taka implementacja SLIH powoduje, że może być on wywłaszczany. Obsługa przerwań zdefiniowana jest przy pomocy IDT7 (Interrupt Descriptor Table tablicy deskryptorów przerwań). IDT w swojej budowie jest podobne do GDT (patrz: rozdział o zarządzaniu pamięcią) 64-bitowe deskryptory posiadają adres bazowy (w tym wypadku adres procedury obsługi przerwania), zamiast limitu jest selektor segmentu, w którym znajduje się procedura obsługi, występuje identyfikator pierścienia uprawnień. Tablica IDT może mieć maksymalnie 256 elementów, przy czym indeksy 0-31 zarezerwowane są dla przerwań sprzętowych. Maszyna wirtualna nie może mieć dostępu do fizycznego układu APIC, ze względu na to, że posiada inną konfigurację sprzętową oraz że dostęp taki, przy dużym stopniu złożoności systemu operacyjnego i różnorodności urządzeń, byłby niebezpieczny. Zaawansowany programowalny kontroler przerwań musi być implementowany w postaci kodu oprogramowania wirtualizującego. 7 Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1, rodział 6.4 Interrupts and Exceptions Strona 12 z 68

13 2.3. Zarządzanie pamięcią8 Pamięć w architekturze x869 podzielona jest na strony o rozmiarze 4096 bajtów każda. Pojedynczy proces działający w systemie operacyjnym wirtualnie posiada dostęp do całej fizycznej pamięci komputera. Wirtualnie dlatego, że oprócz niego działają inne procesy, a w przypadku braku wolnej pamięci fizycznej używany jest plik wymiany. Dla procesów istnieją oddzielne mapowania ich pamięci wirtualnej na pamięć fizyczną. Większość procesów używa tylko małego podzbioru wirtualnej przestrzeni adresowej, ale za to mocno rozproszonego: kod programu znajduje się najniżej, pośrodku ulokowana jest sterta i dynamicznie ładowane biblioteki, na górze znajduje się stos. W mapowaniu pamięci bierze udział procesor, który używa hierarchicznej, drzewiastej struktury stron pamięci zarządzanej przez system operacyjny. Adres tej struktury zapisany jest w rejestrze CR3. Na najwyższym poziomie znajduje się globalny katalog stron (Page Global Directory PGD)10 zawierający 1024 pozycje. Katalog mieści się w pojedynczej stronie pamięci o rozmiarze 4096 bajtów. Każda z pozycji wskazuje na poddrzewo - tablicę stron niższego poziomu opisujące przedział pamięci [i*chunk, (i+1)*chunk-1], gdzie chunk to maksymalna wartość pamięci do zaadresowania podzielona przez 1024 (standardowo dla 32-bitowej architektury x86 są to 4MB). Elementy tablic pośrednich (Page Middle Directory PMD) wskazują na tablice niższego poziomu również zawierające 1024 elementy. W tablicy najniższego poziomu (Page Table Entries - PTE) elementy wskazują bezpośrednio na ramki pamięci fizycznej. Ze względu na to, że pamięć używana przez proces jest rzadka, część poddrzew nie istnieje. Drzewa stron pamięci mogą mieć części wspólne z racji używania tych samych dynamicznie ładowanych bibliotek czy korzystania z pamięci współdzielonej. Adres pamięci wirtualnej używany przez proces jest podzielony na części oznaczające pozycje w kolejnych tablicach stron. Dzięki temu procesor, korzystając z drzewa o adresie korzenia zapisanym w rejestrze CR3, może samodzielnie wyznaczyć adres fizyczny dla danego adresu wirtualnego. Zadaniem tym zajmuje się jednostka zarządzania pamięcią (Memory Management Unit MMU). Dla przyśpieszenia tej translacji procesor zapamiętuje już wyznaczone mapowania w pamięci asocjacyjnej TLB (Translation Lookaside Buffer). W przypadku kiedy w TLB nie ma adresu fizycznego dla tłumaczonego adresu wirtualnego, 8 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1, Rozdział 3.3 Memory model 9 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A 10 M. Gorman, Understanding The Linux Virtual Memory Manager Strona 13 z 68

14 rozpoczyna się wyszukiwanie zaczynając od PGD. Kiedy żądany na podstawie offsetu element tablicy jest pusty procesor generuje wyjątek awarię strony (page fault), która musi być obsłużona przez system operacyjny (jeśli strona została przeniesiona do pliku wymiany musi zostać sprowadzona do pamięci RAM, a następnie zamapowana; jeśli nie ma wolnej pamięci na tę operację system operacyjny musi znaleźć inną stronę, która nie jest w tej chwili używana i przenieść ją do pliku wymiany, zwalniając w ten sposób pamięć rzeczywistą). Procesor 32-bitowy standardowo operuje na dwóch poziomach tablic stron pamięci i przestrzeni adresowej mogącej obsłużyć maksymalnie 4GB RAM-u. Współczesne procesory (począwszy od Pentium Pro) osbługują tryb PAE (Physical Address Extension), w którym wykorzystywane są 4 poziomy tablic i adresacja 36-bitowa dla systemu operacyjnego dostępne są 64 GB RAM-u11. W trybie PAE elementy PGD mają rozmiar 64 bitów, sam rozmiar PGD nie ulega zmianie, a więc ilość elementów tablicy jest zmiejszona o połowę do 512. Część bitów adresu wirtualnego służy do specjalnych celów jak np. najbardziej znaczący bit - NX12 (No execute), którego ustawienie powoduje, że pamięć opisywana przez pozycję tablicy nie może być wykonywana, a gwarantuje to sprzętowo procesor (uniemożliwienie wykonywania kodu znajdującego się w obszarze pamięci mającym prawa do zapisu znacząco obniża możliwości wykorzystywania błędów typu przepełnienie bufora, a więc także działania niektórych wirusów - stąd marketingowa nazwa tej technologii: Enhanced Virus Protection, próba wykonania oznaczonej bitem NX pamięci kończy się wygenerowaniem wyjątku przez procesor). W najprostszej 32-bitowej implementacji adres wirtualny składa się z trzech części: bity indeks w globalnym katalogu stron do wyznaczenia adresu tablicy stron bity indeks w tablicy stron do wyznaczenia fizycznej ramki pamięci biy 0-11 offset do pojedynczych bajtów w ramach strony pamięci (strona ma rozmiar 4KB) Poniżej znajdują się uproszczone definicje związane z obsługą stron pamięci w systemie operacyjnym Linux13: 11 Intel, TLBs, Paging-Structure Caches, and Their Invalidation 12 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A, Rozdział ExecuteDisable Bit Page Protection 13 Linus Torvalds et al., Linux kernel , arch/x86, include/asm-generic Strona 14 z 68

15 struct page { unsigned long flags; atomic_t _count; void *virtual; ; /* atomowe flagi */ /* licznik użycia. */ /* adres wirtualny */ struct mm_struct { pgd_t * pgd; spinlock_t page_table_lock; mm_context_t context; ; #define PAGE_SHIFT #define PGDIR_SHIFT #define PTRS_PER_PGD /* 10 bitów (22-31) na offset w PGD */ #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD 1)) #define pgd_offset(mm, address) ((mm)->pgd + pgd_index((address))) struct mm_struct *mm = current->mm; pgd_t *pgd = pgd_offset(mm, address); pte_t pte = *pte_offset_map(pgd, address); unsigned long pfn = pte.pte >> PAGE_SHIFT; /* physical frame number fizyczny numer ramki kodowany na najwyższych 20 bitach, pozostałe używane są przez system operacyjny m.in. do kontroli dostępu */ struct page = pte_page(pte); /* zmiana kontekstu pamięci wiąże się z przeładowaniem całej struktury stron */ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk) { if (likely(prev!= next)) { per_cpu(cpu_tlbstate, cpu).state = TLBSTATE_OK; per_cpu(cpu_tlbstate, cpu).active_mm = next; /* Przeładowanie tablic stron */ load_cr3(next->pgd); if (unlikely(prev->context.ldt!= next->context.ldt)) load_ldt_nolock(&next->context); Zarządzanie TLB podzielne jest między procesor a system operacyjny. Procesor w razie potrzeby wypełnia bufor wyprzedzającej translacji, ale system operacyjny nie wie o chybionych odczytach z pamięci asocjacyjnej. Rozmiar TLB jest ograniczony (dla przykładu w procesorze Intel Core 2 Duo dostępne są TLB 4KB stron instrukcji ze 128 pozycjami, TLB Strona 15 z 68

16 4KB stron danych: 128 pozycji, TLB 4MB stron instrukcji: 2 pozycje), w przypadku przepełnienia bufora procesor kasuje pozycje, które były najdłużej nieużywane. System operacyjny dba o spójność TLB poprzez użycie instrukcji INVLPG usuwającej z pamięci asocjacyjnej wpis o stronie bądź poprzez zapis korzenia drzewa stron do rejestru CR3 (co jest bardzo kosztowną operacją ze względu na całkowite wyczyszczenie TLB). Obsługa awarii strony, którą napotka procesor jest bardzo kosztowna. Cały proces składa się z następujących kroków: procesor dla danego adresu wirtualnego nie znajduje w TLB odpowiadającego mu adresu fizycznego procesor odnajduje docelową tablicę stron i na podstawie jej elementu wnioskuje, że dla danego adresu wirtualnego nie istnieje fizyczna strona pamięci (optymistycznie zakładamy, że odpowiednie poddrzewo istnieje w pamięci) procesor generuje wyjątek system operacyjny zapisuje stan procesu użytkownika system wywołuje procedurę obsługi awarii pamięci sprawdzana jest lokalizacja strony pamięci na dysku, która będzie wczytana do wolnej ramki pamięci (zakładamy optymistyczny przypadek, kiedy są wolne ramki i nie trzeba żadnej przenieść do pliku wymiany); czytanie z dysku jest operacją I/O, która powoduje, że proces jest blokowany, aż do czasu jej zakończenia planista systemowy uaktywni inny proces, następuje przełączenie kontekstu zakończona operacja I/O dysku generuje przerwanie, zostają zapisane rejestry i stan aktualnego procesu system operacyjny wywołuje funkcję obsługi przerwania dysku twardego system operacyjny powraca do funkcji obsługi awarii strony i poprawia odpowiednie wpisy w tablicach stron pamięci Oprócz adresacji pamięci za pomocą stronicowania istnieje dodatkowo adresacja segmentowa. Adres logiczny składa się z selektora segmentu (16 bitów) i offsetu segmentu (32 bity), używany jest przez kod programu, ulega zamianie na adres fizyczny poprzez translację segmentową. Selektor segmentu stanowi indeks dla tablicy deskryptorów segmentów (GDT Global Descriptor Table lub LDT Local Descriptor Table). Tablica zawiera 64-bitowe elementy stanowiące deskryptory, jej rozmiar jest zmienny i może Strona 16 z 68

17 maksymalnie wynosić Procesor lokalizuje GDT i LDT za pomocą rejestrów GDTR i LDTR zawierających bazowe adresy obu tablic w liniowej adresacji oraz ich rozmiary. Instrukcje procesora LGDT, LLDT i SGDT, SLDT pozwalają odpowiednio na odczyt i zapis rejestrów opisujących lokalizację tablic. Są dwa rodzaje segmentów: przeznaczone dla kodu i danych programu (zawarte w LDT) oraz przeznaczone na użytek jądra systemu operacyjnego (zawarte w GDT). Deskryptor segmentu składa się z 32-bitowej bazy (adres startowy segmentu) oraz 20bitowego limitu wyrażającego w bajtach lub 4KB (zależnie od bitu ziarnistości) rozmiar segmentu. Deskryptor segmentu posiada także bity oznaczające: obecność segmentu w pamięci (dostęp do segmentu, który nie ma zapalonego bitu spowoduje wygenerowanie wyjątku przez procesor) zrealizowanie dostępu (załadowanie deskryptora segmentu do rejestru segmentowego). Każdy program posiada własną tablicę LDT (którą zarządza niewidoczny dla programisty kod wygenerowany przez kompilator), istnieje tylko jedna tablica GDT używana przez jądro systemu operacyjnego. Selektor segmentu ma 16 bitów z czego 13 najbardziej znaczących stanowi indeks w tablicy deskryptorów, bit 14. wskazuje czy celem jest LDT (0), czy GDT (1), bity 15. i 16. definiują żadany poziom uprawnień (Descriptor Privilege Level)- tzw. numer pierścienia (ringu) w architekturze Intela: 0, 1, 2, 3, 4 (poziomy uprawień umożliwiają izolację kodu działającego w przestrzeni jądra, sterowników, programów użytkownika). Deskryptory segmentu buforowane są w rejestrach CS (code), SS (stack), DS (data), ES, FS i GS odpowiednio dla obszarów pamięci na kod, stos, dane i zakresów dodatkowych. Tylko wyższe 16 bitów rejestru segmentowego (czyli selektor) jest dostępne do odczytu i zapisu, pozostała częścią zarządza procesor. Zapis selektora do rejestru powoduje automatyczne pobranie przez CPU odpowiedniego elementu z tablicy deskryptorów. Bezparametrowe instrukcje CALL i JMP używają rejestru segmentowego CS. Ponieważ większość instrukcji odwołuje się do danych w segmentach, których selektory zostały już załadowane do rejestrów segmentowych, procesor może operować na adresach o offsetach w segmencie bez dodatkowego narzutu. Strona 17 z 68

18 Translacja wirtualnego 48-bitowego adresu polega na: pobraniu adresu bazowego dla segmentu (indeksowanie po selektorze), dodaniu do niego 32-bitowego offsetu jeśli włączone jest stronicowanie to dla otrzymanego adresu liniowego najbardziej znaczące 10 bitów stanowi indeks w katalogu stron PGD, na końcu wyznaczania adresu otrzymujemy numer ramki i 12-bitowy offset. Dostęp do pamięci bez użycia procesora możliwy jest dla urządzeń wykorzystujących tryb DMA (Direct Memory Access). Typowe zastosowanie to kopiowanie bloku pamięci z bufora urządzenia (karta sieciowa, muzyczna) do pamięci RAM. Po transferze DMA konieczna jest synchronizacja pamięci cache procesora. Strona 18 z 68

19 2.4. Przełączanie zadań14 Przełączanie zadań to elementarna czynność systemu operacyjnego, która stwarza złudzenie równoległego wykonywania wielu programów. W rzeczywistości procesy wykonywane są sekwencyjnie z przydzielonymi kwantami czasu oraz priorytetami. Procesy trybu jądra można odróżnić od procesów użytkownika za pomocą dwóch bitów poziomu ochrony (ringu). Przy przełączaniu zadania docelowy poziom ochrony deskryptora TSS musi być liczbowo nie mniejszy niż obecny poziom ochrony i żądany poziom ochrony15. Nie dotyczy to wyjątków, przerwań i instrukcji powrotu z przerwań (IRET). Procesor znajduje bazowy adres obecnego segmentu TSS i kopiuje do niego rejestry podstawowe i segmentowe, flagi, pole EIP ustawia na następną instrukcję po tej, która spowodowała przełączenie zadania. Ładowany jest nowy deskryptor TSS, zapalany jest bit zajętości dla nowego zadania, bit TS w rejestrze CR0, ładowane są rejestry podstawowe i segmentowe, LDT, EFLAGS, PTBR, wznawiane jest wykonywanie kodu od instrukcji zapisanej w EIP. Implementacja TSS w Linuksie ma postać16: struct x86_hw_tss { unsigned short back_link, blh; /* poprzedni TSS */ unsigned long sp0; /* stos dla pierścienia 0 */ unsigned short ss0, ss0h; unsigned long sp1; /* stos dla pierścienia 1 */ /* ss1 caches MSR_IA32_SYSENTER_CS: */ unsigned short ss1, ss1h; unsigned long sp2; /* stos dla pierścienia 2 */ unsigned short ss2, ss2h; unsigned long cr3; /* adres głównego katalogu stron */ unsigned long ip; unsigned long flags; unsigned long ax; unsigned long cx; unsigned long dx; unsigned long bx; unsigned long sp; unsigned long bp; unsigned long si; unsigned long di; 14 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3A, Rozdział 6 Task Management 15 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1, Rozdział Calls to other privilege levels 16 Linus Torvalds et al., Linux kernel , arch/x86/include/asm/processor.h Strona 19 z 68

20 unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned short short short short short short short short short es, esh; cs, csh; ss, ssh; ds, dsh; fs, fsh; gs, gsh; ldt, ldth; trace; io_bitmap_base; attribute ((packed)); Każdy proces ma własny deskryptor TSS umieszczony w GDT. Dodatkowo dla pojedynczego procesu istnieje w tejże tablicy deskryptor LDT. Dlatego w podstawowej implementacji obsługi przełączania procesów opartej na sprzętowym przełączaniu kontekstów jednocześnie może istnieć około 4 tysięcy procesów. Strona 20 z 68

21 2.5. Implementacja wirtualizacji Tryb wirtualizacji można potraktować jako dodatkowy tryb obok trybu jądra (ring 0) i trybu użytkownika (ring 3). Na ogół implementowany jest17 z użyciem nadzorcy wirtualnej maszyny (Virtual Machine Manager), który działa w trybie ring 0, sam zaś system operacyjny gościa działa tak jak każdy inny proces użytkownika. Sterownik VMM na czas działania kodu ring 3 systemu gościa podmienia odpowiednie struktury używane przez system gospodarza na te wymagane przez system maszyny wirtualnej (są to opisane wcześniej rejestry procesora i tablice deskryptorów). W momencie nadejścia przerwania lub przełączenia zadania nadzorca maszyny wirtualnej zapisuje stan odpowiednich struktur i odtwarza te używane przez rzeczywisty system operacyjny. Sterownik VMM nie modyfikuje działania planisty systemowego gospodarza, cały system operacyjny gościa działa tylko wtedy, kiedy tak jak inne procesy otrzymuje od planisty kwant czasu. Po rozpoczęciu pracy przez maszynę wirtualną, z punktu widzenia procesora, komputer może znajdować się w następujących stanach: procesor wykonuje kod systemu gospodarza ring 3 lub ring 0 procesor wykonuje emulowany kod systemu gościa używając poziomu uprawnień ring 3 gospodarza (kiedy system operacyjny gościa nie działa w trybie użytkownika jego kod dekompilowany, analizowany i odpowiednio modyfikowany; przejście od natywnego wykonywania kodu do emulacji powodują np. instrukcja wyłączenia przerwań - CLI, instrukcja załadowania tablicy deskryptorów przerwań LIDT, wykonywanie jakichkolwiek instrukcji trybu rzeczywistego (np. zmiana trybu wyświetlania z udziałem kodu BIOS-u, wirtualizowany DOS, inicjalizacja systemu operacyjnego podczas jego startu)18. procesor wykonuje kod trybu jądra systemu gościa w trybie ring 1 systemu gospodarza (ring 1 standardowo nie jest wykorzystywany przez systemy operacyjnego na architekturę x86) Kod systemu gościa może być bezpiecznie wykonywany dzięki temu, że nadzorca ustawił odpowiednie pułapki i procedury obsługi przerwań oraz wyjątków. W odpowiednich 17 Sun Microsystems, VirtualBox Architecture, 18 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1, Rozdział 5.12 System instructions Strona 21 z 68

22 przypadkach nadzorca może przekierować obsługę takich zdarzeń do procedur zdefiniowanych przez system gościa. Szacuje się, że około 80% kodu wykonywanego przez system operacyjny to kod trybu użytkownika, który dla maszyny wirtualnej może być wykonywany natywnie, czyli z pełną prędkością. Kod systemu gościa może być wykonywany w następujących trybach gospodarza: ring 3 wykonywany natywnie, im częściej opuszczany, tym więcej przełączeń kontekstów i maszyna wirtualna działa wolniej ring 1 widoczny dla systemu gościa jako ring 0, w najprostszej implementacji działa wolno, gdyż procesor ciągle generuje wyjątki z powodu naruszenia poziomu uprawnień przez instrukcje; w reakcji na wyjątek nadzorca wykonuje akcję odpowiadającej tej, którą chciał wykonać system gościa. W zaawansowanej implementacji kod jest analizowany i problematyczne instrukcje podmieniane są na skoki do funkcji nadzorcy, emulujących uprzywilejowane instrukcje. ring 0 działa kod nadzorcy Nowoczesne procesory x86 mają sprzętowe wsparcie dla wirtualizacji (Intel Vanderpool19, funkcjonalność widoczna w CPUID jako VMX oraz AMD Pacifica, SVM). Procesor z tymi rozszerzeniami zawsze działa w dwóch trybach: tryb administratora procesor zachowuje się w zasadzie tak samo jak zwykły CPU bez sprzętowej wirtualizacji tryb nie-administratora wykonuje kod maszyny wirtualnej Wszystkie cztery poziomy uprawnień dostępne są w obu trybach. Przejścia między trybami wykonywane są przez instrukcje VM enter i VM exit. Wyjścia z trybu maszyny wirtualnej następują automatycznie po napotkaniu uprzywilejowanej instrukcji.20 Najnowsze rozwiązania sprzętowe obejmują także pamięć podręczną TLB dla systemu wirtualizowanego. 19 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1, Rozdział 5.14 Virtualmachine extensions 20 Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3B, Rozdział 21.1 Instructions That Cause VM Exits Strona 22 z 68

23 Urządzenia takie jak dysk twardy, myszka czy karta graficzna muszą być w całości emulowane przez kod nadzorcy. Dostawca oprogramowania do wirtualizacji zazwyczaj dostarcza sterowniki dla systemu gościa emulujące urządzenia np. operacje dysku twardego zamieniane są na operacje na systemie plików gospodarza, zapis do bufora ramki karty graficznej gościa realizowany jest jako ustawianie pikseli na bitmapie okna systemu gospodarza. Strona 23 z 68

24 2.6. Wydajność wirtualizacji Na dwóch platformach sprzętowych: laptop, procesor Intel Celeron M 420 1,6GHz z 1MB pamięci cache L2, chipset Intel i945, 2GB pamięci RAM DDR2 667MHz, Linux rt serwer, AMD Athlon X ,3GHz z 1MB pamięci cache L2 i rozszerzeniami SVM, chipset ATi RS690, 4GB pamięci RAM DDR 800MHz, Linux rt porównana została wydajność następujących produktów do wirtualizacji: EMC VMware Server EMC VMware Server 2.0 beta1 InnoTek VirtualBox Xen (Novell SuSE Linux Enterprise Server 10 SP1), wymagający sprzętowej wirtualizacji W testach na laptopie22 za pomocą oprogramowania SiSoft Sandra w wirtualnym środowisku Windows 2003 została zmierzona wydajność dla aplikacji VMware Server 1.0 i VirtualBox. Rys. 2. Porównanie wydajności VMware Server i VirtualBox za pomocą testów SiSoft Sandra w wirtualnym Windows Server 2003 SP1 (wydajność jednostki arytmetyczno-logicznej, instrukcji SSE, podsystemu cache i dostępu do pamięci) J. Jóźwicki, Dlaczego VirtualBox jest lepszy od VMware'a, Strona 24 z 68

25 Wyniki są bardzo zbliżone, co wskazuje na to, że kod trybu użytkownika działa natywnie oraz, że prawdopodobnie oba produkty tak samo implementują wirtualizację (nadzorca + modyfikacja kodu systemu gościa). Należy jednak przyjrzeć się dokładnie testowi opóźnień w dostępie do pamięci. Rys. 3. Opóźnienia w dostępie do pamięci na platformie Intel, VMware Server Wyniki są gorsze od referencyjnych dla Intel Core Duo T2500 2GHz (analizując zbliżone rezultaty Intel Core 2GHz i 2,5GHz testowy procesor 1,6GHz powinien sprawować się lepiej oczekiwana lokalizacja wykresu czerwonego to sąsiedztwo linii fioletowej i niebieskiej). Opóźnienie dla bloku pamięci do 1MB wynosi maksymalnie 150 cykli zegara, dla bloku 128KB około 20 cykli zegara. Strona 25 z 68

26 Rys. 4. Opóźnienia w dostępie do pamięci na platformie Intel, VirtualBox Wyniki są lepsze od referencyjnych dla procesora Intel Core Duo T2300 1,6GHz mającego taki sam zegar i technologię wykonania, co testowy Celeron M 420 1,6GHz. Dostęp w obrębie bloku pamięci 1MB to tylko około 40 cykli procesora, dla bloku 128KB poniżej 5-ciu cykli zegara. VirtualBox oferuje około 4 razy szybszy dostęp pamięci niż VMware! VirtualBox zapewnia szybszy dostęp do pamięci, co jest odczuwalne jako dużo większy komfort pracy (wynikający z responsywności) z aplikacjami do obróbki grafiki np. Paint Shop Pro (wszak bitmapy to adresowane liniowo obszary pamięci) oraz odtwarzania multimediów. Strona 26 z 68

27 Rys. 5. Płynnie działający Windows Media Player w wirtualnym systemie Windows Server 2003 SP1 zainstalowanym wewnątrz aplikacji VirtualBox. Na serwerze23 przeprowadzono testy na tej samej wersji wirtualnego systemu operacyjnego, ale tym razem były to testy syntetyczne dokonane za pomocą aplikacji PCMark Rys. 6. Wynik sumaryczny: VirtualBox, Xen, VMware 1.0, VMware 2.0 beta 23 J. Jóźwicki, Benchmarki VM, Strona 27 z 68

28 Rys. 7. Wyniki szczegółowe testu syntetyczne VMware przegrywa w konkurencjach wymagających szybkiego dysku twardego. Symulowany start systemu Windows XP pozostawia go daleko w tyle mimo, że oprogramowanie EMC emuluje dedykowany dysk SCSI. VMware 1.0 słabo wypada w teście grafiki (wersja 2.0 beta zaś bardzo dobrze), ale test w ogóle można uruchomić (w przeciwieństwie do Xena pretendującego do roli standardu przemysłowego, który zdaje się nie mieć żadnej akceleracji 2D). Zdumiewa wynik VirtualBoksa, który najwidoczniej dzięki dopracowanej rekompilacji kodu, doskonale eliminuje degradację szybkości związaną z obsługą przerwań i wyjątków procesora (co także ma miejsce przy instrukcjach VM enter, VM exit ). Podsumowując wyniki, należy w zastosowaniach biurkowych przyznać zwycięstwo VirtualBoksowi i równocześnie zaznaczyć, że istnieją wątpliwości, co do zastosowania produktu w tym samym obszarze co VMware Server wirtualizacji serwerowej. Darmowa komercyjna odmiana VirtualBoksa udostępniana jest na licencji określającej użycie aplikacji jako ewaluacyjne bądź do celów osobistych, natomiast wersja darmowa o otwartym kodzie jest ograniczona funkcjonalnie (m.in. brak obsługi USB, zdalnej konsoli). Właściciel VirtualBoksa pozycjonuje aplikację jako produkt dla deweloperów, zaś do zastosowań serwerowych poleca xvm Server oparty o kod Xena. Strona 28 z 68

29 3. Architektura aplikacji VMApp Rys. 8. Warstwy komponentów tworzących VMApp Cała funkcjonalność aplikacji do zarządzania maszynami wirtualnymi oparta jest o funkcje udostępniane przez bibliotekę języka C/C++ VMware VIX (1) oraz o dodatkowe funkcje dowiązań Javy (4) wykorzystujące polecenia powłoki systemu operacyjnego, na którym zainstalowany jest VMware Server. Dostęp do powłoki serwera realizowany jest za pomocą zmodyfikowanej biblioteki JSch (3) Java Secure Channel (modyfikacje polegały na zmianie rozmiaru tablic przechowujących transmitowane dane ze stałego na ustalany dynamicznie w zależności od rozmiaru danych). Dowiązania Javy opakowują funkcje z libvix.so z użyciem biblioteki libcall.so (2), która pełni rolę pośrednika między środowiskiem JVM a natywnym kodem C/C++ i umożliwia wywoływanie dowolnych funkcji C/C++ z poziomu Javy. Wspomniana biblioteka po przedefiniowaniu uniksowych funkcji dlopen, dlsym, dlclose na LoadLibrary, GetProcAddress, FreeLibrary i wyłączeniu kodu związanego z obsługą sygnałów daje się skompilować i działa z systemem Windows. W dowiązaniach Javy zostało stworzone wysokopoziomowe API realizujące w jednym wywołaniu operację taką jak włączenie, wyłączenie, restart czy hibernację maszyny wirtualnej VMware, składającą się z wielu wywołań pojedynczych funkcji libvix. Interfejs użytkownika został stworzony z wykorzystaniem szkieletu aplikacyjnego Echo3 (6), dla którego platformę uruchomieniową stanowi środowisko Grails (5). Strona 29 z 68

30 3.1. VMware VIX API Wraz z darmową wersją oprogramowania VMware Server 1.0 dostarczane są biblioteki VIX oraz perlowe dowiązania do nich. VIX API służy do automatyzacji zadań związanych z maszynami wirtualnymi, dostępne jest na platformy Windows i Linux oraz dla produktów Server, Workstation i ESX. Oprócz bibliotek w skład pakietu VIX wchodzi narzędzie linii poleceń vmrun udostępniające te same funkcjonalności, co API oferowane programistom. Lista funkcji VIX API udostępnianych dla serwerowej wersji oprogramowania VMware24: Nazwa funkcji Parametry Opis, uwagi VixHost_Connect Wersja API, typ produktu, nazwa hosta, port hosta, nazwa użytkownika, hasło użytkownika, opcje połączenia, procedura zwrotna dla operacji asynchronicznych, parametr dla tej procedury. Funkcja zwraca uchwyt do operacji asynchronicznej, której wykonanie powoduje otwarcie połączenia z serwerem VMware VixHost_Disconnect Uchwyt do hosta Funkcja zamyka serwerem VMware VixHost_FindItems Uchwyt do hosta, rodzaj Funkcja zwracająca wyszukane dane wyszukiwania: wszystkie maszyny, o maszynach wirtualnych; uruchomione maszyny, procedura faktycznie działa tylko zwrotna i jej parametr wyszukiwanie uruchomionych maszyn, zwracane są ścieżki do plików konfiguracyjnych VMX VixHost_RegisterVM Uchwyt do hosta, ścieżka do pliku Funkcja rejestruje maszynę konfiguracyjnego, procedura zwrotna wirtualną (definiowaną przez plik i jej parametr konfiguracyjny) zapisuje dane o niej w plikach /etc/vmware/vm-list lub vm-list-private, ustawia interpreter pliku vmx na program vmware i nadaje plikowi bit wykonywalności VixHost_UnregisterV M Uchwyt do hosta, ścieżka do pliku Funkcja wyrejestrowuje maszynę konfiguracyjnego, procedura zwrotna wirtualną, jeśli plik konfiguracyjny i jej parametr istnieje to usuwane są dane o maszynie z plików vm-list i vm-listprivate i blokowana jest wykonywalność pliku, jeśli pliku nie ma to w inwentarzu maszyn pozostają wpisy śmieci. VixJob_CheckComplet Uchwyt do zadania, wskaźnik do Funkcja sprawdza ion wartości typu bool zostało ukończone połączenie czy zadanie 24 EMC VMware, VIX API Reference Documentation, Strona 30 z 68 z

31 Nazwa funkcji Parametry Opis, uwagi VixJob_GetError Uchwyt do zadania Funkcja zwraca kod błędu dla asynchronicznego zadania VixJob_GetNthProperti Uchwyt do zadania, indeks Funkcja zwraca wartość dla es właściwości i jej identyfikator podanego indeksu i identyfikatora właściwości przypisanej dla przekazanego uchwytu VixJob_GetNumProper Uchwyt do zadania, identyfikator Funkcja zwraca liczbę instancji ties właściwości danej właściwości przypisanej dla przekazanego uchwytu VixJob_Wait Uchwyt do zadania Funkcja czeka na zakończenia asynchronicznego zadania VixVM_CopyFileFrom Uchwyt do maszyny wirtualnej, Funkcja kopiuje plik lub katalog z GuestToHost ścieżka w systemie gościa, ścieżka w maszyny wirtualnej do systemu systemie gospodarza, procedura gospodarza zwrotna i jej parametr VixVM_CopyFileFrom Uchwyt do maszyny wirtualnej, Funkcja kopiuje plik lub katalog z HostToGuest ścieżka w systemie gospodarza, systemu gospodarza do maszyny ścieżka w systemie gościa, procedura wirtualnej zwrotna i jej parametr VixVM_CreateSnapsho Uchwyt do maszyny wirtualnej, Funkcja tworzy migawkę stanu t nazwa migawka, opis, procedura systemu, parametry nazwy i opisu są zwrotna i jej parametr ignorowane przez VMServer VixVM_Delete Uchwyt do maszyny wirtualnej, Funkcja usuwa maszynę wirtualną procedura zwrotna i jej parametr VixVM_GetRootSnaps Uchwyt do maszyny wirtualnej, Funkcja pobiera uchwyt do hot wskaźnik do uchwytu migawki początkowej migawki (VMware Server nie obsługuje drzewa migawek, jest to ograniczenie licencyjne wymuszone w programie, nie wynika z przyczyn technicznych) VixVM_InstallTools Uchwyt do maszyny wirtualnej, Funkcja podmontowuje obraz ISO z procedura zwrotna i jej parametr narzędziami VMware dla systemu gościa, w przypadku włączonej funkcjonalności autostartu płyty w systemie Windows oprogramowanie zainstaluje się automatycznie VixVM_LoginInGuest Uchwyt do maszyny wirtualnej, Funkcja przeprowadzająca nazwa użytkownika w systemie autentykację do systemu gościa gościa i hasło, procedura zwrotna i jej parametr VixVM_Open Uchwyt do hosta, ścieżka do Funkcja zwraca uchwyt do maszyny maszyny wirtualnej, procedura wirtualnej zwrotna i jej parametr Strona 31 z 68

32 Nazwa funkcji Parametry Opis, uwagi VixVM_PowerOff Uchwyt do maszyny wirtualnej, Funkcja wyłącza maszynę wirtualną procedura zwrotna i jej parametr w trybie określonym w pliku vmx (soft lub hard wyłączenie systemu operacyjnego poprzez zdarzenie ACPI lub wyłączenie zasilania) VixVM_PowerOn Uchwyt do maszyny wirtualnej, Funkcja uruchamia maszynę procedura zwrotna i jej parametr wirtualną (także wznawia jej działanie po hibernacji). Funkcja nie powraca do momentu aż zacznie ładować się system operacyjny co oznacza np., że będzie blokowana na czas działania GRUB-a. VixVM_RemoveSnaps Uchwyt do maszyny wirtualnej, Funkcja kasuje migawkę i związane hot uchwyt do migawki, procedura z nią pliki zwrotna i jej parametr VixVM_Reset Uchwyt do maszyny wirtualnej, Funkcja resetuje maszynę wirtualną procedura zwrotna i jej parametr (odpowiednik wciśnięcia przycisku reset w fizycznym komputerze) VixVM_RevertToSnap Uchwyt do maszyny wirtualnej, shot uchwyt do migawki, opcja blokująca włączenie wyłączonej maszyny, procedura zwrotna i jej parametr Funkcja przywraca stan maszyny wirtualnej (dysk, pamięć, aktualnie wykonywany kod) do tego, który został zapisany w migawce VixVM_RunProgramIn Uchwyt do maszyny wirtualnej, Funkcja wykonuje w systemie Guest ścieżka programu do wykonania, gościa żądany program jego parametry, opcje wykonania (funkcjonalnie odpowiada execvp) programu, procedura zwrotna i jej parametr VixVM_Suspend Uchwyt do maszyny wirtualnej, Funkcja hibernuje maszynę procedura zwrotna i jej parametr wirtualną (funkcjonalnie jest to połączenie operacji stworzenia migawki i wyłączenia) VixVM_UpgradeVirtua Uchwyt do maszyny wirtualnej, Funkcja uaktualnia wersję maszyny lhardware procedura zwrotna i jej parametr wirtualnej i ewentualnie jej zasoby sprzętowe dostosowując ją do aktualnej wersji oprogramowania VMware. Operacja nie działa w dół (downgrade). VixVM_WaitForToolsI Uchwyt do maszyny wirtualnej, Funkcja czeka na start narzędzi nguest maksymalny czas oczekiwania, VMware w systemie gościa, w procedura zwrotna i jej parametr przypadku przekroczenia maksymalnego czasu oczekiwana zwracany jest błąd Vix_FreeBuffer Void * Funkcja zwalnia bufor alokowany wcześniej przez VIX API Vix_GetErrorText Kod błędu funkcji VIX API Funkcja zwraca statyczny opis tekstowy dla podanego kodu błędu Strona 32 z 68

33 Nazwa funkcji Parametry Opis, uwagi Vix_GetProperties Uchwyt, identyfikatory właściwości Funkcja pobiera wartości właściwości o żądanych identyfikatorach dla podanego uchwytu (np. z uchwytu do maszyny wirtualnej można pobrać dane o jej ścieżce, stanie zasilania) Vix_PumpEvents Uchwyt do hosta Funkcja zastępująca działającą w tle pulę wątków realizujących operacje asynchroniczne, powinna być wykonywana w pętli w dedykowanym wątku Vix_ReleaseHandle Uchwyt Funkcja zwalniająca przez VIX API uchwyt stworzony Pełną listę funkcji udostępnianych przez VIX API można uzyskać za pomocą narzędzi objdump i IDA. Liczba funkcji w bibliotece jest dużo większa niż zadeklarowana w oficjalnej dokumentacji, niestety brak informacji o strukturze przekazywanych uchwytów uniemożliwia potencjalne użycie ukrytych funkcji. Rys. 9. Funkcje eksportowane przez bibliotekę libvix.so Strona 33 z 68

34 Do ciekawych ukrytych funkcji należą: VixVM_CreateScreenImage funkcja pobiera obrazek z bufora ramki karty graficznej maszyny wirtualnej (zrzut ekranu), jako parametry wejściowe przyjmowane są: uchwyt do hosta, funkcja zwrotna i jej parametr. Nie udało się ustalić identyfikator właściwości zawierającej binarną zawartość obrazka, która powinna być dostępna z poziomu funkcji Vix_GetProperties być może funkcjonalność zrzutu ekranu nie została zaimplementowana w serwerze 1.0 i istnieje tylko w nowszych produktach VixVM_SendKeystrokes funkcja wysyła zdarzenia wciśnięcia klawisza klawiatury po stronie klienta do maszyny wirtualnej, jako parametry wejściowe przyjmowane są: uchwyt do hosta, łańcuch znakowy bądź uchwyt, funkcja zwrotna i jej parametr. Nie udało się przekazać zdarzeń klawiatury do konsoli wirtualnego linuksa, być może łańcuch znakowy z wciśniętymi klawiszami musi mieć specjalny format lub w tym miejscu powinien pojawić się uchwyt do nieznanej struktury FoundryNIC_DisconnectVMFromNetwork funkcja prawdopodobnie odcina maszynie wirtualnej dostęp do sieci, jako parametr przyjmowany jest nieznany uchwyt W zasadzie każda operacja na maszynie wirtualnej realizowana jest według schematu: Połączenie się z serwerem VMware na porcie 902 (połączenie SSL) za pomocą VixHost_Connect i VixJob_Wait (pierwsza operacja zwraca uchwyt do asynchronicznego zadania realizowanego przez pulę wątków, druga czeka na zakończenie zadania) Otworzenie uchwytu do maszyny wirtualnej za pomocą VixVM_Open i VixJob_Wait Wykonanie żądanej operacji i ewentualnie pobranie właściwości udostępnianych przez jej uchwyt za pomocą Vix_GetProperties Zwolnienie uchwytu maszyny wirtualnej za pomocą Vix_ReleaseHandle Rozłączenie połączenia z serwerem z wykorzystaniem VixHost_Disconnect. VMware zaleca przez rozłączeniem i następnym połączeniem odczekać 1 sekundę, co ma stanowić rozwiązanie na problemy w funkcjach VixHost_Disconnect (funkcja czasami jest zablokowana i nie powraca) oraz VixHost_Connect (czasami po rozłączeniu następne połączenie nie może być zrealizowane). Opisane przez dostawcę Strona 34 z 68

35 API problemy i rozwiązania wskazują na błędy w synchronizacji wewnątrz biblioteki.25 Programista korzystający z VIX API musi zmierzyć się z następującymi usterkami w bibliotece26: Funkcja VixHost_FindItems nie zawsze poprawnie wykrywa uruchomione maszyny wirtualne Narzędzie vmrun w przypadku odtwarzania migawki, stworzonej w czasie działania maszyny wirtualnej, pozostawia maszynę w stanie hibernacji Biblioteka VIX w przypadku używania funkcjonalności odtwarzania stanu maszyny wirtualnej w tle (domyślnie włączonej), może za wcześnie raportować zakończenie operacji Funkcja VixVM_CopyFileFromHostToGuest nie sprawdza poprawności nazwy pliku/ folderu z systemu gospodarza w systemie gościa - w rezultacie w systemie plików maszyny wirtualnej mogą powstać obiekty niedostępne dla kolejnych wywołań VIX API; funkcja nie zachowuje uprawień do pliku/katalogu podczas kopiowania Funkcja VixVM_InstallTools, wywołana zaraz po włączeniu maszyny wirtualnej, nie działa Wywołanie dwa razy funkcji VixHost_Disconnect dla tego samego hosta, kończy się awarią biblioteki27 Funkcja VixVM_Open dla nie zarejestrowanej maszyny wirtualnej może powodować przerwanie działania biblioteki28 Protokół używany przez bibliotekę VIX w połączeniach z serwerem VMware może być podejrzany za pomocą narzędzia przechwytującego pakiety sieciowe (np. Ethereal/Wireshark) lub za pomocą ataku wstrzyknięcia biblioteki nadpisującej funkcję systemową write (używaną przy zapisie danych do gniazda sieciowego) cmd=displaykc&doctype=kc&externalid= &sliceid=1&doctypeid=dt_kb_1_1&dialogid= &stateId=0%200% cmd=displaykc&doctype=kc&externalid= &sliceid=1&doctypeid=dt_kb_1_1&dialogid= &stateId=0%200% Strona 35 z 68

36 Rys. 10. Podgląd danych wymienianych między klientem a serwerem VMware. Protokół komunikacyjny przypomina telnet. Klient subskrybuje informacje o zdarzeniach i czeka na otwartym gnieździe sieciowym na ich publikację. Strona 36 z 68

37 3.2. Dowiązania Javy dla VIX API Dowiązania Javy dla VIX API składają się z kilku elementów: biblioteki C/C++ libcall.so umożliwiającej wywoływanie funkcji C/C++ z poziomu Javy pakietu Javy integrującego natywne funkcje libcall funkcji Javy opakowujących pojedyncze funkcje VIX API za pomocą biblioteki libcall wysokopoziomowych funkcji Javy zbudowanych w oparciu o funkcje VIX API i zdalne wywołania poleceń powłoki (m.in. narzędzia vmrun) poprzez bibliotekę Jsch Oficjalne dowiązania Javy dla VIX API nie istnieją - prawdopodobnie ze względu na problemy w samej bibliotece oraz trudną implementację funkcji JNI29 opakowujących funkcje udostępniane przez bibliotekę (przykładowo: JNI nie definiuje funkcji zwrotnej). Funkcje Javy, które mają być funkcjami natywnymi C/C++, deklarowane są ze słowem kluczowym native. Skompilowana klasa analizowana jest przez narzędzie javah30, które generuje szablon do implementacji funkcji w języku C/C++. Ze względu na dużą ilość funkcji VIX API tradycyjne podejście łączenia Javy z C/C+ + za pomocą JNI byłoby pracochłonne i mało efektywne w przypadku zmian w funkcjach. Istnieją biblioteki umożliwiające łatwy dostęp JVM do funkcji C/C++ w systemach Windows, Linux i Solaris, ale są one komercyjne i mają zamknięty kod (przykładowo J/Invoke31). Koncepcyjnie wywoływanie funkcji C/C++ z poziomu Javy nie jest skomplikowane, więc na użytek niniejszej pracy przystąpiono do stworzenia biblioteki libcall o w/w funkcjonalności oraz pakietu opakowującego bibliotekę. 29 Sun Microsystems, Java Native Interface, 30 Sun Microsystems, Advanced Programming for the Java 2 Platform, JNI Example, 31 Strona 37 z 68

38 Operacje składające się na wywołanie funkcji C/C++ z kodu Javy: Załadowanie biblioteki udostępniającej funkcje C/C++ JNIEXPORT jint JNICALL Java_cutils_Call_loadLibrary(JNIEnv *env, jobject o, jstring s) { jint ret = 0; const char* lib = env->getstringutfchars(s, 0); ret = (jint) dlopen(lib, RTLD_LAZY); if (ret!=0) dlopen_count++; env->releasestringutfchars(s, lib); return ret; Pobranie adresu funkcji JNIEXPORT jint JNICALL Java_cutils_Call_getFunction(JNIEnv *env, jobject o, jint handle, jstring s) { jint ret = 0; const char* func = env->getstringutfchars(s, 0); ret = (jint) dlsym((void*)handle, func); env->releasestringutfchars(s, func); return ret; Konwersja argumentów Javy na prymitywny C, umieszczenie ich na stosie w odwrotnej kolejności, wywołanie funkcji za pomocą kodu maszynowego, konwersja zwróconej wartości na typ Javy JNIEXPORT jobject JNICALL Java_cutils_Call_stdcall(JNIEnv *env, jobject o, jint func, jclass res, jobjectarray args) { ONE_CPU(); // ustawienie maski afiniczności procesora SAVE_STACK(st0); // zapisanie aktualnego adresu stosu jobject ret = (res!= NULL)? env->allocobject(res) : NULL, obj; // alokacja zwracanego obiektu const int n = ( args == NULL? 0 : env->getarraylength(args) ); int argv[sizeof(double)/sizeof(int)*n]; // tablica, w której będą przechowywane argumenty C int *pargv = argv; #define PUSH_INT32(arg) pargv[0]=arg; pargv++ // pominięty kod rozpoznający typ argumentu Javy // env->isinstanceof(obj, classtypjavy) for (i = 0; i < n; i++) { Strona 38 z 68

39 if (inst[i] == INST_NULL) { PUSH_INT32(0); else if (inst[i] == INST_INTPTR) { // wskaźnik intarg = env->callintmethod(obj, methodintptrgetaddress); PUSH_INT32(intArg); else if (inst[i] == INST_INT) { intarg = env->callintmethod(obj, methodintvalue); PUSH_INT32(intArg); else if (inst[i] == INST_DOUBLE) { d = env->calldoublemethod(obj, methoddoublevalue); int *di = (int*)&d; PUSH_INT32(di[1]); PUSH_INT32(di[0]); else if (inst[i] == INST_STRING) { jobject bytes = env->callobjectmethod(obj, mstrgetbytes); intarg = env->getprimitivearraycritical((jarray)bytes,0); PUSH_INT32(intArg); //... for(int *p = argv; p < pargv; p++) PUSH(p[0]); CALL(func, eax); // inicjalizacja wartości zwracanej if (inst[n] == INST_INT) { jenv->setintfield(ret, fieldintegervalue, (jint)eax); if (inst[n] == INST_STRING) { ret = (jstring) jenv->newstringutf((char*)eax); RESTORE_STACK(st0); return ret; // odtworzenie adresu stosu W kodzie C/C++ używane są makra odpowiadające instrukcjom maszynowym. Ich implementacja w dialekcie AT&T assemblera (domyślnie używanym przez gcc) ma postać: #define SAVE_STACK(arg) do { asm ("movl %%esp, %0;" : "=m"(arg):); while(0) #define RESTORE_STACK(arg) do { asm ("movl %0,%%esp;" :: "m"(arg)); while(0) #define CALL(ptr, res) do { asm ("call *%0" : "=a"(res) : "r"(ptr) ); while(0) Strona 39 z 68

40 Zwolnienie uchwytu do biblioteki JNIEXPORT jint JNICALL Java_cutils_Call_freeLibrary(JNIEnv *env, jobject o, jint handle) { jint ret = 0; if (handle!= 0) { /*dlfunc fini = (dlfunc) dlsym((void*)handle, "_fini"); if (fini!=null) fini();*/ ret = (jint) dlclose((void*)handle); return ret; Biblioteka libcall wraz z pakietem cutils pozwala na wywoływanie dowolnych funkcji, przykładowo: Function sqrt = new Function("/lib/libm.so.6", "sqrt", false); Double d = (Double) sqrt.call(double.class, 9.0d); System.out.println(d); // 3.0 Function msgbox = new Function("user32.dll", "MessageBoxA", false); msgbox.call(integer.class, 0, "msg", "title", 0); Rys. 11. Łatwy dostęp do funkcji Win32 API z Javy za pomocą libcall. Strona 40 z 68

41 Biblioteka VIX używa puli wątków i TLS (Thread Local Storage, zmienne globalne w oddzielnych instancjach dla każdego wątku), dlatego po zakończeniu wywołania funkcji nie można wyładować biblioteki (co spowodowałoby błąd naruszenia segmentacji pamięci), ani wywołać destruktora biblioteki (co skasowałoby zapisany w niej stan połączeń). Wszystkie dowiązania Javy (VixFunction) dla funkcji VIX API dziedziczą po generycznej funkcji Function (kod fragmentaryczny): public class Function { private private private private private private String libname = ""; String funcname = ""; Call call = null; boolean unsafeunload; int libhandle = 0; int funchandle = 0; public Function(String libname, String func, boolean unsafeunload) { this.libname = libname; this.funcname = func; this.call = new Call(); this.unsafeunload = unsafeunload; synchronized public Object _call_(class resulttype, Object...args) throws Exception { if (funchandle == 0) { libhandle = call.loadlibrary(libname); if (libhandle==0) throw new Exception("Cannot access library "+libname); funchandle = call.getfunction(libhandle, funcname); if (funchandle==0) { call.freelibrary(libhandle); throw new Exception("Cannot find function "+funcname+" inside "+libname); try { int n = args!=null? args.length : 0; Object[] objs = new Object[n]; for (int i=0; i < n; i++) objs[i] = args[n-i-1]; return call.stdcall(funchandle, resulttype, objs); finally { if (!unsafeunload) { call.notifylibrary(libhandle); call.freelibrary(libhandle); libhandle = funchandle = 0; Strona 41 z 68

42 Dodatkowo wywołanie _call_ realizowane jest w osobnym wątku na wypadek pojawienia się błędu segmentacji pamięci, który na poziomie C/C++ (w bibliotece libcall) może być przechwycony i zamieniony na wyjątek Javy, bez kończenia procesu całej maszyny wirtualnej. Funkcjonalność ta w systemie Unix może być osiągnięta poprzez instalację odpowiedniej procedury obsługi sygnałów za pomocą funkcji sigaction: void onsegv(int signum, siginfo_t *siginfo, void* data) { sigsegv = 1; if (_segvjmp!=null) longjmp_(*_segvjmp, 1); else { /* It looks like Sun JVM ignores segmentation fault during * memory management! Let's dispatch this signal */ if (java_sa.sa_sigaction!=null) { java_sa.sa_sigaction(signum, siginfo, data); else kill_(getpid(), SIGILL); Przy przechwytywaniu sygnału SEGV należy pamiętać, że niektóre błędy segmentacji generuje sama maszyna wirtualna i dlatego takie zdarzenie należy przekierować do procedury obsługi sygnału ustawionej oryginalnie przez JVM. Kod obsługi sygnałów przez maszynę wirtualną można obejrzeć w projekcie IcedTea32 (kod dostępny w repozytorium Mercurial, ports/hotspot/src/os_cpu/linux_zero/vm/ os_linux_zero.cpp, JVM_handle_linux_signal): if (sig == SIGSEGV) { address addr = (address) info->si_addr; // check if fault address is within thread stack if (addr < thread->stack_base() && addr >= thread->stack_base() - thread->stack_size()) { // stack overflow Strona 42 z 68

43 if (sig == SIGSEGV && os::is_memory_serialize_page(thread, (address) info->si_addr)) { // Block current thread until permission is restored. os::block_on_serialize_page_trap(); return true; Rys. 12. Maszyna wirtualna Javy firmy Sun Microsystems w trybie sprawdzania JNI (Xcheck:jni:all) informuje o nieoczekiwanej procedurze obsług sygnału SEGV znajdującej się w bibliotece libcall. Dla programisty JNI najlepsza jest jednak maszyna z Java Development Kit firmy IBM jej ostrzeżenia pomagają uniknąć błędów w zarządzaniu pamięcią i dostępie do obiektów Javy. Rys. 13. Monitorowanie aplikacji testowej (wywoływanie kodu C z Javy) poprzez protokół JMX za pomocą narzędzia VisualVM z Sun JDK Strona 43 z 68

44 Rys. 14. W związku z pracą odśmiecacza pamięci (GC) powstają błędy segmentacji, które obsługiwane są przez oryginalną procedurę JVM. Biblioteka libcall skompilowana z flagą DEBUG informuje o tego typu zdarzeniach. Korzystając z szablonu VixFunction wszystkie funkcje udostępniane przez VIX API mogą być zdefiniowane w przejrzysty i łatwy sposób: public class VixFunction extends Function { public final static String VIX_LIB = "libvix.so"; public VixFunction(String func) { super(vix_lib, func, true,!true); public class VixVM_Open extends VixFunction { public VixVM_Open() { super("vixvm_open"); public int call(int vmhandle, String vmxfilepathname, VixEventProc callbackproc, IntPtr clientdata) throws Exception { return (Integer) call(integer.class, vmhandle, vmxfilepathname, callbackproc, clientdata); Strona 44 z 68

45 Biblioteka VIX powstała w zamyśle jako narzędzie do ułatwienia prostych czynności administracyjnych, używane przez krótki okres czasu przez jeden program. Przy równoległej komunikacji z dwoma (lub więcej) serwerami VMware biblioteka potrafi się blokować. Podobny problem powoduje zbyt szybkie wywołanie po sobie funkcji VixHost_Disconnect i VixHost_Connect. Biblioteka tworzy w katalogu tymczasowym potoki, lecz ich nie zamyka. W rezultacie po pewniej liczbie wywołań funkcji wzrasta liczba otwartych deskryptorów plików, przekroczony zostaje ich limit (domyślnie w Linuksie: 1024) i biblioteka przestaje działać. Rys. 15. Biblioteka libvix kończy pracę z powodu przekroczenia limitu używanych deskryptorów plików. Wsparcie techniczne VMware zostało powiadomione o tym błędzie, ale zgłaszający nie otrzymał żadnej odpowiedzi zwrotnej. Dużym mankamentem VIX API jest brak obsługi plików konfiguracyjnych. W dowiązaniach Javy funkcjonalność ta została zaimplementowana za pomocą dostępu SSH do serwera VMware: pliki są wyświetlane na standardowym wyjściu, czytane i parsowane przez kod Javy, zapis następuje przez przekierowanie standardowego wyjścia z tekstem konfiguracji do pliku vmx. Dodatkowo poprzez dostęp SSH do narzędzi vmrun i vmx-config stworzone zostały zamienniki podstawowych funkcji (start, zamknięcie maszyny, reset, hibernacja, rejestracja pliku konfiguracyjnego). Strona 45 z 68

46 3.3. Interfejs WWW Interfejs WWW został wykonany na bazie dwóch szkieletów aplikacyjnych: Grails33 i Echo334. Pierwszy udostępnia dynamiczny język programowania Groovy35 bazujący na Javie, wysokopoziomową warstwę abstrakcji tabel i relacji w bazie danych (automatyczne mapowanie klasy obiektu na tabelę, generacja formatek do prezentacji i edycji danych, łatwe i bogate w możliwości API do zapytań) oraz technologię GSP (Groovy Server Pages) będącą rozszerzeniem JSP. Grails w aplikacji VMApp odpowiedzialny jest za tzw. backend (wewnętrzna serwerowa część aplikacji: zarządzanie użytkownikami, adresami serwerów, danymi autoryzacyjnymi, listami maszyn wirtualnych) oraz stanowi środowisko uruchomieniowe dla aplikacji Echo3. Grails wpisuje się w trend tzw. zwinnego programowania (agile). Szkielet pozwala na bardzo szybkie tworzenie aplikacji. Zrąb VMApp pozwalający na zarządzanie danymi o serwerach i maszynach wirtualnych może powstać w 15 minut, włączając w to instalację szkieletu. Instalacja oprogramowania Grails polega na rozpakowaniu archiwum dystrybucyjnego, ustawieniu zmiennej systemowej GRAILS_HOME oraz dodaniu katalogu GRAILS_HOME/bin do zmiennej PATH. Stworzenie aplikacji polega na wywołaniu polecenia: grails create-app vmapp, które tworzy projekt, możliwy do zaimportowania w środowisku Eclipse. Struktura katalogowa aplikacji prezentuje się następująco: src/java miejsce na kod Javy src/groovy miejsce na kod języka Groovy grails-app/conf katalog zawierający konfigurację aplikacji plik BootStrap.groovy pozwala na umieszczenie metod wywoływanych przy starcie aplikacji, zazwyczaj są to: dodawanie użytkowników, tworzenie inicjalnych rekordów w bazie danych plik Config.groovy zawiera właściwości Javy dla używanych komponentów m.in. poziomy logowania log4j dla poszczególnych pakietów plik DataSource.groovy zawiera definicje źródeł danych dla środowiska deweloperskiego, testowego i produkcyjnego Strona 46 z 68

47 plik SecurityConfig.groovy zawiera konfigurację dla wtyczki acegi definiującą sposoby autentykacji (dane o użytkownikach pobierane z bazy, z serwera LDAP, serwisu OpenID) plik UrlMappings pozwala na stworzenie własnych mapowań adresów URL na konkretne wywołania metod kontrolerów (Grails implementuje wzorzec modelwidok-kontroler) grails-app/controller folder zawierający pliki źródłowe kontrolerów; podstawowe akcje wygenerowanego automatycznie kontrolera to: index wyświetlenie strony startowej dla danej klasy domenowej list wyświetlenie listy obiektów dla danej klasy domenowej show wyświetlenie danych konkretnego obiektu delete usunięcie obiektu edit edycja danych obiektu update uaktualnienie danych obiektów na podstawie wartości wprowadzonych przez użytkownika create stworzenie nowego obiektu save zapis obiektu do bazy grails-app/domain katalog zawierający klasy domenowe; definicja klasy mapowana jest na tabelę w bazie danych grails-app/services folder zawierający serwisy udostępniane przez aplikację (możliwe implementacje i transporty to: SOAP, REST, JMS) grails-app/taglib własne definicje tagów używanych przez strony GSP grails-app/i18n miejsce na zlokalizowane wersje komunikatów używanych przez aplikację (język użytkownika jest wykrywany na podstawie odpowiedniego nagłówka HTTP wysyłanego przez przeglądarkę WWW; jeśli istnieje plik o nazwie messages_{kod_ustawień_regionalnych.properties, to z niego pobierane są teksty komunikatów) grails-app/views katalog z widokami stron GSP dla poszczególnych kontrolerów; każdej metodzie kontrolera może odpowiadać jeden plik GSP. lib folder, w którym powinny być umieszczone wszystkie biblioteki, od których zależy aplikacja Strona 47 z 68

48 plugins miejsce na dodatkowe wtyczki rozszerzające funkcjonalność szkieletu Grails np. acegi (autoryzacja użytkowników), echo2 (GUI) web-app folder, który zostanie bezpośrednio spakowany do pliku war Klasy domenowe wykorzystywane przez VMApp (definicje fragmentaryczne): class Host { static belongsto = User static hasmany = [vms: Vm] int id User user String login // login SSH String pass // hasło SSH String host // port SSH, standardowo 22 int port String appuser // login użytkownika z grupy vmware String apppass int appport // port serwera VMware, standardowo 902 class Vm { static belongsto = Host int id Host host String path String owner Wygenerowane automatycznie definicje tabel w dialekcie osadzonej bazy danych HSQLDB: CREATE MEMORY TABLE HOST(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY, VERSION BIGINT NOT NULL, APP_PASS VARCHAR(255) NOT NULL, APP_PORT INTEGER NOT NULL, APP_USER VARCHAR(255) NOT NULL, HOST VARCHAR(255) NOT NULL, PASS VARCHAR(255) NOT NULL, PORT INTEGER NOT NULL, LOGIN VARCHAR(255) NOT NULL, USER_ID BIGINT, CONSTRAINT FK30F5A8F7634DFA FOREIGN KEY(USER_ID) REFERENCES USER(ID)) CREATE MEMORY TABLE VM(ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL PRIMARY KEY, VERSION BIGINT NOT NULL, OWNER VARCHAR(255) NOT NULL, PATH VARCHAR(255) NOT NULL, HOST_ID BIGINT,CONSTRAINT FKEB7419F24DA FOREIGN KEY(HOST_ID) REFERENCES HOST(ID)) Ponieważ język Groovy jest językiem dynamicznym, pozwala na używanie metod nie istniejących w klasie Javy, aczkolwiek możliwych do wygenerowania w ten sposób szkielet Strona 48 z 68

49 Grails udostępnia funkcjonalność wyszukiwania obiektów w ramach klasy domenowej 36. Przykładowo: def user = User.findByUsername(name) def hosts = Host.findAllByUserAndHost(user, r.getcredentials().gethost()) def vmtoremove = Vm.findAllByHostAndPath(hosts[0], vm.getpath()) Graficzny interfejs użytkownika w aplikacji VMApp jest wykonany z użyciem szkieletu Echo3 (w wersji niestabilnej; jej użycie zamiast wersji produkcyjnej Echo2 podyktowane jest większą wydajnością oraz kompatybilnością do wspieranych przeglądarek oprócz Microsoft Internet Explorera oraz Firefoksa należą Apple Safari, Konqueror i Opera). Echo3 integruje się ze środowiskiem Grails w postaci wtyczki (na potrzeby niniejszego projektu na bazie istniejącej wtyczki Echo2 została stworzona nowa kompatybilna z niestabilną wersją szkieletu GUI) i działa na kontenerze JEE jako servlet. Tworzenie aplikacji internetowej w szkielecie Echo3 odbiega od tradycyjnego podejścia, w którym używa się JSP (bądź pochodnych) i JavaScriptu. API przypomina Swing i AWT. Cały kod pisany jest w Javie, ale programista nie wie, która część będzie wykonywana po stronie serwera, a która skompilowana do JavaScriptu wykonywanego po stronie klienta. Twórca aplikacji internetowej może wykorzystywać klasy dobrze znane z programowania biurkowego takie jak: Window Panel Component Container Label Button Border TextField Menu ActionListener 36 Grails Object Relational Mapping (GORM), Strona 49 z 68

50 Zdarzenia mogą być generowane nie tylko po stronie klienta, ale także po stronie serwera zastosowano tu najprostszą i najbardziej kompatybilną implementację w postaci odpytywania. Przegląd wybranych klas VMApp związanych z GUI: vmapp GapplicationInstance klasa bazowa do implementacji instancji aplikacji Echo3 z dodaną obsługą wysyłania zdarzeń przez serwer poprzez TaskQueueHandle UpdateTask klasa opakowująca kod, który ma być wykonywany w obsłudze zdarzenia zainicjowanego przez serwer vmapp.gui FormWindows klasa bazowa do implementacji formularzy z kontrolkami typu Label, TextField StyleUtil klasa zawierająca statyczne definicje dla elementów graficznych (kolory, obramowania, czcionki) WidgetsFactory klasa implementująca wzorzec projektowy fabryka m.in. dla okien informacyjnych, okien o błędzie, okien z formularzem vmapp.gui.echo pakiet zawierający rozszerzenia dla Echo3 (szkielet zawiera interfejsy umożliwiające utworzenie kontrolki typu drzewo, ale nie zawiera ich implementacji ta musiała zostać stworzona samodzielnie dla aplikacji VMApp) DefaultTreeModel klasa reprezentująca drzewa; pozwala na pobranie dzieci danego węzła, jego etykiety tekstowej DefaultTreeNode klasa reprezentująca węzeł drzewa, pozwala na pobieranie, dodawanie i usuwanie następników vmapp.gui.main MenuBar klasa implementująca górny pasek menu (ala Mac OS) VMListingPane klasa będąca warstwą abstrakcji dla serwera zawierającego maszyny wirtualne; oprócz prezentacji maszyn wirtualnych zapisanych w bazie danych umożliwia wyszukiwanie maszyn na serwerze, rejestrację maszyn, tworzenie nowych, wyświetlenie informacji o systemie operacyjnym z VMware Serverem vmapp.gui.tabs Strona 50 z 68

51 ConfigTab klasa będąca graficzną reprezentacją pliku konfiguracyjnego vmx maszyny wirtualnej HostInfoTab klasa prezentująca informacje o systemie, na którym uruchomione są maszyny wirtualne (wersja systemu, procesory, zajętość pamięci i systemu plików, działające procesy) ManagementTab klasa implementująca graficzne zarządzanie maszyną wirtualną (włączenie, wyłączenie, reset, hibernacja, stworzenie i przywrócenie migawki, otworzenie pliku konfiguracyjnego do edycji; wykorzystywane są wysokopoziomowe funkcje dowiązań VIX Java) grails-app/echo3/panelapplicationinstance klasa języka Groovy implementująca panel administracyjny (MenuBar + VMListingPane) do zarządzania maszynami wirtualnymi Rys. 16. Panel administracyjny w przeglądarce Konqueror 4.1 z podpisanymi obiektami typu MenuBar i VMListingPane Strona 51 z 68

52 Analiza działania aplikacji Echo3 Szkielet Echo3 zakrywa przed programistą wszelkie szczegóły implementacyjne aplikacji, które można poznać tylko na podstawie analizy ruchu sieciowego między przeglądarką WWW a kontenerem JEE. Analizę komunikacji klient - serwer można przeprowadzić po uruchomieniu aplikacji Grails z parametrem -Dserver.port=80 (ustawienie portu na domyślny dla protokołu HTTP) za pomocą narzędzia typu Wireshark. Strona HTML aplikacji wygenerowana przez servlet jest mała - jej zadaniem jest pobranie skryptu startowego aplikacji i zarezerwowanie miejsca do wyświetlania kontrolek: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="nextapp Echo v3.0.b1++" name="generator" /> <title> </title> <style type="text/css"> </style> <script src="/vmapp/panel/panel.gsp?sid=echo.boot" type="text/javascript"> </script> </head> <body id="body" onload="echo.boot.boot('/vmapp/panel/panel.gsp', true);" style="height:100%;width:100%;margin:0px;padding: 0px;fontfamily:verdana, arial, helvetica, sans-serif;font-size:10pt"> <div id="approot" style="position:absolute;width:100%;height:100%;" /> </body> </html> Między przeglądarką a serwerem wymieniane są komunikaty XML: cmsg i smsg. Skrypt inicjalizujący wysyła do serwera dane o przeglądarce: <cmsg t="init"> <dir proc="clientproperties"> <p n="screenwidth">1280</p> <p n="screenheight">800</p> <p n="screencolordepth">24</p> <p n="utcoffset">60</p> <p n="navigatorappname">netscape</p> <p n="navigatorappversion">5.0 (compatible; Konqueror/4.1; Linux) KHTML/4.1.3 (like Gecko) Fedora/ fc10</p> <p n="navigatorappcodename">mozilla</p> <p n="navigatorcookieenabled">true</p> <p n="navigatorjavaenabled">false</p> <p n="navigatorlanguage">en_us</p> <p n="navigatorplatform">linux i686</p> <p n="navigatoruseragent">mozilla/5.0 (compatible; Konqueror/4.1; Linux) KHTML/4.1.3 (like Gecko) Fedora/ fc10</p> <p n="browserchrome">false</p> <p n="browseropera">false</p> <p n="browsersafari">false</p> Strona 52 z 68

53 <p n="browserkonqueror">true</p> <p n="browsermozillafirefox">false</p> <p n="browsermozilla">false</p> <p n="browserinternetexplorer">false</p> <p n="browserversionmajor">4</p> <p n="browserversionminor">1</p> </dir> <dir proc="csync" /> </cmsg> Servlet odsyła komunikat zawierający informacje jakie biblioteki JavaScript powinny zostać wczytane, parametry do konstrukcji obiektów GUI oraz okres czasu, co jaki przeglądarka powinna odpytywać serwer, czy po jego stronie pojawiły się nowe zdarzenia (kod fragmentaryczny): <smsg xmlns="http://www.nextapp.com/products/echo/svrmsg/servermessage.3.0" async-interval="1000" i="1" root="approot"> <libs><lib>echo.contentpane</lib><lib>echo.splitpane</lib><lib>echoextras.c ommon</lib><lib>echoextras.menu</lib><lib>echo.arraycontainer</lib><lib>ech o.windowpane</lib><lib>echoextras.accordionpane</lib><lib>echo.grid</lib><l ib>echo.button</lib><lib>echoextras.remotetree</lib><lib>echo.label</lib><l ib>echoextras.tabpane</lib></libs> <group i="init"> <dir proc="appsync"> <locale>en-us</locale> </dir></group> <group i="update"> <dir proc="csyncup"> <ss /> <up r="true"><c i="c_1" t="cp"><c i="c_2" t="sp"> <p n="orientation" t="i">4</p> <p n="separatorposition" t="x">30px</p> <p n="layoutdata" t="l"> <p n="overflow" t="i">1</p> <p id="topmenu" n="model" t="extras.serial.menumodel" text=""><item id="servers" t="extras.serial.menumodel" text="servers"><item t="extras.serial.optionmodel" text="vm Listing /></item> </p> <c i="c_28" t="l"> <p n="icon" t="i">!i!18e1a98_11de8a6c832_1</p> <p n="text">red Hat Enterprise Linux 4 64-bit</p> <p n="foreground">#000000</p> </c> </up> </dir> </group></smsg> Strona 53 z 68

54 Biblioteki pobierane są za pomocą żądań HTTP GET typu: GET /vmapp/panel/panel.gsp?sid=echo.contentpane HTTP/1.1. Odsyłany kod używa pseudodziedziczenia i jest skompresowany za pomocą metody gzip, co skraca czas ładowania się aplikacji: Echo.Sync.ContentPane = Core.extend(Echo.Render.ComponentSync, { $static : { DEFAULT_BACKGROUND :"#ffffff", $load : function() { Echo.Render.registerPeer("ContentPane", this);, $construct : function() { this._floatingpanemanager = null;, _processzindexchanged : function(e) { for ( var i = 0; i < this.component.children.length; ++i) { if (!this.component.children[i].floatingpane) { continue; var index = this._floatingpanemanager.getindex(this.component.children[i].renderid ); var childelement = this._childidtoelementmap[this.component.children[i].renderid]; if (childelement) { childelement.style.zindex = index; Synchronizacja stanu aplikacji między klientem a serwerem zachodzi tylko w razie potrzeby i składa się z następujących kroków: Przeglądarka, co pewien okres czasu (async-interval) wysyła do serwera żądanie HTTP: GET /vmapp/panel/panel.gsp?sid=echo.asyncmonitor HTTP/1.1 Serwer odpowiada komunikatem: <async-monitor request-sync="false true"/> W razie potrzeby klient odsyła dane różnicowe np. <cmsg><dir proc="csync"> <e t="close" i="c_40" /> <p i="c_40" n="positionx">490</p> <p i="c_40" n="positiony">207</p> </dir> </cmsg> Jeśli zmiana danych/zdarzenie nie ma procedury obsługi po stronie serwera (np. ruch Strona 54 z 68

55 myszki w polu kontrolki) to informacja o zmianie stanu po stronie klienta nie jest wysyłana. Jest to ważna cecha wersji 3.0 szkieletu, pozwalająca znacząco zminimalizować ruch sieciowy. Serwer potwierdza stan synchronizacji komunikatem smsg, który może być pusty lub zawierać zmiany w takiej samej postaci, jak te wysyłane przez klienta. Brak możliwości odpytania serwera powoduje wygenerowanie wyjątku po stronie klienta (alert JavaScript) i w najgorszym przypadku przerwanie działania całej aplikacji. Strona 55 z 68

56 4. Instrukcja użytkownika i administratora Oprogramowanie dostarczane jest w postaci archiwum, które po rozpakowaniu zawiera gotową do uruchomienia aplikację dla systemów Linux i Windows. W dystrybucji znajduje się szkielet Grails w wersji oraz Sun Java Development Kit w wersji z dołączonymi bibliotekami libvix i libcall. JDK może być zastąpione innym np. firmy IBM, czy też BEA JRockit, pod warunkiem umieszczenia w odpowiednim miejscu wymienionych bibliotek C/C++. Rys. 17. Listing katalogu głównego aplikacji VMApp Aplikacja uruchamiana jest za pomocą skryptu run.sh, który może być zintegrowany ze skryptem startowym init.d. Użytkownik uruchamiający skrypt, ze względu na błąd w bibliotece libvix, powinien mieć zwiększony limit liczby otwartych deskryptorów plików (wpis nofile w /etc/security/limits.conf). Strona 56 z 68

57 Rys. 18. Okno logowania do aplikacji VMApp Aplikacja dostępna jest pod adresem https://nazwa_hosta:8443/vmapp. Domyślny port, na którym działa aplikacja można zmienić w pliku vmapp.sh (lub vmapp.cmd dla Windows) poprzez edycję zmiennej PORT. Przy pierwszym uruchomieniu można zalogować się jako użytkownik admin z hasłem admin. Należy pamiętać o zmianie hasła, której można dokonać za pomocą części backend (dostęp z menu Program -> Go to backend; tam również można stworzyć nowych użytkowników). W przypadku zaznaczenia opcji 'Remember me' stan zalogowania użytkownika zapisywany jest w ciasteczku i pamiętany także pomiędzy ewentualnymi restartami aplikacji VMApp. Panel do zarządzania maszynami wirtualnymi przy pierwszym uruchomieniu wyświetla tylko górne menu, z którego należy wybrać pozycję Program -> New server i wprowadzić dane dostępowe do maszyny, na które zainstalowany jest VMware Server 1.0. Strona 57 z 68

58 Rys. 19. Ekran aplikacji VMApp po pierwszym udanym logowaniu Rys. 20. Rejestracja serwera VMware Strona 58 z 68

59 Rys. 21. Wykaz maszyn wirtualnych znalezionych na zdalnym serwerze Rejestracja serwera VMware powoduje uruchomienie wyszukiwania maszyn wirtualnych (sprawdzany jest inwentarz oraz katalog /lib/vmware/virtual Machines) czynność ta wykonywana jest tylko raz, znalezione maszyny rejestrowane są w bazie danych. Pogrupowane maszyny wirtualne prezentowane są w panelu VM Inventory, ich stan oznaczony jest za pomocą kolorów: kolor zielony maszyna włączona kolor pomarańczowy maszyna w stanie hibernacji kolor czarny maszyna wyłączona kolor szary stan nieokreślony Kliknięcie na dany liść drzewa powoduje odpytanie VMware Serwera o stan maszyny wirtualnej i pojawienie się zakładki Management. Strona 59 z 68

60 Rys. 22. Zakładka z informacjami o maszynie wirtualnej W zakładce Management znajdują się informacje o właścicielu maszyny, lokalizacji pliku konfiguracyjnego, liczbie wirtualnych procesorów, ilości przydzielonej pamięci i stanie maszyny. Możliwe jest włączenie, wyłączenie, hibernacja i zresetowanie systemu operacyjnego gościa; stworzenie migawki, odtworzenie jej i usunięcie. Poprawne lub błędne wykonanie wybranej funkcji sygnalizowane jest pojawieniem się okna z adekwatną do rezultatu informacją. Funkcje takie jak hibernacja czy odtwarzanie migawki mogą wykonywać się znacząco dłużej niż pozostałe. Z poziomu zakładki Management można otworzyć do edycji plik konfiguracyjny maszyny wirtualnej, usunąć maszynę z inwentarza (zarówno oprogramowania VMware jak i bazy danych aplikacji) oraz przenieść ją do grupy maszyn. Funkcjonalność grupowania nie występuje w produkcie firmy EMC; jej implementacja w aplikacji VMApp ułatwia administrację przy dużej liczbie wirtualnych systemów. Strona 60 z 68

61 Rys. 23. Potwierdzenie poprawnego włączenia maszyny wirtualnej Rys. 24. Edycja konfiguracji wybór karty sieciowej Strona 61 z 68

62 Podczas edycji pliku konfiguracyjnego możliwe są: określenie rodzaju wirtualizacji (sprzętowa lub programowa), zmienna monitor.virtual_exec zmiana adresu sprzętowego karty sieciowej zmiana typu połączenia sieciowego (bridged podłączenie do sieci gospodarza, nat transmisja przechodząca przez gospodarza, hostonly sieć tylko między gościem a gospodarzem) zmiana typu karty sieciowej (vlance AMD PCNet32 10Mbit, e1000 Intel PRO/1000 Ethernet, vmxnet odmiana akcelerowanej na poziomie sterownika karty vlance 1Gbit/s) zmiana typu urządzenia ide (atapi-cdrom filtrowany dostęp do napędu CD, cdromimage umożliwia podłączenie obrazu ISO, cdrom-raw bezpośredni dostęp systemu gościa do napędu optycznego, harddisk dysk twardy) włączenie lub wyłączenie autostartu maszyny wraz ze startem serwera włączenie lub wyłączenie synchronizacji czasu między gospodarzem a gościem za pomocą narzędzi VMware zmiana priorytetu systemu w przypadku obecnego interaktywnego użytkownika zmiana sposobu wyłączania i resetowania systemu gościa (sygnalizacja ACPI lub zabicie maszyny wirtualnej) włączenie lub wyłączenie obecności stacji dyskietek zdefiniowanie ilości wirtualnych procesorów (dozwolone są maksymalnie 2) włączenie obsługi adresacji PAE zdefiniowanie rodzaju systemu operacyjnego gościa określenie rozmiaru pamięci przydzielonego dla maszyny wirtualnej określenie rodzaju adaptera SCSI (BusLogic lub LSI Logic) Strona 62 z 68

63 Rys. 25. Edycja konfiguracji wybór systemu operacyjnego W oknie reprezentującym zasoby pojedynczego serwera VMware oprócz panelu VM Inventory znajduje się panel Operations. Zdefiniowane są w nim następujące operacje: Reload VMs from host przeładowanie listy maszyn wirtualnych z serwera: dane z bazy są usuwane i zastępowane listą wyszukanych maszyn, odświeżany jest interfejs użytkownika Reload VMs from inventory przeładowanie listy maszyn wirtualnych korzystając z danych w bazie Remove host from inventory kasowane są dane autoryzacyjne serwera oraz lista jego maszyn wirtualnych, aby ponownie zarządzać tym serwerem konieczna jest jego rejestracja Add VM to inventory zarejestrowanie maszyny wirtualnej (na podstawie jej pliku konfiguracyjnego) w inwentarzu VMware Serwera i aplikacji VMApp Create new VM stworzenie nowej standardowej maszyny wirtualnej (Linux, dysk BusLogic 160GB) o podanej nazwie Strona 63 z 68

64 Show debug tab wyświetlenie zakładki, w której można obejrzeć logi aplikacji Show host info wyświetlenie zakładki z danymi o serwerze (system operacyjny, procesory, pamięć, zamontowane systemy plików, procesy) Rys. 26. Dane o maszynie, na której zainstalowany jest VMware Server. Częścią aplikacji VMApp standardowo ukrytą przed użytkownikiem jest tzw. backend (dostępny z poziomu menu Program -> Go to backend). Pozwala ona na bezpośrednie zarządzanie danymi w bazie (hosty, maszyny wirtualne, użytkownicy) oraz restart lub zamknięcie całej aplikacji (co może okazać się konieczne w przypadku awarii biblioteki libvix). Backend może przydać się do administracyjnego definiowania użytkowników i ich maszyn wirtualnych (użytkownik od razu po zalogowaniu widzi swoje wirtualne systemy operacyjne, nie musi wykonywać żadnych dodatkowych czynności). Strona 64 z 68

65 Rys. 27. Strona główna VMApp backend. Rys. 28. Lista maszyn wirtualnych rekordy pobrane z bazy Strona 65 z 68

Mikroinformatyka. Tryb wirtualny

Mikroinformatyka. Tryb wirtualny Mikroinformatyka Tryb wirtualny Tryb wirtualny z ochroną Wprowadzony w 80286. Rozbudowany w 80386. - 4 GB pamięci fizycznej, - 64 TB przestrzeni wirtualnej, - pamięć podzielona na segmenty o rozmiarze

Bardziej szczegółowo

Schematy zarzadzania pamięcia

Schematy zarzadzania pamięcia Schematy zarzadzania pamięcia Segmentacja podział obszaru pamięci procesu na logiczne jednostki segmenty o dowolnej długości. Postać adresu logicznego: [nr segmentu, przesunięcie]. Zwykle przechowywana

Bardziej szczegółowo

Sprzętowe wspomaganie pamięci wirtualnej

Sprzętowe wspomaganie pamięci wirtualnej Sprzętowe wspomaganie pamięci wirtualnej Stanisław Skonieczny 6 grudnia 2002 Spis treści 1 Intel 2 1.1 Tryby pracy procesora............................... 2 1.2 Adresowanie liniowe................................

Bardziej szczegółowo

Linux -- u mnie działa!

Linux -- u mnie działa! Linux -- u mnie działa! Wirtualizacja - czyli jak z jednego komputera zrobić 100 Stanisław Kulczycki grung@kce.one.pl Agenda Co to jest wirtualizacja? Zastosowanie Metody wirtualizacji Popularne maszyny

Bardziej szczegółowo

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/2012 2 / 22

3 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.06 Rok akad. 2011/2012 2 / 22 ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH struktury procesorów ASK SP.06 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 Maszyny wirtualne 2 3 Literatura c Dr inż. Ignacy

Bardziej szczegółowo

Q E M U. http://www.qemu.com/

Q E M U. http://www.qemu.com/ http://www.qemu.com/ Emulator procesora Autor: Fabrice Bellard Obsługiwane platformy: Windows, Solaris, Linux, FreeBSD, Mac OS X Aktualna wersja: 0.9.0 Większość programu oparta na licencji LGPL, a sama

Bardziej szczegółowo

Zarządzanie zasobami pamięci

Zarządzanie zasobami pamięci Zarządzanie zasobami pamięci System operacyjny wykonuje programy umieszczone w pamięci operacyjnej. W pamięci operacyjnej przechowywany jest obecnie wykonywany program (proces) oraz niezbędne dane. Jeżeli

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 007 Tryb rzeczywisty i chroniony procesora 2 SO i SK/WIN Wszystkie 32-bitowe procesory (386 i nowsze) mogą pracować w kilku trybach. Tryby pracy

Bardziej szczegółowo

architektura komputerów w. 8 Zarządzanie pamięcią

architektura komputerów w. 8 Zarządzanie pamięcią architektura komputerów w. 8 Zarządzanie pamięcią Zarządzanie pamięcią Jednostka centralna dysponuje zwykle duża mocą obliczeniową. Sprawne wykorzystanie możliwości jednostki przetwarzającej wymaga obecności

Bardziej szczegółowo

Przegląd dostępnych hypervisorów. Jakub Wojtasz IT Solutions Architect jwojtasz@atom-tech.pl

Przegląd dostępnych hypervisorów. Jakub Wojtasz IT Solutions Architect jwojtasz@atom-tech.pl Przegląd dostępnych hypervisorów Jakub Wojtasz IT Solutions Architect jwojtasz@atom-tech.pl Agenda Podział hypervisorów Architektura wybranych rozwiązań Najwięksi gracze na rynku Podział hypervisorów Hypervisor

Bardziej szczegółowo

Monitor maszyn wirtualnych

Monitor maszyn wirtualnych Monitor maszyn wirtualnych Jest to oprogramowanie nadzorujące działanie systemów gości Może być to oddzielny software lub zintegrowany z systemem operacyjnym System gospodarza Oznaczany zazwyczaj jako

Bardziej szczegółowo

Systemy Operacyjne Wirtualizacja

Systemy Operacyjne Wirtualizacja Katedra Informatyki, Politechnika Świętokrzyska w Kielcach Kielce, 23 stycznia 2015 Plan 1 2 Symulacja Emulacja 3 4 5 6 jest techniką zarządzania zasobami, która umożliwia ich współdzielenie przez procesy

Bardziej szczegółowo

Procesory rodziny x86. Dariusz Chaberski

Procesory rodziny x86. Dariusz Chaberski Procesory rodziny x86 Dariusz Chaberski 8086 produkowany od 1978 magistrala adresowa - 20 bitów (1 MB) magistrala danych - 16 bitów wielkość instrukcji - od 1 do 6 bajtów częstotliwośc pracy od 5 MHz (IBM

Bardziej szczegółowo

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX) W informatyce występują ściśle obok siebie dwa pojęcia: sprzęt (ang. hardware) i oprogramowanie

Bardziej szczegółowo

Architektura komputerów

Architektura komputerów Architektura komputerów Wykład 12 Jan Kazimirski 1 Magistrale systemowe 2 Magistrale Magistrala medium łączące dwa lub więcej urządzeń Sygnał przesyłany magistralą może być odbierany przez wiele urządzeń

Bardziej szczegółowo

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4 Pamięć wirtualna Przygotował: Ryszard Kijaka Wykład 4 Wstęp główny podział to: PM- do pamięci masowych należą wszelkiego rodzaju pamięci na nośnikach magnetycznych, takie jak dyski twarde i elastyczne,

Bardziej szczegółowo

INSTRUKCJA INSTALACJI

INSTRUKCJA INSTALACJI INSTRUKCJA INSTALACJI TcpMDT ver. 7 Aplitop, 2014 C/ Sumatra, 9 E-29190 MÁLAGA (SPAIN) web: www.aplitop.com e-mail: support@aplitop.com Spis treści Instalacja MDT ver. 7... 3 Wymagania systemowe... 3 Menu

Bardziej szczegółowo

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności. Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Organizacja pamięci Organizacja pamięci współczesnych systemów komputerowych

Bardziej szczegółowo

Wykład 7. Zarządzanie pamięcią

Wykład 7. Zarządzanie pamięcią Wykład 7 Zarządzanie pamięcią -1- Świat idealny a świat rzeczywisty W idealnym świecie pamięć powinna Mieć bardzo dużą pojemność Mieć bardzo krótki czas dostępu Być nieulotna (zawartość nie jest tracona

Bardziej szczegółowo

SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią

SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 4 - zarządzanie pamięcią Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 PLAN: 2. Pamięć rzeczywista 3. Pamięć wirtualna

Bardziej szczegółowo

Zespól Szkół Ponadgimnazjalnych Nr 17 im. Jana Nowaka - Jeziorańskiego Al. Politechniki 37 Windows Serwer 2003 Instalacja

Zespól Szkół Ponadgimnazjalnych Nr 17 im. Jana Nowaka - Jeziorańskiego Al. Politechniki 37 Windows Serwer 2003 Instalacja 7 Windows Serwer 2003 Instalacja Łódź, styczeń 2012r. SPIS TREŚCI Strona Wstęp... 3 INSTALOWANIE SYSTEMU WINDOWS SERWER 2003 Przygotowanie instalacji serwera..4 1.1. Minimalne wymagania sprzętowe......4

Bardziej szczegółowo

Wirtualizacja w praktyce.

Wirtualizacja w praktyce. Wirtualizacja w praktyce. Autor: Marek Serafin Wirtualizacja - to proste! Poznaj zalety wirtualizacji i sytuacje, w których sprawdza się ona najlepiej Naucz się instalować najpopularniejsze rozwiązania

Bardziej szczegółowo

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O Budowa komputera Magistrala Procesor Pamięć Układy I/O 1 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący przetwarzanie informacji Zmiana stanu tranzystorów wewnątrz

Bardziej szczegółowo

Skrócony przewodnik OPROGRAMOWANIE PC. MultiCon Emulator

Skrócony przewodnik OPROGRAMOWANIE PC. MultiCon Emulator Wspomagamy procesy automatyzacji od 1986 r. Skrócony przewodnik OPROGRAMOWANIE PC MultiCon Emulator Wersja: od v.1.0.0 Do współpracy z rejestratorami serii MultiCon Przed rozpoczęciem użytkowania oprogramowania

Bardziej szczegółowo

CyberGuru Wirtualizacja na platformie Hyper-V w pigułce. Prezentuje: Kamil Frankowicz

CyberGuru Wirtualizacja na platformie Hyper-V w pigułce. Prezentuje: Kamil Frankowicz CyberGuru Wirtualizacja na platformie Hyper-V w pigułce O czym będziemy mówić? Czym jest wirtualizacja i co ma mi do zaoferowania? Co jest potrzebne do uruchomienia Hyper-V?(Windows 8 i Windows Server

Bardziej szczegółowo

Zarządzanie pamięcią w systemie operacyjnym

Zarządzanie pamięcią w systemie operacyjnym Zarządzanie pamięcią w systemie operacyjnym Cele: przydział zasobów pamięciowych wykonywanym programom, zapewnienie bezpieczeństwa wykonywanych procesów (ochrona pamięci), efektywne wykorzystanie dostępnej

Bardziej szczegółowo

UNIX: architektura i implementacja mechanizmów bezpieczeństwa. Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci

UNIX: architektura i implementacja mechanizmów bezpieczeństwa. Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci UNIX: architektura i implementacja mechanizmów bezpieczeństwa Wojciech A. Koszek dunstan@freebsd.czest.pl Krajowy Fundusz na Rzecz Dzieci Plan prezentacji: Wprowadzenie do struktury systemów rodziny UNIX

Bardziej szczegółowo

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe Programowanie Niskopoziomowe Wykład 8: Procedury Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Linkowanie z bibliotekami zewnętrznymi Operacje na stosie

Bardziej szczegółowo

VMware. Prezentacja na Systemy Operacyjne

VMware. Prezentacja na Systemy Operacyjne VMware Prezentacja na Systemy Operacyjne VMware Workstation Komercyjny produkt tworzony i sprzedawany przez firmę VMware Inc. Można skorzystać z 30-dniowego triala Pozwala na uruchomienie wielu maszyn

Bardziej szczegółowo

WIRTUALIZACJA. Kamil Frydel, Julia Romanowska, Maciej Sokołowski. 12 listopada 2007 WIRTUALIZACJA. Kamil Frydel, Julia Romanowska, Maciej Sokołowski

WIRTUALIZACJA. Kamil Frydel, Julia Romanowska, Maciej Sokołowski. 12 listopada 2007 WIRTUALIZACJA. Kamil Frydel, Julia Romanowska, Maciej Sokołowski 12 listopada 2007 Spis treści Wirtualizacja - co to? Definicja Sposób podziału zasobów komputera na wiele izolowanych środowisk (partycji). Na jednym fizycznym komputerze/serwerze może być utworzonych

Bardziej szczegółowo

Zarządzanie pamięcią operacyjną

Zarządzanie pamięcią operacyjną SOE Systemy Operacyjne Wykład 7 Zarządzanie pamięcią operacyjną dr inż. Andrzej Wielgus Instytut Mikroelektroniki i Optoelektroniki WEiTI PW Hierarchia pamięci czas dostępu Rejestry Pamięć podręczna koszt

Bardziej szczegółowo

Wirtualizacja. Metody, zastosowania, przykłady

Wirtualizacja. Metody, zastosowania, przykłady Wirtualizacja Metody, zastosowania, przykłady Wirtualizacja - Definicja Użycie oprogramowania w celu stworzenia abstrakcji (iluzji) posiadanych zasobów. Historia Pierwsze szerzej znane zastosowanie: komputer

Bardziej szczegółowo

Pracownia internetowa w każdej szkole (edycja jesień 2005)

Pracownia internetowa w każdej szkole (edycja jesień 2005) Instrukcja numer SPD1/04_03/Z2 Pracownia internetowa w każdej szkole (edycja jesień 2005) Opiekun pracowni internetowej cz. 1 (PD1) Przygotowanie własnego obrazu systemu operacyjnego dla stacji roboczych

Bardziej szczegółowo

UNIFON podręcznik użytkownika

UNIFON podręcznik użytkownika UNIFON podręcznik użytkownika Spis treści: Instrukcja obsługi programu Unifon...2 Instalacja aplikacji Unifon...3 Korzystanie z aplikacji Unifon...6 Test zakończony sukcesem...9 Test zakończony niepowodzeniem...14

Bardziej szczegółowo

Tytuł: Instrukcja obsługi Modułu Komunikacji internetowej MKi-sm TK / 3001 / 016 / 002. Wersja wykonania : wersja oprogramowania v.1.

Tytuł: Instrukcja obsługi Modułu Komunikacji internetowej MKi-sm TK / 3001 / 016 / 002. Wersja wykonania : wersja oprogramowania v.1. Zakład Elektronicznych Urządzeń Pomiarowych POZYTON sp. z o. o. 42-200 Częstochowa ul. Staszica 8 p o z y t o n tel. : (034) 361-38-32, 366-44-95, 364-88-82, 364-87-50, 364-87-82, 364-87-62 tel./fax: (034)

Bardziej szczegółowo

NOWY OPIS TECHNICZNY PRZEDMIOTU ZAMÓWIENIA

NOWY OPIS TECHNICZNY PRZEDMIOTU ZAMÓWIENIA NOWY OPIS TECHNICZNY PRZEDMIOTU ZAMÓWIENIA Załącznik nr 4 do SIWZ/ załącznik do umowy Przedmiotem zamówienia jest dostawa 2 serwerów, licencji oprogramowania wirtualizacyjnego wraz z konsolą zarządzającą

Bardziej szczegółowo

Instrukcja logowania do systemu e-bank EBS

Instrukcja logowania do systemu e-bank EBS Instrukcja logowania do systemu e-bank EBS 1. Instalacja programu JAVA Przed pierwszą rejestracją do systemu e-bank EBS na komputerze należy zainstalować program JAVA w wersji 6u7 lub nowszej. Można go

Bardziej szczegółowo

Instrukcja obsługi programu. BlazeVideo HDTV Player v6

Instrukcja obsługi programu. BlazeVideo HDTV Player v6 Instrukcja obsługi programu BlazeVideo HDTV Player v6 Spis treści 1. Opis programu...3 1.1 Wprowadzenie...3 1.2 Funkcje programu...3 1.3 Wymagania sprzętowe...4 2. Wygląd interfejsu...4 3. Obsługa programu...6

Bardziej szczegółowo

PC0060. ADAPTER Kabel Easy Copy PC-Link USB 2.0 Proste kopiowanie, bez instalacji. Instrukcja obsługi

PC0060. ADAPTER Kabel Easy Copy PC-Link USB 2.0 Proste kopiowanie, bez instalacji. Instrukcja obsługi PC0060 ADAPTER Kabel Easy Copy PC-Link USB 2.0 Proste kopiowanie, bez instalacji Instrukcja obsługi Rozdział 1 Produkt 1.1 Instrukcja Produkt PC0060 to najlepsze rozwiązanie w zakresie przesyłania danych.

Bardziej szczegółowo

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący

Dział Dopuszczający Dostateczny Dobry Bardzo dobry Celujący Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Systemy Operacyjne i Sieci Komputerowe Klasa: pierwsza Dział Dopuszczający Dostateczny Dobry

Bardziej szczegółowo

Sposób funkcjonowania

Sposób funkcjonowania Stratus Avance został zaprojektowany w sposób, który w przypadku wystąpienia awarii ma zminimalizować czas przestoju i zapobiec utracie danych. Jednocześnie rozwiązanie ma być tanie i łatwe w zarządzaniu.

Bardziej szczegółowo

OPIS TECHNICZNY PRZEDMIOTU ZAMÓWIENIA

OPIS TECHNICZNY PRZEDMIOTU ZAMÓWIENIA OPIS TECHNICZNY PRZEDMIOTU ZAMÓWIENIA Załącznik nr 4 do SIWZ/ załącznik do umowy Przedmiotem zamówienia jest dostawa 2 serwerów, licencji oprogramowania wirtualizacyjnego wraz z konsolą zarządzającą oraz

Bardziej szczegółowo

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1 Instrukcja obsługi aplikacji 1 1./ instalacja aplikacji. Aplikacja służy do zarządzania, konfigurowania i testowania modułów firmy Advance Electronic wyposażonych w RS485 pracujących w trybie half-duplex.

Bardziej szczegółowo

Jak się zalogować do Pocztowy24 Biznes

Jak się zalogować do Pocztowy24 Biznes Jak się zalogować do Pocztowy24 Biznes Wejdź na stronę Banku Pocztowego www.pocztowy.pl. W prawym górnym rogu, na czerwonej belce znajdziesz przycisk Zaloguj się, wybierz go, a następnie wybierz przycisk

Bardziej szczegółowo

INSTRUKCJA I WSKAZÓWKI

INSTRUKCJA I WSKAZÓWKI INSTRUKCJA I WSKAZÓWKI korzystania z maszyny wirtualnej Oracle VirtualBox 4 Michał Karbowańczyk, wrzesień 2011 Spis treści 1 Informacje wstępne...4 1.1 Nazewnictwo...4 1.2 Legalność...4 1.3 Instalacja

Bardziej szczegółowo

Adam Kotynia, Łukasz Kowalczyk

Adam Kotynia, Łukasz Kowalczyk Adam Kotynia, Łukasz Kowalczyk Dynamiczna alokacja pamięci Alokacja pamięci oraz dezalokacja pamięci jest to odpowiednio przydział i zwolnienie ciągłego obszaru pamięci. Po uruchomieniu, proces (program)

Bardziej szczegółowo

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Instalacja SQL Server Express. Logowanie na stronie Microsoftu Instalacja SQL Server Express Logowanie na stronie Microsoftu Wybór wersji do pobrania Pobieranie startuje, przechodzimy do strony z poradami. Wypakowujemy pobrany plik. Otwiera się okno instalacji. Wybieramy

Bardziej szczegółowo

Architektura systemu komputerowego

Architektura systemu komputerowego Architektura systemu komputerowego Klawiatura 1 2 Drukarka Mysz Monitor CPU Sterownik dysku Sterownik USB Sterownik PS/2 lub USB Sterownik portu szeregowego Sterownik wideo Pamięć operacyjna Działanie

Bardziej szczegółowo

Materiały do wykładu. 7.Architekturax86. Marcin Peczarski. Instytut Informatyki Uniwersytet Warszawski

Materiały do wykładu. 7.Architekturax86. Marcin Peczarski. Instytut Informatyki Uniwersytet Warszawski Materiały do wykładu 7.Architekturax86 Marcin Peczarski Instytut Informatyki Uniwersytet Warszawski 25maja2009 Narodziny 7.1 1978 Intel8086 architektura 16-bitowa 5 MHz, obudowa DIP40, 29000 tranzystorów

Bardziej szczegółowo

VComNet Podręcznik użytkownika. VComNet. Podręcznik użytkownika Wstęp

VComNet Podręcznik użytkownika. VComNet. Podręcznik użytkownika Wstęp VComNet Podręcznik użytkownika Wstęp VComNet przeznaczony jest do wdrażania aplikacji komunikacyjnych uruchomionych na komputerze PC z systemem Windows z urządzeniami połączonymi poprzez RS485 (RS422/RS232)

Bardziej szczegółowo

Szybki start instalacji SUSE Linux Enterprise Server 11 SP1

Szybki start instalacji SUSE Linux Enterprise Server 11 SP1 Szybki start instalacji SUSE Linux Enterprise Server 11 SP1 Szybki start instalacji SUSE Linux Enterprise Server 11 SP1 SKRÓCONA INSTRUKCJA OBSŁUGI NOVELL Aby zainstalować nową wersję produktu SUSE Linux

Bardziej szczegółowo

Dokumentacja aplikacji Szachy online

Dokumentacja aplikacji Szachy online Projekt z przedmiotu Technologie Internetowe Autorzy: Jakub Białas i Jarosław Tyma grupa II, Automatyka i Robotyka sem. V, Politechnika Śląska Przedmiot projektu: Aplikacja internetowa w języku Java Dokumentacja

Bardziej szczegółowo

Tworzenie i obsługa wirtualnego laboratorium komputerowego

Tworzenie i obsługa wirtualnego laboratorium komputerowego Uniwersytet Mikołaja Kopernika Wydział Fizyki, Astronomii i Informatyki Stosowanej Michał Ochociński nr albumu: 236401 Praca magisterska na kierunku informatyka stosowana Tworzenie i obsługa wirtualnego

Bardziej szczegółowo

Systemy operacyjne i sieci komputerowe. 1 SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Etapy uruchamiania systemu

Systemy operacyjne i sieci komputerowe. 1 SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Etapy uruchamiania systemu Systemy operacyjne i sieci komputerowe. 1 SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE Etapy uruchamiania systemu 010 2 Systemy operacyjne i sieci komputerowe. Część 010. I. Etapy uruchamiania systemu Windows

Bardziej szczegółowo

Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego

Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego Cel ćwiczenia: Celem zajęć jest zdobycie doświadczenia i umiejętności instalacji systemu operacyjnego z rodziny Unix bez wykorzystania

Bardziej szczegółowo

Dokument zawiera instrukcję samodzielnej Instalacji Microsoft SQL Server 2008 R2 RTM - Express na potrzeby systemu Sz@rk.

Dokument zawiera instrukcję samodzielnej Instalacji Microsoft SQL Server 2008 R2 RTM - Express na potrzeby systemu Sz@rk. Dokument zawiera instrukcję samodzielnej Instalacji Microsoft SQL Server 2008 R2 RTM - Express na potrzeby systemu Sz@rk. 1. Wstęp Przed zainstalowaniem serwera SQL należy upewnić się czy sprzęt na którym

Bardziej szczegółowo

Wymagania systemowe Dla przedsiębiorstw i średnich firm

Wymagania systemowe Dla przedsiębiorstw i średnich firm Wymagania systemowe Dla przedsiębiorstw i średnich firm Firma Trend Micro Incorporated zastrzega sobie prawo do wprowadzania bez wcześniejszej zapowiedzi zmian w tym dokumencie oraz w opisanych w nim produktach.

Bardziej szczegółowo

LEKCJA TEMAT: Zasada działania komputera.

LEKCJA TEMAT: Zasada działania komputera. LEKCJA TEMAT: Zasada działania komputera. 1. Ogólna budowa komputera Rys. Ogólna budowa komputera. 2. Komputer składa się z czterech głównych składników: procesor (jednostka centralna, CPU) steruje działaniem

Bardziej szczegółowo

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC, RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC, zapoczątkowana przez i wstecznie zgodna z 16-bitowym procesorem

Bardziej szczegółowo

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI

Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI plan Cechy, właściwości procesów Multitasking Scheduling Fork czym jest proces? Działającą instancją programu Program jest kolekcją

Bardziej szczegółowo

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu inż. Daniel Solarz Wydział Fizyki i Informatyki Stosowanej AGH 1. Cel projektu. Celem projektu było napisanie wtyczki

Bardziej szczegółowo

Instalacja aplikacji

Instalacja aplikacji 1 Instalacja aplikacji SERTUM... 2 1.1 Pobranie programu z Internetu... 2 1.2 Instalacja programu... 2 1.3 Logowanie... 3 2 Instalacja aplikacji RaportNet... 4 2.1 Pobranie programu z Internetu... 4 2.2

Bardziej szczegółowo

IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com

IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com IdyllaOS www.idyllaos.org Prosty, alternatywny system operacyjny Autor: Grzegorz Gliński Kontakt: milyges@gmail.com Co to jest IdyllaOS? IdyllaOS jest to mały, prosty, uniksopodobny, wielozadaniowy oraz

Bardziej szczegółowo

Oprogramowanie. DMS Lite. Podstawowa instrukcja obsługi

Oprogramowanie. DMS Lite. Podstawowa instrukcja obsługi Oprogramowanie DMS Lite Podstawowa instrukcja obsługi 1 Spis treści 1. Informacje wstępne 3 2. Wymagania sprzętowe/systemowe 4 3. Instalacja 5 4. Uruchomienie 6 5. Podstawowa konfiguracja 7 6. Wyświetlanie

Bardziej szczegółowo

Metody obsługi zdarzeń

Metody obsługi zdarzeń SWB - Przerwania, polling, timery - wykład 10 asz 1 Metody obsługi zdarzeń Przerwanie (ang. Interrupt) - zmiana sterowania, niezależnie od aktualnie wykonywanego programu, spowodowana pojawieniem się sygnału

Bardziej szczegółowo

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego 2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego produktu. 23 czerwca 2014 Spis treści 3 Spis treści...5

Bardziej szczegółowo

Opis komunikacji na potrzeby integracji z systemem klienta (12 kwiecień, 2007)

Opis komunikacji na potrzeby integracji z systemem klienta (12 kwiecień, 2007) Opis komunikacji na potrzeby integracji z systemem klienta (12 kwiecień, 2007) Copyright 2004 Anica System S.A., Lublin, Poland Poniższy dokument, jak również informacje w nim zawarte są całkowitą własnością

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

Wprowadzenie do projektu QualitySpy Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować

Bardziej szczegółowo

Policealne Studium Zawodowe w Grudziądzu. Technik Informatyk SYSTEMY I SIECI KOMPUTEROWE. Windows XP klonowanie instalacji z wykorzystaniem sysprep

Policealne Studium Zawodowe w Grudziądzu. Technik Informatyk SYSTEMY I SIECI KOMPUTEROWE. Windows XP klonowanie instalacji z wykorzystaniem sysprep Technik Informatyk SYSTEMY I SIECI KOMPUTEROWE Windows XP klonowanie instalacji z wykorzystaniem sysprep Grudziądz, 2011 Wojciech Boruciński Pojęcia: SID Przygotowanie systemu do klonowania Wykonanie obrazu

Bardziej szczegółowo

Wykaz zmian w programie SysLoger

Wykaz zmian w programie SysLoger Wykaz zmian w programie SysLoger Pierwsza wersja programu 1.0.0.1 powstała we wrześniu 2011. Funkcjonalność pierwszej wersji programu: 1. Zapis logów do pliku tekstowego, 2. Powiadamianie e-mail tylko

Bardziej szczegółowo

Systemy operacyjne III

Systemy operacyjne III Systemy operacyjne III WYKŁAD Jan Kazimirski Pamięć wirtualna Stronicowanie Pamięć podzielona na niewielki bloki Bloki procesu to strony a bloki fizyczne to ramki System operacyjny przechowuje dla każdego

Bardziej szczegółowo

Wirtualizacje. Opracowali: Piotr Dąbrowiecki Jakub Gołębiowski Winicjusz Szyszka

Wirtualizacje. Opracowali: Piotr Dąbrowiecki Jakub Gołębiowski Winicjusz Szyszka Wirtualizacje Opracowali: Piotr Dąbrowiecki Jakub Gołębiowski Winicjusz Szyszka Co to jest maszyna wirtualna? Rodzaje maszyn wirtualnych Interpretery Kompilatory Emulatory Własności maszyn wirtualnych

Bardziej szczegółowo

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami Rok akademicki 2015/2016, Wykład nr 6 2/21 Plan wykładu nr 6 Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia Rok akademicki 2015/2016

Bardziej szczegółowo

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O Budowa komputera Magistrala Procesor Pamięć Układy I/O 1 Procesor to CPU (Central Processing Unit) centralny układ elektroniczny realizujący przetwarzanie informacji Zmiana stanu tranzystorów wewnątrz

Bardziej szczegółowo

1 Implementowanie i konfigurowanie infrastruktury wdraŝania systemu Windows... 1

1 Implementowanie i konfigurowanie infrastruktury wdraŝania systemu Windows... 1 Spis treści Wstęp... xi Wymagania sprzętowe (Virtual PC)... xi Wymagania sprzętowe (fizyczne)... xii Wymagania programowe... xiii Instrukcje instalowania ćwiczeń... xiii Faza 1: Tworzenie maszyn wirtualnych...

Bardziej szczegółowo

Samsung Universal Print Driver Podręcznik użytkownika

Samsung Universal Print Driver Podręcznik użytkownika Samsung Universal Print Driver Podręcznik użytkownika wyobraź sobie możliwości Copyright 2009 Samsung Electronics Co., Ltd. Wszelkie prawa zastrzeżone. Ten podręcznik administratora dostarczono tylko w

Bardziej szczegółowo

Instalacja programu dreryk

Instalacja programu dreryk Program dla praktyki lekarskiej Instalacja programu dreryk Kontakt: serwis@dreryk.pl +48-42-2912121 www.dreryk.pl Copyright Ericpol Telecom sp. z o.o. 2006 Copyright Ericpol Telecom sp. z o.o. 1 System

Bardziej szczegółowo

Tekla Structures 20 Instalacja

Tekla Structures 20 Instalacja Tekla Structures 20 Instalacja Plan prezentacji: - Wymagania sprzętowe - Instalacja TS20.0 - Instalacja środowisk - Instalacja i konfiguracja bibliotek CS - Struktura katalogów - Flexnet serwer licencyjny

Bardziej szczegółowo

SystimPlus. Dokumentacja (FAQ) dla wersji: v1.14.05.12

SystimPlus. Dokumentacja (FAQ) dla wersji: v1.14.05.12 SystimPlus Dokumentacja (FAQ) dla wersji: v1.14.05.12 Spis treści 1.Co to jest SystimPlus?... 1 2.Instalacja i wymagania... 1 3.Jakie drukarki fiskalne obsługuje SystimPlus?... 3 4.Jak połączyć się z drukarką

Bardziej szczegółowo

1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7?

1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7? Temat. Architektura systemu Windows 7. 1) Czym jest architektura systemu Windows 7 i jak się ją tworzy? 2) Jakie są poszczególne etapy uruchomienia systemu Windows 7? 3) Do czego służy narzędzie BCD. Edit?

Bardziej szczegółowo

Szybki start instalacji SUSE Linux Enterprise Server 11

Szybki start instalacji SUSE Linux Enterprise Server 11 Szybki start instalacji SUSE Linux Enterprise Server 11 SKRÓCONA INSTRUKCJA OBSŁUGI NOVELL Aby zainstalować nową wersję SUSE Linux Enterprise 11, trzeba użyć następującej procedury. Ten dokument zawiera

Bardziej szczegółowo

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa... 9. Wstęp... 11

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa... 9. Wstęp... 11 Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1 Spis treúci Przedmowa... 9 Wstęp... 11 1. Komputer PC od zewnątrz... 13 1.1. Elementy zestawu komputerowego... 13 1.2.

Bardziej szczegółowo

Pracownia internetowa w szkole ZASTOSOWANIA

Pracownia internetowa w szkole ZASTOSOWANIA NR ART/SBS/07/01 Pracownia internetowa w szkole ZASTOSOWANIA Artykuły - serwery SBS i ich wykorzystanie Instalacja i Konfiguracja oprogramowania MOL Optiva na szkolnym serwerze (SBS2000) Artykuł opisuje

Bardziej szczegółowo

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS PROBLEMY TECHNICZNE Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS Jeżeli stwierdziłeś występowanie błędów lub problemów podczas pracy z programem DYSONANS możesz skorzystać

Bardziej szczegółowo

SecureDoc Standalone V6.5

SecureDoc Standalone V6.5 SecureDoc Standalone V6.5 Instrukcja instalacji WinMagic Inc. SecureDoc Standalone Instrukcja Instalacji Spis treści Zanim przystąpisz do instalacji... 3 Tworzenie kopii zapasowej... 3 Wymagania systemowe...

Bardziej szczegółowo

Wirtualizacja. czyli trochę co innego niż rzeczy do tej pory omawiane

Wirtualizacja. czyli trochę co innego niż rzeczy do tej pory omawiane Wirtualizacja czyli trochę co innego niż rzeczy do tej pory omawiane Wady przedstawionych rozwiązań Emulacja całego sprzętu (Bochs) jest strasznie wolna Czemu? Każda instrukcja w SO guesta była symulowana

Bardziej szczegółowo

Instrukcja użytkownika ARSoft-WZ1

Instrukcja użytkownika ARSoft-WZ1 05-090 Raszyn, ul Gałczyńskiego 6 tel (+48) 22 101-27-31, 22 853-48-56 automatyka@apar.pl www.apar.pl Instrukcja użytkownika ARSoft-WZ1 wersja 3.x 1. Opis Aplikacja ARSOFT-WZ1 umożliwia konfigurację i

Bardziej szczegółowo

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi) Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie drugie (jedne zajęcia) Temat: Procesy i sygnały w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Budowa procesu

Bardziej szczegółowo

Tryb rzeczywisty to tryb pracy mikroprocesorów z rodziny procesorów x86, w którym procesor pracuje tak jak procesor Intel 8086.

Tryb rzeczywisty to tryb pracy mikroprocesorów z rodziny procesorów x86, w którym procesor pracuje tak jak procesor Intel 8086. T: Tryb rzeczywisty i chroniony procesora. Tryb rzeczywisty to tryb pracy mikroprocesorów z rodziny procesorów x86, w którym procesor pracuje tak jak procesor Intel 8086. W trybie tym brak ochrony pamięci

Bardziej szczegółowo

Kancelaria Prawna.WEB - POMOC

Kancelaria Prawna.WEB - POMOC Kancelaria Prawna.WEB - POMOC I Kancelaria Prawna.WEB Spis treści Część I Wprowadzenie 1 Część II Wymagania systemowe 1 Część III Instalacja KP.WEB 9 1 Konfiguracja... dostępu do dokumentów 11 Część IV

Bardziej szczegółowo

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa Instalacja roli kontrolera domeny, Aby zainstalować rolę kontrolera domeny, należy uruchomić Zarządzenie tym serwerem, po czym wybrać przycisk

Bardziej szczegółowo

dokument DOK 02-05-12 wersja 1.0 www.arskam.com

dokument DOK 02-05-12 wersja 1.0 www.arskam.com ARS3-RA v.1.0 mikro kod sterownika 8 Linii I/O ze zdalną transmisją kanałem radiowym lub poprzez port UART. Kod przeznaczony dla sprzętu opartego o projekt referencyjny DOK 01-05-12. Opis programowania

Bardziej szczegółowo

Client Management Solutions i Mobile Printing Solutions

Client Management Solutions i Mobile Printing Solutions Client Management Solutions i Mobile Printing Solutions Instrukcja obsługi Copyright 2007 Hewlett-Packard Development Company, L.P. Windows jest zastrzeżonym znakiem towarowym firmy Microsoft Corporation,

Bardziej szczegółowo

Instrukcja konfiguracji funkcji skanowania

Instrukcja konfiguracji funkcji skanowania Instrukcja konfiguracji funkcji skanowania WorkCentre M123/M128 WorkCentre Pro 123/128 701P42171_PL 2004. Wszystkie prawa zastrzeżone. Rozpowszechnianie bez zezwolenia przedstawionych materiałów i informacji

Bardziej szczegółowo

MANAGER 2010 PROFESSIONALP VS. VIRTUALIZATION WIRTUALIZACJA OBSŁUGIWANE ANAGER 2010 C MANAGER 2010 CORPORATE: Funkcja. Korzyści.

MANAGER 2010 PROFESSIONALP VS. VIRTUALIZATION WIRTUALIZACJA OBSŁUGIWANE ANAGER 2010 C MANAGER 2010 CORPORATE: Funkcja. Korzyści. VIRTUALIZATION MANAGER 2010 PROFESSIONALP VS. VIRTUALIZATION MANAGER 2010 CORPORATE: ANAGER 2010 C Funkcja Opis Korzyści VM 2010 Professional VM 2010 Corporate WIRTUALIZACJA I MIGRACJE Funkcja Connect

Bardziej szczegółowo

Wymagania systemowe oraz sposób instalacji systemu Lokale Spis treści

Wymagania systemowe oraz sposób instalacji systemu Lokale Spis treści Wymagania systemowe oraz sposób instalacji systemu Lokale Spis treści Wymagania sprzętowe i systemowe :...2 Instalacja dla systemów Windows 32-bit...3 Instalacja dla systemów Windows 64-bit/Linux...6 1

Bardziej szczegółowo

AE/ZP-27-16/14. Oprogramowanie do wykonywania kopii zapasowych oraz zarządzania maszynami wirtualnymi

AE/ZP-27-16/14. Oprogramowanie do wykonywania kopii zapasowych oraz zarządzania maszynami wirtualnymi AE/ZP-27-16/14 Załącznik B Oprogramowanie do wykonywania kopii zapasowych oraz zarządzania maszynami wirtualnymi Wykonywanie kopii zapasowych Oprogramowanie do archiwizacji musi współpracować z infrastrukturą

Bardziej szczegółowo

Instrukcja podłączenia bramki IP 1R+L oraz IP 2R+L w trybie serwisowym za pomocą usługi telnet.

Instrukcja podłączenia bramki IP 1R+L oraz IP 2R+L w trybie serwisowym za pomocą usługi telnet. Tryb serwisowy Instrukcja podłączenia bramki IP 1R+L oraz IP 2R+L w trybie serwisowym za pomocą usługi telnet. Bramka IP 2R+L oraz IP 1 R+L może zostać uruchomiana w trybie serwisowym. W przypadku wystąpienia

Bardziej szczegółowo

11. Rozwiązywanie problemów

11. Rozwiązywanie problemów 11. Rozwiązywanie problemów Ćwiczenia zawarte w tym rozdziale pokaŝą, jak rozwiązywać niektóre z problemów, jakie mogą pojawić się podczas pracy z komputerem. Windows XP został wyposaŝony w kilka mechanizmów

Bardziej szczegółowo