CPU - wstęp
Marcin Kubiak mkubiak@teb.pl
Liczba tranzystorów w układzie –
firma Intel
24 000 000
Pentium III
1999
42 000 000
Pentium 4
2000
7 500 000
Pentium II
1997
3 100 000
Pentium
1993
1 185 000
80486
1989
29000
8086
1978
6000
8080
1974
2300
4004
1970
LICZBA TRANZYSTORÓW
PROCESOR
ROK
Częstotliwości pracy i
unowocześnienia
Dodatkowe rozkazy MMX
Rozkazy SSE
450
Pentium II
Dodatkowe rozkazy SSE
450-800
Pentium III
Operacje RISC
200
Pentium Pro
Operacje MMX
266
Pentium MMX
Technologia HT
Ponad 3000
Pentium IV
Wew. pamięć cache
44
80486
32 bitowy
12-16
80386
Tryb chroniony (24b)
6-12
80286
Zintegrowane układy
sterujące
6-8
80186
16 bitowy
5-10
8086
8 bitowy
0,2
8008
4 bitowy
0,1
4004
Nowość
Zegar (MHz)
Procesor
Architektura
Architektura = architektura listy rozkazów
Architektura zapewnia kompatybilność lub
ją uniemożliwia.
Systemy kompatybilne to takie, między
którymi możemy przenosić
oprogramowanie bez przekompilowania
kodu.
Koncepcje - CISC
CISC –
Complex Instruction Set Computing
Cechy architektury CISC:
-Duży repertuar rozkazów,
-Różnorodność sposobów adresowania argumentów,
-Wyrafinowane operacje,
-Złożone typy danych.
CISC – przykłady rozkazów
Asembler VAX
4
Obliczanie CRC (bajtu
kontrolnego) w dowolnym
łańcuchu bitów wg zadanego
wielomianu
CRC
6
Tłumaczenie dowolnego
łańcucha znaków wg
zadanego kodu z
wypełnianiem wolnych
bajtów łańcuch docelowego
MOVTC
6
Dodawanie licz dziesiętnych o
zadanych długościach
ADDP6
Liczba parametrów rozkazu
Funkcja
Mnemonik
CISC - podsumowanie
Czasami pojedyncze rozkazy CISC na
maszynach o innej architekturze były
wykonywane przez skomplikowane
programy.
Architektura CISC osiągnęła swoje
apogeum w latach 80.
Przykłady:
- VAX,
-
x86 (wyjątek do dzisiaj, ale za to jaki)
Koncepcje - RISC
RISC – Reduced Instruction Set Computing
CEL – szybkie
wykonywanie
rozkazów
ŚRODKI –
sterowanie
potokowe, pamięć
CACHE, dużo
rejestrów
EFEKT –
prymitywne rozkazy,
stała długość słowa
rozkazowego
KOSZTY –
skomplikowany
kompilator
RISC - podsumowanie
SPARC
MIPS32,
MIPS64,
PowerPC,
Power4
W każdym procesorze można
wyróżnić następujące bloki:
-
Jednostkę arytmetyczno-logiczną
(ALA),
-
Jednostkę rozkazową (IU),
-
Jednostkę wykonawczą (EU),
-
Układ adresujący (AU),
-
Układ sterowania magistralami (BIU).
Podstawowe bloki procesora
ALU
Jednostka arytmetyczno logiczna jest
odpowiedzialna za bezpośrednią
manipulację danymi: dodawanie,
odejmowanie, porównywanie.
AU
Układ adresujący ma za zadanie
wytworzenie na magistrali adresowej
adresu do danych zapisanych w
pamięci
Magistrale
Łączność z pozostałymi elementami
komputera procesor uzyskuje przez
magistrale: adresową, danych i sterującą.
Przez magistralę danych pobierane są dane
do przetworzenia.
Przez magistralę danych pobierane są
rozkazy do wykonania i umieszczane są w
kolejce rozkazów (prefetch queue).
Magistrala sterująca zapewnia zapewnia
zestaw niezbędnych sygnałów
informacyjnych i sterujących otoczeniem
procesora.
EU
Układ wykonawczy dokonuje interpretacji
rozkazów pobieranych z kolejki rozkazów.
Rozkazy mogą dotyczyć zarówno
manipulacji na zawartości rejestrów
wewnętrznych, jak i też komórek pamięci
operacyjnej.
W zależności od rodzaju rozkazu zostają
wydane odpowiednie polecenia do ALU, AU i
magistral.
Schemat blokowy procesora
BIU
AU
PREFETCH
MMU
IU
ROM
CU
ALU
EU
FPU
ADERS
DANE
KONTROLA
I STEROWANIE
DANE
KOD PROGRAMU
LEGENDA
ALU – jednostka arytmetyczno-logiczna (Integer),
IU - jednostka rozkazowa, dekoder operacji,
ROM – pamięć stała przechowująca kody rozkazowe i
odpowiadające im operacje
EU - jednostka wykonawcza (EU),
CU – jednostka kontrolna sterująca ALU
AU - układ adresujący,
BIU - układ sterowania magistralami,
FPU – jednostka zmiennoprzecinkowa,
MMU – jednostka zarządzania pamięcią
REJESTRY
Szybkie komórki wewnętrznej pamięci procesora.
CF – flaga
przeniesienia lub
pożyczki, PF – flaga
parzystości, ZF – flaga
zera, IF- flaga
zezwolenia na
przerwanie i inne.
FLAGS
Statusowe i sterujące
Przechowywanie
adresów segmentów
kodu do wykonania
CS, DS, SS, ES oraz
FS i GS
Segmentowe
Tymczasowe schowki
na dane. AX –
operacje aryt. I
logiczne, BX –
adresowanie pamięci,
CX – licznik w pętlach,
DX – komunikacja z
portami
AX, BX, CX, DX, SI,
DI, SP, BP
Ogólnego
przeznaczenia
Zadania
Nazwy
Typ
Zadanie
1. Sprawdź zastosowanie rejestrów:
-
CS,
-
IP,
-
CF,
-
PF,
-
ZF,
-
SF,
-
OF,
-
DF
2. Sprawdź typ procesora w Twoim komputerze.
3. Znajdź program firmowy Intela i AMD rozpoznający typ
procesora i opisujący jego funkcje i rozszerzenia
(www.cpuid.org).
4. Jak sprawdzić w systemie Linux dane dotyczące wykrytego
procesora?
Maszyny wirtualne
APLIKACJE
JĘZYKI WYSOKIEGO POZIOMU
ASEMBLER
SYSTEM OPERACYJNY
SPRZĘT (CPU)
Model von Neumanna
M
ALU
CC
INPUT
OUTPUT
OTOCZENIE
M- memory, ALU-arithmetic-logic unit, CC-central control
Cykl rozkazowy
Pobranie rozkazu
Wykonanie rozkazu
1. Adres rozkazu jest przesyłany do pamieci,
2. Uruchomiona jest operacja odczytu (opóżnienie pamięci),
3. Słowo rozkazowe jest pobierane do rejestrów procesora,
4. Wykonanie rozkazu (czasami pobranie dodatkowych argumentów, czasami
zapisanie wyników).
Dodatkowe komunikowanie się z pamięcią powoduje opóźnienia. Aby je
zmniejszyć stosuje się ingerencje na poziomie architektury np. pamięć CACHE
lub umieszczanie wszystkich argumentów w rejestrach procesora (RISC).
Modele pamięci operacyjnej
PAMIĘĆ
PROCESOR
CENTRALNY
PAMIĘĆ
DANYCH
PAMIĘĆ
PROGRAMU
PROCESOR
CENTRALNY
DANE I ROZKAZY
DANE
ROZKAZY
Architektura Princeton
Architektura Harvard
Dzisiaj w pamięci operacyjnej dane i rozkazy zajmują ta samą przestrzeń
fizyczną.
Fizyczne oddzielenie danych i rozkazów występuje w pamięci CACHE.
Kod maszynowy
Mikroprocesor wykonując program interpretuje -
tłumaczy rozkazy zapisane w tzw. kodzie
maszynowym zwanym kodem binarnym.
Przykład kodu maszynowego zapisanego w systemie
szesnastkowym:
70 01 00 00 A0 F1 11 00 F5 57 01 01 11 11 00 11
01 DC 10 F0 1A 3C 58 01 DC 10 F0 1A 3C 58 1A
3C 58 01 DC 10 11 01 DC 10 F0 1A 58 01 DC 10
11 01 DC 58 01 DC 10 11 01 DC 58 01 DC 10 11
Języki programowania
Ze względu na małą czytelność tak zapisanego
programu jak również na pracochłonność w tworzeniu
programu, powstało szereg języków programowania
(Pascal, Fortran, Cobol, C, C++, Java) i systemów
programowania opartych o wymienione języki.
System programowania służy do tłumaczenia
programu na kod maszynowy zgodnie z regułami
języka, który obsługuje. Proces ten nazywa się
kompilacją programu.
Języki programowania dzielimy na:
- niskiego poziomu (np. asembler),
- wysokiego poziomu (np. Turbo Pascal, C/C++, Java,
Fortran, Visual Basic, Algol)
W języku niskiego poziomu większość instrukcji odpowiada
pojedynczym rozkazom procesora. Kod zapisany w takim języku jest
mało efektywny pod względem czasu poświęconego na tworzenie
programu. Jest natomiast najszybciej realizowanym kodem
programu w porównaniu do kodu języków wysokiego poziomu.
Programowanie w języku niskiego poziomu służy do pierwotnego
oprogramowania urządzenia, układu jak również do stworzenia
języków wysokiego poziomu. Języki wysokiego poziomu są bardziej
efektywne w tworzeniu programu gdyż używają instrukcji złożonych,
procedur, funkcji (zgrupowanych w bibliotekach) zastępujących kilka
czy nawet kilkanaście instrukcji języka niskiego poziomu.
Przykłady programów w różnych językach
programowania wraz z zastosowaniem tych języków.
Asembler – programowanie części systemów, które
mają wykonywać się szybko np. jądro systemów
operacyjnych, sterowniki urządzeń
proc main, argc, argv
enter
lea eax, [argc]
lea ebx, [argv]
ccall gtk_init, eax, ebx
ccall gtk_window_new, GTK_WINDOW_TOPLEVEL
mov [hWindow], eax
ccall gtk_widget_show, [hWindow]
call gtk_main
Przykłady programów w różnych językach
programowania wraz z zastosowaniem tych języków.
C++ - najbardziej uniwersalny język
programowania, kod wynikowy charakteryzuje się
dużą szybkością działania.
#include <iostream.h>
void main()
{
cout << "Podaj Liczbe: ";
int liczba;
cin >> liczba;
cout << endl << "Podales: " << liczba <<
endl;
}
Przykłady programów w różnych językach
programowania wraz z zastosowaniem tych języków.
Turbo Pascal – łatwy w składni i budowie język
przeznaczony początkowo do nauki programowania. Ze
względu na dużą popularność Pascala powstały
kompilatory czyniące go pełnoprawnym językiem
programowania.
Program test;
Var
a, b : Word;
c : LongInt;
Begin
ReadLn(a, b);
c:= a * b;
c:= c – 1;
c := c * a;
WriteLn(c);
End.
Przykłady programów w różnych językach
programowania wraz z zastosowaniem tych języków.
Windows Scripting Host – język służący do automatyzacji
zadań i zarządzania systemem Windows. Potrafi współdziałać z
elementami systemu takimi jak: rejestr, zmienne systemowe,
obiekty OLE i COM.
function Include(jsFile)
{
fso = new ActiveXObject
("Scripting.FileSystemObject");
f = fso.OpenTextFile(jsFile);
s = f.ReadAll();
f.Close();
return s;
}
Przykłady programów w różnych językach
programowania wraz z zastosowaniem tych języków.
Bash – język do automatyzacji zadań i zarządzania
systemem Linux.
#!/bin/bash
echo "Wpisz tekst:"
odpowiedz="napis"
read
echo "$odpowiedz"
Przykłady programów w różnych językach
programowania wraz z zastosowaniem tych języków.
Java – język programowania aplikacji niezależnych od systemu
operacyjnego lub apletów uruchamianych przez strony WWW.
import java.io.*;
public
class Main
{
public static void main(String args[])
{
String line= "";
FileOutputStream fout=null;
File file = new File("test.txt");
try
{
fout = new FileOutputStream(file);
}
catch(FileNotFoundException e)
{
System.out.println("Brak pliku");
System.exit(-1);
}
DataOutputStream out = new DataOutputStream(fout);
BufferedReader inbr = new BufferedReader( new
InputStreamReader(System.in));
try
{
while(!line.equals("quit"))
{
line=inbr.readLine();
fout.writeBytes(line +'\n');
}
}
catch(IOException e)
{
System.out.println("Read/Write error");
}
}
}
Kod wynikowy
System programowania do tłumaczenia programu na kod
maszynowy używa specjalnego programu zwanego
translatorem.
Translatory możemy podzielić na:
interpretery, tłumaczą kolejne linie programu z zawartymi tam
instrukcjami programu i kierują je do wykonania mikroprocesorowi.
Program zapisywany jest przez programistę w pliku tekstowym który
bezpośrednio czyta interpreter. Przykładowymi językami, których kody
są interpretowane są: Windows Scripting Host, Bash (Linux), Java
Script, Pearl (Linux), PHP.
kompilatory, plik tekstowy ze źródłem programu jest tłumaczony na
postać maszynową i działa w środowisku systemu operacyjnego bez
pomocy innych programów np. interpretera. Przykładowymi językami,
których kody są interpretowane są: C, C++, Turbo Pascal, Java.
Tworzenie programu wykonywalnego
Kod źródłowy.
Kod wynikowy
Disassemblacja (dezasemblacja).
Program skompilowany nie może być przywrócony do wersji
w formie kodu źródłowego w języku programowania
wysokiego poziomu (Pascal, C, C++). Dlatego należy dbać
o zapisywanie plików z kodem źródłowy (pliki „pas”).
Jednak program skompilowany można poddać transformacji
do kodu języka niskiego poziomu (asemblera). Do
wykonania disassemblacji potrzebny jest program
dissassemblera.
Oto kilka odnośników do stron internetowych, z których
można pobrać dissasembler:
http://www.technologismiki.com/en/
- Hackman
disassembler dla systemu Windows,
http://www.datarescue.com/index.htm - IDA disassembler
dla systemu Linux.
Przykład kodu asemblera otrzymanego przez
disassemblację.
Selftest
1.
Który z języków programowania jest językiem
niskiego poziomu?
a) Turbo Pascal
b) C++
c) Java
d) Fortran
e) Visual Basic
f) Asembler
g) Algol
Selftest
2. System programowania do tłumaczenia programu na
kod maszynowy używa specjalnego programu
zwanego:
a) translatorem
b) linkerem
c) interpreterem
d) generatorem
Selftest
3. W systemie Windows program po skompilowaniu
może otrzymać rozszerzenie:
a) pst
b) exe
c) pas
d) css
e) com
f)
htm
Selftest
4. Który z poniższych plików może być programem
samowykonującym się w systemie Windows?
a) test.txt,
b) test.exe.bmp,
c) test.vbs,
d) test.com
Selftest
5. Który z poniższych plików może byś programem
samowykonyjącym się w systemie Linux?
a) test.exe,
b) test.vbs,
c) test.sh,
d) test.bmp,
e) wszystkie powyższe.
Selftest
6. Czy programy pisane w Pascalu można kompilować
tylko w środowisku zintegrowanym?
a) tak,
b) nie.
Selftest
7. Jaki kod programu uzyskamy po dezasemblacji
programu wykonywalnego?
a) w języku Pascal,
b) w języku C,
c) w języku Java,
d) w języku Asembler.
Selftest
8. Kto lub co może sprawdzić logiczną poprawności kodu
źródłowego programu?
a) programista,
b) kompilator,
c) linker,
d) dissasembler.
Selftest
9. Zbiór funkcji skompilowany nie jako plik wykonywalny
ale jako biblioteka z rozszerzeniem „tpu” w Pascalu
nosi nazwę:
a) modułu,
b) biblioteki,
c) kolekcji,
d) algorytmu.
Selftest
10. Załóżmy, że w katalogu bieżącym występują pliki
„test.bat”, „test.com” i „test.exe”. Który plik zostanie
wykonany jeżeli wydamy w tym katalogu polecenie
„test” (nie podajemy rozszerzenia)?
a) test.bat,
b) test.com,
c) test.exe.
Selftest
Procesor 80386 jest procesorem?
a)
Firmy Intel,
b)
RISC,
c)
CISC,
d)
Firmy AMD.
Selftest
W pamięci Cache procesora:
a)
Przechowywane są dane do
przetworzenia,
b)
Przechowywane są adresy pamięci,
c)
Przechowywane są rozkazy dla
procesora,
Selftest
Koprocesor to:
a)
Układ wspomagający jednostkę centralną w
obliczeniach arytmetycznych,
b)
Program sprawdzający typ procesora,
c)
Procesor typu RISC,
d)
Procesor bez pamięci CACHE.
Selftest
Szerokość magistrali adresowej mówi
o:
a)
Ilości wolnej pamięci,
b)
Możliwości obsługi różnych typów pamieci,
c)
Potencjalnej możliwości adresowania
pamięci o określonej pojemności
Zadania
Sprawdź angileskie rozwinięcia skrótów:
ALU,IU,EU,AU,BIU,MMU,FPU,ROM.
Skompiluj i uruchom podane przykłady
programów (napisanych w różnych
językach).
Odczytaj edytorem binarnym zawartość
pliku tekstowego: boot.ini i pliku binarnego
ntldr oraz taskmgr.exe