Počítačové systémy (WIP)
[Edit]C/C++
- procedurální programovací jazyk, strukturovaný
- imperativní programování - výpočet pomocí posloupnosti příkazů
- statický typový systém
- efektivně se mapuje na instrukce CPU
- OS, HPC, embedded systems
- case sensitive, ignoruje whitespacy
- start -
main()
-
#include
- nakopíruje se tam - Proměnná
- deklarace inicializace použití
- Scope - viditelnost - lokální/globální
- Storage -
auto
,extern
,static
,register
static
- globální - není přístupná z jiných zdrojáků
- lokální - životnost přes všechna volání funkce
- Pole
- souvislý úsek paměti, row-major order
- Struktura
- Members
- inner+outer padding - adresa musí být násobek velikosti proměnné
- Pointer
- proměnná obsahující adresy
- Reference
- fixed pointer
- Třída
- má stav a nabízí funkce pro práci se stavem
- zapouzdření
Architektury PC
Von Neumann architektura
- 1 sběrnice na vše
Harwardská architektura
- v mikročipech
- má více adresových prostorů
Sandy bridge architektura
- reálná architektura
- paměti přímo připojené k CPU (pam. řadiče)
- south bridge - periferie
- sběrnice většinou P2P
- sériové - při paralelních byly přeslechy
Architektura CPU
- HW - jak je vyroben a postaven
- ISA - jak se CPU logicky chová (x86, x64)
- CPU = jednoduchý stroj, vykonává instrukce
Třídy instrukcí
LOAD
- načteníSTORE
- uloženíMOVE
- přesunutí- aritmetické
- logické
JUMP
- skoky- podmíněné/nepodmíněné
- přímé =
JUMP[adr]
- nepřímé =
JUMP var
- relativní =
JUMP
o instrukcí
CALL
,RETURN
Pojmenování registrů
- přímé (nejčastější)
- zásobník
- aliasing - překrývání
Registry
- Obecné
- celočíselné - na aritmetiku
- adresové - na nepřímé adresování
- branch (skokové) - kam skočit
- Floating point
- Flag (registry příznaků)
- boolovské hodnoty, flag je
1
bitový - například výsledek porovnání
- boolovské hodnoty, flag je
- Predikátové
- neobvyklé, každá instrukce má u sebe zakódovaný predikátový registr (1bit)
- určuje, zda se instrukce provádí nebo neprovádí podle nastavení predikátového registru (dobré místo skoků)
- Aplikační
- dostupné z aplikačního kódu
- specificky určené pro pár instrukcí
- Systémové
- nastavení vlastností chování CPU (později doplněno u OS)
- Vektorové
- stejné operace na více datech
MIPS
- 32 registrů -
r0
ažr31
r0
= 0- nemá flag registry
- nemá zásobník
Instrukce
- Aritmetické:
$rd
,$rs
,$rt
- Logické:
AND
,OR
,XOR
,NOR
- Shifty:
sll $rd okolik
,slr
- Přístup do paměti:
load
/store
word/byte - Podmíněné skoky
- Porovnávání