Architektura komputerów po polsku



Pobieranie 179,32 Kb.
Strona1/3
Data22.12.2017
Rozmiar179,32 Kb.
  1   2   3

Motto:
X=[xk-1- (xk-1)]( k-1- -m)+xi+[xk-1-( - 1) (xk-1)] -m.

prof. Janusz Biernat „Arytmetyka komputerów” 1996

/* w założeniu miało to być tłumaczenie książki prof. Janusz Biernata „Architektura komputerów” na język przyjazny studentowi. Niestety, okazało się to niemal niemożliwe. Tłumaczenie następowało z prędkością ok. 25 stron/dzień, a egzamin był coraz bliżej. Wiele fragmentów jest więc żywcem przepisanych z książki – jest to po prostu streszczenie książki, z nielicznymi komentarzami. Mam nadzieję, że na coś się przyda. Od razu przepraszam za literówki itp. – pisałem szybko i na sprawdzenie tekstu, jak na razie, nie miałem czasu. Niech, w poniedziałek Bóg ma nas w swojej opiece i niech moc będzie z nami. */




1. KOMPUTER I PROGRAM.
1.1. Komputer z programem zintegrowanym.

[ ogólnie o modelu von Neumanna]


Główne części komputera z programem zintegrowanym to: pamięć (memory), centralna jednostka przetwarzająca (central processing unit CPU) i linia je łącząca (connecting tube), zwana współcześnie magistralą.

W modelu von Neumanna zadaniem procesora jest przetwarzanie danych, których jedynym źródłem jest pamięć. Wykonanie rozkazu rozpoczyna się pobraniem z pamięci słowa interpretowanego jako kod instrukcji i obejmuje: pobranie danych z pamięci, przetworzenie i zapis wyniku do pamięci. Chwilowe umieszczenie danych w rejestrach procesora służy zmniejszeniu obciążenia magistrali i nie jest sprzeczne ze schematem przetwarzania. Wynik rozkazu zależy od skutku przetwarzania rozkazów poprzednich.

Zasadniczą rolę pełni pamięć, zorganizowana zgodnie z następującymi zasadami:


  • informacja jest przechowywana w komórkach (cell) o jednakowym rozmiarze, każda komórka zawiera jednostkę informacji zwaną słowem (word)

  • znaczenie słów nie jest przypisane ich treści, sposób przechowywania danych i instrukcji jest identyczny (kod informacji nie zawiera żadnej etykiety)

  • struktura (kod) słowa nie pozwala odróżnić instrukcji od danych – interpretacja słowa zależy jedynie od stanu maszyny w momencie przyjmowania słowa z pamięci

  • komórki tworzą zbiór uporządkowany, a każdemu słowu można przypisać unikatowy wskaźnik lokacji – adres

  • zawartość komórki pamięci może zmienić jedynie procesor dokonując przesłania słowa do pamięci.

Procesor może czytać tylko z pamięci głównej (operacyjne), bo tylko ją adresuje. Aby coś odczytać z innych pamięci (np. wtórnej) należy odpowiednie dane przesłać do pamięci operacyjnej i dopiero z niej odczytać. Pamięć główna charakteryzuje się swobodnym dostępem – znaczy to, że czas przesłania słowa między procesorem a pamięcią nie zależy od lokacji (adresu) tej komórki.

Program jest sekwencją rozkazów, co oznacza, że w chwili wykonywania rozkazu wiemy gdzie znajduje się następny rozkaz (lub możemy to określić). Układ wytwarzający adres następnego rozkazu to licznik rozkazów (program counter). Na zmianę domyślnej kolejności rozkazów pozwalają rozkazy rozgałęzień (branch) i skoków (jump).

Klasyczny model von Neumanna z czasem został nieco zmieniony. Najważniejsze innowacje to:


  • rozdzielenie pamięci programu i danych (zabezpiecza rozkazy przed zniszczeniem, równoczesne pobranie kodu i argumentu)

  • dodanie stosu programowego (przydatne szczególnie przy rekurencjach)

  • wprowadzeni trybów adresowania

  • pamięć wirtualna - metoda adresowania symbolicznego

  • nowe typy danych – zmiennoprzecinkowe, łańcuchy itp.


1.1.1. Komputer jako automat.

[Rozdział mocno zjechany]

