AOK I II

Konwersja liczb

Istotą konwersji liczb jest przekształcenie liczby zapisanej w jednym systemie liczbowym na równoważną jej liczbę zapisaną w innym systemie liczbowym. Ze względu na to, że wynik konwersji zapisu liczby z dowolnego systemu na binarny jest dłuższy niż pierwotna postać tej liczby, konwersję do postaci binarnej nazywa się również znajdowaniem rozwinięcia dwójkowego liczb, zaś jej wynik rozwinięciem dwójkowym liczby poddawanej konwersji.

Prostym sposobem znajdowania rozwinięcia dwójkowego liczby dziesiętnej, czyli przeprowadzania konwersji dziesiętno-dwójkowej, jest znalezienie:

Znaleźć rozwinięcie dwójkowe liczby 61.5625


61.562510 = 11101.10012

Znaleźć rozwinięcie dwójkowe liczby 61.5625


1 • 25 + 1 • 24 + 1 • 23 + 1 • 22 + 0 • 21 + 1 • 20 = 61


1 • 2−1 + 0 • 2−2 + 0 • 2−3 + 1 • 2−4 = 0.5625


111101.10012 = 61.562510


Algebra Boole'a Fundamentem teoretycznym dla techniki cyfrowej jest algebra Boole'a. Jej podstawy przedstawił matematyk angielski George Boole w opracowaniu pt. "An Investigation of the Laws of Thought" z 1854 roku. Dzieło to przeleżało na półkach ponad pół wieku, zanim znalazło zastosowanie w technice do analizy i syntezy układów przełączających. Jest to nie pierwszy przykład w historii nauki, że dopiero po wielu latach niektóre teorie abstrakcyjne stają się teoriami o wyraźnie zaznaczonym aplikacyjnym charakterze. Teoria układów logicznych wykorzystuje również pewne wyniki osiągnięte w XIX wieku w dziedzinie logiki teoretycznej przez takich matematyków jak de'Morgan czy też Polak Łukasiewicz, który jest twórcą znanego i stosowanego do dziś sposobu zapisu algorytmu, określanego jako tzw. odwrotna notacja polska.

Algebrą Boole’a B = <B, +, ∗, ¬, 0, 1> nazywamy zbiór B zawierający przynajmniej dwa elementy i spełniający następujące aksjomaty (dla x, y, z ∈B):

A1: x + 0 = x A2: x ∗ 1 = x element neutralny

A3: x + (¬x) = 1 A4: x ∗ (¬x) = 0 uzupełnienie

A5: x + y = y + x A6: x ∗ y = y ∗ x przemienność

A7: (x + y) + z = x + (y + z) łączność

A8: (x ∗ y) ∗ z = x ∗ (y ∗ z) łączność

A9: x ∗ (y + z) = x ∗ y + x ∗ z rozdzielność

A10: x + y ∗ z = (x + y) ∗ (x + z) rozdzielność

Twierdzenia

T1: x + x = x T2: x ∗ x = x idempotentność

T3: x + 1 = 1 T4: x ∗ 0 = 0 własności „zera” i „jedynki”

