Naprej Nazaj Kazalo

9. Kako shranjuje računalnik podatke v pomnilniku?

Verjetno veste, da je v računalniku vse shranjeno kot zaporedje bitov (angl. binary digit, dvojiška števka -- mislimo si jih lahko kot stikala, ki so bodisi vključena ali izključena). Tu bomo razložili, kako lahko z biti predstavimo v računalniku številke in črke.

Preden se spustimo v razlago, si moramo razjasniti še pojem velikosti strojne besede. To je najprimernejša velikost za premikanje informacije sem ter tja. Tehnično je enaka velikosti registrov - pomnilnih celic procesorja, ki rabijo za aritmetične in logične operacije. Ko govorimo o 32- ali 64-bitnih računalnikih, mislimo na to.

Večina računalnikov -- skupaj z osebnimi računalniki s procesorji 386, 486, Pentium ipd. -- uporablja 32-bitno strojno besedo. Starejši osebni računalniki (286) so uporabljali 16-bitno strojno besedo. Stari veliki računalniki so pogosto uporabljali 36-bitno strojno besedo. Nekaj procesorjev, kot denimo Alpha družbe DEC (ki jo je medtem kupil Compaq), uporablja 64-bitno strojno besedo. Uporaba te bo postala v prihodnjih letih še pogostejša: pri Intelu načrtujejo, da bodo sedanjo serijo Pentium nadomestili z novimi 64-bitnimi procesorji Itanium.

Računalnik si predstavlja pomnilnik kot zaporedje besed, oštevilčenih od nič do neke velike vrednosti, določene s količino pomnilnika, ki jo imamo na voljo. Tudi količina pomnilnika, ki jo lahko procesor naslavlja, je povezana z velikostjo strojne besede -- to je bil vzrok, da je bil v starejših računalnikih 286 dostop do večjih količin pomnilnika silno zapleten. Teh težav tu ne bomo obnavljali, saj starejših programerjev ne želimo spominjati na te more.

9.1 Števila

Cela števila so predstavljena bodisi kot strojne besede bodisi kot pari strojnih besed, odvisno od velikosti strojne besede. Najbolj vsakdanja predstavitev celih števil je 32-bitna strojna beseda.

Celoštevilčna aritmetika je podobna, ne pa povsem enaka dvojiški aritmetiki v matematiki. Bit z najnižjo vrednostjo pomeni enico, naslednji dvojko, še naslednji štirico in tako naprej kot v dvojiškem sistemu. Predznačena cela števila pa so predstavljena kot dvojiški komplementi. Negativno celo število dobimo iz ustreznega pozitivnega celega števila, tako da invertiramo vse bite le-tega in prištejemo ena. Obseg celih števil v 32-bitnih računalnikih je zato od -2^31 do 2^31 -1. Z oznako ^ smo označili potenciranje: npr. 2^3 = 8. Dvaintrideseti bit se uporablja za oznako predznaka.

Nekateri programski jeziki puščajo tudi možnost nepredznačene aritmetike, kar pomeni navaden dvojiški sistem, pri katerem imamo na razpolago naravna števila in nič.

Večina procesorjev in programskih jezikov zmore tudi aritmetične operacije s plavajočo vejico. V vse novejše mikroprocesorje je sposobnost za tako računanje že vgrajena. Števila s plavajočo vejico ponujajo veliko širši razpon od celih števil, z njimi pa lahko izrazimo tudi ulomke. Načini, kako računamo z njimi, se med seboj nekoliko razlikujejo, vsi pa so preveč zapleteni, da bi o njihovih podrobnostih razpravljali na tem mestu. Njihova skupna značilnost je, da so podobni tako imenovanemu znanstvenemu zapisu, pri katerem število zapišemo kot denimo 6,022 * 10^26. Pri tem smo število razdelili na mantiso (6,022) in eksponent (26) z osnovo 10 (10^26 je število s šestindvajsetimi ničlami).

9.2 Znaki

Znaki so navadno predstavljeni kot nizi sedmih bitov, kodirani po kodnem razporedu ISO 646/ASCII (American Standard Code for Information Interchange, ameriški standardni kod za izmenjavo informacij). V sodobnih računalnikih je 128 znakov, ki jih kodira standard ASCII, kodiranih s spodnjimi sedmimi biti okteta (osembitnega zloga ali bajta). Oktete lahko zlagamo v strojne besede -- beseda s šestimi črkami tako obsega dve strojni besedi v pomnilniku. Razpored kodnega standarda ASCII dobimo z ukazom man 7 ascii.

V prejšnjem odstavku sta dve nepopolnosti. Manjša je uporaba izraza oktet -- čeravno je tehnično točen, ga skoraj nihče ne uporablja, ampak oktetom kratko malo pravijo bajt ali zlog in predpostavljajo, da so bajti osembitni. Strogo vzeto, je bajt sicer širši pojem -- starejši 36-bitni računalniki so, denimo, računali z devetbitnimi bajti, vendar pa danes -- in verjetno nikoli več -- praktično ni v rabi računalnikov, ki ne bi uporabljali osembitnih bajtov.

Večja nepopolnost se nanaša na izbor kodnega nabora ASCII. V resnici si namreč večina z njim ne more kaj dosti pomagati. V naboru ASCII, ki je sicer povsem dober za angleško rabo v ZDA, manjkajo številne črke, ki jih uporabljajo drugi narodi. Celo v Veliki Britaniji je njegova raba omejena, saj ne pozna oznake za funt.

Težavo so poskušali odpraviti po več poteh. Večina uporablja osmi bit, ki ga ASCII ne uporablja, in tako pride do nabora z 256 znaki, katerega spodnjo polovico predstavlja ASCII. Najpogosteje rabljen izmed teh naborov je tako imenovani Latin-1 (formalno ISO 8859-1). To je tudi privzeti nabor znakov v Linuxu, HTML in Oknih X. Microsoft Windows uporablja mutirano izvedenko nabora Latin-1, v kateri so na mestih, ki jih Latin-1 iz zgodovinskih razlogov pušča prosta, dodani znaki, kot na primer levi in desni dvojni narekovaji. Nekaj o težavah, ki jih to povzroča, si lahko preberemo na strani http://www.fourmilab.ch/webtools/demoroniser/.

Latin-1 je povsem primeren za večino zahodnoevropskih jezikov, ne pa tudi za slovenščino. Ta si skupaj z drugimi srednje- in vzhodnoevropskimi jeziki (bošnjaščina, češčina, hrvaščina, lužiška srbščina, madžarščina, moldavščina, poljščina, romunščina, slovaščina in srbščina) deli nabor Latin-2 (ISO 8859-2). Še drugi jeziki in pisave (cirilica, grščina, hebrejščina, arabščina) uporabljajo preostale nabore iz družine ISO 8859. Več o tem na strani http://czyborra.com/charsets/iso8859.html.

Končna rešitev je 16-bitni standard Unicode ali ISO/IEC 10646-1:1993. V prvih 256 znakih se Unicode ujema s standardom ISO 8859-1. Naslednji znaki kodirajo pismenke, potrebne za zapis grščine, cirilice, armenščine, hebrejščine, arabščine, devanagarija, bengalščine, gurmukščine, orijščine, tamilščine, tajščine, laoščine, gruzijščine, tibetanščine, japonske katakane, celoten nabor korejskih hangulskih pismenk in unificiranih kitajsko/japonsko/korejskih (CJK) pismenk. Več podrobnosti na strani http://www.unicode.org/.


Naprej Nazaj Kazalo