Działanie komputera z programem zintegrowanym można porównać do działania automatu skończonego. Stan komputera określa stan pamięci i stan procesora ( a dokładniej jego rejestrów) – ogólnie przyjmuje się, że stan komputera jest konfiguracją pamięci. Zmiana stanu komputera jest skutkiem wykonania rozkazu przez CPU. Rozkaz jest funkcją, która przeprowadza stan wejściowy w stan wyjściowy. Pamięć jest zatem zarówno dziedziną, jak i zbiorem wartości tej funkcji. Należy jednak pamiętać, że komputer w odróżnieniu od innych automatów może zmieniać swoją sekwencję sterowania (chodzi o zmianę kolejności wykonywanych programów – czyli skoki). Automat, który jest w stanie interpretować kody rozkazów, nazywa się maszyną właściwą (mikromaszyna) (chodzi po prosu o procesor, który potrafi jedynie zinterpretować rozkaz, ale nic z nim nie zrobi bez oprogramowania), a ten który przetwarza sekwencje instrukcje na bezpośrednio wykonywane rozkazy zakodowane w pamięci to maszyna wirtualna (komputer z oprogramowaniem).

Cykl procesora – czas potrzebny na zmianę jego stanu.

Cykl pamięci (rozkazowy) – czas potrzebny na zmianę stanu pamięci – może obejmować kilka cykli procesora..

Etapy wykonywania rozkazu są wykonywane w kolejnych cyklach procesora:



  • fetch – pobranie kodu rozkazu z pamięci (do rejestru)

  • decode – dekodowanie rozkazu (by określić sygnały sterujące)

  • address generation – wytworzenie adresu argumentu

  • memory read – odczytanie argumentów z pamięci

  • execute – wytworzenie wyniku

  • write – zapisanie wyniku do pamięci.


1.1.2. Poziomy opisu programu.
Poziomy maszynowe (chodzi o abstrakcyjne poziomy umożliwiające wykonanie programu):

  • L0 – przetwornik sygnałów (hardware)

  • L1 – struktura logiczna (firmware)

  • [poniższe są dopiero dostępne dla użytkownika]

  • L2 – system operacyjny (udostępnia listę rozkazów i standardowe usługi systemu np. odczyt plików itp.)

  • L3 – język asemblerowy

  • L4 – język algorytmiczny (np. C++, Pascal)

  • L5 – język makropoleceń.

Konwersje między poszczególnymi poziomami:



kompilacja – tłumaczenie całego algorytmu na sekwencje rozkazów procesora. Kod wynikowy musi być załadowany do pamięci. Otrzymujemy optymalny kod. Wymaga dużej ilości pamięci. [.txt(kompilator)->.obj(konsolidator)->.exe(do pamięci i procesora).
interpretacja – osobne tłumaczenie danego polecenia dopiero w momencie jego użycia. Wymaga niewielkiej ilości pamięci, ale jest czasochłonne. Niektóre interpretery generują najpierw kod pośredni (p-kod), który jest następnie natychmiast wykonywany (są to pseudokompilatory)
Z procesami tymi łączy się problem przenośności programów, czyli możliwości wykonania danego kodu na każdej maszynie – rozwiązaniem jest stosowanie na poziomie systemu operacyjnego maszyny wirtualnej – przetwarza ona kod źródłowy na kod wymyślonego procesora, tak zdefiniowanego, aby łatwo można było przejść na kod maszyny docelowej (tak właśnie jest w JAVIE).
1.2. Architektura komputera.
Architektura – sztuka projektowania i konstruowania obiektu.

Kompozycja – architektura, budowa, z czego zbudowane zegarek – tarcza, wskazówki).

Organizacja/konstrukcjamoduł wykonawczy, to co nadaje obiektowi kształt operacyjny (rodzaj napędu i układ przekładni).

Realizacja – wyraz technologiczny organizacji, jakimi metodami wykonane (technologia wykonania balansu i przekładni).
Architektura komputera – zbiór rozkazów i pamięć.

