background image

CPU - wstęp

Marcin Kubiak mkubiak@teb.pl

background image

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

background image

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

background image

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.

background image

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.

background image

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

background image

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)

background image

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

background image

RISC - podsumowanie



SPARC



MIPS32,



MIPS64,



PowerPC,



Power4

background image



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

background image

ALU



Jednostka arytmetyczno logiczna jest 
odpowiedzialna za bezpośrednią
manipulację danymi: dodawanie, 
odejmowanie, porównywanie.

background image

AU



Układ adresujący ma za zadanie 
wytworzenie na magistrali adresowej 
adresu do danych zapisanych w 
pamięci

background image

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.

background image

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.

background image

Schemat blokowy procesora

BIU

AU

PREFETCH

MMU

IU

ROM

CU

ALU

EU

FPU

ADERS

DANE

KONTROLA

I STEROWANIE

DANE

KOD PROGRAMU

background image

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ą

background image

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

background image

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?

background image

Maszyny wirtualne

APLIKACJE

JĘZYKI WYSOKIEGO POZIOMU

ASEMBLER

SYSTEM OPERACYJNY

SPRZĘT (CPU)

background image

Model von Neumanna

M

ALU

CC

INPUT

OUTPUT

OTOCZENIE

M- memory, ALU-arithmetic-logic unit, CC-central control

background image

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).

background image

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.

background image

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

background image

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.

background image

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.

background image

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

background image

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;
}

background image

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.

background image

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; 

background image

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"

background image

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");

}
}

background image

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.

background image

Tworzenie programu wykonywalnego

background image

Kod źródłowy. 

background image

Kod wynikowy

background image

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. 

background image

Przykład kodu asemblera otrzymanego przez 
disassemblację.

background image

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

background image

Selftest

2. System programowania do tłumaczenia programu na 

kod maszynowy używa specjalnego programu 
zwanego:

a) translatorem
b) linkerem
c) interpreterem
d) generatorem

background image

Selftest

3. W systemie Windows program po skompilowaniu 

może otrzymać rozszerzenie:

a) pst
b) exe
c) pas
d) css
e) com
f)

htm

background image

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

background image

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.

background image

Selftest

6. Czy programy pisane w Pascalu można kompilować

tylko w środowisku zintegrowanym?

a) tak,
b) nie.

background image

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.

background image

Selftest

8. Kto lub co może sprawdzić logiczną poprawności kodu 

źródłowego programu?

a) programista,
b) kompilator,
c) linker,
d) dissasembler.

background image

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.

background image

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.

background image

Selftest



Procesor 80386 jest procesorem?

a)

Firmy Intel,

b)

RISC,

c)

CISC,

d)

Firmy AMD.

background image

Selftest



W pamięci Cache procesora:

a)

Przechowywane są dane do 
przetworzenia,

b)

Przechowywane są adresy pamięci,

c)

Przechowywane są rozkazy dla 
procesora,

background image

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.

background image

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

background image

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