T5: ¬(x + y) = (¬x) ∗ (¬y) dualność (prawa d'Morgana)

T6: ¬(x ∗ y) = (¬x) + (¬y) dualność (prawa d'Morgana)

T7: x + (x ∗ y) = x T8 x ∗ (x + y) = x absorpcja

T9: ¬(¬x) = x inwolucja

Przykłady

B = <B, ∨, ∧, ¬, 0, 1>, gdzie B = {0, 1}

B = <B, ∨, ∧, ¬, F, T>, gdzie B = {T, F}

B = <B, ∨, ∧, ¬, 0, 1>, gdzie B = {Fn} oraz Fn - zbiór funkcji boolowskich


Prawo Moore'a w oryginalnym sformułowaniu mówi, ze ekonomicznie optymalna liczba tranzystorów w układzie scalonym podwaja sie co 18 miesięcy. To sformułowanie przypisuje sie jednemu z założycieli firmy Intel, Gordonowi Moore’owi, który tezę taka przedstawił w kwietniu 1965 roku. Istnieje jeszcze inne sformułowanie prawa Moore’a: „moc obliczeniowa komputerów podwaja sie co 18 miesięcy”. Tak wyrażone prawo jest nawet popularniejsze od oryginalnego sformułowania.

Zakres znaczenia Termin ten jest też używany do określenia praktycznie dowolnego postępu technologicznego. "Prawo Moore'a", mówiące że "moc obliczeniowa komputerów podwaja się co 24 miesiące" jest nawet popularniejsze od oryginalnego prawa Moore'a.

Podobnie (z innym okresem) mówi się o:

Nie wszystko jednak podlega tak rozszerzonemu prawu Moore'a: latencja (pamięci, dysków twardych, sieci komputerowych) spada bardzo powoli, pomimo rosnącej przepustowości. W niewielkim stopniu spadły też ceny typowych komputerów, ich rozmiar czy pobór mocy.

Granice prawa Moore'a

Jednym z głównych powodów, dzięki któremu ten wykładniczy wzrost jest możliwy, jest stosowanie coraz mniejszych elementów w procesie fabrykacji. Współcześnie dominują technologie 90, 65 i ostatnio 45 nm, kiedy we wczesnych latach 90. używano technologii 500 nm. Rozmiary te nie mogą się jednak zmniejszać w nieskończoność: w pewnym momencie takie tranzystory musiałyby być mniejsze od atomów. Inne istotne ograniczenie wynikają ze skończoności prędkości światła, stawiając nieprzekraczalną barierę minimalnego czasu potrzebnego na nawiązanie komunikacji między oddalonymi od siebie elementami komputerów lub sieci komputerowych.

Ze względu na niemożliwość zejścia z rozmiarem struktur poniżej rozmiaru atomu prawo to musi kiedyś przestać obowiązywać. Nie stanie się to nagle, będzie to raczej trwający proces spowalniania polepszania pewnych parametrów, jak szybkość czy pojemność. Od wielu lat powtarzane zapowiedzi, że czas obowiązywania prawa Moore'a właśnie dobiega końca, dotychczas nie spełniały się, aczkolwiek w listopadzie 2006 sam Gordon Moore oświadczył, że według niego za 2–3 lata (w 2008 lub 2009 roku) prawo to przestanie obowiązywać.


Bramka logiczna
(angielskie logical gate), elementarny układ kombinacyjny mający stałą liczbę wejść i wyjść, na których mogą się pojawiać tylko wartości ze zbioru dwuelementowego {0, 1}.

W technice cyfrowej wykorzystuje się układy elektron. charakteryzujące się skończoną liczbą możliwych stanów. Najbardziej są rozpowszechnione cyfrowe układy dwustanowe, konstrukcyjnie najprostsze, a jednocześnie zapewniające maksymalną odporność na zakłócenia oraz najlepszą rozróżnialność przybieranych stanów. Najczęściej stany elektron. układów cyfrowych są definiowane przez stany ich wyjść (portów), a fizycznie reprezentowane przez poziomy napięć elektrycznych. Układy cyfrowe dwustanowe pozwalają na prostą realizację działań algebry Boole’a oraz opartej na niej arytmetyki w zapisie dwójkowym (binarnym, zero-jedynkowym).

Charakterystyka układów cyfrowych:

Sygnał cyfrowy charakteryzują dwa stany napięcia:

wysoki oznaczona się jako "1", a poziom niski jako "0". Stąd pochodzi nazwa sygnał cyfrowy.

Stany logiczne na wejściu i wyjściu bramki zawiera tablica prawdy - jest to (najczęściej) tabela, która ukazuje jak przy danych stanach logicznych ustawionych na wejściach bramki będzie ustawione wyjście bramki.

Istnieje sześć podstawowych bramek logicznych: NOT, AND, OR, XOR, NAND i NOR.

NOT - negacja.

IN NOT
0 1
1 0

AND -iloczyn

In1 In2 AND
0 0 0
0 1 0
1 0 0
1 1 1

OR - suma

In1 In2 OR
0 0 0
0 1 1
1 0 1
1 1 1

XOR - tylko jeden z

In1 In2 XOR
0 0 0
0 1 1
1 0 1
1 1 0

NAND - negacja iloczynu

In1 In2 NAND
0 0 1
0 1 1
1 0 1
1 1 0

NOR - negacja sumy

In1 In2 NOR
0 0 1
0 1 0
1 0 0
1 1 0


Pamięć komputerowa to różnego rodzaju urządzenia i bloki funkcjonalne komputera, służące do przechowywania danych i programów (systemu operacyjnego oraz aplikacji). Potocznie przez "pamięć komputerową" rozumie się samą pamięć operacyjną.

Hierarchia pamięci opiera się na „oddaleniu” od procesora, gdzie odległość określa czas dostępu do danych.

  1. Rejestry procesora to komórki pamięci o niewielkich rozmiarach (najczęściej 4/8/16/32/64/128 bitów) umieszczone wewnątrz procesora i służące do przechowywania tymczasowych wyników obliczeń, adresów lokacji w pamięci operacyjnej itd. Większość procesorów przeprowadza działania wyłącznie korzystając z wewnętrznych rejestrów, kopiując do nich dane z pamięci i po zakończeniu obliczeń odsyłając wynik do pamięci.

Rejestry procesora stanowią najwyższy szczebel w hierarchii pamięci, będąc najszybszym z rodzajów pamięci komputera, zarazem najdroższą w produkcji, a co za tym idzie - o najmniejszej pojemności. Realizowane zazwyczaj za pomocą przerzutników dwustanowych, z reguły jako tablica rejestrów (blok rejestrów, z ang. register file).

Liczba rejestrów zależy od zastosowania procesora i jest jednym z kryteriów podziału procesorów na klasy CISC i RISC. Proste mikroprocesory mają tylko jeden rejestr danych zwany akumulatorem, procesory stosowane w komputerach osobistych - kilkanaście, natomiast procesory w komputerach serwerowych mogą mieć ich kilkaset.

  1. Cache (pamięć podręczna) to mechanizm, w którym ostatnio pobierane dane dostępne ze źródła o wysokiej latencji i niższej przepustowości są przechowywane w pamięci o lepszych parametrach.

Cache jest elementem właściwie wszystkich systemów - współczesny procesor ma 2 albo 3 poziomy pamięci cache oddzielającej go od pamięci RAM. Dostęp do dysku jest buforowany w pamięci RAM, a dokumenty HTTP są buforowane przez pośredniki HTTP oraz przez przeglądarkę.

Systemy te są tak wydajne dzięki lokalności odwołań - jeśli nastąpiło odwołanie do pewnych danych, jest duża szansa, że w najbliższej przyszłości będą one potrzebne ponownie. Niektóre systemy cache próbują przewidywać, które dane będą potrzebne i pobierają je wyprzedzając żądania. Np. cache procesora pobiera dane w pakietach po kilkadziesiąt czy też więcej bajtów, cache dysku zaś nawet do kolejnych kilkuset kilobajtów czytanego właśnie pliku.

  1. Pamięć operacyjna (en. internal memory, Primary storage). Jest to pamięć adresowana i dostępna bezpośrednio przez procesor, a nie przez urządzenia wejścia-wyjścia procesora. W pamięci tej mogą być umieszczane rozkazy (kody operacji) procesora (program) dostępny bezpośrednio przez procesor i stąd nazwa pamięć operacyjna. W Polsce często pamięć ta jest utożsamiana z pamięcią RAM, choć jest to zawężenie pojęcia, pamięcią operacyjną jest też pamięć nieulotna (ROM, EPROM i inne jej odmiany) dostępna bezpośrednio przez procesor. Obecnie pamięci operacyjne są wyłącznie pamięciami elektronicznymi, dawniej używano pamięci ferrytowych.

W obecnych komputerach głównym rodzajem pamięci operacyjnej jest pamięć RAM, wykonana jako układy elektroniczne, wykorzystywana przez komputer do przechowywania programu i danych podczas jego pracy.

  1. Pamięć masowa (ang. mass memory, mass storage) – pamięć trwała, przeznaczona do długotrwałego przechowywania dużej ilości danych w przeciwieństwie do pamięci RAM i ROM. Pamięć masowa zapisywana jest na zewnętrznych nośnikach informacji. Nośniki informacji zapisywane i odczytywane są w urządzeniach zwanych napędami.

Nośniki magnetyczne:

  1. dyski stałe - pamięć o dostępie bezpośrednim; nośniki danych zainstalowane w macierzach dyskowych

  2. taśmy magnetyczne - pamięć o dostępie sekwencyjnym zapisywana i odczytywana w napędzie taśmowym

Napędy optyczne:

  1. CD-ROM

  2. płyty DVD

  3. płyty Blu-Ray Disk

  4. płyty HD DVD

Pamięci półprzewodnikowe (pozbawione części mechanicznych), współpracujące z różnymi złączami komunikacyjnymi:

  1. pamięci USB.

  2. karty pamięci

  1. Pamięć offline tworzą dane, które są składowane na nośniku poza serwerem. Najbardziej popularnymi pamięciami offline są nośniki taśm i nośniki optyczne. Chociaż nośniki optyczne stają się coraz bardziej popularne, to nośniki taśm są stosowane najczęściej. Inną opcją, której można używać, są wirtualne nośniki optyczne. Wirtualnych nośników optycznych można używać do składowania obrazów wirtualnych na jednostkach dyskowych. Następnie obrazy takie można kopiować na dyski CD lub DVD albo rozpowszechniać je przez sieć.


Przerwanie (ang. interrupt) lub żądanie przerwania (IRQInterrupt ReQuest) – sygnał powodujący zmianę przepływu sterowania, niezależnie od aktualnie wykonywanego programu. Pojawienie się przerwania powoduje wstrzymanie aktualnie wykonywanego programu i wykonanie przez procesor kodu procedury obsługi przerwania (ang. interrupt handler).

Przerwania dzielą się na dwie grupy:

  1. Sprzętowe:

    1. Zewnętrzne – sygnał przerwania pochodzi z zewnętrznego układu obsługującego przerwania sprzętowe; przerwania te służą do komunikacji z urządzeniami zewnętrznymi, np. z klawiaturą, napędami dysków itp.

    2. Wewnętrzne, nazywane wyjątkami (ang. exceptions) – zgłaszane przez procesor dla sygnalizowania sytuacji wyjątkowych (np. dzielenie przez zero); dzielą się na trzy grupy:

      1. faults (niepowodzenie) – sytuacje, w których aktualnie wykonywana instrukcja powoduje błąd; gdy procesor powraca do wykonywania przerwanego kodu wykonuje tę samą instrukcję która wywołała wyjątek;

      2. traps (pułapki) – sytuacja, która nie jest błędem, jej wystąpienie ma na celu wykonanie określonego kodu; wykorzystywane przede wszystkim w debugerach; gdy procesor powraca do wykonywania przerwanego kodu, wykonuje następną, po tej która wywołała wyjątek, instrukcję;

      3. aborts – błędy, których nie można naprawić.

  2. Programowe – z kodu programu wywoływana jest procedura obsługi przerwania; najczęściej wykorzystywane do komunikacji z systemem operacyjnym, który w procedurze obsługi przerwania (np. w DOS 21h, 2fh, Windows 2fh, Linux x86 przerwanie 80h) umieszcza kod wywołujący odpowiednie funkcje systemowe w zależności od zawartości rejestrów ustawionych przez program wywołujący, lub oprogramowaniem wbudowanym jak procedury BIOS lub firmware.


Układ cyfrowy a analogowe.

Układy cyfrowe to rodzaj układów elektronicznych, w których sygnały napięciowe przyjmują tylko określoną liczbę poziomów, którym przypisywane są wartości liczbowe. Najczęściej (choć nie zawsze) liczba poziomów napięć jest równa dwa, a poziomom przypisywane są cyfry 0 i 1, wówczas układy cyfrowe realizują operacje zgodnie z algebrą Boola i z tego powodu nazywane są też układami logicznymi. Obecnie układy cyfrowe budowane są w oparciu o bramki logiczne realizujące elementarne operacje znane z algebry Boola: iloczyn logiczny (AND, NAND), sumę logiczną (OR, NOR), negację NOT, różnicę symetryczną (XOR) itp. Ze względu na stopień skomplikowania współczesnych układów wykonuje się je w postaci układów scalonych.

Zalety układów cyfrowych:

Wady układów cyfrowych:

Sygnał analogowy – sygnał, który może przyjmować dowolną wartość z ciągłego przedziału (nieskończonego lub ograniczonego zakresem zmienności). Jego wartości mogą zostać określone w każdej chwili czasu, dzięki funkcji matematycznej opisującej dany sygnał.


Podział procesorów

Procesor a system operacyjny

Charakterystyka CISC

Istotą architektury CISC jest to, iż pojedynczy rozkaz mikroprocesora, wykonuje kilka operacji niskiego poziomu, jak na przykład pobranie z pamięci, operację arytmetyczną i zapisanie do pamięci.

Charakterystyka RISC

Jej podstawowe cechy to:

  1. Zredukowana liczba rozkazów do niezbędnego minimum. Ich liczba wynosi kilkadziesiąt, podczas gdy w procesorach CISC sięga setek. Upraszcza to znacznie dekoder rozkazów.

  2. Redukcja trybów adresowania, dzięki czemu kody rozkazów są prostsze, bardziej zunifikowane, co dodatkowo upraszcza wspomniany wcześniej dekoder rozkazów. Ponadto wprowadzono tryb adresowania, który ogranicza ilość przesłań.

  3. Ograniczenie komunikacji pomiędzy pamięcią, a procesorem. Przede wszystkim do przesyłania danych pomiędzy pamięcią, a rejestrami służą dedykowane instrukcje, które zwykle nazywają się load (załaduj z pamięci), oraz store (zapisz do pamięci); pozostałe instrukcje mogą operować wyłącznie na rejestrach. Schemat działania na liczbach znajdujących się w pamięci jest następujący: załaduj daną z pamięci do rejestru, na zawartości rejestru wykonaj działanie, przepisz wynik z rejestru do pamięci.

  4. Zwiększenie liczby rejestrów (np. 32, 192, 256, podczas gdy np. w architekturze x86 jest zaledwie 8 rejestrów), co również ma wpływ na zmniejszenie liczby odwołań do pamięci.

  5. Dzięki przetwarzaniu potokowemu (ang. pipelining) wszystkie rozkazy wykonują się w jednym cyklu maszynowym, co pozwala na znaczne uproszczenie bloku wykonawczego, a zastosowanie superskalarności także na umożliwienie równoległego wykonywania rozkazów. Dodatkowo czas reakcji na przerwania jest krótszy.

Charakterystyka VLIW

Obecnie procesory VLIW są oparte na architekturze RISC, zazwyczaj z czterema lub maksymalnie ośmioma jednostkami obliczeniowymi. Po normalnej kompilacji programu, kompilator VLIW porządkuje kod na ścieżki, które wprost nie posiadają jakichkolwiek zależności. Następnie są one dzielone na cztery lub więcej części (jeden dla każdej jednostki obliczeniowej CPU) i pakowane razem w większe instrukcje z dodatkową informacją odnośnie jednostki, na której ma być wykonywana. Rezultatem tego jest pojedynczy wielki op-code (stąd nazwa "Very Long").

Przetwarzanie potokowe - sposób przetwarzania rozkazów w procesorach, w którym do przetwarzania zastosowano potok podzielony na etapy. W przeciwieństwie do klasycznego (sekwencyjnego) sposobu przetwarzania rozkazów gdzie każdy jest pobierany, dekodowany, wykonywany oddzielnie, w przetwarzaniu potokowym w procesorze następuje jednoczesne przetwarzanie kliku (zależności od głębokości/ilości etapów potoku) rozkazów jednocześnie. Każdy z rozkazów znajduje się w danym cyklu maszynowym w innym etapie przetwarzania i dzięki temu wyniki operacji mogą być produkowane niemal w każdym cyklu.

Główne etapy przetwarzania potokowego to:

Podział każdego etapu na podetapy umożliwia skrócenie cyklu, a to z kolei pozwala na dalszy wzrost szybkości przetwarzania. Taki mechanizm nazywany jest przetwarzaniem superpotokowym superpipelined pipeline. Liczba podetapów cyklów rozkazów (głębokość potoku) nie może być jednak dowolnie duża, bo podział etapu wymaga zwiększenia liczby buforów separujących, co z kolei powoduje zmniejszenie przepustowości potoku (opóźnienie w układach separujących etapy jest proporcjonalne do ich liczby i jest skutkiem wzrostu narzutu czasu na cele organizacyjne).

W przetwarzaniu potokowym ze względu na narzuty czasowe na wykonanie każdego etapu rozkazu (opóźnienia buforów) i konieczność wpasowania etapów w ramy czasowe potoku (czas przejścia rozkazu przez etap jest równy czasowi cyklu), czas wykonania pojedynczego rozkazu jest dłuższy niż w przetwarzaniu sekwencyjnym. Przy częstych zakłóceniach potoku może się zatem zdarzyć, że czas przetwarzania potokowego będzie porównywalny bądź nawet dłuższy z czasem sekwencyjnego wykonania instrukcji programu.

Na wydajność potoku mają wpływ:

Metody rozwiązywania zastojów

Polega na tym, że wynik działania operacji jest wcześniej dostępny dla wcześniejszych faz przetwarzania. DLX pokazuje to jako zielone strzałki. Dodanie forwardingu powoduje, że fazy dekodowania instrukcji i wykonania jej mogą pobierać argumenty nie tylko z rejestrów, ale też z wyjścia. 

Polega na takim ułożeniu instrukcji, aby hazard nie występował. Bardziej efektywne od forwardingu, ale zmusza programistę do myślenia. Sprzętowo rozwiązywane w ten sposób, że w drażliwych momentach w potoku nop i potok czeka aż dana się obliczy. Gdy programista poukłada odpowiednio instrukcje, to nie doda się żaden nop, ani nie będzie używany forwarding.

Polega na tym, że kod jednej pętli piszemy 2 lub więcej razy tak, aby jedno wykonanie przetworzyło kilka porcji danych. Wysoko efektywne, mocno zmniejsza ilość skoków, a tym samym stalli. To z tego powodu RISCe mają tak dużo rejestrów.

Cache (pamięć podręczna) to mechanizm, w którym ostatnio pobierane dane dostępne ze źródła o wysokiej latencji i niższej przepustowości są przechowywane w pamięci o lepszych parametrach.

Cel stosowania pamięci cache w procesorach

Aby określić cel stosowania pamięci podręcznej cache, należy w skrócie omówić zasadę działania mikroprocesora. Jest on układem cyfrowym taktowanym przez sygnał zegarowy, który realizuje zadany program - ciąg rozkazów umieszczony w pamięci operacyjnej. Program ma zwykle zadanie przetworzenia określonych danych pobranych z pamięci (lub urządzeń zewnętrznych), oraz zapisanie wyników ich przetwarzania, też w pamięci (lub przekazanie do urządzeniach zewnętrznych).  Szybkość wykonywania programu zależy w znacznej mierze od czasu dostępu procesora do układu pamięci operacyjnej. Nie bez znaczenia jest także pojemność pamięci (ile danych można w niej zapisać). Stosowane we współczesnych komputerach wielozadaniowe systemy operacyjne umożliwiają uruchamianie wielu programów jednocześnie. Dobrze jest więc gdy procesor ma do dyspozycji dużą pamięć operacyjną RAM. Ważnym czynnikiem pozostaje też koszt zastosowanego układu pamięci. Naturalnie w przypadku praktycznego systemu musi on być jak najniższy.

Istnieją wzajemne zależności pomiędzy wszystkimi opisywanymi wyżej parametrami.

Z tego wynika, że nie jest możliwe wyprodukowanie idealnej pamięci o maksymalnie dużej pojemności, a przy tym małym czasie dostępu i minimalnym koszcie. Możliwe jest budowanie szybkich układów, ale stosunkowo drogich i o małej pojemności. Istnieją też duże pamięci o małych kosztach w przeliczeniu na bajt, ale cechujące się mniejszą efektywnością w zakresie czasu dostępu.

We współczesnych procesorach stosuje się rozwiązanie kompromisowe, polegające na zastosowaniu pamięci wewnętrznej dwupoziomowej. Mikroprocesor wyposaża się we względnie dużą i wolniejszą pamięć główną, oraz w mniejszą, ale szybszą pamięć podręczną cache. Ilustruje to schemat blokowy przedstawiony na rysunku 2. Takie rozwiązanie pozwala na korzystanie z pamięci o dużej pojemności, jednocześnie możliwe jest umieszczenie najpotrzebniejszych danych, w szybkiej pamięci podręcznej.

Sprzętowa pamięć podręczna (ang. Cache memory) jest pamięcią typu SRAM (Static Random Access Memory). Układy tej pamięci są zbudowane z tranzystorów, które trwale przechowują zapisane dane. Pamięć podręczna zawiera kopię części zawartości pamięci głównej. Gdy procesor zamierza odczytać słowo z pamięci, najpierw następuje sprawdzenie, czy słowo to nie znajduje się w pamięci podręcznej. Jeśli tak, to słowo to jest szybko dostarczane do procesora. Jeśli nie, to blok pamięci głównej RAM zawierający określoną liczbę kolejnych słów jest wczytywany do pamięci podręcznej, a następnie potrzebne słowo (zawarte w tym bloku) jest dostarczane do procesora. Następne odwołania do tego samego słowa i sąsiednich zawartych w przepisanym bloku będą realizowane już znacznie szybciej.

Organizacja współpracy procesora z takimi pamięciami wymaga zastosowania dodatkowego układu - kontrolera cache, który steruje tym procesem.

Efektywność stosowania cache zależy w znacznej mierze od sposobu ułożenia kodu programów i danych pobieranych z pamięci przez mikroprocesory. Zwykle kod i dane nie są "porozrzucane" przypadkowo po całej dostępnej przestrzeni adresowej w pamięci RAM. Większość odwołań do pamięci w trakcie wykonywania programu odbywa się przez pewien czas pracy mikroprocesora w wąskim obszarze. Zjawisko to jest określane mianem lokalności odniesień.

Lokalność odniesień można uzasadnić intuicyjnie w następujący sposób:

    Oczywiście w długim czasie wykonywania programu procesor potrzebuje dane rozmieszczone w różnych odległych miejscach pamięci. Zwykle jednak, po wykonaniu skoku następne odniesienia odbywają się już lokalnie. Przepisanie bloku kolejnych komórek pamięci do szybkiego układu cache może, więc skutecznie przyspieszyć dostęp do pamięci.

W stosowanych obecnie rozwiązaniach można wyróżnić następujące poziomy pamięci podręcznej.

Pamięć podręczna najniższego poziomu (L1 – Level 1) jest stosunkowo mała, ale dane w niej zgromadzone są szybko dostępne dla procesora. W wypadku braku potrzebnych w danym momencie danych (braku trafienia), następuje odwołanie do pamięci kolejnych, wyższych poziomów. Po ich odczycie następuje przepisanie do niższych poziomów, tak by były szybciej dostępne w kolejnych odwołaniach. Jeśli dane nie są aktualnie buforowane w cache, następuje odczyt bloku pamięci głównej RAM, który je zawiera i wymiana zawartości cache. Pamięci niższych poziomów mogą mieć mniejszą pojemność i być bardziej efektywne. Procesor może szybko odczytywać mniejsze porcje danych w jednym cyklu zegara. Wyższe poziomy cache mają większe pojemności, dzięki czemu odwołania do RAM mogą odbywać się rzadziej. Można też w jednym odczycie przepisać większą porcję danych z RAM.

Ważnym zagadnieniem, jest podział pamięci podręcznej na oddzielny blok dla kodu programu i oddzielny blok dla danych. W taki sposób jest podzielona pamięć poziomu L1 procesora ITANIUM - Pamięć cache poziomów L2 i L3 jest już wspólna dla rozkazów i danych. W wielu (szczególnie starszych) procesorach wykorzystuje się również jednolitą pamięć podręczną poziomu L1. Takie rozwiązanie też posiada pewne zalety. Poniżej przedstawiono korzyści płynące z zastosowania pamięci oddzielnej i jednolitej.

Pamięć oddzielna kod i dane

Eliminowana jest rywalizacja o dostęp do pamięci między układem pobierania i dekodowania rozkazów w procesorze, a jednostką wykonującą w tym samym czasie inne, poprzednio pobrane rozkazy, które mogą wymagać odczytu pewnych zmiennych z cache. Ma to szczególne znaczenie w przypadku procesorów superskalarnych, w których kilka rozkazów jest wykonywanych równolegle. Dlatego we współczesnych procesorach poziom pamięci podręcznej L1 jest zawsze dzielony na blok danych i instrukcji.

Pamięć łączna dla kodu i danych

Poprawia się współczynnik trafień w tak zorganizowanej pamięci podręcznej, dzięki temu, że  naturalnie równoważy się zapotrzebowanie na przechowywanie rozkazów i danych. Jeśli na przykład program wymaga ciągłego pobierania rozkazów i w małym stopniu korzysta z danych, dostępna pamięć podręczna zapełni się w większości rozkazami. Oddzielna cache dla danych w takiej sytuacji pozostałaby niewykorzystana. Drugą zaletą jest to, że upraszcza się układ procesora - łatwiej jest zrealizować w jego strukturze jeden bufor pamięci cache niż dwa.

Sposoby dołączania pamięci cache do procesora

Układ cache jest w obecnych procesorach ściśle związany z ich strukturą - właściwie poziom L1 fizycznie stanowi integralną część mikroprocesora.  Jednak aby łatwiej było przedstawić zasadę działania i sposoby dostępu procesora do pamięci podręcznej, ta część programu traktuje ją jako oddzielny blok logiczny, dołączony do mikroprocesora, nie zajmując się jej fizycznym umiejscowieniem. Pisząc o sposobach dołączania, mamy więc na myśli sposób umieszczenia bloku cache na drodze procesor - pamięć.

Obecnie stosuje się trzy podstawowe sposoby dostępu procesora do pamięci podręcznej:

Procesor odwołuje się do cache wykorzystując magistralę pamięciową. Pamięć podręczna jest podłączona równolegle z pamięcią operacyjną RAM. W takim układzie częstotliwość pracy obu pamięci jest taka sama (komunikacja odbywa się po wspólnej magistrali), tylko czas dostępu dzięki szybkości cache może ulec skróceniu. Wykorzystanie tej samej magistrali nie jest korzystne. Jest ona blokowana przy każdym dostępie procesora do cache i nie może być w tym samym czasie udostępniona innym urządzeniom

Układ pamięci podręcznej pośredniczy w dostępie procesora do RAM. Procesor odwołuje się do układu cache, natomiast ten układ jest dołączony przez magistralę pamięciową do RAM.

Układ pamięci podręcznej jest dołączony do procesora przez oddzielną magistralę nazywaną BSB (Back Side Bus). Druga magistrala FSB (Front Side Bus) łączy procesor z pamięcią główną. W tym układzie częstotliwości obu magistral są zupełnie niezależne. Możliwe jest też wykorzystanie magistrali FSB przez inne urządzenia zapisujące do pamięci RAM, w czasie gdy procesor komunikuje się z cache po BSB. 

Budowa i organizacja pamięci podręcznej

Pamięć cache jest zorganizowana w linijki (o rozmiarach 16 lub 32 bajty - 128 lub 256 bitów), w których są przechowywane informacje pobrane z RAM w postaci słów binarnych. Jedna linijka jest najmniejszą porcją informacji - blokiem danych jaki układ cache wymienia z pamięcią operacyjną RAM. W różnych linijkach może być więc zapisana kopia zawartości odległych bloków z pamięci głównej.

Poniżej opisano budowę 32-bajtowej linijki pamięci podręcznej L1 w procesorze Pentium (rys. 3).  W innych procesorach mogą być zastosowane trochę inne rozwiązania, jednak ogólna zasada organizacji cache w linijki pozostaje taka sama.

Procesor Pentium posiada oddzielną pamięć podręczną poziomu L1 dla kodu programu (8kB) i oddzielną dla danych (8kB). Każda z nich jest podzielona na 256 linijek (256 x 32 B = 8kB).

Aby zbiór takich linijek był dla procesora użyteczną strukturą, w której łatwo odszukać potrzebne dane, musi istnieć mechanizm zapisywania i kodowania dodatkowych informacji na temat każdej linijki. Przede wszystkim potrzebna jest informacja o tym, które fragmenty zawartości pamięci RAM są aktualnie skopiowane w poszczególnych linijkach. Jest to niezbędne, aby podczas żądania procesora odczytu z pamięci, kontroler cache mógł poprawnie określić czy dane są dostępne w linijkach, czy trzeba je sprowadzić z RAM. Wszystkie te informacje przechowuje się w katalogu cache (czasem określanym skrótem TAG-RAM). Jest on częścią pamięci podręcznej, która zawiera rekordy odpowiadające każdej linijce cache. Są w nich zakodowane informacje na temat danych aktualnie zapisanych w odpowiednich linijkach. Wartości poszczególnych pół tych rekordów mogą także wskazywać, że dana linijka jest wolna.

Podczas dostępu procesora do cache układy logiczne dzielą przekazywany przez niego adres na następujące części:

W wypadku braku trafienia, tak zbudowany adres wskazuje blok w pamięci operacyjnej RAM, zawierający potrzebne dane. Zgodnie z zasadą działania cache, po odczytaniu zawartości bloku z RAM musi ona być zapisana do pamięci podręcznej. Na podstawie bitu LRU oraz części adresu (pola wiersz) jest wyznaczana linijka, do której można dokonać zapisu.

Skrót MESI używany do określania bitów w katalogu cache, został utworzony od pierwszych liter angielskich określeń czterech możliwych stanów linijki (Modified, Exclusive, Schared, Invalid). Na podstawie stanu bitów MESI można także określić, czy dane w poszczególnych linijkach są także zapisane w innych poziomach pamięci podręcznej. Stan bitów MESI zmienia się  również podczas modyfikacji danych w pamięci. Dotychczas omawiane były jedynie zagadnienia związane ze skróceniem czas dostępu do danych i rozkazów podczas ich odczytu. Jednak procesor nie tylko odczytuje z pamięci RAM. W trakcie wykonywania programu musi też tam zapisywać wyniki swoich peracji, modyfikować pewne zmienne i dane. Niektóre z nich mogą być w tym czasie skopiowane także do pamięci podręcznej. Wiąże się z tym konieczność zadbania o aktualność obu kopii danych.

Do pamięci operacyjnej oprócz procesora mogą też mieć dostęp inne urządzenia. Mogą one zapisywać i odczytywać RAM bez udziału mikroprocesora. Jeśli dokonają zmiany słowa w RAM, którego kopia aktualnie jest przechowywana w cache, mogą spowodować, że procesor posiada w pamięci podręcznej nieaktualne dane. Również gdy procesor w trakcie programu dokona zmiany danych tylko w cache, inne urządzenia mogą odczytać bezpośrednio z RAM stare błędne wartości. Należy zaznaczyć, że taka niespójność może występować tylko dla pamięci podręcznej danych. W oddzielnej pamięci podręcznej kodu programu procesor nie zapisuje swoich wyników, gdyż przechowuje ona jedynie dla niego instrukcje - kolejne rozkazy. Są różne rozwiązania problemu spójności danych stosowane w różnych procesorach, jednakże generalnie można wyróżnić dwa sposoby:

Write Trougch (zapis jednoczesny)

W tym sposobie każdy zapis danych wykonywany jest jednocześnie zarówno do pamięci głównej jak i do cache. Każdy zapis wymaga więc dostępu procesora do pamięci RAM. Również każdy bezpośredni zapis do RAM wykonywany przez inne urządzenia musi być monitorowany przez procesor. W ten sposób może on w razie potrzeby uaktualnić zawartość cache. Jest to więc najbardziej naturalny sposób, jednak generuje znaczny przepływ danych między pamięciami co powoduje duże opóźnienia.

Wirte Back (zapis opóźniony)

W tym trybie przy zapisie procesor aktualizuje tylko pamięć podręczną. Jednocześnie dla zmodyfikowanych linijek układ cache ustawia odpowiednie statusy (na bitach MES). Zawartość pamięci głównej jest aktualizowana później na żądanie. Może ono być wyrażone przez instrukcję programową WBINVO (Write Back and Invalid Data Cache), lub specjalny sterujący sygnał sprzętowy.
Aktualizacja jest też wyzwalana w wyniku braku trafienia w fazie odczytu z pamięci głównej. Gdy trzeba dokonać wymiany linijki cache, zawartość linijki usuwanej mającej status zmodyfikowany (zakodowany na bitach MESI), musi być koniecznie zapisana do RAM.

Taka implementacja sposobu utrzymania spójności danych jest bardziej wydajna, minimalizuje ilość cyklów zapisu do pamięci głównej. Problemem jest jednak to, że bezpośredni dostęp zewnętrznych modułów wejścia-wyjścia do RAM także powoduje konieczność uaktualniania pamięci cache co może powodować pewne opóźnienia.

W trakcie wykonywania programu może też nastąpić konieczność zapisu danych w obszarach RAM, które nie są aktualnie skopiowane do pamięci podręcznej. Niektóre procesory w takim wypadku mogą po prostu dokonywać zapisu w RAM z pominięciem układu cache. W nowszych generacjach procesorów stosuje się  mechanizm, w którym zapis danych pociąga za sobą skopiowanie odpowiedniego bloku RAM do linijki cache, gdzie jest on modyfikowany.

Dzięki temu ewentualny odczyt lub zapis tych samych danych w następnych rozkazach procesora może przebiegać już bez konieczności odwoływania się do RAM.

Pamięć wirtualna to mechanizm komputerowy zapewniający procesowi wrażenie pracy w jednym dużym, ciągłym obszarze pamięci operacyjnej podczas gdy fizycznie może być ona pofragmentowana, nieciągła i częściowo przechowywana na urządzeniach pamięci masowej. Systemy korzystające z tej techniki ułatwiają tworzenie rozbudowanych aplikacji oraz poprawiają wykorzystanie fizycznej pamięci RAM. Często popełnianym błędem jest utożsamianie pamięci wirtualnej z wykorzystaniem pamięci masowej do rozszerzenia dostępnej pamięci operacyjnej. Rozszerzenie pamięci na dyski twarde w rzeczywistości jest tylko naturalną konsekwencją zastosowania techniki pamięci wirtualnej, lecz może być osiągnięte także na inne sposoby, np. nakładki lub całkowite przenoszenie pamięci procesów na dysk, gdy znajdują się w stanie uśpienia. Pamięć wirtualna działa na zasadzie przedefiniowania adresów pamięci tak, aby "oszukać" procesy i dać im wrażenie pracy w ciągłej przestrzeni adresowej.

Obecnie wszystkie systemy operacyjne ogólnego przeznaczenia wykorzystują techniki pamięci wirtualnej dla procesów uruchamianych w ich obrębie. Wcześniejsze systemy takie, jak DOS, wydania Microsoft Windows[1] z lat 80. oraz oprogramowanie komputerów mainframe z lat 60. nie pozwalały pracować w środowisku z pamięcią wirtualną. Godnymi odnotowania wyjątkami były komputery Atlas, B5000 oraz Apple Lisa.

Pamięć wirtualna wymaga wykonania pewnych dodatkowych nakładów pracy przy próbie odczytu lub zapisu, dlatego systemy wbudowane lub szczególnego przeznaczenia, gdzie czas dostępu jest czynnikiem krytycznym i musi być przewidywalny, często z niej rezygnują za cenę zmniejszonego determinizmu.

Stronicowana pamięć wirtualna

Prawie wszystkie istniejące obecnie implementacje dzielą wirtualną przestrzeń adresową procesu na strony. Strona jest to obszar ciągłej pamięci o stałym rozmiarze, zazwyczaj 4 KB. Systemy, gdzie zapotrzebowanie na wielkość wirtualnej przestrzeni adresowej jest większe lub dysponujące większymi zasobami pamięci operacyjnej mogą używać stron o większym rozmiarze. Rzeczywista pamięć operacyjna podzielona jest na ramki, których rozmiar odpowiada wielkości stron. System operacyjny według uznania może przydzielać ramkom strony pamięci lub pozostawiać je puste.

Każde odwołanie przez dany proces do wirtualnego adresu pamięci powoduje jego przetłumaczenie na adres fizyczny przy pomocy tablicy stron. Wpisy w tablicy stron przechowują namiary na ramkę, gdzie aktualnie znajduje się dana strona lub znacznik informujący, że dana strona znajduje się aktualnie na dysku twardym.

Systemy mogą utrzymywać tylko jedną tablicę stron - wtedy wszystkie procesy pracują we wspólnej wirtualnej przestrzeni adresowej, przy czym każdy z nich używa innej jej części. Odmiennym podejściem jest utrzymywanie osobnych tablic stron dla każdego procesu oraz dodatkowej na potrzeby samego systemu operacyjnego. W tym modelu każdy proces posiada swoją własną, niezależną przestrzeń adresową. Dwa identyczne adresy logiczne należące do różnych procesów tłumaczone są na inne adresy rzeczywiste, uniemożliwiając tym samym jednemu procesowi modyfikację danych innego.

Dynamiczne tłumaczenie adresów jest zadaniem głównego procesora. Najczęściej wykonywane jest przez sprzętowy komponent zwany Memory management unit (ang. układ zarządzania pamięcią) obsługujący każde odwołanie do pamięci. MMU przeszukuje aktualną tablicę stron w poszukiwaniu ramki zawierającej żądane dane i przekazuje rzeczywisty adres pozostałym częściom procesora odpowiedzialnym za wykonanie instrukcji. Jeśli MMU stwierdzi, że dana strona nie znajduje się w pamięci, generuje przerwanie braku strony, które musi zostać obsłużone przez zarządcę pamięci systemu operacyjnego.

Ta część systemu operacyjnego odpowiada za tworzenie i zarządzanie tablicami stron, a także obsługuje przerwanie braku strony generowane przez MMU. W przypadku jego wystąpienia zarządca poszukuje wskazanej strony na dysku twardym (pamięć wymiany), ładuje ją do aktualnie wolnej ramki, uaktualnia tablicę stron i nakazuje MMU ponowne przetłumaczenie adresu. Ładowanie brakujących stron z dysku jest powolnym procesem, dlatego jeśli system dysponuje wystarczającą ilością ramek, dąży do minimalizacji wystąpień błędów braku strony.

Gdy ilość dostępnej pamięci operacyjnej jest na wyczerpaniu, zarządca może podjąć decyzję o przeniesieniu części stron z ramek na dysk. Do wyznaczenia niepotrzebnych stron stosowany jest algorytm LRU (Least Recently Used), w którym na dysk przenoszone są najrzadziej używane strony jako te, których najprawdopodobniej proces będzie potrzebować najpóźniej.

Nie wszystkie strony pamięci mogą być przeniesione do pamięci wymiany. Wśród takich krytycznych stron możemy wyróżnić:

Procedury obsługi przerwań oparte są na tablicy wskaźników do kodu obsługującego poszczególne rodzaje przerwań. Gdyby strony przechowujące ten kod mogłyby być przenoszone do pamięci wymiany, obsługa przerwań byłaby jeszcze bardziej kłopotliwa, szczególnie że brak strony również sygnalizowany jest przez przerwanie.

Tablice stron same nie podlegają stronicowaniu.

Bufory danych, które muszą być dostępne dla innych podzespołów komputera, które przeważnie wykorzystują fizyczne adresowanie.

Krytyczne fragmenty kodu jądra lub aplikacji, gdzie nie można pozwolić na zbyt długie czasy dostępu do pamięci spowodowane przez brak strony.

Segmentowana pamięć wirtualna

Pamięć wirtualna może być zrealizowana również w oparciu o techniki segmentowania. Wirtualna przestrzeń adresowa aplikacji podzielona jest na bloki zmiennej długości zwane segmentami. Adres logiczny składa się z numeru segmentu oraz przesunięcia w obrębie tego segmentu. Pamięć jest wciąż fizycznie dostępna za pomocą tzw. adresu absolutnego lub liniowego. Do jego otrzymania, procesor odczytuje deskryptor segmentu z tablicy segmentów. Zawiera on flagę informującą, czy dany segment znajduje się aktualnie w pamięci czy nie, adres początku segmentu oraz jego długość. Następnie sprawdza czy przesunięcie adresu mieści się w granicach segmentu. Jeśli segment nie znajduje się w pamięci, generowane jest przerwanie powiadamiające system operacyjny o konieczności jego załadowania. W trakcie wczytywania może okazać się niezbędne przeniesienie innych segmentów na dysk, aby zrobić miejsce dla nowego.

Technikę segmentowanej pamięci wirtualnej wspierał jako dodatkową opcję procesor Intel 80286 będący jednym z przodków wszystkich procesorów stosowanych we współczesnych komputerach PC, jednak nie była ona wykorzystywana w większości systemów operacyjnych.Możliwe jest połączenie segmentacji pamięci ze stronicowaniem poprzez podzielenie każdego segmentu na strony. Systemy korzystające z tej techniki, np. Multics czy IBM System/38 pamięć wirtualna realizowana jest przez stronicowanie, zaś segmentacja wprowadza dodatkowy mechanizm ochrony. W procesorach IA-32 oraz Intel 80386 segmenty znajdują się w 32-bitowej liniowej stronicowanej przestrzeni adresowej: segmenty mogą być przenoszone z/do przestrzeni adresowej, zaś strony w obrębie przestrzeni adresowej mogą być przenoszone z/do pamięci operacyjnej. Korzystają z tego jednak tylko nieliczne systemy - najczęściej stosowane jest wyłącznie stronicowanie pamięci.

Różnica pomiędzy pamięcią stronicowaną a segmentowaną nie polega wyłącznie na podziale pamięci na porcje o stałym i zmiennym rozmiarze. W tego typu systemach segmentacja jest często widoczna dla procesów użytkownika, w przeciwieństwie do przezroczystych stron, które nie wymagają od nich żadnego dodatkowego zaangażowania.

Szamotanie procesów

Mianem szamotania określany jest stan procesu, w którym spędza on więcej czasu na oczekiwaniu na brakujące strony pamięci niż na faktycznym wykonywaniu obliczeń, co znacząco spowalnia jego działanie. Problem szamotania występuje we wszystkich implementacjach i objawia się przy zbyt dużym zapotrzebowaniu na pamięć ze strony procesów przy zbyt małej ilości wolnych ramek. Problem może być częściowo rozwiązany przez poprawienie jakości programów, lecz na dłuższą metę jedynym skutecznym lekarstwem jest zainstalowanie większej ilości fizycznej pamięci operacyjnej.

RAM (ang. Random Access Memory – pamięć o dostępie swobodnym) – podstawowy rodzaj pamięci cyfrowej. Choć nazwa sugeruje, że oznacza to każdą pamięć o bezpośrednim dostępie do dowolnej komórki pamięci (w przeciwieństwie do pamięci o dostępie sekwencyjnym, np. rejestrów przesuwających), nazwa ta ze względów historycznych oznacza tylko te rodzaje pamięci o bezpośrednim dostępie, które mogą być też zapisywane przez procesor, a wyklucza pamięci ROM (tylko do odczytu), pomimo iż w ich przypadku również występuje swobodny dostęp do zawartości.

W pamięci RAM przechowywane są aktualnie wykonywane programy i dane dla tych programów oraz wyniki ich pracy. Zawartość większości pamięci RAM jest tracona kilka sekund po zaniku napięcia zasilania, niektóre typy wymagają także odświeżania, dlatego wyniki pracy programów muszą być zapisane na innym nośniku danych.

Pamięci RAM dzieli się na pamięci statyczne (ang. Static RAM, w skrócie SRAM) oraz pamięci dynamiczne (ang. Dynamic RAM, w skrócie DRAM). Pamięci statyczne są szybsze od pamięci dynamicznych, które wymagają ponadto częstego odświeżania, bez którego szybko tracą swoją zawartość. Pomimo swoich zalet są one jednak dużo droższe i w praktyce używa się pamięci DRAM.

Pamięć RAM jest stosowana głównie jako pamięć operacyjna komputera, jako pamięć niektórych komponentów (procesorów specjalizowanych) komputera (np. kart graficznych, dźwiękowych, itp.), jako pamięć danych sterowników mikroprocesorowych.

SRAM (ang. Static Random Access Memory), statyczna pamięć o dostępie swobodnym – typ pamięci półprzewodnikowej stosowanej w komputerach, służy jako pamięć buforująca między pamięcią operacyjną i procesorem.

Słowo "statyczna" oznacza, że pamięć SRAM przechowuje dane tak długo, jak długo włączone jest zasilanie, w odróżnieniu od pamięci typu DRAM, która wymaga okresowego odświeżania.

Każdy bit przechowywany jest w pamięci SRAM w układzie zbudowanym z czterech tranzystorów, które tworzą przerzutnik, oraz z dwóch tranzystorów sterujących. Taka struktura umożliwia znacznie szybsze odczytanie bitu niż w pamięci typu DRAM, oraz w przeciwieństwie do pamięci DRAM nie wymaga odświeżania.

Pamięci SRAM wykorzystywane są w szybkich pamięciach podręcznych cache, gdyż nie wymagają one dużych pojemności (gęstość danych w SRAM jest 4 razy mniejsza niż w DRAM), ale prędkość dostępu jest około 7 razy szybsza od DRAM (1 cykl SRAM wynosi około 10 ns, natomiast w DRAM około 70 ns). Szybkość ta dotyczy dostępu swobodnego (czyli kolejne odczytywane dane są ulokowane pod różnymi adresami), w przypadku odczytu danych z sąsiednich komórek adresowych szybkość pamięci SRAM i DRAM jest jednak porównywalna.

DRAM (ang. Dynamic Random Access Memory) – rodzaj ulotnej pamięci półprzewodnikowej o dostępie swobodnym, której bity są reprezentowane przez stan naładowania kondensatorów. Poszczególne jej elementy zbudowane są z tranzystorów MOS, z których jeden pełni funkcję kondensatora, a drugi elementu separującego.

W przeciwieństwie do pamięci statycznych nie wymagają stałego zasilania, a jedynie okresowego odświeżania zawartości (ze względu na rozładowywanie się kondensatorów). Dzięki takiemu zasilaniu zużywają mniej energii. Jednocześnie pojedyncza komórka pamięci dynamicznej składa się z mniejszej liczby elementów niż analogiczna komórka pamięci statycznej. Powyższe cechy pozwalają na większe upakowanie elementów w układach scalonych, co daje efekt w postaci niższych kosztów produkcji i pozwala na budowę układów pamięci o większych pojemnościach.

Odświeżanie musi następować w regularnych odstępach czasu oraz bezpośrednio po każdej po operacji odczytu i polega na ponownym zapisie odczytanej wartości w tych samych komórkach pamięci. Za odświeżanie odpowiedzialne są specjalizowane układy wspomagające (kontroler pamięci – obecnie najczęściej stanowi on integralną część chipsetu) bądź sam procesor (np. Z80).

Pamięci dynamiczne najczęściej łączone są w dwuwymiarowe tablice adresowane numerem wiersza i kolumny, co pozwala ograniczyć liczbę wymaganych linii adresowych i przyspiesza sekwencyjny odczyt danych umieszczonych w kolejnych komórkach tego samego wiersza pamięci.

Pamięci dynamiczne są obecnie szeroko wykorzystywane jako pamięć operacyjna we wszystkich urządzeniach niespecjalizowanych.

CAS to skrót od Column Address Strobe (bramkowanie adresu kolumny) lub Column Address Select (wybór adresu kolumny). Adresy te odnoszą się do kolumny fizycznych komórek pamięci w tablicy kondensatorów używanych w dynamicznej pamięci RAM (DRAM).

CAS latency (CL), czyli „czas oczekiwania CAS”, oznacza czas (liczbę cykli zegara) jaki upływa między wysłaniem przez kontroler pamięci żądania dostępu do określonej kolumny pamięci a odczytaniem danych z tej kolumny na wyprowadzeniach modułu pamięci.

Im niższa jest wartość CAS latency (przy takiej samej częstotliwości zegara), tym mniej czasu potrzeba na pobranie danych z pamięci. Najprościej mówiąc, im krótsze CAS latency, tym lepiej. Czas oczekiwania CAS wpływa bowiem na szybkość wykonywania w pamięci operacji, takich jak pobranie kolejnej instrukcji do wykonania przez procesor, operacje odczytu/zapisu/porównania/przesunięcia bitowego itp. Im dłuższy czas oczekiwania, tym dłużej procesor musi czekać na reakcję ze strony pamięci. Istnieją różnorodne sposoby na przyśpieszenie działania pamięci, takie jak stosowanie przeplotu (ang. interleaving; pozwala na rozdzielenie operacji zapisu na kilka banków pamięci), czy też korzystanie z pamięci podręcznej (ang. cache; umożliwia tymczasowe przechowywanie przetwarzanych danych, a czasem także inteligentną synchronizację z modułami pamięci).

Zdecydowana większość producentów pamięci komputerowych podaje parametr CAS latency (CL) w nazwie konkretnego modelu. Niektórzy podają go bezpośrednio (pisząc np. CL5).

Architektura komputera – sposób organizacji elementów tworzących komputer. Pojęcie to używane jest dosyć luźno. Może ono dzielić systemy komputerowe ze względu na wiele czynników, zazwyczaj jednak pod pojęciem architektury rozumie się organizację połączeń pomiędzy pamięcią, procesorem i urządzeniami wejścia-wyjścia.

Innym, stosowanym potocznie znaczeniem terminu "architektura komputera" jest typ procesora wraz z zestawem jego instrukcji. Właściwszym określeniem w tym przypadku jest model programowy procesora (ang. ISA – Instruction Set Architecture).

Taksonomia Flynna jest klasyfikacją architektur komputerowych, zaproponowaną w latach sześćdziesiątych XX wieku przez Michaela Flynna, opierająca się na liczbie przetwarzanych strumieni danych i strumieni rozkazów.

W taksonomii tej wyróżnia się cztery grupy:

Ze względu na sposób podziału pracy i dostęp procesora do pamięci możemy podzielić architektury na:

Ze względu na sposób organizacji pamięci i wykonywania programu:

Polega na ścisłym podziale komputera na trzy podstawowe części:

System komputerowy zbudowany w oparciu o architekturę von Neumanna powinien:

W odróżnieniu od architektury von Neumanna, pamięć danych programu jest oddzielona od pamięci rozkazów. Podstawowa architektura komputerów zerowej generacji i początkowa komputerów pierwszej generacji. Prostsza (w stosunku do architektury von Neumanna) budowa przekłada się na większą szybkość działania - dlatego ten typ architektury jest często wykorzystywany w procesorach sygnałowych oraz przy dostępie procesora do pamięci cache.

Separacja pamięci danych od pamięci rozkazów sprawia, że architektura harwardzka jest obecnie powszechnie stosowana w mikrokomputerach jednoukładowych, w których dane programu są najczęściej zapisane w nieulotnej pamięci ROM (EPROM/EEPROM), natomiast dla danych tymczasowych wykorzystana jest pamięć RAM (wewnętrzna lub zewnętrzna).

łączy w sobie cechy architektury harwardzkiej i architektury von Neumanna. Oddzielone zostały pamięci danych i rozkazów, lecz wykorzystują one wspólne magistrale danych i adresową. Architektura niniejsza umożliwia łatwe przesyłanie danych pomiędzy rozdzielonymi pamięciami.


Wyszukiwarka

Podobne podstrony:
AOK I II
AOK I II
AOK II cojuzbylo doc
L5 I1Y6S1 7, WAT, sem II, aok
Prel II 7 szyny stałe i ruchome
Produkty przeciwwskazane w chorobach jelit II
9 Sieci komputerowe II
W wiatecznym nastroju II
W01(Patomorfologia) II Lek
Mała chirurgia II Sem IV MOD
Analiza czynnikowa II
PKM NOWY W T II 11
Ekonomia II ZACHOWANIA PROEKOLOGICZNE
Asembler ARM przyklady II
S Majka II Oś
Spotkanie z rodzicami II
Wyklad FP II dla studenta
Ocena ryzyka położniczego II

więcej podobnych podstron