Principy cpypočítačůčů a operačních systémů REPREZENTACE DAT There are only 10 types of people in the world: - those who understand d binary, - and those who don't.
Literatura D.Goldberg: What Every Computer Scientist Should Know About Floating-Point Arithmetic IA-32 Intel Architecture Software Developer s Manual (Vol.1 Basic Architecture) 2
Číselné soustavy Polyadické i= n 1 i= m Číslo A = a z reprezentujeme i i uspořádanou (m+n)ticí koeficientů a i Soustava může mít ítjeden nebo více základů (radix mumber system) V soustavě s jedním základem z jsou hodnoty z i určeny jako z i =z i m=0... celá čísla, m>0... zlomková část 3
Číselné soustavy Nepolyadické římské číslice 1648 MDCXLVIII 2003 MMIII 9 IX, VIIII pro počítání nevhodné soustava zbytkových tříd (residue number system) definována k-tice různých základů prvočísel číslo vyjádřeno k-ticí zbytků po dělení příslušným základem Příklad: základy 2,3,11: číslo devět zapsáno jako 109 jednoznačné pouze pro čísla menší než součin základů 4
Přepis celého čísla do soustavy s jiným základem Zápis čísla A v soustavě o základu z: A= a n-1 z n-1 + a n-2 z n-2 + + a 1 z 1 + a 0 z 0 = (a z n-2 + a z n-3 n-1 n-2 + a 1 )z + a 0 = a 0 + z (a 1 + z (a 2 + + z(a n-2 + za n-1 ) )) V soustavě o základu z bude A zapsáno: A= b 0 + z (b 1 + z (b 2 + + z (b k-2 + z b k-1 ) )) A= z A/z + A mod z 5
Převodní algoritmus celé části Číslo d v soustavě o základu z Použít q i jako nové číslo d V soustavě o základu z dělit d základem z' nové soustavy q i... výsledek r i... zbytek Použít r i jako koeficient b i NE q i == 0? Konec ANO 6
Příklady 151 10 do binární soustavy: 134 9 do sedmičkové soustavy: 151 : 2 = 75 1 134 : 7 = 17 0 75 : 2 = 37 1 17 : 7 = 2 2 37 : 2 = 18 1 2: 7 = 0 2 18 : 2 = 9 0 9 :2= 4 1 134 9 = 220 7 4: 2 = 2 0 2 :2= 1 0 134 : 7 = 17 17 1: 2 = 0 1 54 7 0 --- 151 10 = 10010111 2 54 7 --- 134 7
Převod do desítkové soustavy Koeficienty zápisu čísla o základu z vynásobíme příslušnou mocninou z a sečteme: A: a n-1 a n-2 a 1 a 0 A = a n-1 z n-1 + a n-2 z n-2 + + a 1 z 1 + a 0 z 0 Hornerovo schéma: A = ( (a n-1 z+ a n-2 )z + )z + a 0 8
Převod čísla se zlomkovou částí Hledáme koeficienty pro z i, -m i n-1 Celá část: popsána výše Zlomková část: podobně, ale základem nové soustavy násobíme. 9
Převodní algoritmus zlomkové části Zlomková část d v soustavě o základu z Použít f i jako zlomkovou část d V soustavě o základu z násobit d základem z' nové soustavy q i... celá část f i... zlomková část Použít q i jako koeficient b i NE f i == 0? Konec ANO 10
Příklad 0,25 10 převést do dvojkové soustavy: 0,25 * 2 = 0,50 0 0,50 * 2 = 1,00 1 0,25 10 =0,01 2 11
Příklad 0,3125 10 převést do dvojkové soustavy: 0,3125 * 2 = 0,6250 0 0,6250 * 2 = 1,2500 1 0,2500 * 2 = 0,5000 0 05000*2= 0,5000 1,0000 1 0,3125 10 = 0,0101 2 12
Příklad 0,1 10 převést do dvojkové soustavy: 0,1 * 2 = 0,2 0 0,2 * 2 = 0,4 0 0,4 * 2 = 0,8 0 08 0,8 *2= 16 1,6 1 0,6 * 2 = 1,2 1 0,2 * 2 = 0,4 0 0,1 10 0,0001100110011 2, 10, 2 Postup nemusí být konečný! 13
Příklad 0,678 10 převést do dvojkové soustavy: 0,678* 2 =1,356 1 0,356* 2 =0,712 0 0,712* 2 =1,424 1 0,424* 2 =0,848 0 0,848* 2 =1,696 1 0,696* 2 =1,392 1 0,392* 2 =0,784 0 0784* 0,784 2 =1,568 1 0,678 10 0,10101101 2 14
Často používané soustavy z=2 z=8 z=16 binární počítače snadné převody 15
Typy dat Literály Čísla Instrukce 16
Literály logické hodnoty znaky grafické symboly nečíselná data 17
Logické hodnoty možno reprezentovat jediným bitem x x x x 0 x x x x x x x 1 x x x problémy s adresováním reprezentace celou datovou jednotkou 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0???????? problémy s velikostí 18
Znaky Tisknutelné znaky reprezentace textové informace velká a malá písmena abecedy, číslice diakritika, různé národní abecedy a číslice Řídící í znaky ovládání vzdáleného terminálu CR, LF, FF, Kódování zobrazení znaků/číslic na hodnoty v paměti 19
Kódování příklady EBCDIC 256 závazných znaků abeceda není v jednom bloku ASCII původně pro 7 bitů ~ 128 znaků rozšíření na 8 bitů + národní znaky Unicode standardizovaná reprezentace (ISO 10646-1, 1993) podporuje (téměř) všechny národní abecedy 1 znak kódován posloupností více bajtů 20
EBCDIC 256 závazných znaků 0x00.. 0x3F... speciální (řídící) znaky 0x40.. 0xFF... tisknutelné znaky Mnoho volných pozic Abeceda není v jednom bloku 21
EBCDIC 0 1 2 3 4 5 6 7 0 NUL DLE DS SP & - 1 SOH DC1 SOS / 2 STX DC2 FS SYN 3 ETX TM 4 PF RES BYP PN 5 HT NL LF RS 6 LC BS ETB UC 7 DEL IL ESC EOT 8 CAN 9 EM A SMM CC SM ^! : B VT CU1 CU2 CU3. $, # C FF IFS DC4 < * % @ D CR IGS ENQ NAK ( ) _ ' E SO IRS ACK + ; > = F SI IUS BEL SUB ~? " 22
EBCDIC 8 9 A B C D E F 0 { } \ 1 a j s A J S 0 2 b k t B K T 1 3 c l u C L U 2 4 d m v D M V 3 5 e n w E N W 4 6 f o x F O X 5 7 g p y G P Y 6 8 h q z H Q Z 7 9 i r I R 8 A 9 B C D [ ] E F 23
ASCII 0 1 2 3 4 5 6 7 0 NUL DLE space 0 @ P ` p 1 SOH DC1! 1 A Q a q 2 STX DC2 " 2 B R b r 3 ETX DC3 # 3 C S c s 4 EOT DC4 $ 4 D T d t 5 ENQ NAK % 5 E U e u 6 ACK SYN & 6 F V f v 7 BEL ETB ' 7 G W g w 8 BS CAN ( 8 H X h x 9 HT EM ) 9 I Y i y A LF SUB * : J Z j z B VT ESC + ; K [ k { C FF FS, < L \ l D CR GS - = M ] m } E SO RS. > N? n ~ F SI US /? O _ o DEL 24
ASCII národní rozšíření KOI8-čs PC standard EAST8 ICL KEYBCS2 Cork MacCE PC Latin x (Latin 2) Windows codepage pg (1250) ISO/IEC 8859 (8859-2) 25
Rozšíøení ASCII èasté problémy 26
UNICODE součást normy ISO/IEC 10646-1 (1993) znak reprezentován vícebytovou sekvencí diakritika možnost uživatelských symbolů problém se staršími programy pozor na konkrétní k íimplementaci i 27
UNICODE podpora národních abeced Latin Greek Cyrillic Hb Hebrew Hiragana, Katakana... a množství dalších návrhy rozšíření 28
Grafické symboly reprezentace spolu se znaky jazyky pro popis grafických symbolů 29
Čísla Různé typy číselných hodnot přirozená čísla celá čísla racionální reálná á Různé typy reprezentací řetězce znaků vnitřní reprezentace 30
Zobrazení přirozených čísel I převodem do nativní soustavy počítače a přímým uložením 19 10 0 0 0 1 0 0 1 1 229 10 1 1 1 0 0 1 0 1 31
Zobrazení přirozených čísel II BCD Binary Coded Decimal Převod z desítkového zápisu po cifrách Příklad: 1930 10 0001 1001 0011 0000 Výhody snadné zpracování vstupů/výstupů Problémy aritmetika speciální instrukce neúsporné packed BCD nevyužité části zneužívány pro jiné účely 32
Zobrazení celých čísel Nejčastější zobrazení: se znaménkem (sign and magnitude) s posunutím (biased) dvojkový doplněk (two s complement) 33
Zobrazení se znaménkem (sign g and magnitude) ) absolutní hodnota čísla převedena do binární podoby záznam doplněn o znaménkový bit Problém: dvě reprezentace nuly, složitější operace Příklad: -19 10 1 0 0 1 0 0 1 1 znaménkový bit nejvyšší řád (bit 6) nejnižší řád (bit 0) 34
Zobrazení s posunutím (biased notation, Excess-N) ) k číslu se přičte konstanta reprezentující nulu výsledné nezáporné číslo se zobrazí přímo Problém: složitější aritmetické operace Příklad zobrazení s posunutím o 127: -19 10 0 1 1 0 1 1 0 0 nejvyšší řád (bit 7) nejnižší řád (bit 0) 35
Zobrazení v jedničkovém doplňku kladná čísla: přímo (ones complement) ) záporná čísla: v jedničkovém doplňku inverze bitů přímého záznamu abs. hodnoty Problém: dvě reprezentace nuly Příklad: -19 10 1 1 1 0 1 1 0 0 nejvyšší řád (bit 7) nejnižší řád (bit 0) 36
Zobrazení ve dvojkovém doplňku kladná čísla: přímo (two s complement) ) záporná čísla: ve dvojkovém doplňku inverze bitů přímého záznamu abs. hodnoty, přičtení 1 Příklad: -19 10 1 1 1 1 0 1 0 1 nejvyšší řád (bit 7) nejnižší řád (bit 0) 37
Dvojkový doplněk Mějme číslo A. Jeho doplněk A = A + M = - A + M kde M je modul. Pro dvojkovou soustavu je M=2 n kde n je počet cifer zápisu čísla. 38
Dvojkový doplněk Mějme číslo A. A =-1 Jeho doplněk A = A + M = - A + M kde M je modul. Pro dvojkovou soustavu je M=2 n A = (-1) + 2 n kde n je počet cifer zápisu čísla. pro n=4: 1111 2 Ve dvojkové soustavě: 1. zneguj bity 2. přičti 1 39
Aritmetika ve dvojkovém doplňku -10 10 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 +19 10 ----- -10 +9? 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0-10 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 19 +9! 9 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 40
Konverze délek znaménkové rozšíření ve znaménkovém zobrazení +18 0 0 0 1 0 0 1 0 +18 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 18 1 0 0 1 0 0 1 0-18 -18 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 41
Konverze délek znaménkové rozšíření v doplňkovém kódu +18 0 0 0 1 0 0 1 0 +18 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 18 1 1 1 0 1 1 1 0-18 -18 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 42
Přetečení Problémy omezené délky reprezentace velikost výsledku přesahuje rozsah reprezentace operace A + B A 0, B 0, výsledek < 0 A < 0, B < 0, výsledek 0 operace A B A 0, B<0 0, výsledek k<0 A < 0, B 0, výsledek 0 43
Příklady zobrazení číslo se znaménkem s posunutím jedničkový doplněk dvojkový doplněk +7 0111 1111 0111 0111 +6 0110 1110 0110 0110 +5 0101 1101 0101 0101 +4 0100 1100 0100 0100 +3 0011 1011 0011 0011 +2 0010 1010 0010 0010 +1 0001 1001 0001 0001 +0 0000 1000 0000 0000-0 1000 1000 1111 0000-1 1001 0111 1110 1111-2 1010 0110 1101 1110-3 1011 0101 1100 1101-4 1100 0100 1011 1100-5 1101 0011 1010 1011-6 1110 0010 1001 1010-7 1111 0001 1000 1001-8 --- 0000 --- 1000 44
vícebytové sekvence Problém jak ukládat? Jak přenášet? od nižších řádů od vyšších řádů jinak...? Po jakých částech? D.Cohen: On Holy Wars and a Plea for Peace 45
Ukládání vícebytových sekvencí Big-endian IBM 360/370, PDP-10, Motorola 6800, různé RISC Little-endian VAX, MOS 6502, Intel x86 (Midle-endian ani little, ani big. Used of perverse byte orders such as 3-4-1-2 or 2-1-4-3, ocassionally found din the packed-decimal d lformats of minicomputer manufacturers who shall remain nameless. ) NUXI problem 46
Příklad Uložit číslo 1234ABCD 16, tj. 4 byty Little Endian: adresy: 0 Big Endian: CD 16 AB 16 34 16 12 16 adresy: 0 12 16 34 16 AB 16 CD 16 47
Bi-endian ARM, PowerPC, DEC Alpha, MIPS, PA-RISC, IA64 někdy lze změnit programově (bit v konfiguraci) někdy jen HW (DEC Alpha) df default lbig: MIPS + IRIXPARISC IRIX, PA-RISC, většina ě PPC default little: MIPS + Ultrix, Alpha, IA-64 + Linux 48
Ještě horší problém Portabilita software Přenos dat mezi zařízeními 8/16bitové architektury telekomunikace Lilliput komunikace Blefuscu computing we d rather fight than switch! 49
Zobrazení racionálních čísel Přímo užíváno zřídka např. Fixed-slash, Floating-slash Obvykle emulováno strukturovanými typy 50
Fixed & Floating-slash 51
Fixed & Floating-slash p q = a 0 + a 1 + a 2 1 1 + a 3 1 +... Uložení do 20bit fixed-slash: p = [ a / a1 / a2 / a3 q /...// a 0 n ] 52
Zobrazení reálných čísel Čísla s pevnou řádovou čárkou Zobrazení celých čísel je speciální případ, kdy řádová čárka je zcela vpravo Posunutím řádové čárky směrem vlevo měníme rozsah zobrazovaných čísel a přesnost zobrazení 0 0 0 0 1 0 1 1 0 1 0 0 1 1 0 1 53
Zobrazení reálných čísel Logarithmic floating-point vyjádření ve tvaru ±z fixed-point (z obvykle 2 nebo 10) není overflow, underflow * / přesné není přesná ř reprezentace běžných hčísel only few embedded systems 54
Zobrazení reálných čísel Z různých reprezentací se nejvíce ujala floating point reprezentace (reprezentace s plovoucí řádovou čárkou) ) Je dán základ β a přesnost p: A = ±d e 0.d 1 d 2... d p-1 β Příklad: 0,00950095 pro β=10, p=2... 9.5 10-3 425 pro β=10, p=5... 4.2500 10 2 225 2,25 pro β=2, p=4... 1.001 2 1 55
Floating point Zápis ve tvaru ±d 0.d 1 d 2... d p-1 β e ( 0 d i < β ) reprezentuje číslo ±(d 0 + d 1 β -1 +... + d p-1 β 1-p ) β e 56
Floating point Zápis nemusí být přesný: 0,1 pro β=2, p=24 1.10011001100110011001101 2-4 Zápis nemusí být jednoznačný: 100 1.00 10-1 001 0.01 10 1 Je-li d 0 0, reprezentace je nazývána 0 normalizovanou Pro d 0 = 0 je reprezentace nazývána denormalizovanou 57
Používaná zobrazení Znaménko Řádová čárka Řádová čárka exponentu exponentu mantisy ± ± Exponent Mantisa Znaménko mantisy ± Exponent (s posunem) Řádová čárka exponentu i mantisy Mantisa Znaménko mantisy Znaménko mantisy 1. ± Exponent Mantisa (vždy normalizována) Řádová čárka exponentu i mantisy 58
IEEE Standard 754 single precision: β=2, p=24, e = 8 bitů double precision: β=2, p=53, e = 11 bitů quadruple precision: β=2, p=113, e = 15 bitů Extended formats: single extended: β=2, p 32, e 11 bitů double extended: β=2, p 64, e 15 bitů Correct use of this format is a nontrivial challenge to programmers 59
IEEE Standard 754 přesný zápis v bitovém formátu ± Exponent Mantisa 31 30 23 22 0 ± Exponent Mantisa 79 78 64 63 0 60
IEEE Standard 754 61
IEEE Standard 754 62
IEEE Standard 854 povoluje β=2 a β=10 neurčuje konkrétní zápis nevyžaduje konkrétní hodnoty p pro single a double precision zavádí omezující podmínky možných hodnot p. 63
Možnosti zápisu dle IEEE 754 exponent mantisa význam e min -1 000 000 m = 0 ± 0 e m e min min -1 m 0 0.m 2 < e min,e max > m 1.m 2 e e max +1 111 111 m = 0 ± e max +1 m 0 1xxx xxx NaN e max +1 m 0 0xxx xxx SNaN 64
NaN POZOR na chování konkrétního procesoru a kompilátoru!!! operace vznik NaN + +( ) (- ) 0 / 0/0, / REM x REM 0, REM y x pro x<0 65
Operace s floating-point čísly Sčítání o odečítání A=M exp 1 B=M exp 2 1 z 2 z Pro exp 1 =exp 2 je A+B = (M 1 + M 2 ) z exp 1 Pro exp 1 exp 2 je nutno: A nebo B denormalizovat provést výpočet normalizovat výsledek Pozor: sčítání a odečítání nejsou asociativní přetečení ř č či podtečení č í( (při řidenormalizaci iii při výpočtu) 66
Operace s floating-point čísly Násobení a dělení A=M exp 1 B=M exp 2 1 z 2 z A.B = (M 1.M 2 ) z exp 1 +exp 2 A/B = (M /M exp 1 -exp 2 1 2 ) z Boothovo kódování 0,1-1,0,1, např. násobení 62: 00111110 010000-10 67
Vznik chyb při výpočtu overflow přetečení underflow podtečení divide by zero dělení nulou invalid neplatná operace inexact nepřesný výsledek 68
IEEE 754/854 ((2 10-30 + 10 30 ) 10 30 ) 10-30 10-30 na počítači pracujícím podle IEEE = -10-30 69