że dynamiczne zarządzanie
|
|
- Ksawery Lewandowski
- 9 lat temu
- Przeglądów:
Transkrypt
1 Dynamiczne zarządzanie pamięcią w małych systemach embedded Oprogramowanie typu embedded staje się coraz bardziej złożone, zarówno pod względem realizowanych funkcji jak i budowy. Wiele bloków funkcjonalnych programu współpracuje ze sobą w sposób dynamiczny zadania są tworzone i usuwane, struktury danych przez nie wykorzystywane znikają z pamięci po tym, jak przestają być potrzebne itd. Zwykle nie da się tego osiągnąć w prosty (tani) sposób bez mechanizmu pamięcią. Możliwe rozwiązania przedstawiamy w artykule. W bardziej złożonych aplikacjach zwykle nie można liczyć na komfort posiadania tak dużych zasobów pamięci, aby możliwe było wstępne utworzenie wszystkich obiektów programu przed jego uruchomieniem. Co więcej, byłoby to często bardzo trudne, albo wręcz niemożliwe ze względu na dynamikę działania aplikacji (skomplikowane powiązania) i ograniczone zasoby. W pełni statyczne podejście do alokacji pamięci mogłoby też być bardzo nieefektywne po co na przykład utrzymywać w pamięci przez cały czas działania programu dane potrzebne tylko przy jego uruchamianiu. Innym elementem powodującym, że dynamiczne zarządzanie pamięcią staje się istotnym elementem świata systemów wbudowanych i jednocześnie systemów czasu rzeczywistego, jest fakt powstania specyfikacji i (działającej) implementacji odmiany języka Java w wersji RT (real time) Java RTS. Wydaje się więc, że skoro rozwiązano problem dynamicznego zarządzania pamięcią dla języka, któ- ry nie może b e z t e g o funkcjonować i który korzysta z tego nizmu w sposób bardzo intensywny, mecha- to tym bardziej można by to zrobić w języku C, gdzie tylko programista ma wpływ, czy i jak użyć sterty. Jedną z trudności, na jakie napotykamy już na początku, jest problem mnogości algorytmów używanych przez funkcje zarządzające dynamiczną alokacją pamięci. W powszechnym przekonaniu fakt, iż jest ich tak dużo, świadczy o tym, że nie ma żadnego naprawdę dobrego rozwiązania i lepiej jest zaprojektować coś samemu, niż polegać na istniejących implementacjach. W efekcie większość projektów stara się unikać używania sterty w ogóle lub co najwyżej korzysta z mechanizmu puli bloków pamięci memory pool (który zwykle jest sam w sobie bardzo dobry do wielu zastosowań, lecz nie jest w stanie zastąpić w pełni pamięcią). Żeby rzecz uczynić jeszcze bardziej zagmatwaną, należy wspomnieć, że ogólne zagadnienie dynamicznej alokacji pamięci bez znajomości kolejności i parametrów żądań przydziału i zwalniania bloków jest jednym z wielu informatycznych problemów optymalizacji należących do klasy tych najtrudniejszych bez istniejącego (przynajmniej na razie) rozwiązania algorytmicznego w czasie wielomianowym (tj. do kategorii NP zupełnych). W celu niejakiego uporządkowania tematu warto określić, jakie wymagania powinien spełniać idealny alokator pamięci dynamicznej dla systemu czasu rzeczywistego typu embedded. 1. Musi być znany czas wykonania dowolnej operacji dla najgorszego przypadku. Niezależnie od aktualnego stanu systemu i żądanej usługi (przydział, zwolnienie) oraz jej parametrów wymagane jest, aby czas reakcji był zawsze określony od góry. Niestety, większość używanych algorytmów była projektowana z uwzględnieniem optymalizacji czasu wykonania dla typowego przypadku, a czas wykonania dla najgorszego przypadku może być w nich nawet o rzędy wielkości większy. Co więcej, maksymalny czas wykonania dla systemu idealnego nie powinien być zależny od struktur danych użytych w algorytmie, ani od wielkości obsługiwanej pamięci (złożoność O(1)). 2. Szybkość wykonania powinna być na tyle duża, aby spełnić wyma-
2 Rys. 1. Fragmentacja zewnętrzna i wewnętrzna Rys. 2. Struktura Block_T gania systemu czasu rzeczywistego. Jest oczywiste, że sama znajomość maksymalnego czasu wykonania operacji nie jest wystarczającym kryterium użycia danego algorytmu do zastosowań RT. Jeżeli czas wykonania przekracza wymagany czas reakcji systemu RT, to alokator jest po prostu nieprzydatny. 3. Żądanie przydziału pamięci musi być zawsze spełnione. Jest to wprawdzie wymaganie dla systemu idealnego bez ograniczonych zasobów, dlatego w przypadku systemu osadzonego należy po prostu dążyć do maksymalizacji prawdopodobieństwa, że przydział pamięci się powiedzie. Nie trzeba chyba dodawać, że ze względu na specyfikę systemów typu embedded efekt nieudanej alokacji pamięci może być o wiele bardziej destrukcyjny w porównaniu do systemów biurkowych. Niestety, ta sama specyfika powoduje też, że algorytmy muszą pracować w o wiele trudniejszych warunkach, a to choćby z tego względu, iż przez całe miesiące musi być zapewniona nieprzerwania praca urządzenia, i to przy dosyć ograniczonych zasobach pamięci RAM. Wynika z tego na przykład to, że system dynamicznej alokacji pamięci dla oprogramowania typu embedded musi być bardziej odporny na efekt fragmentacji sterty. Chodzi tu zarówno o fragmentację wewnętrzną, czyli spowodowaną wewnętrzną budową alokatora (np. minimalna wielkość przydzielanych bloków, granulacja wielkości bloków itd.), jak i o fragmentację zewnętrzną, czyli spowodowaną kolejnością przedzielania i zwalniania bloków pamięci przez konkretną aplikację (np. z trzech kolejnych bloków następuje zwolnienie tylko dwóch skrajnych ). W celu spełnienia powyższych wymagań używane są przeróżne strategie, algorytmy i struktury danych. Stosuje się na przykład alokację bloków tylko o stałej wielkości lub o wielkości będącej tylko potęgą liczby 2. Używa się zwykle dosyć złożonych struktur danych, jak zbiory list, posegregowane zestawy list, bitmapy, drzewa typu AVL itd. Przy rozwiązywaniu problemu fragmentacji stosuje się różne strategie znajdowania wolnych bloków, które nadają się do powtórnego wykorzystania; próbuje się np. wyszukiwania wolnego bloku najlepiej pasującego rozmiarem do tego, który ma być zaalokowany (best fit), czasem robi się wręcz odwrotnie, tj. używany jest pierwszy wolny blok, który ma wystarczająco dużą wielkość (first fit), niekiedy zaś jest to strategia pośrednia (np. good fit). Samo wyszukiwanie wśród zwolnionych bloków jest zwykle niewystarczające i algorytmy próbują unikać fragmentacji przez scalanie ze sobą tych wolnych bloków, które są ułożone sekwencyjnie (w pamięci fizycznej). Robi się to również na wiele sposobów, np. scalanie (a w zasadzie jego próba) następuje natychmiast po zwolnieniu danego bloku, czasem dzieje się to z opóźnieniem (np. przy przekroczeniu pewnej liczby wolnych bloków), a zdarza się, że scalanie w ogóle nie jest przeprowadzane. Jako przykład efektywnego sposobu 8
3 Rys. 3. Struktura pamięci w stercie pamięcią (stertą) zostanie przedstawiony algorytm wykorzystujący prostą listę dwukierunkową i granulację pamięci sterty o stałej wielkości. Od razu należy zaznaczyć, że maksymalny czas wykonania operacji przydziału pamięci nie jest stały w sensie zależności od parametrów systemu. Operacja zwalniania pamięci (free) jest zawsze wykonywana w stałym czasie (złożoność O(1)). Funkcja przydziału pamięci potrzebuje w najgorszym razie czasu, który jest proporcjonalny do liczby bloków używanych przez algorytm jako minimalna jednostka alokacji (złożoność O(n), np. n=8192/32=25). Z tego też względu nie jest to dobry wybór dla mikrokontrolerów, które mają do dyspozycji megabajty RAM u, natomiast dla małych ARM ów czy AVR ów algorytm sprawdza się znakomicie. Ponieważ jednostka alokacji jest ustalana przed kompilacją systemu i nie zmienia się w trakcie jego działania, spełnione jest zatem wymaganie, że maksymalny czas wykonania może być wyznaczony a priori. Do kluczowych cech prezentowanego rozwiązania należą: Użycie listy dwukierunkowej do przechowywania listy zwolnionych bloków, dzięki czemu wstawianie i usuwanie elementów takiej listy odbywa się w stałym czasie w szczególności nie zależy od jej długości. Dystrybucja (rozkład liczby bloków w funkcji ich wielkości) wolnych bloków staje się z czasem działania systemu zbliżona do dystrybucji żądań, co w efekcie pozwala na dobre wpasowywanie się wielkości przydzielanych bloków w wielkość bloków zwolnionych. Zaletą takiego zachowania się dystrybucji wolnych bloków jest to, że można użyć najprostszego algorytmu znajdowania wolnego bloku typu first fit (tj. pierwszego, który jest wystarczająco duży). Stała wielkość najmniejszej jednostki alokacji minibloku. Wszelkie żądania przydziału pamięci są zaokrąglane w górę do najbliższej wielokrotności rozmiaru minibloku. Warto też zauważyć, że wielkość minibloku jest jednym z najważniejszych parametrów pozwalających na dostrojenie algorytmu do konkretnego systemu (rozmiar sło- wa procesora, wielkość RAM u). Z jednej strony mniejsze minibloki powodują mniejszą fragmentację wewnętrzną, z drugiej zaś wymagają dłuższego przetwarzania (wydłuża się maksymalna długość listy wolnych bloków). Struktura bloku pamięci jest stosunkowo prosta w pierwszym minibloku wchodzącym w jego skład przechowywana jest informacja o długości całego bloku, jego stanie (zaalokowany lub zwolniony) i jego pozycji w liście (jeżeli jest to blok wolny). Do tego celu wykorzystuje się typ Block_T, który jest strukturą (list. 1). Pole blocks zawiera w sobie informację o długości całego bloku pamięci i jest ustawiane na liczbę minibloków, które wchodzą w skład tegoż bloku (np. alokacja 100 bajtów przy minibloku wielkości 1 bajtów spowoduje umieszczenie tu liczby 7). Najstarszy bit tego pola jest wykorzystany jako znacznik określający status bloku zajęty czy wolny (ogranicza to maksymalną długość bloku do wielkości 2 N * L s i z e o f ( B l o c k _ S i z e _ T, gdzie N to liczba bitów typu Block_Size_T, a L to wielkość minibloku). Następna część struktury unia header jest używana dwojako. W blokach zajętych stanowi po prostu początek danych aplikacji, a w blokach zwolnionych umieszczone są tam wskaźniki wykorzystywane przez listę dwukierunkową. List typedef struct Block_Tag 0 03 BlockSize_T blocks; 04 union 05 { 0 uint8_t user_memory[block_size sizeof(blocksize_t)]; 07 struct 08 { 09 struct Block_Tag *prev; 10 struct Block_Tag *next; 11 } ptrs; 12 } header; 13 } Block_T; Rys. 4. Struktura listy dwukierunkowej 9
4 List void free(void *ptr) 3 Block_T *top; 4 Block_T *base_area; 5 MEM_DECLARE_CRITICAL; 7 if (NULL == ptr) 8 { 9 return; 10 } top = mem_pool + number_of_blocks; 13 base_area = TO_BLOCK_PTR(ptr); if ((base_area < mem_pool) (base_area >= top)) 1 { 17 return; 18 } MEM_ENTER_CRITICAL(); 21 base_area >blocks &= ~RESERVED_BIT; 22 insert_after(base_area); 23 MEM_EXIT_CRITICAL(); 24 } System zarządzania pamięcią dynamiczną przechowuje zaskakująco mało prywatnych informacji. Właściwie jest to tylko wskaźnik do listy wolnych (nieużywanych przez aplikację) bloków pamięci, który jest jednocześnie znacznikiem końca sterty. Wspomniana lista zawiera na początku tylko dwa bloki: początkowy znacznikowy i drugi blok o rozmiarze całej sterty. Jak już wspomniano, lista jest dwukierunkowa, czyli każdy jej element zawiera w sobie informacje (wskaźniki) o poprzedniku i następcy. Operacja zwolnienia pamięci jest bardzo prosta, a przez to efektywna. Wskaźnik będący parametrem funkcji free jest adiustowany (linia 13, list. 2), tak aby wskazywał na początek minibloku (wystarczy cofnąć go o długość pola blocks). Po tym zabiegu można już bezpośrednio operować na polach struktury Block_T. Najpierw jest sprawdzane, czy podany wskaź- List void *malloc(size_t size) 3 BlockSize_T blocks_required; 4 Block_T *block; 5 MEM_DECLARE_CRITICAL; 7 blocks_required = 8 ((BlockSizeAddOp_T) size + 9 (BlockSizeAddOp_T) sizeof(blocksize_t) + 10 (BlockSizeAddOp_T) sizeof(block_t) 1) / (BlockSizeAddOp_T) BLOCK_ SIZE; MEM_ENTER_CRITICAL(); if (NULL == sentinel) 15 { 1 init_mem_pool(); 17 } for (block = sentinel >header.ptrs.next; 20 block!= sentinel; 21 block = block >header.ptrs.next) 2 23 merge_blocks(block); 24 if (block >blocks >= blocks_required) 25 { 2 break; 27 } 28 } if (block == sentinel) 31 { 32 MEM_EXIT_CRITICAL(); 33 return NULL; 34 } 35 3 if (block >blocks > blocks_required) 37 { 38 split_block(block, blocks_required); 39 } unlink(block); 42 block >blocks = RESERVED_BIT; MEM_EXIT_CRITICAL(); 45 4 return block >header.user_memory; 47 } nik nie jest pusty (NULL) i czy mieści się w zakresie sterty (linie 7 18, list. 2). Jeżeli te warunki są spełnione, to kasowany jest bit zajętości bloku (linia 21, list. 2), a cały blok jest wstawiany na początek listy wolnych bloków (linia 22, list. 2). Jak można zauważyć, operacja jest wykonywana zawsze w tym samym czasie. Bardziej złożona i ciekawa jest operacja przydziału pamięci. Najpierw jest sprawdzane, czy podsystem pamięcią jest zainicjowany; jeżeli nie, to funkcja wywołuje odpowiednią procedurę (linie 14 17, list. 3). Uwaga jeżeli jest taka potrzeba, to inicjację można też wykonać explicite w kodzie startowym programu. Potem algorytm przegląda listę wolnych bloków, a jednocześnie dla każdego z nich uruchamiana jest procedura scalania bloków (linie 19 28, list. 3). W zależności od rozmiaru wolnego bloku (po scaleniu) podejmowane są różne działania. Jeżeli dany blok jest większy niż potrzeba, tzn. większy niż wymagany przez parametr funkcji malloc, to ów blok jest dzielony na dwa nowe bloki pierwszy z nich ma wielkość żądanej pamięci i jest zwracany jako wynik operacji malloc, drugi zaś pozostaje na liście wolnych bloków (linie 19 28, list. 3). Jeżeli blok ma wielkość dokładnie wymaganą przez malloc, to jest po prostu zwracany jako wynik funkcji. W obu tych sytuacjach przed wyjściem z funkcji malloc ustawiany jest bit zajętości bloku, a blok jest usuwany z listy wolnych bloków (linie 41 42, list. 3) wówczas wskaźnik zwracany przez funkcję (linia 4) wskazuje na obszar pamięci zaczynający się nie na początku minibloku, lecz na miejscu bezpośrednio po polu blocks. Jeżeli przeszukanie całej listy nie pozwoliło na znalezienie bloku o odpowiedniej długości (lub nie ma żadnych wolnych bloków), to funkcja malloc zwraca wynik NULL (linie 30 34, list. 3). Operacja łączenia bloków jest stosunkowo prosta. Począwszy od zadanego (jako parametr) bloku bazowego znajdowany jest początek następnego bloku w fizycznej pamięci RAM (linie 5 i 11, list. 4). Jeże- 70
5 R E K L A M A li tenże blok (następnik) jest wolny (tj. ma nieustawiony bit zajętości), to usuwany jest z listy bloków wolnych (linia 9, list. 4) i przyłączany do bloku bazowego przez wydłużenie jego długości o długość (linia 10) bloku następnika. Operacja jest powtarzana, aż kolejny następnik nadaje się do scalenia (pętla w liniach 7 12, list. 4). Ponieważ występują tutaj dwie zagnieżdżone pętle (każda o potencjalnej długości maksymalnej liczby minibloków w systemie), może się wydawać, że maksymalny czas (najgorszy przypadek, kiedy cała sterta jest pofragmentowana do pojedynczych minibloków) wykonania operacji przydziału pamięci jest proporcjonalny do kwadratu maksymalnej liczby minibloków (złożoność O(n 2 )). Zewnętrzna pętla to pętla w funkcji malloc, a pętla wewnętrzna jest pętlą w funkcji merge_ blocks. Należy tu jednak uwzględnić fakt, że w operacji łączenia pętla wykona się tylko wtedy, gdy nastąpi przynajmniej jedno scalenie bloków, List static void merge_blocks(block_t *block) 3 Block_T *successor; 4 5 successor = block + block >blocks; 7 while (0 == (successor >blocks & RESERVED_BIT)) 8 { 9 unlink(successor); 10 block >blocks += successor >blocks; 11 successor = block + block >blocks; 12 } 13 } co zaś powoduje automatyczne skrócenie pętli zewnętrznej. Czytelnik zapewne zauważył w prezentowanym kodzie takie wyrażenia, jak: MEM_ENTER_CRITICAL i MEM_EXIT_CRITICAL. Są to operacje niezbędne w systemach wielozadaniowych i ich rzeczywista implementacja zależy od użytego RTOS a. W najprostszym przypadku może to być odpowiednio zablokowanie (z zapamiętaniem statusu) przerwań i ich odblokowanie (odtworzenie ze statusu), jednak jest to mało efektywne i często niedopuszczalne (podsystem pamięci blokuje całe urządzenie). Zdecydowanie lepszym rozwiązaniem jest użycie prostego mechanizmu synchronizacyjnego, jak np. mutex. Na koniec chciałbym wspomnieć, że istnieją co najmniej dwa algorytmy open source służące do dynamicznego zarządzania pamięcią (Half Fit i TLSF), których maksymalny czas wykonania jest stały zarówno dla operacji przydziału, jak i zwalniania pamięci. Artur Lipowski Delphi Poland SA Jeżeli temat zainteresuje Czytelników, zajmiemy się nim w niedalekiej przyszłości. R E K L A M A 72
Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).
Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154
Programowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe
Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie
Podstawy programowania komputerów
Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana
Dynamiczne struktury danych
Listy Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co
Struktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Architektura komputerów
Architektura komputerów Tydzień 4 Tryby adresowania i formaty Tryby adresowania Natychmiastowy Bezpośredni Pośredni Rejestrowy Rejestrowy pośredni Z przesunięciem stosowy Argument natychmiastowy Op Rozkaz
dr inż. Jarosław Forenc
Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2010/2011 Wykład nr 7 (24.01.2011) dr inż. Jarosław Forenc Rok akademicki
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
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
Dynamiczne struktury danych
Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie
Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)
Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013
1 http://www.rtlinux-gpl.org 2 http://crux.nu/ 3 http://www.rtlinux-gpl.org/cgi-bin/viewcvs.cgi/rtlinux-3.2-rc1/ 4
Dynamiczna alokacja pamięci dla systemów czasu rzeczywistego. Kamil Deryński 1. WSTĘP Krytycznym elementem podczas projektowania systemów czasu rzeczywistego jest oczywiście czas,
PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
Wstęp do programowania
Wieczorowe Studia Licencjackie Wrocław, 9.01.2007 Wstęp do programowania Wykład nr 13 Listy usuwanie elementów Poniżej prezentujemy funkcję, która usuwa element o podanej wartości pola wiek z nieuporządkowanej
Kompilator języka C na procesor 8051 RC51 implementacja
Kompilator języka C na procesor 8051 RC51 implementacja Implementowane typy danych bit 1 bit char lub char signed 8 bitów char unsigned 8 bitów int lub signed int 16 bitów unsigned int 16 bitów long lub
Zmienne i struktury dynamiczne
Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest
wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK
wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK 1 2 3 Pamięć zewnętrzna Pamięć zewnętrzna organizacja plikowa. Pamięć operacyjna organizacja blokowa. 4 Bufory bazy danych. STRUKTURA PROSTA
Struktury czyli rekordy w C/C++
Struktury czyli rekordy w C/C++ Wprowadzenie do programowania w języku C struktury. pola bitowe, unie Struktury (rekordy) są złożonymi zmiennymi, składającymi się z elementów różnych typów zwanych polami,
. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019
.. Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2019 1 / 39 Plan.1 Wstęp.2 Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz.3.4 Zmiany w
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych - Lista Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami
Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność
Podstawowe struktury danych
Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym
Stałe, tablice dynamiczne i wielowymiarowe
Stałe, tablice dynamiczne i wielowymiarowe tylko do odczytu STAŁE - CONST tablice: const int dni_miesiaca[12]=31,28,31,30,31,30,31,31,30,31,30,31; const słowo kluczowe const sprawia, że wartość zmiennej
Strategia "dziel i zwyciężaj"
Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania
Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17
Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8
Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++
Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
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)
Porządek dostępu do zasobu: procesory obszary pamięci cykle procesora pliki urządzenia we/wy
ZAKLESZCZENIA w SO brak środków zapobiegania zakleszczeniom Zamówienia na zasoby => przydział dowolnego egzemplarza danego typu Zasoby w systemie typy; identyczne egzemplarze procesory obszary pamięci
System plików warstwa fizyczna
System plików warstwa fizyczna Dariusz Wawrzyniak Przydział miejsca na dysku Przydział ciągły (ang. contiguous allocation) cały plik zajmuje ciąg kolejnych bloków Przydział listowy (łańcuchowy, ang. linked
System plików warstwa fizyczna
System plików warstwa fizyczna Dariusz Wawrzyniak Plan wykładu Przydział miejsca na dysku Zarządzanie wolną przestrzenią Implementacja katalogu Przechowywanie podręczne Integralność systemu plików Semantyka
System plików warstwa fizyczna
System plików warstwa fizyczna Dariusz Wawrzyniak Przydział miejsca na dysku Zarządzanie wolną przestrzenią Implementacja katalogu Przechowywanie podręczne Integralność systemu plików Semantyka spójności
Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
Podstawy Programowania 2 Dwukierunkowa lista liniowa. Plan. Wstęp. Implementacja. Notatki. Notatki. Notatki. Notatki.
Podstawy Programowania 2 Dwukierunkowa lista liniowa Arkadiusz Chrobot Zakład Informatyki 7 kwietnia 2019 1 / 55 Plan Wstęp Implementacja Typ bazowy i wskaźnik listy Tworzenie listy Dodawanie elementu
Podstawy Informatyki. Metody dostępu do danych
Podstawy Informatyki c.d. alina.momot@polsl.pl http://zti.polsl.pl/amomot/pi Plan wykładu 1 Bazy danych Struktury danych Średni czas odszukania rekordu Drzewa binarne w pamięci dyskowej 2 Sformułowanie
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski
Laboratorium 6: Dynamiczny przydział pamięci dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 15 maja 2015 1. Wprowadzenie Instrukcja poświęcona jest dynamicznemu przydziałowi i zwalnianiu pamięci w
System plików JFS. 1 Najważniejsze informacje. Mateusz Zakrzewski. 18 stycznia JFS to skrót od Journalled File System.
System plików JFS Mateusz Zakrzewski 18 stycznia 2004 1 Najważniejsze informacje. JFS to skrót od Journalled File System. Stworzony przez firmę IBM w 1990 roku. Jest niezawodny, dzięki księgowaniu. Zamiast
. Podstawy Programowania 2. Dwukierunkowa lista cykliczna. Arkadiusz Chrobot. 24 kwietnia 2016
.. Podstawy Programowania 2 Dwukierunkowa lista cykliczna Arkadiusz Chrobot Zakład Informatyki 24 kwietnia 2016 1 / 38 Plan.1 Wstęp.2 Implementacja Typ bazowy i wskaźnik listy Tworzenie listy Dodawanie
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
Wykład 1: Wskaźniki i zmienne dynamiczne
Programowanie obiektowe Wykład 1: Wskaźniki i zmienne dynamiczne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Podstawy programowania w C++ Wskaźniki 2 dr Artur Bartoszewski - Programowanie
Struktury Danych i Złożoność Obliczeniowa
Struktury Danych i Złożoność Obliczeniowa Zajęcia 2 Algorytmy wyszukiwania, sortowania i selekcji Sortowanie bąbelkowe Jedna z prostszych metod sortowania, sortowanie w miejscu? Sortowanie bąbelkowe Pierwsze
Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.
Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)
Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH Temat 4: Realizacje dynamicznych struktur danych. Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/
Zarządzanie pamięcią operacyjną
Dariusz Wawrzyniak Plan wykładu Pamięć jako zasób systemu komputerowego hierarchia pamięci przestrzeń owa Wsparcie dla zarządzania pamięcią na poziomie architektury komputera Podział i przydział pamięci
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to
. Podstawy Programowania 2. Dwukierunkowa lista liniowa. Arkadiusz Chrobot. 7 kwietnia 2019
.. Podstawy Programowania 2 Dwukierunkowa lista liniowa Arkadiusz Chrobot Zakład Informatyki 7 kwietnia 2019 1 / 55 Plan.1 Wstęp.2 Typ bazowy i wskaźnik listy Tworzenie listy Dodawanie elementu do listy
Paradygmaty programowania
Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów
Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna
Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2016 1 / 8 Plan Wstęp Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz Zmiany w funkcji main()
Pętle. Dodał Administrator niedziela, 14 marzec :27
Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA
OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 16.01.2003 Algorytmy i Struktury Danych PIŁA ALGORYTMY ZACHŁANNE czas [ms] Porównanie Algorytmów Rozwiązyjących problem TSP 100 000 000 000,000 10 000 000
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych - Lista uporzadkowana. Wartownicy. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD)
Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński
Analiza konstrukcji zawierających wskaźniki Piotr Błaszyński Wskaźniki podejście naiwne: while(ptr!=null){ a[i] = *ptr; i++; ptr++; } po zmianie: N=length(ptr); alias_ptr = ptr; for(j=0 ; j
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 005 Plik wymiany Pamięć wirtualna 2 SO i SK/WIN Plik wymiany - rodzaj pamięci wirtualnej komputerów. Plik ten służy do tymczasowego przechowywania
Przykładowe sprawozdanie. Jan Pustelnik
Przykładowe sprawozdanie Jan Pustelnik 30 marca 2007 Rozdział 1 Sformułowanie problemu Tematem pracy jest porównanie wydajności trzech tradycyjnych metod sortowania: InsertionSort, SelectionSort i BubbleSort.
Podstawy Informatyki. Sprawność algorytmów
Podstawy Informatyki Sprawność algorytmów Sprawność algorytmów Kryteria oceny oszczędności Miara złożoności rozmiaru pamięci (złożoność pamięciowa): Liczba zmiennych + liczba i rozmiar struktur danych
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Analiza ilościowa w przetwarzaniu równoległym
Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1 Analiza ilościowa w przetwarzaniu równoległym 10. Analiza ilościowa w przetwarzaniu równoległym...2 10.1 Kryteria efektywności przetwarzania równoległego...2
WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5
WYKŁAD 10 Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 Tomasz Zieliński ZMIENNE O ZŁOŻONEJ BUDOWIE (1) Zmienne
Systemy wbudowane - wykład 9. Systemy czasu rzeczywistego Notes. Systemy czasu rzeczywistego Notes. Systemy czasu rzeczywistego Notes.
Systemy wbudowane - wykład 9 Przemek Błaśkiewicz 26 maja 2017 1 / 93 Systemy czasu rzeczywistego sterowanie silnikiem rakietowym; 2 / 93 Systemy czasu rzeczywistego sterowanie silnikiem rakietowym; system
Wskaźniki. Informatyka
Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Drzewa poszukiwań binarnych
1 Cel ćwiczenia Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet ielonogórski Drzewa poszukiwań binarnych Ćwiczenie
Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych
Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2014/15 Znajdowanie maksimum w zbiorze
. Podstawy Programowania 2. Jednokierunkowa lista liniowa. Arkadiusz Chrobot. 28 marca 2017
.. Podstawy Programowania 2 Jednokierunkowa lista liniowa Arkadiusz Chrobot Zakład Informatyki 28 marca 2017 1 / 57 Plan.1 Jednokierunkowa lista liniowa.2 Implementacja Typ bazowy i wskaźnik listy Tworzenie
16MB - 2GB 2MB - 128MB
FAT Wprowadzenie Historia FAT jest jednym z najstarszych spośród obecnie jeszcze używanych systemów plików. Pierwsza wersja (FAT12) powstała w 1980 roku. Wraz z wzrostem rozmiaru dysków i nowymi wymaganiami
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera
Dariusz Wawrzyniak Plan wykładu Definicja, miejsce, rola i zadania systemu operacyjnego Klasyfikacja systemów operacyjnych Zasada działania systemu operacyjnego (2) Definicja systemu operacyjnego (1) Miejsce,
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie
Podstawy programowania obiektowego
Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie
6. Pętle while. Przykłady
6. Pętle while Przykłady 6.1. Napisz program, który, bez użycia rekurencji, wypisze na ekran liczby naturalne od pewnego danego n do 0 włącznie, w kolejności malejącej, po jednej liczbie na linię. Uwaga!
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
Podstawy Programowania 2 Jednokierunkowa lista liniowa. Plan. Jednokierunkowa lista liniowa. Jednokierunkowa lista liniowa. Notatki. Notatki.
Podstawy Programowania 2 Jednokierunkowa lista liniowa Arkadiusz Chrobot Zakład Informatyki 26 marca 2019 1 / 57 Plan Jednokierunkowa lista liniowa Implementacja Typ bazowy i wskaźnik listy Tworzenie listy
external Data Representation
Remote Procedure Call external Data Representation Opis standardu RFC 1014 Kanoniczna reprezentacja danych oparta na formacie IEEE Deklaratywny język opisu struktur danych (zbliżony do języka C) Koncepcja
Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera
Dariusz Wawrzyniak Plan wykładu Definicja, miejsce, rola i zadania systemu operacyjnego Klasyfikacja systemów operacyjnych Zasada działania systemu operacyjnego (2) Miejsce, rola i zadania systemu operacyjnego
Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane
OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA
OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 20.11.2002 Algorytmy i Struktury Danych PIŁA ZŁOŻONE STRUKTURY DANYCH C za s tw or ze nia s tr uk tur y (m s ) TWORZENIE ZŁOŻONYCH STRUKTUR DANYCH: 00 0
Algorytmy i struktury danych. wykład 5
Plan wykładu: Wskaźniki. : listy, drzewa, kopce. Wskaźniki - wskaźniki Wskaźnik jest to liczba lub symbol który w ogólności wskazuje adres komórki pamięci. W językach wysokiego poziomu wskaźniki mogą również
Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Tablice Wskaźniki Adresy pamięci Operator adresu
Język ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak
Wprowadzenie Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Plan wykładu Definicja, miejsce, rola i zadania systemu operacyjnego Klasyfikacja systemów operacyjnych Zasada działania systemu operacyjnego
Wykład 2. Poprawność algorytmów
Wykład 2 Poprawność algorytmów 1 Przegląd Ø Poprawność algorytmów Ø Podstawy matematyczne: Przyrost funkcji i notacje asymptotyczne Sumowanie szeregów Indukcja matematyczna 2 Poprawność algorytmów Ø Algorytm
Programowanie w VB Proste algorytmy sortowania
Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich
dr inż. Jarosław Forenc
Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017 Wykład nr 7 (11.01.2017) Rok akademicki 2016/2017, Wykład
Lista, Stos, Kolejka, Tablica Asocjacyjna
Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,
Algorytmy i złożoność obliczeniowa. Wojciech Horzelski
Algorytmy i złożoność obliczeniowa Wojciech Horzelski 1 Tematyka wykładu Ø Ø Ø Ø Ø Wprowadzenie Poprawność algorytmów (elementy analizy algorytmów) Wyszukiwanie Sortowanie Elementarne i abstrakcyjne struktury
Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.
POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie
Struktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:
Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja
// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.
Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy
Stronicowanie w systemie pamięci wirtualnej
Pamięć wirtualna Stronicowanie w systemie pamięci wirtualnej Stronicowanie z wymianą stron pomiędzy pamięcią pierwszego i drugiego rzędu. Zalety w porównaniu z prostym stronicowaniem: rozszerzenie przestrzeni
Mikroinformatyka. Wielozadaniowość
Mikroinformatyka Wielozadaniowość Zadanie Tryb chroniony przynajmniej jedno zadanie (task). Segment stanu zadania TSS (Task State Segment). Przestrzeń zadania (Execution Space). - segment kodu, - segment