Architektura procesora – opis cech funkcjonalnych komputera na poziomie przepływu danych w centralnej jednostce przetwarzającej CPU.
Cechy przejrzystej architektury:

  • spójność – możliwość odtworzenia pełnej architektury na podstawie niepełnej specyfikacji (wszystkie mają te same cechy – np. reagowanie na błędny argument, dokładność wykonania, struktura kodu). BŁĄD: w 80x86 wszystkie operacje logiczne modyfikują rejestr warunków F oprócz operacji NOT.

  • ortogonalność – niezależna specyfikacja funkcji należących do odrębnych kategorii (tryby adresacji, funkcje arytmetyczne itp.) BŁĄD: w Motorolach możliwość kopiowania typu pamięć-pamięć, ale nie można już dodawać pamięć-pamięć [chyba chodzi o to aby wszystkie rozkazy danej grupy uzywały tych samych typów i formatów danych]

  • trafność – specyfikacja i implementacja tylko tych funkcji, które są logicznie spójne z architekturą: ekonomiczność (wyeliminowanie funkcji logicznie niespójnych), przeźroczystość (oddzielenie architektury od organizacji – budowy od modułu wykonawczego)

  • ogólność – zapewnienie możliwości działania danej funkcji zgodnie z jej przeznaczeniem (bazując na jej dziedzinie). Brak ograniczenia od strony organizacji : kompletność (funkcjonalna pełność w obrębie klas funkcji – np. wszystkie potrzebne operacje arytmetyczne – niestety zajmuje to przestrzeń kodową) BŁĄD: realizacja OR i AND, a nie ma NAND i NOR; otwartość (możliwość ciągłego rozwoju).


1.3. Szybkość przetwarzania.
Czas wykonania programu jest wprost proporcjonalny do czasu cyklu procesora Tc (potrzebnego na wykonanie zmiany stanu procesora), zależy od liczby wykonań (cykli) danej instrukcji oraz średniego czasu potrzebnego na wykonanie jednej takiej instrukcji.

Liczba wykonań instrukcji i średni czas jej wykonania są ze sobą ściśle powiązane. W maszynach o bogatym repertuarze instrukcji liczba instrukcji potrzebnych do wykonania danego programu jest stosunkowo niewielka, za to średni czas ich wykonania jest dłuższy, bo są to operacje bardziej skomplikowane.

Średnia liczba cykli potrzebnych na wykonanie instrukcji zależy od złożoności listy rozkazów i organizacji procesora. Im więcej rozkazów mamy do dyspozycji, tym dłużej jest wykonywany proces dekodowania rozkazów i generacji sygnałów sterujących procesorem.
Jednym z głównych powodów zwolnienia całego procesu wykonania rozkazu jest ciągłe odwoływanie się do pamięci (przy pobraniu rozkazu, a także zapisania jego wyniku), gdyż czas dostępu do pamięci jest znacznie dłuższy od cyklu procesora. Działania na pamięci możemy przyspieszyć na kilka sposobów:


  • użycie lepszej technologii wykonania pamięci

  • użycie blokowej struktury modułów pamięci, umożliwiającej współbieżne wykonanie cykli pamięci (skraca czas selekcji) – przeplot pamięci

  • zwiększenie liczby rejestrów (Nie można jednak dodawać ich zbyt dużo - nie opłaca się – utrudnione jest adresowanie rejestrów i wydłuża się czas dekodowania rozkazu. Poza tym w rejestrach nie umieścimy przecież programu do wykonania)

  • użycie pamięci podręcznej (cache memory) zawierającej jedynie kopie danych potrzebnych do wykonania bieżącej części programu. Czas dostępu do tej pamięci jest porównywalny z dostępem do rejestrów procesora.

Drugim czynnikiem znacząco wpływającą na czas wykonania programu jest organizacja przetwarzania. W maszynach ściśle sekwencyjnych każdy etap wykonania programu wykonywany jest jeden po drugim FDEW (fetch,decode...).

Jednym ze sposób poprawienia wydajności jest oddzielenie od siebie jednostki wykonującej rozkazy od jednostki je pobierającej (jednostka magistrali) i zastosowanie bufora kolejki rozkazów.

Odseparowanie układów wykonujących różne etapy kolejnych rozkazów umożliwia ich współbieżne wykonanie w trybie potokowym. Np. w tym samym momencie można pobierać następny kod rozkazu, dekodować aktualny, wykonywać poprzedni..

Niestety, wydajność potoku spada skutkiem występowania nieuniknionych konfliktów przetwarzania:


  • konflikt sterowania – zaburzenie wykonywanej sekwencji poprzez rozkaz rozgałęzienia – problem rozwiązuje tzw. prognoza rozgałęzień realizowana na podstawie rozpoznania rozkazu rozgałęzienia.

  • konflikt danych – jednoczesne użycie tej samej danej

  • konflikt zasobu – jednoczesne żądanie przez układy wykonawcze dostępu do pamięci (np. równocześnie chce pobrać następny rozkaz i zapisać wynik). By wyeliminować konflikty dostępu do pamięci wewnętrzną pamięć można rozdzielić na pamięć programu (stąd pobiera rozkazy) i danych (tutaj wrzuca wyniki).

