Naprej Nazaj Kazalo

9. Kako hrani 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 lahko 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. Velikost strojne besede je najprimernejša velikost za premikanje informacije sem ter tja. Tehnično je enaka velikosti registrov - pomnilnih celic procesorja, ki služijo za aritmetične in logične operacije. Ko govorimo o 32- ali 64-bitnih računalnikih, mislimo na to.

Večina računalnikov - vključno 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 nadomestitev sedanje serije Pentium 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 na starejših računalnikih 286 dostop do večjih količin pomnilnika izjemno zapleten. Teh težav tukaj ne bomo obnavljali, saj starejših programerjev ne želimo spominjati na te more.

9.1 Števila

Cela števila so predstaljena bodisi kot strojne besede, bodisi kot pari strojnih besed, odvisno od velikosti strojne besede. Najbolj običajna 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 dalje, 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 na 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 takšno računanje že vgrajena. Števila s plavajočo vejico ponujajo mnogo š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 podobna takoimenovanemu 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 oz. bajta). Oktete lahko zlagamo v strojne besede - beseda s šestimi črkami tako zavzema dve strojni besedi v pomnilniku. Razpored kodnega standarda ASCII dobimo z ukazom man 7 ascii.

Prejšnji odstavek vsebuje dve nepopolnosti. Manjša od njiju je uporaba izraza oktet - čeravno je tehnično točen, ga skoraj nihče ne uporablja, ampak oktetom kratkomalo 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 sveta z njim ne more kaj dosti pomagati. V naboru ASCII, ki je sicer povsem dober za angleško rabo v ZDA, manjkajo mnoge črke, ki jih uporabljajo drugi narodi. Celo v Veliki Britaniji je njegova raba omejena, saj ne pozna znaka za funt.

Težavo so poskušali odpraviti na več načinov. Večina uporablja osmi bit, ki ga ASCII ne uporablja, in tako pride do nabora z 256 znaki, katerega spodnjo polovico predstavlja ASCII. Najpogosteje uporabljan med temi nabori je tako imenovan Latin-1 (formalno ISO 8859-1). Ta 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, 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 vzhodno-evropskimi 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 ostale nabore iz družine ISO 8859. Več o tem na strani http://czyborra.com/charsets/iso8859.html.

Končno rešitev predstavlja 16-bitni standard Unicode oziroma 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, celotnen nabor korejskih hangulskih pismenk in unificiranih kitajsko/japonsko/korejskih (CJK) pismenk. Več podrobnosti na strani http://www.unicode.org/.


Naprej Nazaj Kazalo