Architektúrák és operációs rendszerek: Adatreprezentáció
Architektúrák és operációs rendszerek: Adatreprezentáció
Architektúrák és operációs rendszerek: Adatreprezentáció
Transform your PDFs into Flipbooks and boost your revenue!
Leverage SEO-optimized Flipbooks, powerful backlinks, and multimedia content to professionally showcase your products and significantly increase your reach.
Architektúrák és<br />
operációs <strong>rendszerek</strong>:<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
Adatreprezentáció<br />
Balogh Ádám<br />
Lőrentey Károly<br />
Eötvös Loránd Tudományegyetem<br />
Informatikai Kar<br />
Algoritmusok és Alkalmazásaik Tanszék
Tartalomjegyzék<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
1. Egész számok ábrázolása<br />
2. Törtszámok ábrázolása<br />
3. Szövegek ábrázolása<br />
4. Digitális logika<br />
2005. október 13., 12:52 Adatábrázolás<br />
2. oldal
Helyi értékes szám<strong>rendszerek</strong><br />
• Emlékeztetőül a tízes számrendszer:<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Általánosítás:<br />
273.43 = 2 · 10 2 + 7 · 10 1 + 3 · 10 0 + 4 · 10 -1 + 3 · 10 -2<br />
– Legyen b > 1 a számrendszer pozitív egész alapszáma (bázisa)<br />
– Legyenek a i<br />
∈ { 0, …, b – 1 } számjegyek<br />
– Az (…a 2<br />
a 1<br />
a 0<br />
.a -1<br />
a -2<br />
...) b<br />
, b-számrendszerbeli szám számértéke:<br />
• Példák:<br />
… + a 2<br />
b 2 + a 1<br />
b 1 + a 0 + a -1<br />
b -1 + a -2<br />
b -2 + … = Σa i<br />
b i<br />
– (453.82) 9<br />
= 4 · 81 + 5 · 9 + 3 + 8/9 + 2/81 = 372 + 74/81 ≈ 372.91358<br />
– (242.13) 5<br />
= 2 · 25 + 4 · 5 + 2 + 1/5 + 3/25 = 72 + 8/25 = 72.32<br />
– (11021.121) 3<br />
= 1 · 81 + 1 · 27 + 2 · 3 + 1 + 1/3 + 2/9 + 1/27 ≈ 115.592<br />
2005. október 13., 12:52 Adatábrázolás<br />
3. oldal
Helyi értékes szám<strong>rendszerek</strong><br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A tíznél nagyobb alapszámú szám<strong>rendszerek</strong> leírásához<br />
a 0-9 számjegyeket az angol ábécé betűivel egészítjük ki:<br />
– (3E8) 16<br />
= 3 · 256 + 14 · 16 + 8 = 1000<br />
– (BEEF) 16<br />
= 11 · 4096 + 14 · 256 + 14 · 16 + 15 = 48879<br />
– (CICA) 20<br />
= 12 · 8000 + 18 · 400 + 12 · 20 + 10 = 103450<br />
• Vigyázat, a jelölés nem egységes!<br />
– Ahány ember, annyi jelölés<br />
– Gyakran csak a szövegkörnyezetből derül ki az alapszám<br />
– (BEEF) 16<br />
helyett általában 0xBEEF-et írnak (C nyelv)<br />
– (7342) 8<br />
helyett gyakran 07342-t írnak (szintén C nyelv)<br />
2005. október 13., 12:52 Adatábrázolás<br />
4. oldal
Átszámolás új alapszámra<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A szám<strong>rendszerek</strong> között a cél-alapszámmal<br />
történő sorozatos maradékos osztással tudunk<br />
átszámolni<br />
– A legkisebb helyiértéktől kezdve kapjuk meg a<br />
számjegyeket: jobbról balra haladunk<br />
– Az osztás maradéka lesz az eredmény következő<br />
számjegye<br />
– A hányadost ismét leosztjuk<br />
– Addig ismételjük, míg nullát nem kapunk<br />
2005. október 13., 12:52 Adatábrázolás<br />
5. oldal
Átszámolási példa<br />
• Írjuk át 1000-et nyolcas alapra!<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
1000 div 8 = 125<br />
125 div 8 = 15<br />
15 div 8 = 1<br />
1 div 8 = 0<br />
1000 mod 8 = 0<br />
125 mod 8 = 5<br />
15 mod 8 = 7<br />
1 mod 8 = 1<br />
(vége)<br />
Eredmény: 1000 = (1750) 8<br />
2005. október 13., 12:52 Adatábrázolás<br />
6. oldal
Nevezetes szám<strong>rendszerek</strong><br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Tízes számrendszer<br />
– Ezt szoktuk meg, ezt szeretjük<br />
– Az ujjaink számától eltekintve<br />
kevés praktikus haszna van<br />
• Hatos, tizenkettes stb.<br />
szám<strong>rendszerek</strong><br />
– Hagyományos<br />
mértékegység<strong>rendszerek</strong><br />
– „Tucat”<br />
– Könnyű harmadolhatóság<br />
• Hatvanas számrendszer<br />
– Babilóniai eredet<br />
– Időmérés, trigonometria<br />
(fokok/órák, percek,<br />
másodpercek)<br />
• Kettes (bináris) számrendszer<br />
– Számjegyek: bitek (0, 1)<br />
• Tizenhatos számrendszer<br />
– Számjegyek: 0, 1, 2, 3, 4, 5, 6, 7, 8,<br />
9, A, B, C, D, E, F<br />
– A nyers bináris adatok<br />
leggyakoribb megjelenítési<br />
formája<br />
• Nyolcas számrendszer<br />
– A tizenhatos „régimódi”<br />
alternatívája<br />
• Hatvannégyes számrendszer<br />
– Adatátvitel (base64 kódolás,<br />
email mellékletek)<br />
2005. október 13., 12:52 Adatábrázolás<br />
7. oldal
Érdekesség: egzotikus szám<strong>rendszerek</strong><br />
• Negatív alapú szám<strong>rendszerek</strong><br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
– Ugyanezen képlet alapján<br />
– A számjegyek ugyanazok, mint a pozitív megfelelőnél<br />
– Pl: (18005) -10<br />
= 2005; (2015) -10<br />
= -2005; Nincs szükség előjelre!<br />
• Valós alapú szám<strong>rendszerek</strong><br />
– Pl. √2 alapú számrendszer<br />
– Általában csak a 0, 1 számjegyeket megengedve<br />
– Az egész számok kifejtése általában végtelen hosszú<br />
• Kiegyensúlyozott ternáris számrendszer<br />
– Hármas alap, -1, 0, +1 számjegyek („tritek”)<br />
– Sok szép, szimmetrikus tulajdonság<br />
– A binárishoz hasonlóan könnyű aritmetika<br />
– Szovjet kísérleti számítógépek alkalmazták, ma sajnos nincs<br />
használatban, pedig megépíteni is könnyű<br />
2005. október 13., 12:52 Adatábrázolás<br />
8. oldal
Számábrázolás feladata<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Feladat: számhalmazokat ügyes kódolással<br />
bitsorozattal ábrázolni<br />
– A bitsorozat hossza általában előre adott, rögzített<br />
• Neve: szóhossz, n-nel fogjuk jelölni<br />
• n a gyakorlatban általában 8, 16, 32 vagy 64<br />
• Így véges számú (2 n db) különböző számot írhatunk le<br />
– Ugyanaz a bitsorozat más és mást jelenthet a<br />
különböző megoldásokban<br />
– Így jelöljük a bitsorozatot: b n-1<br />
…b 2<br />
b 1<br />
b 0<br />
– Példa: 01101011 (vajon mit jelent?)<br />
2005. október 13., 12:52 Adatábrázolás<br />
9. oldal
Nemnegatív egész számok ábrázolása<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Triviális feladat, egyszerűen használjuk a bináris<br />
számrendszerbeli átírás számjegyeit<br />
– A kettes számrendszer az informatika számrendszere<br />
– Leibniz (1703) világított rá először<br />
– Neumann János tette általánossá alkalmazását<br />
– Példák:<br />
00000000 := (0) 2<br />
= 0<br />
01101011 := (1101011) 2<br />
= 107<br />
11111111 := (11111111) 2<br />
= 255<br />
• Ábrázolható számtartomány: [0 .. 2 n -1]<br />
2005. október 13., 12:52 Adatábrázolás<br />
10. oldal
Néhány kerek szám<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
2 0 = 1<br />
2 1 = 2<br />
2 2 = 4<br />
2 3 = 8<br />
2 4 = 16<br />
2 5 = 32<br />
2 6 = 64<br />
2 7 = 128<br />
2 8 = 256<br />
2 9 = 512<br />
2 10 = 1024<br />
2 11 = 2048<br />
2 12 = 4096<br />
2 13 = 8192<br />
2 14 = 16384<br />
2 15 = 32768<br />
2 16 = 65536<br />
2 31 = 2147483648<br />
2 32 = 4294967296<br />
2 64 = 18446744073709551616<br />
2 128 = 3402823669209<br />
3846346337460<br />
7431768211456<br />
2005. október 13., 12:52 Adatábrázolás<br />
11. oldal
SI Informatikai mennyiségprefixek<br />
• kilobyte (kB) 10 3<br />
• kibibyte (KiB) 2 10<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• megabyte (MB) 10 6<br />
• gigabyte (GB) 10 9<br />
• terabyte (TB) 10 12<br />
• petabyte (PB) 10 15<br />
• exabyte (EB) 10 18<br />
• zettabyte (YB) 10 21<br />
• yottabyte (YB) 10 24<br />
• mebibyte (MiB) 2 20<br />
• gibibyte (GiB) 2 30<br />
• tebibyte (TiB) 2 40<br />
• pebibyte (PiB) 2 50<br />
• exibyte (EiB) 2 60<br />
• A gyakorlatban általában kettőhatványértelemben<br />
használjuk a baloldali jelöléseket is<br />
2005. október 13., 12:52 Adatábrázolás<br />
12. oldal
Előjelbites számábrázolás<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Hogyan ábrázoljunk negatív számokat?<br />
• Ötlet: a legnagyobb helyiértékű bitet használjuk fel az<br />
előjel ábrázolására<br />
– Ha b n<br />
értéke 0, akkor a sorozat értéke (b n-1<br />
…b 2<br />
b 1<br />
b 0<br />
) 2<br />
, egyébként<br />
-(b n-1<br />
…b 2<br />
b 1<br />
b 0<br />
) 2<br />
– Példák:<br />
00000000 := (0000000) 2<br />
= 0 10000000 := -(0000000) 2<br />
= 0<br />
01101011 := (1101011) 2<br />
= 107 10000001 := -(0000001) 2<br />
= -1<br />
01111111 := (1111111) 2<br />
= 127 11111111 := -(1111111) 2<br />
= -127<br />
– Ábrázolható számtartomány: [-2 n-1 -1 .. 2 n-1 -1]<br />
– Gépi feldolgozásra kellemetlen, kényelmetlen ábrázolás:<br />
• Dupla nulla; emellett a nullából visszalépve váratlan ugrás történik<br />
• Összeadás, kivonás nehézkes, az előjelbitet figyelembe kell venni<br />
2005. október 13., 12:52 Adatábrázolás<br />
13. oldal
Egyes komplemens ábrázolás<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Az előjelbitet továbbra is fenntartjuk, de a negatív<br />
számokat úgy ábrázoljuk, hogy az abszolútértékük<br />
valamennyi bitjének értékét az ellenkezőjére állítjuk<br />
– Ezzel megszűnik a 0000… és az 1111… sorozatok közötti<br />
kellemetlen ugrás, jobban kezeljük tehát az alulcsordulást<br />
– Példák:<br />
00000000 := (0000000) 2<br />
= 0 10000000 := -(01111111) 2<br />
= -127<br />
01101011 := (1101011) 2<br />
= 107 10010100 := -(01101011) 2<br />
= -107<br />
01111111 := (1111111) 2<br />
= 127 11111111 := -(00000000) 2<br />
= 0<br />
– Ábrázolható számtartomány: [-2 n-1 -1 .. 2 n-1 -1] (mint előbb)<br />
– Használata mára szinte teljesen kikopott a gyakorlatból<br />
– A nullát továbbra is duplán ábrázoljuk!<br />
2005. október 13., 12:52 Adatábrázolás<br />
14. oldal
Kettes komplemens számábrázolás<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Kézenfekvő javítás a két nullaérték összevonása<br />
• A negatív számokat egyszerűen ábrázoljuk úgy, hogy<br />
nullából egy pozitív számot kivonva hagyjuk alulcsordulni az<br />
eredményt<br />
– Pontos leírás: a -k szám ábrázolásához először k bináris<br />
reprezentációjának komplemensét képezzük, majd az így kapott<br />
számhoz hozzáadunk 1-et<br />
– Példák:<br />
00000000 := (0) 2<br />
= 0 10000000 := -(01111111) 2<br />
= -(10000000) 2<br />
= -128<br />
01101011 := (1101011) 2<br />
= 107 10010100 := -(10010011) 2<br />
= -(1101100) 2<br />
= -108<br />
01111111 := -(0) 2<br />
= 127 11111111 := -(1) 2<br />
= -1<br />
– Ábrázolható számtartomány: [-2 n-1 .. 2 n-1 -1]<br />
– Ez szinte valamennyi mai számítógép-architektúra belső<br />
számábrázolási módszere<br />
2005. október 13., 12:52 Adatábrázolás<br />
15. oldal
Kettes komplemens számábrázolás<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Összeadás, kivonás közben nem kell előjelekkel<br />
bíbelődni:<br />
– Összeadáskor egyszerűen összeadjuk a számokat<br />
– Kivonáskor megváltoztatjuk a kivonandó előjelét<br />
(komplemens+1), majd egyszerűen összeadunk<br />
– Példa: Mennyi 45 – 23?<br />
1. Számábrázolás<br />
45 = 00101101, 23 = 00010111<br />
2. A kivonandó előjelváltása<br />
-23 = 11101001<br />
3. Összeadás 45 – 23 = 45 + (-23)<br />
00101101 + 11101001 = 00010110 (túlcsordulást levágva)<br />
4. Visszaírás tizedes alakba<br />
00010110 = 22<br />
2005. október 13., 12:52 Adatábrázolás<br />
16. oldal
Bájtsorrend<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A különböző processzorok más és más sorrendben tárolják a<br />
memóriában az egész számokat reprezentáló bájtsorozatokat<br />
– A választás önkényes, egyik megoldás sem egyértelműen „jobb” a többinél<br />
• Big-endian: A legmagasabb helyiértékű bájt kerül a legkisebb<br />
memóriacímre<br />
– 1144201745 = 0x44332211 = 44 33 22 11<br />
– Motorola 68000, SPARC, System/370<br />
– Előnye: könnyen olvasható, érthető<br />
• Little-endian: A legkisebb helyiértékű bájt kerül az első címre<br />
– 1144201745 = 0x44332211 = 11 22 33 44<br />
– Intel x86, MOS Technology 6502, DEC VAX<br />
– Előnye: a szó bájtokra vagy duplabájtokra bontásakor a kisebb helyiértékű<br />
részek kisebb címeken lesznek megtalálhatók, ami valamivel intuitívebb<br />
• Az elnevezéseket illetően lásd Swift Gulliver utazásait<br />
2005. október 13., 12:52 Adatábrázolás<br />
17. oldal
Bájtsorrend<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Egyes processzorok esetében a bájtsorrend menet<br />
közben konfigurálható<br />
– ARM, PowerPC, DEC Alpha, MIPS, PA-RISC, IA64 (Itanium)<br />
• Régebbi architektúrákon „vegyes” bájtsorrend is<br />
előfordult (middle-endian)<br />
– PDP-11: 0x44332211 = 33 44 11 22<br />
• Architektúrák közötti adatátvitelkor gondoskodni kell<br />
alkalmas bájtsorrend-konverziókról<br />
– Ha erről megfeledkezünk, értelmetlen adatokat kapunk<br />
– Igen gyakori, kellemetlen hibaforrás<br />
– Az internet protokollok egységesen big-endian ábrázolást<br />
rögzítenek<br />
2005. október 13., 12:52 Adatábrázolás<br />
18. oldal
Binary Coded Decimal (BCD)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Gyakran van szükség tízes számrendszerbeli számok<br />
ábrázolására<br />
– Pl. számviteli <strong>rendszerek</strong><br />
– A bináris ábrázolás használható volna, de az oda-vissza konverzió<br />
rontaná a hatékonyságot<br />
• Ötlet: a tízes alapú számaink számjegyeit kódoljuk egy-egy<br />
négyes bitcsoportban!<br />
0 = 0000 2 = 0010 1 = 0001 3 = 0011 4 = 0100<br />
5 = 0101 6 = 0110 7 = 0111 8 = 1000 9 = 1001<br />
– A fennmaradó hat kódpozícióhoz nem rendelünk értéket, vagy pl.<br />
előjel jelölésére használjuk<br />
– A reprezentációhoz négyes bitcsoportokra osztjuk a bitsorozatot<br />
– Példa: 4255 = 0100001001010101 (n = 16)<br />
– Ábrázolható számtartomány: [0 .. 10 n/4 ]<br />
2005. október 13., 12:52 Adatábrázolás<br />
19. oldal
„Bigints”, tetszőleges pontosság<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Ha nem férünk el egy szóban, rakjunk több szót<br />
egymás mellé<br />
• Az elemi műveletek úgy végezhetők, mintha 2 n<br />
alapú számrendszerben dolgoznánk, és a szavak<br />
volnának a számjegyeink<br />
– Az összeadó/szorzótáblát a gép elemi műveletei<br />
implementálják<br />
– A tulajdonképpeni műveleteket „kézzel”<br />
programozzuk be<br />
• A reprezentálható számtartomány a<br />
memóriamérettől függ, gyakorlatilag korlátlan<br />
2005. október 13., 12:52 Adatábrázolás<br />
20. oldal
Gray-kód<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Frank Gray, Bell Labs, 1953<br />
• Bináris számrendszer, melyben az egymás utáni<br />
értékek csupán egy bitben különböznek<br />
egymástól<br />
– Motiváció: (mechanikus) kapcsolók nem tudnak<br />
pontosan egyszerre váltani, ezért kapcsolás közben a<br />
belőlük épített számlálók egy rövid ideig rossz<br />
értéket látszanak felvenni<br />
– A Gray-kód használata elkerüli a dupla<br />
kapcsolásokat, így a hibaforrás meszűnik<br />
– Számlálás céljára használatos (+1 művelet)<br />
2005. október 13., 12:52 Adatábrázolás<br />
21. oldal
Gray-kód előállítása<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Ábrázolási tartomány: nemnegatív egészek, [0..2 n ]<br />
• n szélességű Gray-sorozatok rekurzív definíciója:<br />
– Ha n = 1, akkor a sorozat: {0, 1}<br />
– Egyébként az n széles sorozatot az n – 1 széles sorozatból<br />
állítjuk elő<br />
• Először az n-1-sorozat minden eleme elé írjunk nullát<br />
• Majd az így kapott sorozat után írjuk le az n-1-sorozat<br />
megfordítottját, minden elem elé egy 1-est írva<br />
– Példák:<br />
• n = 2: {00, 01, 11, 10}<br />
• n = 3: {000, 001, 011, 010, 110, 111, 101, 100}<br />
2005. október 13., 12:52 Adatábrázolás<br />
22. oldal
5 széles Gray-sorozat<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
00000 01100 11000 10100<br />
00001 01101 11001 10101<br />
00011 01111 11011 10111<br />
00010 01110 11010 10110<br />
00110 01010 11110 10010<br />
00111 01011 11111 10011<br />
00101 01001 11101 10001<br />
00100 01000 11100 10000<br />
2005. október 13., 12:52 Adatábrázolás<br />
23. oldal
Gray-kód alkalmazásai<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Kapcsolókkal működő adatátviteli<br />
szerkezeteknél a mai napig használják<br />
• Kombinatorikus programozási feladatok<br />
– Pl. soroljuk fel egy H halmaz összes részhalmazát<br />
– Ha a k. bit 1, akkor az aktuális részhalmaz<br />
tartalmazza H k. elemét<br />
• Hanoi tornyai probléma<br />
– Rendeljük a k. bitet a k. koronghoz<br />
– Ha a Gray-sorozat következő elemében a k. bit<br />
változott, akkor azt a korongot kell mozgatni a<br />
következő lépésben<br />
2005. október 13., 12:52 Adatábrázolás<br />
24. oldal
Linear Feedback Shift Register (LFSR)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Pszeudovéletlen számsorozatokat is használhatunk számlálásra<br />
• Egy lináris visszacsatolású eltolóregiszter ügyes<br />
visszacsatolófüggvénnyel igen hosszú ciklusú, véletlennek látszó<br />
bitsorozatot generál<br />
• A leggyorsabb számlálók<br />
– Közvetlenül hardverben építhetők<br />
• Rengeteg érdekes alkalmazás<br />
– Kriptográfia<br />
1 0 0 1 1 0 0 0 1 0 1 1 0 0 0 1<br />
Visszacsatolás<br />
– GPS (minden műhold saját, 1023 bit hosszú szekvenciát generál)<br />
– Digitális televíziózás<br />
• A bitfolyam zavaró szabályosságainak elfedésére<br />
0<br />
2005. október 13., 12:52 Adatábrázolás<br />
25. oldal<br />
1<br />
1<br />
XOR kapuk<br />
Kimenet
Tartalomjegyzék<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
1. Egész számok ábrázolása<br />
2. Törtszámok ábrázolása<br />
3. Szövegek ábrázolása<br />
4. Digitális logika<br />
2005. október 13., 12:52 Adatábrázolás<br />
26. oldal
Törtszámok ábrázolása<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A cél a valós számok ábrázolása véges<br />
bitsorozattal<br />
– Tökéletes pontossággal lehetetlen<br />
– Maximum megszámlálható részhalmazokat tudunk<br />
csak ábrázolni<br />
– A cél az „érdekes” számok minél jobb közelítése<br />
• Érdekesség: vannak olyan valós számok,<br />
amelyek számjegyeit logikai képtelenség<br />
számítógéppel előállítani<br />
– Kiszámíthatatlan számok, Alan Turing<br />
– Lásd: megállási probléma<br />
2005. október 13., 12:52 Adatábrázolás<br />
27. oldal
Fixpontos számábrázolás<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Használjuk a papíron megszokott tizedespontos ábrázolást<br />
– A „kettedespontot” képzeljük mindig ugyanazon két bitpozíció közé<br />
– Példák: (5+3-as ábrázolással, nyolcbites szavakkal)<br />
• 00110111 = (00110.111) 2<br />
= 6.875<br />
• 00000001 = (0.001) 2<br />
= 0.125<br />
• 00001000 = (1) 2<br />
= 1<br />
• 10101011 = -(01010.101) 2<br />
= -10.625 (kettes komplemens)<br />
• Viszonylag kényelmes ábrázolási mód<br />
– A reprezentált számok homogén eloszlásúak<br />
– Az összeadás/kivonás változatlan módon elvégezhető<br />
– A szorzás/osztás után normalizálni kell<br />
• Maja civilizáció<br />
– 20-as alapú, fixpontos számábrázolás<br />
2005. október 13., 12:52 Adatábrázolás<br />
28. oldal
Racionális számábrázolás<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Minden racionális szám felírható két egész szám hányadosaként<br />
• Ábrázoljuk a számlálót és a nevezőt külön-külön!<br />
• A négy alapművelet az ismert összefüggések alapján elvégezhető<br />
– (p/q) · (u/v) = pu / qv<br />
– (p/q) / (u/v) = pv / qu<br />
– (p/q) ± (u/v) = (pv ± qu) / qv<br />
• A műveletek után célszerű egyszerűsíteni a számláló és a nevező<br />
legnagyobb közös osztójával<br />
• Az elérhető pontosság a megengedhető szélességtől függ<br />
– Túlcsordulás esetén ügyes algoritmussal meg kell találni a<br />
legközelebbi ábrázolható számot<br />
– Gyakori a tetszőleges pontosságú egészek használata<br />
• Viszonylag művelet- és tárigényes számábrázolási mód<br />
2005. október 13., 12:52 Adatábrázolás<br />
29. oldal
Komplex számok ábrázolása<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Általában két külön szám ábrázolásával<br />
– Valós és képzetes részre bontás<br />
– Polárkoordinátás felírás<br />
• 2i alapú egzotikus számrendszer is használható<br />
– Számjegyek: 0, 1, 2, 3<br />
– Nincs szükség külön előjel használatára<br />
– Szorzás, osztás a valós számoknál „szokásos”<br />
algoritmussal elvégezhető<br />
– Lásd Knuth II.<br />
2005. október 13., 12:52 Adatábrázolás<br />
30. oldal
Lebegőpontos számábrázolás<br />
• Induljunk ki a számok „tudományos” jelöléséből:<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
– e {0, 1}: előjel<br />
a = (-1) e · m · 10 k<br />
– m [1, 10): mantissza, törtrész<br />
– k Z: kitevő, exponens<br />
– Példák: 3.14159 = (-1) 0 · 3.14159 · 10 0<br />
-2919.2 = (-1) 1 · 2.9192 · 10 3<br />
• A digitális számábrázoláshoz az (e, m, k) hármasokat<br />
fogjuk szabványos formában rögzíteni<br />
– A mantissza hosszától függ a pontosság<br />
• Babilóniai Birodalom: 60-as alapú lebegőpontos<br />
számrendszer, kitevő nélkül<br />
– A nullát ismerték, de csak számjegyek között volt rá szükség<br />
2005. október 13., 12:52 Adatábrázolás<br />
31. oldal
IEEE 754<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• 32 bites ábrázolás (egyszeres pontosság)<br />
– 1 bit előjel, 8 bit kitevő, 23 bit „szignifikáns”<br />
e kitevő+127 szignifikáns<br />
31 30<br />
23<br />
22<br />
– A kitevő -126 és 127 között lehet, 127 hozzáadásával<br />
kerül eltárolásra<br />
– A mantissza „kettedespont” előtti számjegye<br />
nemnulla számokra garantáltan egy, ezt nem tároljuk<br />
– Példa:<br />
154.1 ≈ (10011010.00011001100110011…) 2<br />
= (1.001101000011001100110011…) 2<br />
· 2 (111)<br />
= 01000011000110100001100110011001<br />
2005. október 13., 12:52 Adatábrázolás<br />
32. oldal<br />
0
IEEE 754<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A csupa nulla és csupa 1 bitből álló kitevő speciális<br />
jelentéssel bír<br />
– Kitevő és szignifikáns is 0: a nulla szám<br />
• Az előjel szerint -0, +0 számokat is reprezentálhatunk<br />
– Kitevő 0, szignifikáns nem 0: denormalizált szám<br />
• Alulcsordulás elkerülésére használják<br />
– Ha a kitevő 255, a szignifikáns 0: végtelen mennyiség<br />
• Az előjel a -∞ és a +∞ között tesz különbséget<br />
• 42/0 = +∞, -42/0 = -∞<br />
– Ha a kitevő 255, a szignifikáns nem 0: „nemszám” érték<br />
• NaN, Not a Number<br />
• Hibajelzésre szolgálnak, pl. 0/0 esetén<br />
• Dupla pontosság is definiált<br />
– 64 bit, 11 bit kitevő (1023-as eltolás), 52 bit mantissza<br />
2005. október 13., 12:52 Adatábrázolás<br />
33. oldal
Konverzió tizedes számrendszerből<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
e kitevő+127 szignifikáns<br />
31 30<br />
42.5<br />
0.625<br />
= (101010.1) 2<br />
= (1.010101) 2<br />
· 2 101 ; (101 + 1111111) 2<br />
= (10000100) 2<br />
= 01000010001010100000000000000000<br />
= (0.101) 2<br />
23<br />
22<br />
= (1.01) 2<br />
· 2 -1 ; (-1 + 1111111) 2<br />
= (01111110) 2<br />
= 00111111001000000000000000000000<br />
2005. október 13., 12:52 Adatábrázolás<br />
34. oldal<br />
0
Konverzió tízes számrendszerbe<br />
• 11000010101101100000000000000000 = ?<br />
Kitevő: 10000101 = (10000101) 2<br />
– (01111111) 2<br />
= (00000110) 2<br />
= 6<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
Szignifikáns: 01101100... = (1.01101100...) 2<br />
= 1.421875<br />
Eredmény: -1 · 1.421875 · 32 = -45.5<br />
• 00000000000000000000000000000001 = ?<br />
Normalizálatlan szám!<br />
0.000000000000000000001 · 2 -126<br />
= 2 -22 · 2 -126 = 2 -148<br />
≈ 2.8025969 · 10 -45<br />
Ez a legkisebb abszolútértékű reprezentáns<br />
• 01111111011111111111111111111111 = ?<br />
1.1111111111111111111111 · 2 127<br />
≈ 2 · 2 127 = 2 128 = 2.80259692 · 10 39<br />
Ez a legnagyobb abszolútértékű reprezentáns<br />
2005. október 13., 12:52 Adatábrázolás<br />
35. oldal
IEEE754 reprezentánsok sűrűségeloszlása<br />
Egységnyi hosszú intervallumba eső<br />
reprezentánsok száma<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
...<br />
Normalizált<br />
reprezentánsok<br />
-2 -123 -2 -124 -2 -125 -2 -126<br />
Normalizálatlan<br />
reprezentánsok<br />
0 2 -126 2 -125 2 -124 2 -123<br />
...<br />
2005. október 13., 12:52 Adatábrázolás<br />
36. oldal
A lebegőpontos ábrázolás problémái<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Sok véges tizedestörtnek végtelen a „kettedes” kifejtése<br />
– 1/5, 1/10, 1/100, stb.<br />
– Pénzügyi, számviteli alkalmazásokra nem jó (lásd BCD)<br />
• Mindig észben kell tartani, hogy közelítő<br />
mennyiségekkel dolgozunk<br />
– Szigorú egyenlőségvizsgálat szinte mindig hiba:<br />
f := 0.1; while not f = 10.0 do f := f + 0.1; end;<br />
– A fenti programkód végtelen ciklust eredményez!<br />
– Mindig kisebb/nagyobb relációt vizsgáljunk, vagy<br />
ε-sugarú környezettel hasonlítsunk:<br />
f := 0.1; while f < 10.0 do f := f + 0.1; end;<br />
f := 0.1; while f – ε > 10.0 or f + ε < 10.0 do f := f + 0.1; end;<br />
2005. október 13., 12:52 Adatábrázolás<br />
37. oldal
A lebegőpontos ábrázolás problémái<br />
• A számábrázolás tartománya nem homogén<br />
– Nullához közel nagyon sűrűek a reprezentánsok<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
– Ahogy növeljük az abszolútértéket, úgy csökken a pontosság<br />
• Két egymáshoz közeli számot kivonva egymásból<br />
romlik a pontosság<br />
– A mantissza elejéről kiesnek az azonos számjegyek<br />
– Ha nem vigyázunk, egészen rossz eredményt kapunk<br />
• Több nagyságrendben eltérő számokat összeadva a<br />
nagyobb szám „lenyeli” a kisebbet<br />
– Nem mindegy, hogy milyen sorrendben adunk egy számsorozatot!<br />
• Nullával közeli számmal osztva is hibát vezetünk be<br />
• A numerikus analízis nevű tudományág egyik feladata, hogy stabil<br />
algoritmusokat találjon, melyek elkerülik a fenti szituációkat<br />
2005. október 13., 12:52 Adatábrázolás<br />
38. oldal
Szimbolikus számábrázolás<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Egyelőre csak erre specializált matematikai<br />
programcsomagokban<br />
• A pontosan nem reprezentálható függvényeredmények<br />
helyett megőrizzük a kiszámolandó formulát, így<br />
dolgozunk tovább<br />
– Azonosságok segítségével egyszerűsítjük a képletet<br />
• √(x 2 + 2x + 1) = x + 1<br />
– Mesterséges intelligencia algoritmusok<br />
• Első alkalmazások: szimbolikus deriválás, Lisp,<br />
hatvanas évek<br />
• Manapság: „új matematika”<br />
– Mathematica, Maple<br />
2005. október 13., 12:52 Adatábrázolás<br />
39. oldal
Tartalomjegyzék<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
1. Egész számok ábrázolása<br />
2. Törtszámok ábrázolása<br />
3. Szövegek ábrázolása<br />
4. Digitális logika<br />
2005. október 13., 12:52 Adatábrázolás<br />
40. oldal
Karakterek, -halmazok, -kódolások<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Karakter: egy nyelvi szimbólumot, grafémát reprezentáló<br />
információegység<br />
– Példák: A ! 5 % Ж ق vagy akár a szóköz<br />
– Nem tartalmazza a megjelenítés pontos módját (a karakter alakját)<br />
– A különböző megjelenítési variációkat (pl. a, a, a) ugyanannak a<br />
karakternek tekintjük<br />
• Karakterhalmaz (kódkészlet): ezek valamely együttese<br />
• Karakterkódolás: a karakterhalmaz elemei és az őket<br />
reprezentáló bitsorozatok közötti hozzárendelés<br />
– Egy adott karakterhalmazhoz több különböző szabványos kódolás<br />
is tartozhat<br />
• Karakterek sorozatát sztringeknek vagy füzéreknek szokás<br />
hívni<br />
2005. október 13., 12:52 Adatábrázolás<br />
41. oldal
EBCDIC<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Az IBM „hagyományos” kódtáblázata<br />
– Lyukkártyák olvasható kódolása volt<br />
– Emberi szemmel is viszonylag könnyen leolvasható<br />
– Az IBM nagyszámítógépeken a mai napig használják<br />
• Nyolcbites kódolás, sok nemzeti és egyéb<br />
variáns<br />
– 95 közös kódpozíció<br />
• Jellegzetessége, hogy az angol ábécé 26<br />
betűjének kódpozíciói nem folytonosak<br />
– Az i/j és az r/s betűk közé más karakterek ékelődnek<br />
– Oka a lyukkártyás eredet<br />
2005. október 13., 12:52 Adatábrázolás<br />
42. oldal
EBCDIC<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
http://aspell.net/charsets/<br />
2005. október 13., 12:52 Adatábrázolás<br />
43. oldal
Emlékeztető: Lyukkártya<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• 187.25mm széles, 82.55mm magas (7.75''x3.25'')<br />
• A fenti kártyán, balról jobbra: betűk (A-Z),<br />
számjegyek (0-9) és speciális szimbólumok<br />
http://www.staff.ncl.ac.uk/roger.broughton/iomedia/pc.htm<br />
2005. október 13., 12:52 Adatábrázolás<br />
44. oldal
ASCII (ISO 646)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• American Standard Code for Information Interchange<br />
• 1963, a Bell cég távírógép-kódjaiból<br />
• Hétbites, 127 karaktert tartalmazó kódtábla<br />
– Angol ábécé, számjegyek, írásjegyek, maroknyi speciális karakter<br />
(\^_`|~)<br />
– Nyomtatási képpel rendelkező karakterek:<br />
!"#$%&'()*+,-./0123456789:;?<br />
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_<br />
`abcdefghijklmnopqrstuvwxyz{|}~<br />
– Az első 32 kódpozíción ún. vezérlő karakterek találhatók<br />
• Többségük mára okafogyottá vált<br />
• Minden idők legsikeresebb informatikai szabványa<br />
– Az IBM nagyszámítógépeken kívül mindenhol ezt használják<br />
– Manapság a Unicode kezdi leváltani<br />
2005. október 13., 12:52 Adatábrázolás<br />
45. oldal
ASCII (ISO 646)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
http://aspell.net/charsets/<br />
2005. október 13., 12:52 Adatábrázolás<br />
46. oldal
ISO 8859<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Nyolcbites karakterkódolások ISO/IEC nemzetközi<br />
szabványa<br />
– ASCII kompatibilis, az első 127 jel megegyezik vele<br />
– Jelenleg 15 különböző kódlapot ír le<br />
– ISO 8859-1: Nyugat-európai kódkészlet (Latin-1)<br />
• A Latin-2 ő, ű helyén õ, ill. û áll, a magyar szövegek így is olvashatók,<br />
bár a rossz ékezetek szúrják a szemet<br />
– ISO 8859-2: Közép-európai kódkészlet (Latin-2)<br />
• Teljes magyar ábécé<br />
– ISO 8859-15: A Latin-1 második kiadása (Latin-9)<br />
• Euró karakter (€), egzotikusabb francia, finn és észt betűk<br />
– ISO 8859-16: A Latin-2 második kiadása (Latin-10)<br />
• Euró karakter, alsó idézőjelek<br />
• Sajnos az ű karakter kódpozíciója eltér a Latin-2-től<br />
2005. október 13., 12:52 Adatábrázolás<br />
47. oldal
ISO 8859-1 és -2<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
2005. október 13., 12:52 Adatábrázolás<br />
48. oldal
Unicode és UCS<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Universal Character Set, ISO/IEC 10646<br />
– Jelenleg mintegy százezer karaktert tartalmazó kódkészlet<br />
– Kb. 2 21 különböző karakterig bővíthető<br />
• Pontos érték: 2 20 + 2 16 = 0x10FFFF = 1114112 karakter<br />
– Minden élő (és sok holt) nyelv összes írásjele, matematikai<br />
szimbólumok, valamennyi korábbi karakterkészlet összes jele<br />
– Több-bájtos karakter-kódok<br />
• Unicode: ipari szabvány<br />
– Kezdetben jóval egyszerűbb és korlátozottabb volt<br />
– Mára a kettő teljesen kompatibilis<br />
– A Unicode szabványok részletes használati útmutatót,<br />
implementációs segédletet is adnak az egyes karakterekhez<br />
– Rendezési, megjelenítési, szerkesztési útmutatók<br />
2005. október 13., 12:52 Adatábrázolás<br />
49. oldal
Unicode kódtáblázat<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
http://www.ianalbert.com/misc/unichart.php<br />
2005. október 13., 12:52 Adatábrázolás<br />
50. oldal
Unicode és UCS<br />
• A Unicode általános, nemzetközi kódkészlet<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
– Latin ábécéktől a kínai írásjeleken át az egyiptomi<br />
hieroglifákig<br />
– Jellegzetesség, hogy az ékezetes karaktereket<br />
építőelemeikből egyesével is öszerakhatjuk<br />
– Igen kifinomult megjelenítési, szerkesztési, rendezési,<br />
konverziós szabályok<br />
• A karakterekhez a szabvány számértéket rendel<br />
– Jelölésük: U+kódpozíció; példa: 'A' = U+0041<br />
• A kódpozícióhoz különféle szabványos<br />
eljárásokkal rendelhetünk bitsorozatokat<br />
– UTF-8, UCS-2, UTF-16, UTF-32/UCS-4<br />
2005. október 13., 12:52 Adatábrázolás<br />
51. oldal
A Unicode kódok<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A 1114112 kódpozíciót a könnyebb kezelhetőség<br />
érdekében 17 db 65536 (2 16 ) kódot<br />
tartalmazó„síkra” (plane) osztották<br />
• A legelső síkba kerültek a leggyakoribb<br />
karakterek<br />
– Basic Multilingual Plane (BMP)<br />
– Ezen a karakterek reprezentációja a leggazdaságosabb<br />
– Egyes reprezentációk csak ezt az egy síkot támogatják<br />
• Az első 256 kódpozíció megegyezik a Latin-1<br />
kódtáblázat kiosztásával<br />
– Ebből következően az első 128 pozíció az ASCII<br />
2005. október 13., 12:52 Adatábrázolás<br />
52. oldal
Basic Multilingual Plane (BMP)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Az ábra minden négyzete 256 kódpozíciót takar:<br />
– Latin karakterek<br />
– Egyéb európai karakterek<br />
– Nyelvészeti karakterek<br />
– Közelkelet<br />
– Afrika<br />
– Dél-Ázsia<br />
– Kelet-Ázsia<br />
– Egységesített CJK<br />
– Ausztrália<br />
– Szimbólumok<br />
– Ékezet-építő karakterek<br />
– Tiltott (UTF-16), ill. privát felhasználás<br />
– Egyéb<br />
– Kiosztatatlan<br />
http://en.wikipedia.org/wiki/Basic_multilingual_plane<br />
2005. október 13., 12:52 Adatábrázolás<br />
53. oldal
UTF-32 / UCS-4<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Ötlet: minden Unicode karaktert reprezentáljunk a kódpozíciójával<br />
– Négy bájton kényelmesen elfér<br />
– A legegyszerűbb megoldás<br />
– Példa: az „Szőr” sztring kódjai:<br />
0x00000053 0x0000007A 0x00000151 0x00000072<br />
• Minden karaktert azonos hosszúságú bitsorozat reprezentál<br />
– Az ékezet-építő karakterek miatt így is előfordulhat, hogy egyetlen<br />
megjelenített szimbólumot több négybájtos karakteren ábrázolunk<br />
– Pl. az „ő” betűt az U+006F U+030B párral is megadhatjuk:<br />
0x00000053 0x0000007A 0x0000006F 0x0000030B 0x00000072<br />
• Hátrányai:<br />
– A reprezentáció függ az alkalmazott bájtsorrendtől<br />
– Viszonylag gazdaságtalan kódolás (32 bájt négy karakterért!)<br />
• Az extra biteket viszont különböző egyéb célokra használhatjuk<br />
– Nulla bájtokat tartalmaz, ami megzavarhatja a korábban írt programokat<br />
• Viszonylag ritkán használatos<br />
2005. október 13., 12:52 Adatábrázolás<br />
54. oldal
UTF-8<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• 1993, Ken Thompson, Rob Pike<br />
• Az egyes Unicode karaktereket 1-4 bájt hosszúságú<br />
bájtsorozatokra képezi<br />
– Az ASCII karakterek reprezentációja nem változik:<br />
0xxxxxxx<br />
– A BMP többi karaktere két vagy három bájt hosszú:<br />
110xxxxx 10xxxxxx<br />
1110xxxx 10xxxxxx 10xxxxxx<br />
– A többi 16 sík karakterei négybájtosak:<br />
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx<br />
(7 bit)<br />
(11 bit)<br />
(16 bit)<br />
(21 bit)<br />
– A karakterekhez a lehető legrövidebb sorozatot rendeljük<br />
– Az első bájt legmagasabb helyiértékű egyes bitjeinek száma határozza meg<br />
a sorozat hosszát<br />
– A további bájtok egyértelműen megkülönbeztethetőek a karakterkezdő<br />
bájtoktól<br />
2005. október 13., 12:52 Adatábrázolás<br />
55. oldal
UTF-8<br />
• Például a „Szőr” reprezentációja:<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
'S' = U+0053, 0x53 = (1010011) 2<br />
'z' = U+007A, 0x7A = (1111010) 2<br />
'ő' = U+0151, 0x0151 = (101010001) 2<br />
'r' = U+0072, 0x72 = (1110010) 2<br />
01010011 01111010 11000101 10010001 01110010<br />
0x53 0x7A 0xC5 0x91 0x72<br />
S z ő r<br />
2005. október 13., 12:52 Adatábrázolás<br />
56. oldal
UTF-8<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Előnyök<br />
– Bájtsorrend-független reprezentáció<br />
– Az U+0000 (0x00) karaktertől eltekintve egy karakter<br />
reprezentációjában sem fordul elő nulla bájt<br />
• A létező programok jó része számára így az UTF-8 szövegek<br />
kezelhetőek maradnak<br />
– Állapotmentes kódolás; ha hiba történik, a következő<br />
karaktertől egyértelműen folytatható a dekódolás<br />
• Hátrányok<br />
– A változó hossz miatt a sztringműveletek nehézkesebbek<br />
– Elvileg ugyanaz a karakter többféleképpen is kódolható volna<br />
• Pl. 00000001 =?= 11000000 10000001<br />
• A jelenlegi szabvány már tiltja a hosszabb forma elfogadását<br />
• Az adatátvitelben az UTF-8 kezdi felváltani az ASCII-t<br />
2005. október 13., 12:52 Adatábrázolás<br />
57. oldal
UTF-16 / UCS-2<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A C, C++, Java, C# programozási nyelvek<br />
„széles” karaktereinek reprezentációja<br />
• Az UTF-16 a BMP karaktereit egységesen 2<br />
bájton, a többi sík (ritka) karaktereit pedig 4<br />
bájton reprezentálja<br />
• A BMP karaktereinek számértéke megegyezik az<br />
Unicode kódpozíciójukkal<br />
– Például „Szőr”: 0x0053 0x007A 0x0151 0x0072<br />
• Ha csak a BMP karaktereit engedjük meg, az így<br />
kapott egyszerűsített kódolás az UCS-2<br />
2005. október 13., 12:52 Adatábrázolás<br />
58. oldal
UTF-16 / UCS-2<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Az UTF-16-ban a BMP-n kívül rekedt (2 20 db)<br />
kódpozíciót két duplabájtos kóddal ábrázoljuk<br />
– Surrogate pairs, „pótpárok”<br />
– A duplabájtos összetevők értéke 0xD800 és 0xDFFF közé esik<br />
• Ez egy 11 bit széles tartomány, amit két 10 bites részre osztunk:<br />
Felső fél:<br />
Alsó fél:<br />
110110xxxxxxxxxx<br />
110111xxxxxxxxxx<br />
• A BMP-ben ezekhez a pozíciókhoz nincs karakter rendelve<br />
• Az x-ek helyére szabadon választható 10+10 bit értéke az ábrázolandó<br />
karakter Unicode pozíciója mínusz 2 16<br />
– Példa: mükénéi Lineáris B „Nő” karakter: U+10081<br />
0x10081 – 0x10000 = 0x0081 = (0000000000 0010000001) 2<br />
(1101100000000000 1101110010000001) 2<br />
= 0xD800 0xDC81<br />
2005. október 13., 12:52 Adatábrázolás<br />
59. oldal
UTF-16 / UCS-2<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Előnyök:<br />
– A népszerű programozási nyelvek beépített támogatást adnak<br />
– Viszonylag gazdaságos kódolás<br />
– A hétköznapi használatban lévő karakterekre egységesen kétbájtos<br />
reprezentációhossz<br />
• Hátrányok:<br />
– A BMP-n kívüli karakterek változó hosszúságú kódolást<br />
eredményeznek<br />
– A konkrét reprezentáció függ az architektúra bájtsorrendjétől<br />
• UTF-16, UTF-16BE, UTF-16LE<br />
• A szövegeket bájtsorrend-jelző (BOM, Byte Order Mark) U+FEFF<br />
karakterrel szokás kezdeni („nulla hosszúságú nem törhető térköz”)<br />
• Az U+FFFE kódpozícióhoz nincs karakter rendelve, így egyértelmű a<br />
döntés<br />
• Az UTF-16-t gyakran használják belső ábrázoláshoz<br />
2005. október 13., 12:52 Adatábrázolás<br />
60. oldal
Tartalomjegyzék<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
1. Egész számok ábrázolása<br />
2. Tört számok ábrázolása<br />
3. Szövegek ábrázolása<br />
4. Digitális logika<br />
2005. október 13., 12:52 Adatábrázolás<br />
61. oldal
Digitális áramkörök, logikai kapuk<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A digitális áramkörökben csupán két logikai<br />
értéket különböztetünk meg<br />
– Pl. 0V := 0 (hamis), 5V := 1 (igaz)<br />
• A logikai kapuk egyszerű digitális áramkörök,<br />
melyeket építőkockaként használhatunk<br />
bonyolultabb áramkörök készítéséhez<br />
• A kapuk összeállításához valamilyen<br />
kapcsolóként viselkedő áramköri<br />
elemre van szükség<br />
– Relé, vákumcső, tranzisztor<br />
2005. október 13., 12:52 Adatábrázolás<br />
62. oldal<br />
B<br />
C<br />
E
NEM kapu (NOT)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A NEM kapu a bemenetére érkező jel<br />
ellenkezőjét állítja elő a kimenetén<br />
– „Inverter” avagy „fordító”<br />
U be<br />
+U cc<br />
U ki<br />
2005. október 13., 12:52 Adatábrázolás<br />
63. oldal<br />
A<br />
A X<br />
0 1<br />
1 0<br />
X
NEM-ÉS kapu (NAND)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A NAND kapu értéke mindig 1, kivéve ha<br />
mindkét bemenete is 1<br />
U 1<br />
U 2<br />
+U cc<br />
U ki<br />
2005. október 13., 12:52 Adatábrázolás<br />
64. oldal<br />
A<br />
B<br />
A B X<br />
0 0 1<br />
0 1 1<br />
1 0 1<br />
1 1 0<br />
X
NEM-VAGY kapu (NOR)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A NOR kapu értéke csak akkor 1, ha mindkét<br />
bemenete 0<br />
U 1<br />
+U cc<br />
U 2<br />
U ki<br />
2005. október 13., 12:52 Adatábrázolás<br />
65. oldal<br />
A<br />
B<br />
A B X<br />
0 0 1<br />
0 1 0<br />
1 0 0<br />
1 1 0<br />
X
ÉS kapu (AND)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Az ÉS kapu csak akkor ad 1-es értéket, ha<br />
mindkét bemenete egyaránt 1-es<br />
U 1<br />
U 2<br />
+U cc<br />
+U cc<br />
U ki<br />
2005. október 13., 12:52 Adatábrázolás<br />
66. oldal<br />
A<br />
B<br />
A B X<br />
0 0 0<br />
0 1 0<br />
1 0 0<br />
1 1 1<br />
X
VAGY kapu (OR)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A VAGY kapu kimenetére akkor kerül 1-es jel,<br />
ha legalább az egyik bemenete 1-es<br />
U 1<br />
+U cc<br />
U 2<br />
+U cc<br />
2005. október 13., 12:52 Adatábrázolás<br />
67. oldal<br />
U ki<br />
A<br />
B<br />
A B X<br />
0 0 0<br />
0 1 1<br />
1 0 1<br />
1 1 1<br />
X
Kizáró VAGY kapu (XOR)<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Akkor kerül 1 a kimenetére, ha pontosan egy<br />
bemenete 1-es<br />
A<br />
B<br />
X<br />
A B X<br />
0 0 0<br />
0 1 1<br />
1 0 1<br />
1 1 0<br />
2005. október 13., 12:52 Adatábrázolás<br />
68. oldal
Boole-függvények<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Boole-függvényeknek nevezzük az egy vagy több<br />
igazságértékről igazságértékre képező<br />
függvényeket<br />
– A Boole-függvényeket egyértelműen megadhatjuk, ha felírjuk,<br />
hogy mely paraméterértékekre milyen értéket vesznek fel<br />
(igazságtábla, 2 n számú sor)<br />
• Bármely Boole-függvényhez készíthető egy<br />
NOT, OR, AND kapukból álló, őt előállítható<br />
áramkör<br />
– Az igazságtábla 1-es értékű soraihoz rendeljünk AND<br />
kapukat a megfelelően beinvertált bemenetekkel, majd kössük<br />
őket össze OR kapuval<br />
2005. október 13., 12:52 Adatábrázolás<br />
69. oldal
Boole-függvények<br />
• Pl. Többségi függvény:<br />
A B C A B C<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
A B C M<br />
0 0 0 0<br />
0 0 1 0<br />
0 1 0 0<br />
0 1 1 1<br />
1 0 0 0<br />
1 0 1 1<br />
1 1 0 1<br />
1 1 1 1<br />
A<br />
B<br />
C<br />
2005. október 13., 12:52 Adatábrázolás<br />
70. oldal<br />
ABC<br />
ABC<br />
ABC<br />
ABC<br />
M
NAND (és NOR) áramkörök<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• A NAND és NOR kapuk egymagukban is<br />
képesek a többi kapu megvalósítására<br />
– NOT: egyszerűen kössük össze a bemeneteket<br />
– AND, OR:<br />
A<br />
B<br />
A<br />
B<br />
A&B<br />
A&B<br />
2005. október 13., 12:52 Adatábrázolás<br />
71. oldal<br />
A<br />
B<br />
A<br />
B<br />
A|B<br />
A|B
Példa: 1 bites összeadó áramkör<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Adjuk össze A-t és B-t!<br />
– Az összeg kerüljön S-be<br />
– Az esetleges túlcsordulást (átvitelt) jelezzük C-ben<br />
A<br />
B<br />
C<br />
A B S C<br />
0 0 0 0<br />
0 1 1 0<br />
1 0 1 0<br />
1 1 0 1<br />
2005. október 13., 12:52 Adatábrázolás<br />
72. oldal<br />
S
Példa: Teljes összeadó áramkör<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Ha többbites összeadót szeretnénk építeni,<br />
bemenő átvitelre is szükség van:<br />
A<br />
B<br />
C'<br />
C<br />
A B C S C'<br />
0 0 0 0 0<br />
0 0 1 1 0<br />
0 1 0 1 0<br />
0 1 1 0 1<br />
1 0 0 1 0<br />
1 0 1 0 1<br />
1 1 0 0 1<br />
1 1 1 1 1<br />
2005. október 13., 12:52 Adatábrázolás<br />
73. oldal<br />
S
Példa: többites összeadó<br />
Balogh, Lőrentey: Architektúrák és operációs <strong>rendszerek</strong> – 2005–2006. első félév<br />
• Ha több bites számokat szeretnénk összeadni,<br />
egyszerűen egymás mellé kötjük a teljes<br />
összeadóinkat:<br />
C<br />
A3<br />
Teljes<br />
összeadó<br />
B3<br />
C2<br />
A2<br />
Teljes<br />
összeadó<br />
B2<br />
Teljes<br />
összeadó<br />
Teljes<br />
összeadó<br />
2005. október 13., 12:52 Adatábrázolás<br />
74. oldal<br />
C1<br />
A1<br />
B1<br />
S3 S2 S1 S0<br />
C0<br />
A0<br />
B0