Przetwarzanie superpotokowe – dodatkowe podzielenie etapów wykonywania rozkazu na podetapy (np. etap wykonania na 2 części), umożliwia skrócenie cyklu, a to z kolei pozwala na wzrost szybkości przetwarzania. Głębokość potoku nie może być jednak zbyt duża, bo podział etapu wymaga zwiększenia liczby buforów separujących i spowalnia cały proces.

Przetwarzanie superskalarne (skalowane) – wzrost wydajności uzyskany jest poprzez użycie większej ilości jednostek wykonawczych (tzn. równocześnie można wykonywać np. dwie fazy execution), pod warunkiem, że między wykonywanymi rozkazami nie występuje konflikt danych. Innym sposobem jest równoczesne użycie specjalizowanych jednostek np. jednostki stało- i zmiennoprzecinkowej). [rys.2.10]
1.4 Ewolucja architektury komputerów.
CISC (complex instruction set computer) – duża liczba rozkazów, w tym te bardzo skomplikowane, złożone tryby adresowania, mały plik rejestrowy (mało rejestrów). Zauważono, że najbardziej złożone rozkazy (i tryby adresowania) używane są najrzadziej. Poza tym duża ilość rozkazów zwalnia proces ich dekodowania i wykonywania.

RISC (reduced instruction set computer) - mała liczba rozkazów, krótszy czas dekodowania, więcej rejestrów (rzadsza komunikacja za pamięcią). Obecnie istotą architektury RISC jest rozsądne projektowania listy rozkazów (jednolita struktura kodów rozkazów, łatwość dekodowania itd.).



2. ARCHITEKTURA LISTY ROZKAZÓW.
Architektura listy rozkazów jest najniższą warstwą abstrakcyjnego opisu komputera.
2.1 Architektura procesora.

Zasadniczymi elementami funkcjonalnymi architektury komputera są [rys.3.1]:



  • procesor – zawierający jednostkę sterującą CU, jednostkę wykonawczą EU oraz jednostkę adresową MU

  • pamięć – przechowująca dane

  • magistrala – łącząca procesor z pamięcią


Jednostka sterująca - zawiera:

  • rejestr rozkazów IR – służy do przechowywania kodu rozkazu pobranego z pamięci operacyjnej

  • rejestr stanu SR – pamięta bieżący stan procesora.

W układzie dekodera, stosownie do treść pobranego kodu i bieżącego stanu procesora wytwarzane są sygnały sterujące działanie procesora.
Jednostka wykonawcza – tworzy ją jednostka arytmetyczno logiczna ALU, bufor pamięci MBR i plik rejestrów roboczych R. Jednostka wykonawcza musi posiadać co najmniej jeden rejestr roboczy (do tymczasowego przechowywania argumentów). Informacja o poprawności wyniku umieszczana jest w rejestrze warunków CR. ALU jest zwykle rozdzielona na jednostkę stałoprzecinkową (operacje logiczne i na liczbach całkowitych) i jednostkę zmiennoprzecinkową . Korzystają one zwykle z osobnych plików rejestrowych.
Jednostka adresowa – jej zasadniczą częścią jest układ wytwarzania adresu MAG (memory addres generator). Zawiera on plik rejestrów adresowych MAR , a wśród nich SP – wskaźnik stosu.
Architektury ALU i procesora [rys.3.2]:

  1. akumulatorowa AC – argument i wynik operacji jest umieszczany w tym samym rejestrze (czyli normalnie w AX – akumulatorze). Drugi argument jest odczytywany z pamięci i umieszczany jest w rejestrze buforowym MBR.

Szczególny rodzaj to architektura stosowa – argumenty czytane są ze stosu (ściągane), a wynik wpisywany jest w miejsce wskazywane przez SP (po ściągnięciu argumentów).Taką architekturę mają koprocesory numeryczne INTEL 80x87 i FPU INTEL 80486+.

  1. Rejestr – pamięć R/M. – przynajmniej jeden argument podawany jest z rejestru. Drugi argument podawany jest również z rejestru lub pamięci, tam też umieszczony zostaje wynik działania (miejsce drugiego argumentu pełni rolę akumulatora).

  2. Uniwersalna R+M – argumenty i wynik może znajdować się zarówno w rejestrze jak i w pamięci. Konieczne jest tu użycie kilku rejestrów MBR buforujących pamięć.

  3. Rejestrowa L/S – wszystkie argumenty umieszczone w rejestrach ogólnego przeznaczenia. Wyjątkiem jest operacja kopiowania zawartości rejestru do pamięci, lub pamięci do rejestru (wtedy jednym z argumentów musi być pamięć).

Inaczej wygląda schemat przetwarzania w procesorze potokowym [rys.3.4]

Mamy tutaj z separowanymi stanowiskami przetwarzania: stanowisko pobierania kodu, dekodowania i dostępu do rejestrów, wykonania, przekazywania wyniku. Poza tym mamy już rozdzielenie pamięci podręcznej na pamięć kodu i danych.

W pierwszym etapie, na podstawie obliczonej wartości licznika rozkazów, z bufora kodu IM pobierany jest rozkaz. Następnie bieżąca wartość PC oraz kod rozkazu zostają zatrzaśnięte w buforze separującym. W drugim etapie, kod wpisany do rejestru rozkazów IR zostaje zdekodowany, zostaje odtworzony pełny kod i wpisany do kolejnego bufora separującego. W etapie wykonania zostaje uruchomiona jednostka arytmetyczno-logiczna lub sumator adresów- wynik działania zostaje zapisany w kolejnym buforze separującym. W ostatnim etapie wynik zostaje zapisany do pamięci danych DM lub do odpowiednich rejestrów. W dowolnej chwili w każdym stanowisku może być przetwarzany inny rozkaz, każdy w innym etapie zaawansowania.


2.2 Lista rozkazów.
Specyfikacja każdego rozkazu zawiera:

  • składnia – formalna postać zapisu działania ( mov ax,bx)

  • funkcja – opis realizowanej funkcji w notacji symbolicznej

wynik argument1 [OPERACJA argument2] np. al. (al.)+(dx)

  • cechy – rozmiar i format argumentów. Np. Motorola korzysta z zapisu

MNEMONIK[.rozmiar] [źródło] [cel] np. inc.b (a6,1) – zwiększa liczbę w bajcie pamięci o adresie (a6+1). Opis funkcji to [(a6+1)][(a6+1)]+1. Instrukcje procesora klasyfikuje się wg liczby argumentów:

      • zeroadresowe – do sterowania działaniem komputera (bezargumentowe), lub po prostu argumentami są domniemane rejestru procesora (np. stosb itp.)

      • jednoadresowe – używany jest tylko jeden argument lub pozostałe są domniemane (inc AX, MUL BX)

      • półtoraadresowe – jeden z argumentów musi być umieszczony w rejestrze procesora, wynik zaś jest zapisywany w lokacji zajmowanej przez argument

      • Wieloadresowe – wiele argumentów (np. operacje arytmetyczne)


- opis funkcjonalny – słowny opis instrukcji np. dodanie do półsłowa o adresie (bx+si) w segmencie es liczby z rejestru dx. (add es:[bx+si],dx).)

  • kody warunków – co zmienia w rejestrze stanów.

  • format kodu – wykaz i opis pól słowa kodu maszynowego. Poszczególne pola identyfikują rodzaj operacji i wszystkie jej argumenty. Argumenty umieszczone w rejestrach procesora są identyfikowane przez wewnętrzny kod rejestru. Identyfikacja argumentów umieszczonych w pamięci następuje przez wskazanie trybu adresowania (sposobu wyliczenia adresu argumentu). Argumenty domniemane (np. akumulator) są identyfikowane kontekstowo. Argumenty będące danymi podawanymi bezpośrednio stanowią odrębną cześć kodu rozkazu. Gdy możliwe jest użycie operandów różnego rozmiaru to kod operacji musi zawierać również identyfikator rozmiaru argumentów.

W architekturze rejestrowej L/S (RISC) pełny kodu rozkazu ma rozmiar słowa maszynowego (32-bity). Przez to operandy mają bardzo ograniczony zakres. W znaczący sposób ogranicza to rozmiar listy rozkazów i tryby adresowania. Zaletą jest wspólny rozmiar kodu dla wszystkich rozkazów co znacznie przyspiesza proces dekodowania rozkazu. [rys. 3.5]

W architekturze akumulatorowej, rejestr-pamięć i uniwersalnej mamy już różne rozmiary kodów (bo argumenty z pamięci i rejestrów, skomplikowane tryby adresowania) (CISC). Różnorodność rozkazów procesorów CISC wpłynęła na niejednolitość w strukturze kodów rozkazów (chodzi nie tylko o różną długość rozkazów, ale także strukturę części służącej do identyfikacji rodzaju operacji).

W architekturze Intel 80x86 jednostką informacji jest bajt (pozostałość po 8085). Pełny kod instrukcjo realizowanej przez jednostkę stałoprzecinkową 80x86 może zawierać od 1 do 15 bajtów (* dopiero od 80386):


  • przedrostek blokady magistrali lock

  • przedrostek* zmiany domniemanego rozmiaru adresu

  • przedrostek* zmiany domniemanego rozmiaru operandu

  • przedrostek zmiany domniemanego segmentu

  • przedrostek powtórzenia rep dla operacji na łańcuchach

  • kod rozkazu

  • rozszerzenie kodu

  • bajt trybu adresowania AMB (addressing mode byte)

  • bajt* rozszerzenia adresu SIB (scale-index-base)

  • 1,2, lub 4* bajty przemieszczenia

  • 1,2, lub 4* bajty argumentu bezpośredniego

W architekturze Motorola 680x0 pełny kod rozkazu zawiera od 1 do 8 półsłów 16 bitowych w tym:

  • właściwy kod rozkazu

  • rozszerzenie kodu opisujące tryb adresowania

  • 1 lub 2 półsłowa przemieszczenia bazy

  • 1 lub 2 półsłowa przemieszczenia zewnętrznego

  • 1 lub 2 półsłowa argumentu bezpośredniego.


2.3 Adresowanie danych.
2.3.1 Indeksowania danych.

W architekturze klasycznej pamięć jest uporządkowanym zbiorem komórek, każda komórka zawiera jednostkę informacji zwaną słowem. Informacje, których rozmiar przekracza pojemność słowa, musza być umieszczone w kilku komórkach. Występuje wtedy problem, którą część zapisać jako pierwszą (czy bardziej czy mniej znaczącą). Stosowane są dwie konwencje.

- Big Endian - (BE) – ważniejszy niższy, końcowy wyższy - słowo (bit) zawierające bardziej znaczącą część informacji ma niższy adres. Czyli po prostu zapisujemy do pamięci po kolei idąc od lewej strony. Np. gdy mamy liczbę 4562 to najpierw zapiszemy 45 (niższy adres), a dopiero potem 62 (wyższy adres).(POWERPC)
- Little Endian – (LE)ważniejszy wyższy, końcowy wyższy – słowo (bit) zawierające mniej znaczącą cześć informacji ma niższy adres. Czyli tak jak normalnie w procesorach Intela – zaczynamy zapisywać do pamięci od części najmniej znaczącej (od prawej) i to ona ma najniższy adres, a część najbardziej znacząca ma adres najwyższy. Np. 4562, 62 –zapisana jako pierwsza, niższy adres.

W architekturze Motorola 680x0 numerowanie bajtów jest zgodne z BE, a numerowanie bitów w konwencji LE.


2.3.2 Rozdzielczość adresowania.

Rozdzielczość adresowania wpływa na konstrukcję kompilatora. Jest to po prostu rozmiar jednostki informacji (słowa). Możliwe jest również (poprzez specjalne rozkazy) działanie na pojedynczych bitach – uzyskujemy wówczas rozdzielczość absolutną.

Ponieważ zasadniczą jednostką jest jednak słowo muszą mu „podlegać” wszystkie mechanizmy wewnętrzne – np. dane systemowe są tworzone w formacie zgodnym z rozmiarem słowa maszynowego, szerokość magistrali danych procesora powinna umożliwiać przesłanie co najmniej jednego słowa maszynowego w jednym cyklu pamięci. W momencie gdy rozmiar magistrali danych umożliwia jednoczesne przesłanie kilku jednostek danych (mniejszych od rozmiaru słowa – np. możemy adresować po bajcie, a słowo jest 2-bajtowe ), pojawia się problem wpasowania. Aby go uniknąć należy przestrzegać prostej zasady – jeśli słowo obejmuje dwie komórki, to adres słowa powinien być parzysty, jeśli cztery to powinien być podzielny przez 4. Tylko takie wpasowanie umożliwia dostęp do danych w jednym cyklu pamięci i nie spowalnia wykonywanego programu.



  1   2   3


©operacji.org 2017
wyślij wiadomość

    Strona główna