  Osnove Unixa in interneta
  Eric Raymond, esr@thyrsus.com
  v2.4, 12. junij 2001

  Na poljuden nain so opisane osnove delovanja osebnih raunalnikov,
  Unixu podobnih operacijskih sistemov in interneta.
  ______________________________________________________________________


  Kazalo


  1. Uvod

     1.1 Namen tega pisanja
     1.2 Nove izdaje
     1.3 Odzivi in popravki
     1.4 Podobni spisi

  2. Osnovna anatomija vaega raunalnika

  3. Kaj se zgodi, ko raunalnik vklopimo?

  4. Kaj se zgodi, ko se prijavimo v sistem?

  5. Kaj se zgodi, ko iz ukazne lupine poenemo program?

  6. Kako delujejo enote in prekinitve?

  7. Kako zmore raunalnik opravljati ve stvari naenkrat?

  8. Kako prepreimo, da bi procesi drug drugemu hodili v zelje?

     8.1 Virtualni pomnilnik: preprosta razlaga
     8.2 Virtualni pomnilnik: podrobnosti
     8.3 Enota za upravljanje pomnilnika

  9. Kako hrani raunalnik podatke v pomnilniku?

     9.1 tevila
     9.2 Znaki

  10. Kako so shranjeni podatki na disku

     10.1 Nizkonivojska struktura diska in datotenega sistema
     10.2 Imena datotek in imeniki

  11. Priklopne toke

     11.1 Pot do datoteke na disku
     11.2 Lastnitvo datotek, dovolilnice in varnost
     11.3 Kako gredo stvari lahko narobe

  12. Kako delujejo programski jeziki?

     12.1 Prevajani programski jeziki
     12.2 Tolmaeni programski jeziki
     12.3 Jeziki, prevajani v psevdokodo

  13. Kako deluje internet?

     13.1 Imena in naslovi
     13.2 Sistem domenskih imen
     13.3 Paketi in usmerjevalniki
     13.4 TCP in IP
     13.5 Uporabniki protokol HTTP

  14. Dodatno branje


  ______________________________________________________________________

  1.  Uvod


  1.1.  Namen tega pisanja


  Ta spis je pisan za tiste uporabnike Linuxa in interneta, ki se uijo
  s poskuanjem. To je sicer neprekosljiv nain, kako si pridobimo
  doloene veine, vendar pa vasih pusti nenavadne luknje v poznavanju
  osnov -- luknje, ki nam zato oteujejo kreativno razmiljanje in
  uinkovito odpravljanje napak, saj nam manjka dober miselni model, kaj
  se pravzaprav dogaja.

  V preprostem in jasnem jeziku bomo poskusili opisati, kako stvari
  delujejo. Ta opis je prirejen za ljudi, ki uporabljajo Unix ali Linux
  na osebnih raunalnikih (PC). Na sistem se bomo navadno sklicevali kot
  na Unix, saj je veina opisanih stvari neodvisna tako od strojnega
  okolja, kot od posamine izvedbe Unixa.

  Predpostavili bomo, da uporabljate osebni raunalnik s procesorjem
  Intel ali z njim zdruljiv. Podrobnosti so nekoliko drugane pri
  raunalnikih s procesorji Alpha, PowerPC ali katerimi drugimi, osnovni
  koncepti pa ostajajo enaki.

  e povedanih stvari ne bomo ponavljali. To po eni strani pomeni, da
  morate brati pazljivo, po drugi pa tudi, da bo vse prebrano nekaj
  novega. Dobra misel je, da prvi sestavek samo preletite, potem pa se
  vraate in prebirate razdelke, dokler vam ni vse jasno.

  Sestavek je delo, ki se neprestano razvija in dopolnjuje. Na eljo
  bralcev obasno dodamo nove razdelke, tako da se splaa vsake toliko
  asa vrniti in pogledati, kaj je novega.


  1.2.  Nove izdaje

  Nove izdaje spisa so periodino objavljene v noviarskih skupinah
  <news:comp.os.linux.help>,  <news:comp.os.linux.announce> in
  <news:news.answers>; aurirane izdaje pa so objavljene tudi na
  razlinih spletiih in strenikih FTP, med njimi tudi na streniku
  Linux Documentation Project.

  Najbolj aurna izdaja je vedno na voljo na naslovu
  <http://www.linuxdoc.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html>.
  Ob slovenskem prevodu, ki ga ravnokar berete in je na voljo na
  naslovu
  <http://www.lugos.si/delo/slo/HOWTO-sl/Unix-and-Internet-Fundamentals-HOWTO-sl.html>,
  je spis preveden tudi v poljino:
  <http://www.gszczepa.hg.pl/esr1iso2.htm>.


  1.3.  Odzivi in popravki


  Vpraanja in komentarje lahko naslovite na pisca, Erica S. Raymonda
  <esr@thyrsus.com>. Pripombe in kritike so vedno dobrodole. e posebej
  dobrodole so povezave na spletne strani, kjer so posamezni koncepti
  razloeni bolj v podrobnosti. e mislite, da ste v besedilu nali
  napako, bomo veseli, e jo javite, da jo bomo lahko v naslednji izdaji
  popravili. Vnaprej hvala!

  Pripombe na slovenski prevod naslovite na prevajalca: Primo Peterlin,
  <primoz.peterlin@biofiz.mf.uni-lj.si>.


  1.4.  Podobni spisi


  e to berete z namenom, da bi se nauili, kako postati heker, vas bo
  morda zanimal tudi spis ,,How To Become A Hacker FAQ``, dostopen na
  naslovu  <http://www.tuxedo.org/~esr/faqs/hacker-howto.html>. Med
  drugim vsebuje tudi nekaj povezav na druge uporabne vire.


  2.  Osnovna anatomija vaega raunalnika


  Elektronsko vezje, s katerim raunalnik dejansko rauna, imenujemo
  procesor. Ob njem je v raunalniku tudi notranji pomnilnik (v svetu
  DOS/Windows znan tudi kot ,,RAM``,  uporabniki Unixa pa ga dostikrat
  imenujejo tudi ,,core`` -- spomin na ase, ko je bil notranji
  pomnilnik dejansko sestavljen iz feritnih obrokov). Procesor in
  pomnilnik sta nastanjena na matini ploi, ki je osrje raunalnika.

  Raunalnik ima tudi zunanje enote: monitor in tipkovnico, disk in
  disketnik. Monitor, disk in disketnik imajo svoje krmilnike --
  elektronske kartice, ki so prikljuene na matino ploo. Tipkovnica
  je tako enostavna enota, da ne potrebuje posebnega krmilnika, ampak je
  ta vgrajen kar v samo ohije tipkovnice.

  Pozneje bomo bolj v podrobnosti opisali, kako te enote delujejo. Za
  zdaj pa nekaj osnovnih stvari:

  Vsi deli raunalnika znotraj ohija so prikljueni na vodilo. Fizino
  je vodilo tisto, na kar prikljuimo krmilnike kartice (grafina
  kartica, krmilnik za disk, zvona kartica). Vodilo je podatkovna
  avtocesta med procesorjem, zaslonom, diskom, in vsem ostalim.

  e ste v povezavi z osebnimi raunalniki naleteli na izraze ISA, PCI
  ali PCMCIA, in niste vedeli, kaj pomenijo: to so vrste vodil. Vodilo
  ISA je razen nekaj podrobnosti enako, kot je bilo v prvotnem
  raunalniku IBM PC leta 1980, zdaj ga sreamo edalje bolj poredko.
  Vodilo PCI (Peripheral Component Interconnection) dandanes sreamo v
  vseh sodobnih raunalnikih, vkljuno z novejimi raunalniki
  Macintosh. PCMCIA je izvedba vodila ISA z drobnejimi prikljuki, ki
  se uporablja v prenosnikih.

  Procesor, ki poganja vse v raunalniku, ne more neposredno dostopati
  do drugih enot v raunalniku -- z njimi se mora sporazumevati po
  vodilu. Edina izjema pri tem je pomnilnik, do katerega ima procesor
  takoreko takojen dostop. Programi lahko teejo, e so naloeni v
  pomnilniku (core).

  Ko raunalnik prebere program ali podatke z diska, to stori tako, da
  zahtevek za branje po vodilu polje krmilniku diska. Nekaj pozneje
  krmilnik -- spet po vodilu -- sporoi procesorju, da je podatke
  prebral z diska in jih shranil na zahtevano mesto v pomnilniku.
  Procesor lahko tedaj dostopa do podatkov v pomnilniku.

  Tudi tipkovnica in monitor se s procesorjem sporazumevata po vodilu,
  vendar je to bolj preprosto. Ve o tem bomo povedali pozneje. Za zdaj
  je dovolj, e razumete, kaj se zgodi, ko vkljuite raunalnik.


  3.  Kaj se zgodi, ko raunalnik vklopimo?


  Izklopljen raunalnik, v katerem ne tee noben program, je zgolj
  inerten kup elektronskih vezij. Prva stvar, ki jo mora raunalnik ob
  vklopu opraviti, je pognati poseben program, ki se imenuje operacijski
  sistem. Njegova naloga je, da drugim programom pomaga tako, da nase
  prevzame umazane podrobnosti komuniciranja s strojno opremo.


  Angleki izraz za zagon operacijskega sistema je ,,booting``, kar
  izvira iz besede ,,bootstrap`` (jermenek na kornju, denimo
  kavbojskem). Zagon raunalnika iz zaetnega mrtvila z lastno mojo je
  namre nekaj podobnega, kot e bi se hoteli sami dvigniti v zrak, tako
  da bi se prijeli za jermenke na kornjih in vlekli navzgor. Ne bo
  lo. Raunalnik pa se lahko zaene z lastno mojo, ker ima navodila za
  zagon zapisana v enem od svojih ipov, tako imenovanem BIOS (Basic
  Input/Output System, osnovni vhodno-izhodni sistem).

  BIOS naroi procesorju, naj pogleda na dogovorjeno mesto, navadno na
  disk z najnijo tevilko (tako imenovani zagonski disk), in na njem
  poie poseben program, zagonski nalagalnik. V Linuxu se ta imenuje
  LILO. Zagonski nalagalnik se naloi v pomnilnik in poene. Njegova
  naloga je, da poene pravi operacijski sistem.

  Nalagalnik mora zato poiskati jedro operacijskega sistema, ga naloiti
  v pomnilnik in pognati. Ob zagonu Linuxa vidite napis ,,LILO``, ki mu
  sledi vrsta pikic. Takrat LILO nalaga jedro operacijskega sistema.
  Vsaka pikica pomeni, da je naloil en diskovni blok kode v pomnilnik.

  Zakaj je potreben vmesni korak z zagonskim nalagalnikom, namesto da bi
  BIOS kar sam naloil jedro v pomnilnik? Dva razloga sta za to. Prvi,
  BIOS za osebne raunalnike IBM PC in njim podobne je bil napisan pred
  ve kot dvajsetimi leti in v resnici ni sposoben uporabljati tako
  velikih diskov, kot so v rabi danes. In drugi, vmesna stopnja z
  zagonskim nalagalnikom nam takrat, ko imamo na disku nameenih ve
  operacijskih sistemov, ponuja monost, da izberemo, katerega bomo
  zagnali.

  Ko je jedro naloeno, se mora razgledati naokoli, poiskati preostanek
  strojne opreme in pripraviti na poganjanje programov.  Najprej se loti
  natannejega evidentiranja prikljuenih naprav. Preee tisti del
  naslovnega prostora, ki se imenuje vhodno-izhodna vrata (angl. I/O
  port). To je dogovorjeni nain sporazumevanja procesorja z vhodno-
  izhodnimi enotami. Iz odziva na V/I vratih jedro poskusi ugotoviti,
  katere naprave ima na voljo. Ta stopnja je znana kot ,,autoprobing``.
  Opazujemo jo lahko ob zagonu, ko jedro sproti izpisuje na zaslon,
  katere naprave je nalo.

  Jedro Linuxa je zelo dobro pri prepoznavanju strojne opreme, bolje od
  veine drugih Unixov in veliko bolje od sistemov DOS ali Windows.
  Mnogi stari linuxovski maki so celo mnenja, da je spretnost Linuxa
  pri prepoznavanju strojnega okolja -- kar posledino pomeni relativno
  enostavnost namestitve -- bila kljuna za to, da je od vseh prostih
  izvedb Unixa ravno Linux pridobil kritino maso uporabnikov.

  S tem, ko se je jedro naloilo v pomnilnik in tee, zagona e ni
  konec. To je le prva raven delovanja (angl. run level 1). Po prvi
  stopnji, jedro preda nadzor posebnemu procesu, imenovanemu init, ki
  nadalje poene e ve strenikih procesov.

  Init najprej pregleda, ali je zapis na diskih videti normalen. e je,
  jih priklopi. Lahko pa se zgodi, da ni -- morda je z diskom v resnici
  kaj narobe ali pa samo sistem nazadnje ni bil pravilno ugasnjen in so
  podatki na disku ostali nekako napol zapisani. To se rado zgodi, e
  sredi dela zmanjka elektrike. Jedro poskusi zapise na disku spraviti v
  red in e misli, da je uspelo, disk priklopi. Pozneje si bomo v
  razdelku ``Kako gredo stvari narobe'' ogledali spravljanje zapisov v
  red bolj v podrobnosti.

  V naslednjem koraku init poene vrsto specializiranih strenikih
  procesov. Angleki izraz zanje je daemon. To so programi, ki teejo,
  ne da bi karkoli brali s tipkovnice ali pisali na zaslon. Vsak od njih
  skrbi za svoje opravilo, na primer tiskanje, izvajanje periodinih
  opravil in podobno. Vsak od njih mora koordinirati potencialno
  konfliktne zahtevke. Zakaj vsakega zahtevka ne obdeluje svoj proces?
  Zaradi enostavnosti. Bolj enostavno je napisati streniki proces, ki
  ves as tee in ve vse o zahtevkih, kot pa skrbeti, da si cel trop
  procesov, ki obdelujejo vsak svoj zahtevek, teejo pa lahko tudi vsi
  hkrati, ne hodi po prstih. Nabor strenikih procesov, ki se zaenejo
  ob zagonu, se razlikuje od sistema do sistema; skoraj vedno pa je med
  njimi tiskalniki strenik.

  e en korak naprej se init pripravi na gostitev uporabnikov, in poene
  program, imenovan getty. Ta pazi, kaj se dogaja na konzoli, torej
  tipkovnici. Dodatne kopije istega programa morda pazijo tudi na
  terminalske in telefonske linije. Getty je tisti, ki izpie pozivnik
  login, ki ga sreamo ob prijavi. Ko teejo vsi streniki procesi, in
  procesi getty pazijo na tipkovnico in vse terminalske linije, smo na
  drugi ravni delovanja (run level 2). Na tej toki se lahko prijavimo v
  sistem in poenemo svoje programe.

  A nismo e konali. Ko sistem tee, je naslednji korak zagon
  strenikov za razline omrene storitve (sprejemanje in poiljanje
  pote, streenje spletnim zahtevkom ipd.). Ko se zaenejo ti, smo na
  tretji ravni delovanja (run level 3), sistem pa je v celoti
  pripravljen za delo.


  4.  Kaj se zgodi, ko se prijavimo v sistem?


  Ko vtipkamo uporabniko ime pri pozivniku, ki ga izpie getty, se s
  tem predstavimo raunalniku. Getty na primer br preda naslednjemu
  programu z imenom login in umre. Proces login nas povpraa po geslu,
  in ko ga podamo, preveri, ali smo upravieni do dostopa do
  raunalnika. e nismo, bo poskus prijave zavrnjen. e smo, pa login
  postori e nekaj administrativnih opravil, potem pa poene ukazno
  lupino.  V resnici pravzaprav ni potrebno, da sta getty in login
  razlina programa. To je ostalina iz nekdanjih asov, vendar pa o
  razlogih tu ne bi izgubljali besed.

  e nekaj ve o tem, kaj sistem pone, preden poene ukazno lupino --
  to bomo potrebovali pozneje, ko bomo govorili o dovolilnicah za
  datoteke. Raunalniku se predstavimo z uporabnikim imenom in geslom.
  Ob prijavi login preveri, ali v datoteki /etc/passwd obstaja vrstica
  za podano uporabniko ime. Vsakemu uporabnikemu raunu ustreza zapis
  (fizino ena vrstica) v tej datoteki.

  Zapis o posameznem uporabnikem raunu je razdeljen na polja. Eno od
  teh polj vsebuje ifrirano obliko gesla za uporabniki raun (ponekod
  so ifrirana gesla hranjena loeno, v datoteki /etc/shadow, ki ima
  stroje omejitve za branje -- to e dodatno pripomore k veji varnosti
  sistema). Geslo, ki ga vtipkate, se ifrira z enakim postopkom, nato
  pa login preveri, ali se ifrirano geslo ujema s ifriranim geslom v
  datoteki /etc/passwd. Varnost tega postopka lei v ifrirnem postopku
  -- gesla se ifrirajo z algoritmom, s katerim je ifriranje bistveno
  laje od deifriranja. Zato nekomu, ki je izvedel nae ifrirano
  geslo, to e vedno ne omogoa dostopa do sistema. Po drugi strani pa
  tudi mi sami, e smo geslo sluajno pozabili, nimamo praktino nobene
  monosti, da bi ga izvedeli -- sistemski upravnik ga lahko kvejemu
  spremeni v neko drugo geslo.

  Ko smo uspeno prijavljeni, nam pripadejo vse pravice, ki pritiejo
  naemu uporabnikemu raunu. Poleg tega smo lahko tudi lani ene ali
  ve skupin uporabnikov. Skupina uporabnikov -- ustvari jo lahko
  upravnik sistema -- ima pravice, neodvisne od pravic posameznih
  lanov. Ve o ``pravicah'' do dela z datotekami bomo povedali pozneje.

  (eprav se na uporabnika imena in skupine navadno sklicujemo z
  njihovimi imeni, so v resnici shranjena kot tevilne identifikacijske
  vrednosti. Datoteka z gesli /etc/passwd vsebuje preslikavo med
  uporabnikimi imeni in identifikacijskimi tevilkami (angl. user
  identification, UID), datoteka /etc/group pa preslikavo med imeni
  skupin in identifikacijskimi tevilkami skupin (group identification,
  GID). Vsi ukazi, ki imajo opraviti z uporabnikimi rauni ali
  skupinami, opravijo pretvorbo avtomatino.)

  Zapis o uporabnikem raunu v datoteki /etc/passwd vsebuje tudi
  podatke o domaem imeniku posameznega uporabnika. To je prostor v
  strukturi imenikov, namenjen naim osebnim datotekam. In, ne nazadnje,
  zapis o uporabnikem raunu vsebuje tudi podatek o tem, katero ukazno
  lupino uporabljamo, in ta se bo pognala vedno, ko se prijavimo v
  sistem.


  5.  Kaj se zgodi, ko iz ukazne lupine poenemo program?


  Ukazna lupina je tolma, ki ga Unix uporablja za ukaze, ki jih
  vtipkamo. Lupina ji pravimo zato, ker ovija in skriva jedro
  operacijskega sistema. Pomembna lastnost Unixa je, da sta jedro in
  ukazna lupina dva loena programa, ki se sporazumevata prek razmeroma
  majhnega tevila sistemskih klicev. To omogoa obstoj ve razlinih
  ukaznih lupin, od katerih vsaka ustreza svojemu okusu glede
  uporabnikih vmesnikov.

  Obiajno se nam ukazna lupina po prijavi oglasi s pozivnikom $ (razen
  e tega nismo ukrojili po svoje). Tu ne bomo izgubljali besed o
  skladnji ukazne lupine in enostavnih trikih, ki jih lahko priaramo na
  zaslon -- namesto tega si bomo s stalia raunalnika ogledali, kaj se
  dogaja v ozadju.

  Po zagonu, in preden poenemo kak program, si lahko raunalnik
  predstavljamo kot cel zverinjak procesov, ki vsi akajo, da se bo
  zgodilo nekaj, na kar se bodo odzvali. akajo na dogodke (angl.
  event). Dogodek je lahko pritisk tipke ali premik mike. e je
  raunalnik vkljuen v omreje, je dogodek lahko tudi podatkovni paket,
  ki je prispel iz omreja.

  Eden teh procesov je tudi jedro. Jedro je poseben proces, saj doloa,
  kdaj lahko teejo uporabniki procesi, navadno pa je tudi edini
  proces, ki lahko dostopa do strojne opreme. Uporabniki procesi morajo
  zato nasloviti zahtevek jedru, e elijo prebrati vnos s tipkovnice,
  izpisati znak na zaslon, zapisati ali prebrati podatke z diska, in
  bolj ali manj karkoli razen mletja podatkov v pomnilniku. Takim
  zahtevkom jedru pravimo sistemski klici.

  Praviloma gredo vse vhodno-izhodne operacije prek jedra, tako da lahko
  to razporedi zahtevke in preprei, da bi ti drug drugemu hodili v
  zelje. Izjemoma je procesu dovoljeno, da zaobide jedro in neposredno
  komunicira z vhodno-izhodnimi vrati. Strenik X (program, ki v veini
  sistemov Unix obravnava zahtevke drugih programov za pisanje po
  zaslonu) je ena takih izjem. A nismo e pri strenikih X -- za zdaj se
  ukvarjamo s pozivnikom ukazne lupine v tekstovnem nainu.

  Ukazna lupina je zgolj uporabniki proces, in ni kaj posebno
  odlikovan. aka na pritisk tipk, tako da (prek jedra) bere vhodno-
  izhodna vrata tipkovnice. Ko jedro zazna pritisk tipke, ga izpie na
  zaslon. e je to tipka Enter, jedro poda celotno natipkano vrstico
  ukazni lupini. Ta jo zatem poskusi raztolmaiti kot niz ukazov.

  Denimo, da smo z namenom, da bi pognali program, ki izpie seznam
  datotek, vtipkali ls. Ukazna lupina uporabi vgrajena pravila in z
  njihovo pomojo ugotovi, da elimo izvesti datoteko /bin/ls. Zato s
  sistemskim klicem posreduje jedru zahtevek, naj poene datoteko
  /bin/ls. To ga poene kot proces potomec ukazne lupine (ki je
  zahtevala njegovo ustvarjenje), in na potomca prestavi pravice ua
  dostop do tipkovnice in zaslona. Dokler /bin/ls ne opravi svojega,
  ukazna lupina spi, na zaslon pa se izpisuje izhod procesa potomca.

  Ko /bin/ls kona, novico o zakljuku s sistemskim klicem exit sporoi
  jedru. Jedro prebudi speega roditelja in mu vrne pristojnosti za
  dostop do tipkovnice in zaslona. Ukazna lupina izpie pozivnik in spet
  aka na novo vrstico ukazov.

  Medtem, ko se ukaz ls izvaja, se lahko dogajajo e druge rei
  (predpostavimo, da gre za zelo dolg seznam datotek):  poenemo lahko
  drugo virtualno konzolo, se prijavimo, poenemo igrico, in podobno.
  Ali, e je raunalnik vkljuen v omreje, lahko medtem, ko se izvaja
  /bin/ls, poilja ali sprejema poto.


  6.  Kako delujejo enote in prekinitve?


  Tipkovnica je zelo enostavna vhodna enota: enostavna, ker generira
  majhne koliine podatkov, in to zelo poasi (za raunalnike pojme).
  Ko pritisnemo tipko, elektronika v tipkovnici po kablu sporoi
  zahtevek po strojni prekinitvi.

  Naloga operacijskega sistema je, da pazi na takne zahtevke. Za vsako
  vrsto prekinitve obstoja prekinitveni servisni program, ki je del
  jedra operacijskega sistema, ki prebere in vse potrebne podatke o
  prekinitvi -- v tem primeru kodo pritisnjene ali spuene tipke -- in
  jih shrani, dokler ne pridejo na vrsto za obdelavo.

  Prekinitveni servisni program za tipkovnico ima razmeroma lahko delo
  -- kode tipk prepie na sistemsko obmoje v pomnilniku. Tam bodo
  poakale, da jih pregleda program, ki ga je jedro trenutno pooblastilo
  za branje s tipkovnice.

  Tudi bolj zapletene vhodne enote, denimo disk ali omrena kartica,
  delujejo podobno. Prej smo omenili, da diskovni krmilnik po vodilu
  sporoi, ko je zahtevek za branje z diska izveden.  V resnici diskovni
  krmilnik sproi zahtevek za prekinitev. Prekinitev prestree ustrezni
  servisni program, ta pa prepie podatke v pomnilnik in poskrbi, da bo
  program, ki je sproil zahtevo po prebiranju diska, podatke tudi
  nael.

  Prekinitve so razvrene po prednostnih ravneh, s imer je doloen
  vrstni red obdelave prekinitev. Prekinitve z nizko pomembnostjo
  (denimo tipkovnica) morajo poakati, da se najprej obdelajo morebitne
  prekinitve z visoko pomembnostjo (ura, disk). Unix daje prednost
  dogodkom, ki morajo biti obdelani hitro, da lahko sistem tee im bolj
  gladko.

  Med sporoili ob zagonu ste morda opazili oznake IRQ, ki so jim
  sledile razline tevilke. Morda veste tudi, da je eden od pogostih
  nainov, kako raunalnik slabo nastavimo, ta, da dvema enotama
  doloite, naj uporabljata isti IRQ -- ne veste pa povsem, zakaj je
  tako.

  Tu je odgovor. IRQ je kratica za ,,interrupt request`` (angl. zahtevek
  za prekinitev). Operacijski sistem ob zagonu ugotovi, katera enota bo
  uporabljala prekinitev s katero tevilko, in ji priredi ustrezni
  prekinitveni servisni program. e bi dve napravi nenadzorovano
  uporabljali isti signal IRQ, bi zahtevke z ene od naprav obdelal
  napaen servisni program. V najboljem primeru to pomeni vsaj to, da
  je enota blokirana, nekatere operacijske sisteme pa lahko tak odziv
  vasih zmede tako hudo, da se zruijo.


  7.  Kako zmore raunalnik opravljati ve stvari naenkrat?


  Saj jih v resnici ne. Raunalnik lahko obenem opravlja le eno opravilo
  (ali proces) naenkrat. Pa pa lahko raunalnik izjemno hitro
  preklaplja med opravili, tako da mnogo poasnejim ljudem ustvari
  privid hkratnega izvajanja. Temu pravimo tudi sistem z dodeljevanjem
  asa.

  Eno od opravil jedra je tudi dodeljevanje procesorskega asa procesom.
  Ta del jedra se imenuje razporejevalnik opravil (angl. scheduler), in
  v sebi hrani vse potrebne podatke za vse uporabnike procese v
  zverinjaku. Vsako stotinko sekunde se v jedru sproi prekinitev;
  prestree jo razporejevalnik in zaasno ustavi proces, ki trenutno
  tee, ter poene naslednji proces s seznama.

  Stotinka sekunde se morda ne slii dosti, vendar pa dananji
  mikroprocesorji v tem asu izvedejo na tisoe strojnih ukazov, ki
  lahko postorijo kar nekaj. Tako da, tudi e obenem tee veliko
  procesov, lahko vsak od njih vseeno opravi kar nekaj v dodeljenem mu
  asu.

  V praksi program ni vedno deleen vsega razpololjivega asa. e med
  izvajanjem prispe zahtevek za prekinitev, jedro ustavi trenutno
  opravilo in poene prekinitveni servisni program. ele ko ta opravi
  svoje, se zane tekoe opravilo spet izvajati. Plaz prekinitev visoke
  pomembnosti lahko tako povsem zaustavi normalno obdelavo -- na sreo
  pa pri sodobnih Unixih redko pride do tega.

  Hitrost, s katero se program izvaja, je v resnici zelo redko omejena s
  procesorskim asom, ki mu je na voljo (izjema so seveda raunsko
  intenzivne operacije, denimo generiranje zvoka ali tridimenionalne
  grafike). Dosti pogosteje so zastoji pogojeni s tem, da program aka
  na podatke z diska ali omreja.

  Operacijski sistem, ki podpira ve hkratnih procesov imenujemo
  veopravilni sistem. Druina operacijskih sistemov Unix je bila
  zasnovana z mislijo na veopravilnost in je v tem pogledu zelo dobra
  -- dosti bolj uinkovita kot Windows ali Mac OS, pri katerih so
  veopravilnost dodali pozneje, in je izvedena slabe. Uinkovita in
  zanesljiva veopravilnost je v veliki meri zasluna za uspeh Linuxa
  kot omrenega strenika.


  8.  Kako prepreimo, da bi procesi drug drugemu hodili v zelje?


  Razporejevalnik opravil skrbi za asovno loitev procesov, torej za
  to, da si naenkrat lasti procesor le en proces. Poleg tega moramo
  procese loiti tudi prostorsko, tako da procesi uporabljajo le kos
  pomnilnika, ki jim je dodeljen, ne pa tudi prostora, dodeljenega
  drugim procesom. Celo e predpostavimo, da bi programi poskuali biti
  kooperativni, ne moremo dopustiti, da bi napaka v enem od njih
  pokodovala druge. Naloge operacijskega sistema v zvezi z
  dodeljevanjem prostora so znane pod imenom upravljanje pomnilnika
  (angl. memory management).

  Vsak proces v zverinjaku potrebuje svoj kos pomnilnika, torej prostor,
  v katerem bo izvajal svojo kodo ter hranil spremenljivke in rezultate.
  Lahko si zamislimo, da del tega prostora zaseda programski segment, ki
  hrani programske ukaze v strojnem jeziku in iz katerega lahko samo
  beremo, ter podatkovni segment, ki vsebuje vse spremenljivke,
  uporabljene v programu, in v katerega je mogoe tudi pisati.
  Podatkovni segment se res razlikuje od enega procesa do drugega;
  programski pa ne nujno: e dva procesa poganjata isto programsko kodo,
  Unix varuje s prostorom in samodejno poskrbi, da je programski
  segment naloen v pomnilnik samo enkrat.


  8.1.  Virtualni pomnilnik: preprosta razlaga


  Uinkovitost ravnanja s prostorom je pomembna, saj je pomnilnik drag.
  Vasih ga nimamo dovolj, da bi naenkrat drali v pomnilniku vse
  programe, ki se izvajajo, e posebej, e je med njimi kak velik
  program, denimo strenik X. Unix teavo zaobide s tehniko, ki je znana
  kot virtualni pomnilnik. Jedro ne poskua drati v pomnilniku celotne
  kode in podatkov za posamezni proces, ampak samo relativni manji
  delovni nabor. Preostanek pomnilnike slike procesa je shranjen na
  posebnem prostoru na disku (tako imenovani izmenjalni prostor).

  V preteklosti, ko so imeli raunalniki malo pomnilnika, je ,,vasih``
  iz prejnjega odstavka pomenilo ,,skoraj vedno``. Dandanes pomnilnik
  ni ve tako drag, kot je bil vasih, in celo raunalniki s spodnjega
  konca lestvice ga premorejo kar precej. Na sodobnih enouporabnikih
  raunalnikih, ki imajo 64 ali ve megabajtov pomnilnika, je mogoe
  poganjati okna X in obiajno paleto opravil, ne da bi bilo treba
  uporabiti izmenjalni prostor.


  8.2.  Virtualni pomnilnik: podrobnosti


  V prejnjem razdelku smo stvari namenoma poenostavili. Dri, da
  programi obravnavajo pomnilnik kot dolgo vrsto pomnilnikih naslovov,
  ki lahko presega fizini pomnilnik, in da to iluzijo vzdrujemo z
  diskovnim izmenjavanjem. Vendar pa premore obiajni raunalnik ni
  manj kot pet razlinih vrst pomnilnika, in razlike med njimi so
  pomembne, kadar moramo iz raunalnika iztisniti kar najve. Da bi
  resnino razumeli, kaj se dogaja v raunalniku, moramo razumeti tudi,
  kako delujejo posamezne vrste pomnilnika.

  Pet vrst pomnilnika je: procesorski registri, notranji predpomnilnik
  (na samem ipu), zunanji predpomnilnik (na loenem ipu), glavni
  pomnilnik, ter disk. Razlog za toliko razlinih vrst pomnilnika je en
  sam: hitrost se plaa. Nateli smo jih od najhitrejega do
  najpoasnejega, oziroma od najdrajega do najcenejega. Registri so
  najhitreja in najdraja oblika pomnilnika, do njih pa lahko dostopamo
  priblino milijardokrat na sekundo. Disk je najpoasneja in
  najceneja oblika; do podatkov na njem lahko dostopamo priblino
  stokrat na sekundo.

  Sledi seznam z vrednostmi za obiajni namizni raunalnik, kot so bile
  aktualne spomladi leta 2000.  Hitrost in velikost bosta s asom
  naraali, cene pa padale, vendar pa lahko priakujete, da bodo
  razmerja med njimi ostala bolj ali manj enaka. In ta razmerja doloajo
  pomnilniko hierarhijo.


     Disk
        Velikost 13.000 MB  Hitrost:  100 KB/s

     Pomnilnik
        Velikost    256 MB  Hitrost:  100 MB/s

     Zunanji predpomnilnik
        Velikost    512 KB  Hitrost:  250 KB/s

     Notranji predpomnilnik
        Velikost     32 KB  Hitrost:  500 KB/s

     Register
        Velikost     28 B   Hitrost: 1000 KB/s

  Celotnega raunalnika ne moremo zgraditi iz najhitreje vrste
  pomnilnika. Dosti predrago bi bilo -- in celo e to ne bi bilo res,
  hitri pomnilnik ni trajen. Br ko izkljuimo napajanje, izgubi svojo
  vrednost. Zato morajo raunalniki imeti tudi neko vrsto trajnega
  pomnilnika -- npr. disk -- ki ohrani svojo vrednost tudi, ko izklopimo
  napajanje. Med hitrostjo procesorjev in hitrostjo diskov pa zeva
  ogromna vrzel. Srednje tri ravni v hierarhiji procesorjev -- notranji
  predpomnilnik, zunanji predpomnilnik in glavni pomnilnik -- obstajajo
  zgolj, da premostijo to vrzel.

  Linux in drugi Unixi uporabljajo virtualni pomnilnik. To pomeni, da se
  operacijski sistem vede, kot da bi imel na razpolago dosti ve
  pomnilnika, kot pa ga je dejansko na voljo. Fizini pomnilnik se
  obnaa kot vrsta ,,oken`` na mnogo vejem ,,virtualnem`` pomnilniku,
  katerega veina je v katerem koli trenutku shranjena na disku, na
  posebnem prostoru, imenovanem izmenjalni prostor. Ne da bi se
  uporabniki procesi tega zavedali, operacijski sistem sproti prenaa
  bloke podatkov (takemu bloku pravimo tudi page, slov. stran) iz
  pomnilnika na disk in nazaj, in tako ustvarja iluzijo velikega
  pomnilnika. Konni rezultat je, da je tak virtualni pomnilnik dosti
  veji, pa niti ne dosti poasneji od fizinega.

  Koliko poasneji je virtualni pomnilnik od fizinega je odvisno od
  tega kako dobro algoritmi za izmenjevanje v operacijskem sistemu
  predvidijo porabo pomnilnika. Na sreo veina sklicev na pomnilnike
  lokacije, ki si sledijo v kratkem asu, bere oziroma pie v
  pomnilnike lokacije, ki so tudi prostorsko blizu skupaj. Ta lepa
  lastnost je znana kot lokalnost, oziroma lokalnost sklicevanja. e bi,
  nasprotno, bili pomnilniki sklici nakljuno raztreseni po celotnem
  pomnilnikem prostoru, bi morali ob vsakem sklicu na pomnilniko
  lokacijo prebrati podatke z diska, in virtualni pomnilnik bi bil enako
  poasen kot disk. Ker pa programi kaejo lokalnost, lahko operacijski
  sistem opravi pomnilnika sklicevanja z razmeroma malo branja z diska.

  Izkustveno je bilo ugotovljeno, da je najuinkoviteja metoda za
  iroko paleto vzorcev rabe pomnilnika nadvse preprosta: algoritem se
  imenuje LRU (angl. Least Recently Used, ,,tisti, ki najdlje ni bil
  rabljen``). Mehanizem za virtualni pomnilnik naloi diskovni blok v
  svoj delovni nabor, ko se za to pokae potreba. e fizinega
  pomnilnika ni ve na voljo, iz njega zbrie blok, ki najdlje ni bil
  rabljen. Vse razliice Unixa, kot tudi veina drugih operacijskih
  sistemov, ki uporabljajo virtualni pomnilnik, uporablja to ali ono
  razliico algoritma LRU.

  Virtualni pomnilnik je prvi len v premostitvi vrzeli v hitrostih
  diska in procesorja, in ga izrecno upravlja operacijski sistem.
  Podobna, eprav nekaj manja vrzel zeva tudi med hitrostjo glavnega
  pomnilnika in hitrostjo procesorja. Notranji in zunanji predpomnilnik
  reujeta ta problem s tehniko, ki je podobna pravkar opisani.

  Tako kot se fizini glavni pomnilnik obnaa kot vrsta oken v
  izmenjalnem prostoru na disku, se tudi zunanji predpomnilnik obnaa
  kot okna v glavnem pomnilniku. Zunanji predpomnilnik je hitreji od
  glavnega (250 milijonov dostopov na sekundo proti 100 milijonom), a
  manji. Raunalnik - natanneje, upravljalnik pomnilnika - izvaja v
  njem algoritem LRU na blokih podatkov iz glavnega pomnilnika. Iz
  zgodovinskih razlogov se tu pomnilnika enota imenuje ,,vrstica``
  (angl. line) namesto ,,stran`` (angl. page).

  Nismo e konali. e zadnji korak v pospeitvi je notranji
  predpomnilnik. Ta izvaja algoritem LRU na blokih podatkov iz zunanjega
  pomnilnika. Je e hitreji in e manji - tako majhen pravzaprav, da
  je kar del mikroprocesorskega ipa.
  e bi radi napisali im hitreje programe, je dobro, da vemo te
  podrobnosti. Programi teejo tem hitreje, im vejo lokalnost imajo,
  saj je tedaj algoritem LRU bolj uinkovit. Najenostavneji nain, da
  doseemo, da so programi hitri, je, da so majhni. e programa ne
  zavira kopica branj in pisanj z diska ali omreja, bo navadno tekel s
  hitrostjo najmanjega predpomnilnika, v katerega ga lahko shranimo.

  e ne moremo napraviti celotnega programa tako majhnega, se vasih
  splaa potruditi in asovno kritine dele napisati tako, da so im
  bolj lokalni. Podrobnosti tehnik za takna fina uglaevanja presegajo
  ta navodila; do takrat, ko jih boste potrebovali, boste verjetno e
  dovolj domai s prevajalnikom, da boste mnoge od njih odkrili sami.


  8.3.  Enota za upravljanje pomnilnika


  Celo e imamo na voljo dovolj fizinega pomnilnika, da diskovno
  izmenjevanje ni potrebno, ima del operacijskega sistema, zadolen za
  upravljanje pomnilnika, e vedno pomembno nalogo. Paziti mora na to,
  da lahko vsak program spreminja le svoj podatkovni segment --
  prepreiti mora torej, da bi okvarjen ali zlonameren program
  pokodoval podatke, ki pripadajo drugemu programu. Zato vodi
  knjigovodstvo o uporabljenih podatkovnih in programskih segmentih.
  Vsaki, ko program zahteva dodatni pomnilnik, ali pa ko sprosti
  pomnilnik (slednje se navadno zgodi, ko program zakljui z delom),
  mora aurirati tabelo.

  Tabela se uporablja za posredovanje ukazov specializiranemu kosu
  strojne opreme, imenovanem MMU (angl. memory management unit, enota za
  upravljanje pomnilnika). Sodobni mikroprocesorji imajo enoto MMU e
  integrirano na sam procesorski ip. Enota MMU ima monost, da
  ,,ogradi`` posamezna obmoja pomnilnika, tako da so poskusi poseganja
  izven tega obmoja zavrnjeni in izzovejo posebno vrsto prekinitve.

  e ste v Unixu e kdaj naleteli na napako ,,Segmentation fault, core
  dumped`` ali kaj podobnega -- to je to. Proces je poskusil posei po
  delu pomnilnika izven svojega podatkovnega segmenta, kar mu je
  operacijski sistem prepreil in ga prisilno zakljuil. Takno
  obnaanje je posledica napake v programu -- datoteka core s
  pomnilniko sliko procesa ob smrti, ki jo operacijski sistem ob tej
  priliki zapie na disk, je diagnostina informacija, ki naj bi bila v
  pomo programerju pri iskanju napake.

  Poleg omejitve pomnilnika obstaja e en vidik varovanja procesov pred
  drugimi procesi. Nadzor elimo imeti tudi nad dostopom do datotek,
  tako da okvarjen ali zlonameren program ne more pokodovati katere od
  kljunih datotek na disku. Zato pozna Unix ``dovolilnice za
  datoteke'', o katerih bomo ve povedali pozneje.


  9.  Kako hrani raunalnik podatke v pomnilniku?


  Verjetno veste, da je v raunalniku vse shranjeno kot zaporedje bitov
  (angl. binary digit, dvojika tevka - mislimo si jih lahko kot
  stikala, ki so lahko vkljuena ali izkljuena). Tu bomo razloili,
  kako lahko z biti predstavimo v raunalniku tevilke in rke.

  Preden se spustimo v razlago, si moramo razjasniti e pojem velikosti
  strojne besede. Velikost strojne besede je najprimerneja velikost za
  premikanje informacije sem ter tja. Tehnino je enaka velikosti
  registrov - pomnilnih celic procesorja, ki sluijo za aritmetine in
  logine operacije. Ko govorimo o 32- ali 64-bitnih raunalnikih,
  mislimo na to.

  Veina raunalnikov - vkljuno z osebnimi raunalniki s procesorji
  386, 486, Pentium ipd. - uporablja 32-bitno strojno besedo. Stareji
  osebni raunalniki (286) so uporabljali 16-bitno strojno besedo. Stari
  veliki raunalniki so pogosto uporabljali 36-bitno strojno besedo.
  Nekaj procesorjev, kot denimo Alpha drube DEC (ki jo je medtem kupil
  Compaq), uporablja 64-bitno strojno besedo. Uporaba te bo postala v
  prihodnjih letih e pogosteja: pri Intelu nartujejo nadomestitev
  sedanje serije Pentium z novimi 64-bitnimi procesorji Itanium.

  Raunalnik si predstavlja pomnilnik kot zaporedje besed, otevilenih
  od ni do neke velike vrednosti, doloene s koliino pomnilnika, ki jo
  imamo na voljo. Tudi koliina pomnilnika, ki jo lahko procesor
  naslavlja, je povezana z velikostjo strojne besede - to je bil vzrok,
  da je bil na starejih raunalnikih 286 dostop do vejih koliin
  pomnilnika izjemno zapleten. Teh teav tukaj ne bomo obnavljali, saj
  starejih 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
  obiajna predstavitev celih tevil je 32-bitna strojna beseda.

  Celotevilna aritmetika je podobna, ne pa povsem enaka dvojiki
  aritmetiki v matematiki. Bit z najnijo vrednostjo pomeni enico,
  naslednji dvojko, e naslednji tirico in tako dalje, kot v dvojikem
  sistemu. Predznaena cela tevila pa so predstavljena kot dvojiki
  komplementi. Negativno celo tevilo dobimo iz ustreznega pozitivnega
  celega tevila tako, da invertiramo vse bite le-tega in pritejemo
  ena. Obseg celih tevil na 32-bitnih raunalnikih je zato od -2^31 do
  2^31 -1. Z oznako ^ smo oznaili potenciranje: npr. 2^3 = 8.
  Dvaintrideseti bit se uporablja za oznako predznaka.

  Nekateri programski jeziki puajo tudi monost nepredznaene
  aritmetike, kar pomeni navaden dvojiki sistem, pri katerem imamo na
  razpolago naravna tevila in ni.

  Veina procesorjev in programskih jezikov zmore tudi aritmetine
  operacije s plavajoo vejico. V vse noveje mikroprocesorje je
  sposobnost za takno raunanje e vgrajena. tevila s plavajoo vejico
  ponujajo mnogo iri razpon od celih tevil, z njimi pa lahko izrazimo
  tudi ulomke. Naini, kako raunamo z njimi, se med seboj nekoliko
  razlikujejo, vsi pa so preve zapleteni, da bi o njihovih podrobnostih
  razpravljali na tem mestu. Njihova skupna znailnost je, da so podobna
  takoimenovanemu znanstvenemu zapisu, pri katerem tevilo zapiemo 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
  nilami).


  9.2.  Znaki


  Znaki so navadno predstavljeni kot nizi sedmih bitov, kodirani po
  kodnem razporedu ISO 646/ASCII (American Standard Code for Information
  Interchange, ameriki standardni kod za izmenjavo informacij). V
  sodobnih raunalnikih 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.

  Prejnji odstavek vsebuje dve nepopolnosti. Manja od njiju je uporaba
  izraza oktet - eravno je tehnino toen, ga skoraj nihe ne
  uporablja, ampak oktetom kratkomalo pravijo bajt ali zlog in
  predpostavljajo, da so bajti osembitni. Strogo vzeto je bajt sicer
  iri pojem - stareji 36-bitni raunalniki so denimo raunali z
  devetbitnimi bajti, vendar pa danes - in verjetno nikoli ve -
  praktino ni v rabi raunalnikov, ki ne bi uporabljali osembitnih
  bajtov.

  Veja nepopolnost se nanaa na izbor kodnega nabora ASCII. V resnici
  si namre veina sveta z njim ne more kaj dosti pomagati. V naboru
  ASCII, ki je sicer povsem dober za angleko 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.

  Teavo so poskuali odpraviti na ve nainov. Veina 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 pua prosta, dodani
  znaki kot na primer levi in desni dvojni narekovaji. Nekaj o teavah,
  ki jih to povzroa, lahko preberemo na strani
  <http://www.fourmilab.ch/webtools/demoroniser/>.

  Latin-1 je povsem primeren za veino zahodnoevropskih jezikov, ne pa
  tudi za slovenino. Ta si skupaj z drugimi srednje- in vzhodno-
  evropskimi jeziki (bonjaina, eina, hrvaina, luika srbina,
  madarina, moldavina, poljina, romunina, slovaina in
  srbina) deli nabor Latin-2 (ISO 8859-2). e drugi jeziki in pisave
  (cirilica, grina, hebrejina, arabina) uporabljajo ostale nabore
  iz druine ISO 8859. Ve o tem na strani
  <http://czyborra.com/charsets/iso8859.html>.

  Konno reitev 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 grine,
  cirilice, armenine, hebrejine, arabine, devanagarija,
  bengaline, gurmukine, orijine, tamiline, tajine, laoine,
  gruzijine, tibetanine, japonske katakane, celotnen nabor korejskih
  hangulskih pismenk in unificiranih kitajsko/japonsko/korejskih (CJK)
  pismenk. Ve podrobnosti na strani  <http://www.unicode.org/>.


  10.  Kako so shranjeni podatki na disku


  e si v Unixu pogledamo disk, vidimo drevo poimenovanih imenikov in
  datotek. Navadno nas globlji pogled ne zanima, vasih - denimo, ko se
  nam zrui disk in bi radi reili podatke na njem - pa je uporabno
  vedeti tudi, kaj se skriva za tem. Na alost ni nobenega dobrega
  naina, kako opisati organizacijo diska od ravni datotek navzdol, tako
  da bomo ubrali obratno smer, od strojne opreme navzgor.


  10.1.  Nizkonivojska struktura diska in datotenega sistema


  Povrina diska je razdeljena priblino tako, kot si sledijo polja pri
  tari za pikado: na koncentrine steze, vsaka od njih pa e naprej,
  radialno, na odseke. Ker so steze na zunanjem robu diska dalje kot
  tiste blije osi, so navadno razdeljene na ve odsekov kot notranje.
  Odseki ali diskovni bloki so enako veliki - pri sodobnih Unixih
  navadno 1 kB (1024 osembitnih besed). Vsak diskovni blok ima svoj
  naslov, tevilko diskovnega bloka.


  V Unixu je disk razdeljen na razdelke. Vsak razdelek vsebuje zaporedje
  diskovnih blokov, ki ga uporabljamo neodvisno od drugih razdelkov na
  disku. Razdelke lahko uporabimo bodisi kot datoteni sistem, bodisi
  kot izmenjalni prostor.  Razlogi za razdelitev diska na razdelke
  segajo e v ase diskov, ki so bili mnogo poasneji in so se
  pogosteje kvarili. Meje med razdelki so morebitno napako omejile na
  posamezni razdelek, tako da je preostanek diska ostal dostopen.
  Dandanes so pomembneje druge lastnosti razdelkov. Na posameznem
  razdelku lahko dovolimo samo branje, pisanja pa ne, in tako
  prepreimo, da bi morebitni vsiljivci spreminjali kritine sistemske
  datoteke. Posamezne razdelke lahko tudi po krajevnem omreju delimo z
  drugimi raunalniki, esar pa tu ne bomo opisovali v podrobnosti.
  Razdelek z najnijo zaporedno tevilko je posebej odlikovan. To je
  zagonski razdelek. Ob zagonu se z njega prebere jedro.

  Posamezni razdelek lahko uporabimo bodisi kot izmenjalni prostor (ki
  se uporablja za virtualni pomnilnik), bodisi za datoteni sistem, kjer
  so shranjene datoteke. Izmenjalni prostor jedro obravnava kot linearno
  zaporedje blokov, pri datotenem sistemu pa je vse skupaj nekoliko
  bolj zapleteno, saj potrebujemo evidenco o tem, kateri diskovni bloki
  pripadajo posamezni datoteki. Ker se datoteke s asom daljajo,
  krajajo in spreminjajo, je malo verjetno, da bo datoteki dodeljeni
  zaporedje diskovnih blokov. Bolj verjetno je, da bodo razpreni po
  celotnem razdelku, kjer bo pa operacijski sistem nael prostor.
  Takemu pojavu razprenosti blokov pravimo tudi fragmentacija.


  10.2.  Imena datotek in imeniki


  Vsaka datoteka in vsak imenik v datotenem sistemu je opisan s
  podatkovno strukturo, imenovano inod (angl. inode). Kazalo inodov
  najdemo pri ,,dnu`` (diskovni bloki z nijimi tevilkami) datotenega
  sistema (isto najniji bloki se uporabljajo za oznake in
  administrativne zadeve, o katerih tu ne bomo razpravljali). Podatkom
  (datotekam in imenikom) so namenjani diskovni bloki z vijimi
  tevilkami.

  Vsak inod vsebuje seznam diskovnih blokov, ki pripadajo posamezni
  datoteki (kar sicer ni isto res, oziroma je res samo za majhne
  datoteke, ampak s takimi podrobnostmi se tu ne bomo ukvarjali).
  Posebej bi poudarili, da inod ne vsebuje imena datoteke ali imenika.

  Ime datoteke (ali imenika) je shranjeno v imeniki strukturi. To
  kazalo je enostavneje od kazala inodov, saj obsega le preslikavo iz
  imen na tevilko inoda. Zdaj razumemo, zakaj imajo lahko v Unixu
  datoteke ve pravih imen (ali trdih povezav), saj ni nobenega razloga,
  zakaj ne bi moglo ve imen kazati na isti inod.


  11.  Priklopne toke


  V najpreprostejem primeru je celotni datoteni sistem Unixa shranjen
  na enem samem razdelku. eprav na tako situacijo naletimo vasih na
  majhnih sistemih za osebno rabo, ni obiajna. Navadno se sistem
  razteza prek ve razdelkov, vasih celo prek ve diskov. Tako imamo
  lahko na primer en isto majhen razdelek za jedro, veji razdelek za
  druge datoteke, ki spadajo k operacijskemu sistemu, in ogromen
  razdelek z uporabnikimi datotekami.

  Edini razdelek, do katerega imamo dostop takoj ob zagonu raunalnika,
  je korenski razdelek. Ta je skoraj vedno tisti razdelek, s katerega
  smo zagnali sistem. Vsebuje korenski imenik datotenega sistema - vrh
  razvejene drevesne strukture imenikov.

  Da lahko dostopamo do podatkov na ostalih razdelkih, morajo biti ti
  pridrueni korenskemu. Unix omogoi dostop do njih nekje sredi
  zagonskega postopka z operacijo, ki ji pravimo priklop (angl. mount).
  Razdelke priklopimo na obstojei imenik na korenskem razdelku.

  e imamo, denimo, imenik /usr, je to verjetno priklopna toka za
  razdelek, ki vsebuje tevilne programe Unixa, vendar pa noben od njih
  ni nujno potreben ob zagonu.


  11.1.  Pot do datoteke na disku


  Zdaj lahko na datoteni sistem spet pogledamo od vrha. Ko odpremo
  datoteko, denimo /home/esr/WWW/ldp/fundamentals.sgml, se zgodi
  naslednje.

  Jedro zane iskati pri korenu datotenega sistema (ta lei vedno na
  korenskem razdelku), in ie imenik /home. Navadno je /home le
  priklopna toka za velik razdelek z uporabnikimi programi, ki lei
  kje drugje, zato jedro sledi na ta razdelek. V vrhnji imeniki
  strukturi razdelka z uporabnikimi podatki jedro poie vnos esr in
  prebere tevilko pripadajoega inoda. Ko inodu sledi, ugotovi, da gre
  za imeniko strukturo, in v njej poie vnos WWW. Ko sledi temu inodu,
  pride spet do podimenika in v njem poie ldp, kar ga privede do e
  enega imenikega inoda.  Odpre ga in v njem poie inod za
  fundamentals.sgml. Ta inod ni imenik, ampak vsebuje seznam diskovnih
  blokov, ki pripadajo datoteki s podanim imenom.


  11.2.  Lastnitvo datotek, dovolilnice in varnost


  Da programi namerno ali nenamerno ne bi pokodovali podatkov, katerih
  ne smejo pokodovati, ima Unix urejen sistem dovolilnic. Prvotno - v
  asu, ko je Unix tekel predvsem na velikih in dragih miniraunalnikih
  - so se uporabljale na sistemih z dodeljevanjem asa, na katerih so
  uporabnike varovale pred drugimi uporabniki.

  Da bi razumeli dovolilnice za datoteke, se moramo spomniti opisa
  uporabnikov in skupin v razdelku ``Kaj se zgodi, ko se prijavimo v
  sistem''. Vsaka datoteka pripada doloenemu lastniku in doloeni
  skupini. Na zaetku ti zavzameta vrednosti, kot ju ima tisti, ki je
  datoteko ustvaril, pozneje pa ju lahko spremenimo z ukazoma chown(1)
  in chgrp(1).

  Osnovna dovoljenja, ki jih lahko vsebuje dovolilnica, so dovoljenje za
  branje, dovoljenje za pisanje (tudi brisanje ali spreminjanje) in
  dovoljenje za izvajanje (e je datoteka program). Dovolilnica vsebuje
  tri nabore dovoljenj: za lastnika; za kogarkoli drugega v skupini, ki
  ji datoteka pripada; ter za kogarkoli drugega. Pravice, ki jih
  pridobimo ob prijavi v sistem, so pravice do branja, pisanja in
  izvajanja tistih datotek, katerih dovolilnice se ujemajo z nao
  identifikacijsko tevilko ali katero od identifikacijskih tevilk
  skupin, ki jim pripadamo, ali pa datotek, ki so dostopne vsem.

  Oglejmo si izpis hipotetinega sistema, da vidimo, kako stvari
  delujejo in kako Unix prikae dovolilnice:

       snark:~$ ls -l notes
       -rw-r--r--   1 esr      users         2993 Jun 17 11:00 notes

  To je navadna podatkovna datoteka. Izpis seznama kae, da je njen
  lastnik esr, skupina, ki ji pripada, pa users. Najverjetneje sistem, v
  katerem je bila ustvarjena, privzeto postavi vsakega uporabnika v to
  skupino. Druge skupine, na katere tudi naletimo na veuporabnikih
  sistemih, so staff (osebje), admin (uprava) in wheel (sistem). Na
  enouporabnikih sistemih skupine nimajo posebnega pomena. Na nekaterih
  sistemih je privzeta skupina lahko drugana - dostikrat je kar enaka
  uporabnikemu imenu.

  Niz znakov -rw-r--r-- je dovolilnica za dano datoteko. Prvi minus kae
  imeniki bit. e bi bil namesto datoteke imenik, bi tam pisalo d.
  Sledijo mu tri mesta, ki kaejo dovoljenja lastnika (rw-); sledijo tri
  mesta, ki kaejo dovoljenja skupine (r--) in nazadnje so tri mesta z
  dovoljenji za vse ostale (r--). To datoteko lahko bere in spreminja
  samo lastnik (esr); berejo jo lahko vsi lani skupine users, in berejo
  jo lahko tudi vsi ostali. Takna dovolilnica je precej obiajna za
  navadne datoteke.

  Zdaj pa e zgled datoteke z nekaj drugano dovolilnico. Ta datoteka je
  GCC, prevajalnik GNU C.

       snark:~$ ls -l /usr/bin/gcc
       -rwxr-xr-x   3 root     bin         64796 Mar 21 16:41 /usr/bin/gcc

  Datoteka pripada uporabniku root in skupini bin. Spreminja jo lahko
  samo lastnik, bere in izvaja pa kdorkoli. Takna dovolilnica je
  obiajna za privzeto nameene sistemske ukaze. Skupina bin je na
  nekaterih Unixih lastnica sistemskih ukazov (bin je okrajava od
  ,,binaren``, kar naj bi namigovalo, da gre za programe). Na vaem
  sistemu morda ta datoteka pripada skupini root (razlikovati moramo med
  uporabnikom root in istoimensko skupino!).

  Uporabnik root z identifikacijsko tevilko 0 je poseben uporabniki
  raun s pravico, da zaobide vse varnostne mehanizme. To je obenem zelo
  uporabno in zelo nevarno. Napaka pri tipkanju, ko smo prijavljeni kot
  root, lahko pokoduje kritine sistemske datoteke, ki se jih isti
  ukaz, pognan z navadnega uporabnikega rauna, ne bi dotaknil.

  Ker je raun root tako moan, mora biti dostop do njega varovan zelo
  skrbno. Geslo za uporabnika root je najbolj kritien element varnosti
  sistema, in zatorej informacija, ki jo bodo morebitni vlomilci najprej
  iskali.

  Ko smo e pri geslih - ne zapisujte si jih nikamor, in ne izbirajte
  gesel, ki jih je enostavno uganiti, kot denimo ime dekleta, fanta,
  ene... To je osupljivo pogosta slaba navada, ki vlomilcem izjemno
  olaja delo. V splonem se izogibajte besedam iz slovarja - obstajajo
  programi, ki si pri ugibanju gesel pomagajo s slovarji. Dobra so gesla
  sestavljena iz besede, ki ji sledi tevka, in e ena beseda, denimo
  ,shark6cider` ali ,jump3joy`. S tem razirimo prostor monih besed
  toliko, da navadno ugibanje z iskanjem po slovarju ni ve uporabno.
  Seveda ne uporabite podanih zgledov - vlomilci so jih zdaj verjetno e
  dodali v svoje slovarke. Zelo uporabna navodila za spisal tudi Mark
  Martinec z IJS, najdemo jih na naslovu
  <http://www.ijs.si/dobro_geslo.html>.

  Pa e tretji zgled.

    snark:~$ ls -ld ~
    drwxr-xr-x  89 esr      users        9216 Jun 27 11:29 /home2/esr
    snark:~$

  Ta datoteka je imenik, kar spoznamo po oznaki  d, s katero se zane
  dovolilnica. Vidimo tudi, da lahko nanj pie le lastnik (esr) berejo
  in izvajajo pa vsi.

  Dovoljenje za branje nam dovoljuje, da izpiemo seznam datotek (in
  podimenikov) v danem imeniku. Dovoljenje za pisanje pomeni, da lahko v
  danem imeniku ustvarjamo in briemo datoteke - slednje le, e imamo
  tudi dovoljenje za pisanje izbrane datoteke. e se spomnimo, da je
  imenik seznam imen datotek in podimenikov, se nam bodo ta pravila
  zdela smiselna.

  Dovoljenje za izvajanje pri imenikih pomeni, da lahko poseemo v
  imenik in v njem odpiramo datoteke in podimenike. Dejansko nam dovoli
  dostop do inodov v tem imeniku. V imeniku, ki nima dovoljenja za
  izvajanje, ne moremo poeti ni.

  Obasno sreamo imenike, ki jih lahko vsi ,,izvajajo``, ne pa tudi
  berejo. To pomeni, da lahko kdorkoli dostopa do datotek in podimenikov
  v tem imeniku, vendar le, e pozna njihovo celotno ime, saj izpis
  seznama datotek ni dovoljen.

  Pomembno je, da se zavedamo, da so dovolilnice za dani imenik povsem
  neodvisne od dovolilnic za datoteke, ki jih ta imenik vsebuje. Tako
  nam dovoljenje za pisanje dovoljuje ustvarjanje novih datotek in
  spreminjanje obstojeih, vendar slednje le, e ni v nasprotju z
  dovolilnicami za te datoteke. Nikakor pa z dovoljenjem za pisanje v
  imenik ne dobimo avtomatino tudi dovoljenja za pisanje v vse datoteke
  v njem.

  Za konec si poglejmo dovolilnico za sam program login.

       snark:~$ ls -l /bin/login
       -rwsr-xr-x   1 root     bin         20164 Apr 17 12:57 /bin/login

  Datoteka ima dovolilnico, kot jo priakujemo za programe - z edino
  razliko, da na mestu, kjer bi priakovali  dovoljenje, da jo lastnik
  izvaja (torej x), stoji s. Tako v seznamu datotek izgledajo datoteke,
  ki imajo posebno dovoljenje, imenovano ,,set-user-id`` ali na kratko
  setuid.

  Dovoljenje setuid navadno izdamo programom, ki morajo navadnim
  uporabnikom izjemoma dovoliti katero od pravic uporabnika root, vendar
  seveda nadzorovano. Ko poenemo program, program tee s pravicami
  lastnika programa in ne s pravicami tistega, ki je program pognal, kot
  je obiajno.

  Kot uporabniki raun root so tudi programi setuid uporabni, a
  nevarni. Kdorkoli, ki si lahko podvre ali spremeni program setuid,
  katerega lastnik je root, lahko poene novo ukazno lupino s pravicami
  uporabnika root. Zato vsi sodobni sistemi Unix pobriejo bit setuid
  tisti trenutek, ko datoteko odpremo za pisanje.  Veliko vdorov v
  sisteme Unix je povezanih z izkorianjem varnostnih vrzeli v
  programih setuid. Sistemski skrbniki, ki se zavedajo teh teav, so
  zato pri njih posebej previdni in neradi nameajo nove.
  Povrno smo pri razpravi o dovolilnicah preskoili nekaj pomembnih
  podrobnosti, namre, kako se novo ustvarjeni datoteki doloi
  dovolilnica, lastnik in skupina. Lastnik je tisti, ki je datoteko
  ustvaril, pri skupini pa stvari niso tako jasne, saj je uporabnik
  lahko lan ve skupin. Vendar pa je med njimi le ena privzeta skupina
  (tista, ki je navedena v /etc/passwd), in vse novo ustvarjene datoteke
  bodo pripadale tej skupini.

  Zgodba z zaetnimi dovolilnicami je nekoliko bolj zapletena. Privzeta
  dovoljenja lahko spreminjamo s spremenljivko umask v okolju.
  Spremenljivka umask doloa, kateri biti naj bodo izkljueni, ko
  ustvarimo novo datoteko. Obiajna vrednost na veini sistemov je
  -------w- oziroma 002, ki uporabnikom izven privzete skupine ne
  dovoljuje spreminjanja datoteke. Ve o spremenljivki umask lahko
  preberete v prironiku za ukazno lupino.

  Tudi izbira skupine pri imeniku je nekoliko zapletena. Na nekaterih
  Unixih vsak novo ustvarjeni imenik postane lan privzete skupine
  tistega, ki je imenik ustvaril (dogovor izvira iz sistemov Unix System
  V), na drugih pa podeduje skupino od nadrejenega imenika (kot v
  sistemih BSD). V sodobnih sistemih Unix, vkljuno z Linuxom, je
  privzeta prva monost, drugo pa lahko vklopimo z nastavitvojo bita
  set-group-ID, kar storimo z ukazom chmod g+s.


  11.3.  Kako gredo stvari lahko narobe


  e prej smo povedali, da so datoteni sistemi obutljive zadeve. Zdaj
  vemo, da moramo vasih prehoditi precej dolgo pot prek vnosov v
  imenikih in tabelah inodov, da pridemo do datoteke. Zdaj pa si
  predstavljajmo, da kaken od sektorjev na disku postane slab.

  e imamo sreo, je napaka nastala na podatkovnem delu, kar pomeni samo
  nekaj izgubljenih podatkov v datoteki. e je nimamo, je lahko napaka
  nastala v imeniki strukturi ali pa v tabeli inodov. To pomeni, da je
  cel podimenik sicer ostal na disku, vendar ne moremo do njega. Ali e
  slabe, struktura lahko ostane okvarjena, tako da kae na napane
  inode ali diskovne bloke. Takna vrsta okvare je zoprna, ker se zaradi
  napane evidence iri tudi izven prvotnega obmoja in kvari podatke na
  disku.

  Na sreo so tovrstne teave s tem, ko diski postajajo vse bolj
  zanesljivi, vse redkeje. Vseeno pa Unix vsake toliko asa preveri
  integriteto datotenega sistema, da bi odkril morebitne teave.
  Sodobni sistemi Unix opravijo hiter preizkus integritete sistema ob
  zagonu vsaki, preden priklopijo razdelek. Vsakih nekaj ponovnih
  zagonov pa opravijo temeljiteji preizkus, ki traja nekaj minut.

  e vse to daje vtis, da je Unix strahotno zapleten in nagnjen k
  napakam, bo morda v majhno tolabo to, da ti preizkusi ob zagonu
  navadno ujamejo in popravijo napake, e preden te zadobijo
  katastrofalne razsenosti. Drugi operacijski sistemi navadno tega ne
  ponejo, s imer je zagon sicer nekoliko hitreji, vendar pa se lahko
  naenkrat znajdete pred dosti bolj zavoenim sistemom, ko ga morate
  rono popraviti (e sploh imate pri roki Norton Utilities ali kaj
  podobnega).

  Eden od trendov v trenutnih zasnovah Unixa so datoteni sistemi z
  dnevnikom (angl. journalling file system).  Ti vse diskovne
  transakcije organizirajo tako, da je sistem v zajameno konsistentnem
  stanju, ki ga je mogoe restavrirati ob zagonu. To bo preizkuse
  integritete ob zagonu znatno skrajalo.


  12.  Kako delujejo programski jeziki?


  Ogledali smo si e, ``kaj se zgodi, ko poenemo program?''. Vsak
  program se na koncu izvede kot zaporedje bajtov, ki so ukazi v
  strojnem jeziku procesorja. Vendar pa se ljudje ne znajdemo najbolje v
  strojnem jeziku - zadnje ase je to postalo redko celo med hekerji.

  Skoraj vsi programi, pisani za Unix, so dandanes napisani v enem od
  vijih programskih jezikov. Izjema je le nekaj malega programov v
  jedru, napisanih za podporo strojni opremi. (Izraz viji programski
  jezik je bolj ali manj zgodovinska ostalina - poudaril naj bi razliko
  od nijih programskih jezikov. Slednjo skupino sestavljajo izkljuno
  zbirni jeziki za razline procesorje. Zbirni jezik predstavlja zgolj
  loveku razumljiv zapis strojnega jezika.)

  Vijih programskih jezikov je ve vrst. Da bi razumeli razlike med
  njimi, se moramo najprej zavedati, da mora biti izvorna koda programa,
  torej tisto, kar programer napie in je mogoe popravljati, na tak ali
  drugaen nain prevedena v strojni jezik, ki ga lahko raunalnik
  edinega izvaja.


  12.1.  Prevajani programski jeziki


  Najpogosteji so prevajani programski jeziki. Izvorno kodo prevede v
  strojni jezik poseben program, ki mu pravimo - logino - prevajalnik.
  Ko ta enkrat ustvari ustrezno strojno kodo, ne prevajalnika, niti
  izvorne kode ne potrebujemo ve. Program lahko poganjamo na drugem
  raunalniku, kjer ne eden ne drugi nista na voljo.  Veina programja
  se razpeuje kot prevedeni programi, in izvorne kode zanje nikoli ne
  vidite.

  Prevedeni programi teejo zelo hitro in navadno ponujajo najpopolneji
  dostop do operacijskega sistema, je pa relativno teko programirati v
  njih.

  Programski jezik C, v katerem je napisan tudi Unix sam, je skupaj s
  svojo izpeljanko C++ brez dvoma najpomembneji med prevajanimi
  programskimi jeziki. Fortran, programski jezik, ki se uporablja
  predvsem v znanosti in tehniki, spada tudi med prevajane jezike,
  vendar pa je dosti stareji in manj popoln od C. Drugih prevajanih
  jezikov v Unixu takoreko ne sreamo, drugod pa je ponekod za finanne
  in banne programe zelo priljubljen cobol.

  Svojas so bili prevajani jeziki pogosteji, vendar pa jih je veina
  zamrla, ali pa so ostali omejeni na raziskovalna okolja. e ste
  novopeeni programer v Unixu in uporabljate prevajan programski jezik,
  je dandanes to zelo verjetno C ali C++.


  12.2.  Tolmaeni programski jeziki


  Tolmaeni programski jeziki med svojim tekom potrebujejo poseben
  program, tolma, ki izvorno kodo programa sproti prevaja v izraune in
  sistemske klice. Koda je tako raztolmaena vsaki znova, ko program
  poenemo, za delovanje programa pa potrebujemo tudi tolmaa.

  Tolmaeni jeziki teejo poasneje kot prevedeni, in so pri dostopu do
  funkcij operacijskega sistema in strojne opreme pogosto omejeni. Po
  drugi strani pa je v njih laje programirati, in so do napak v
  programu navadno bolj prizanesljivi od prevajanih jezikov.

  Veliko pripomokov v Unixu, vkljuno z ukazno lupino, bc(1), sed(1) in
  awk(1) so manji tolmaeni jeziki. Tudi basic je navadno tolmaen, in
  TCL tudi. Zgodovinsko gledano je bil najpomembneji tolmaeni jezik
  lisp, ki je uvedel mnoge nove zamisli in izboljave. Dandanes sta
  verjetno najpomembneja ista tolmaena jezika v Unixu ukazna lupina
  in v urejevalnik Emacs vgrajeni lisp.


  12.3.  Jeziki, prevajani v psevdokodo


  Po letu 1990 se edalje bolj uveljavlja hibridna oblika jezikov, ki so
  tako prevajani kot tolmaeni. Izvorna koda programov, napisanih v enem
  od teh jezikov, je prevedena, vendar ne v strojni jezik, temve v
  kompakten strojno berljiv zapis, imenovan psevdokoda ali p-koda. Ko
  program poenemo, poenemo tolma za psevdokodo, ki tolmai program.

  Psevdokoda je tolmaena skoraj tako hitro kot program, preveden v
  strojni jezik, obenem pa ti jeziki ohranjajo pronost in mo, ki jo
  dajejo tolmaeni jeziki.

  Med jezike, prevajane v psevdokodo, spadajo python, perl in java.


  13.  Kako deluje internet?


  Da bi laje razumeli, kako deluje internet, si oglejmo, kaj se dogaja
  pri tipini internetni operaciji - denimo takrat, ko brskalnik
  usmerimo na spletno stran dokumentacijskega projekta Linuxa. Angleki
  izvirnik spisa, ki ga berete, dobimo na naslovu:

  http://www.linuxdoc.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html

  Interno gre v resnici za datoteko
  HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html v imeniku s
  spletnimi stranmi na raunalniku www.linuxdoc.org.


  13.1.  Imena in naslovi


  Da bi prebrali spletno stran, mora brskalnik vzpostaviti povezavo s
  spletnim strenikom, torej z gostiteljskim raunalnikom, ki hrani
  omenjeno stran. Prvi korak pri tem je, da ugotovi, kje se sploh nahaja
  raunalnik z internetnim imenom www.linuxdoc.org. Lokacija
  gostiteljskega raunalnika je podana z njegovim naslovom IP (kaj je
  IP, bomo razloili pozneje).

  Naslov IP ugotovi brskalnik tako, da najprej poklie drug program,
  imenski strenik. Ta lahko tee na naem raunalniku, bolj verjetno pa
  je, da na kakem drugem raunalniku v omreju. Ko ste raunalnik
  pripravljali za delo z vaim ponudnikom internetnih storitev, ste
  skoraj gotovo morali nekje vpisati tudi naslov imenskega strenika, ki
  tee v omreju vaega ponudnika internetnih storitev.

  Imenski streniki med seboj komunicirajo, ter izmenjujejo in aurirajo
  vse podatke, potrebne za pretvorbo internetnih imen v naslove IP.
  Imenski strenik, na katerega smo naslovili zahtevek za naslov IP
  raunalnika www.linuxdoc.org, je morda moral zahtevek posredovati
  naprej trem ali tirim drugim imenskim strenike, vendar pa se to
  zgodi zelo hitro, navadno prej kot v sekundi. V naslednjem razdelku si
  bomo ogledali podrobnosti imenskih strenikov.

  Na koncu imenski strenik vrne brskalniku podatek, da je tevilka IP
  za raunalnik www.linuxdoc.org enaka 152.19.254.81. Opremljeni s tem
  podatkom lahko na raunalnik neposredno izmenjuje podatke z
  raunalnikom www.linuxdoc.org.


  13.2.  Sistem domenskih imen


  Celotno omreje programov in zbirk podatkov, ki sodelujejo pri
  pretvarjanju internetnih imen raunalnikov v naslove IP se imenuje
  sistem domenskih imen (angl. Domain Name System, DNS). Kratica DNS je
  precej pogosta - dostikrat se za imenske strenike uporablja izraz
  ,,strenik DNS``. Ogledali si bomo, kako sistem deluje.

  Internetna imena raunalnikov sestavljajo besede, loene s pikami.
  Domena je skupina raunalnikov, ki si delijo skupno pripono
  internetnega imena. Domene so lahko del irih domen. Raunalnik
  www.linuxdoc.org je denimo del domene .linuxdoc.org, ta pa je del
  domene .org.

  Za vsako domeno je doloen primarni imenski strenik, ki pozna naslove
  IP za vse raunalnike v dani domeni. Za primer okvare primarnega
  imenskega strenika so lahko doloeni rezervni ali sekundarni imenski
  streniki, ki vskoijo, e je potrebno. Sekundarni streniki
  avtomatino usklajujejo podatke v svojih tabelah s podatki na
  primarnem streniku vsakih nekaj ur. Tako se spremembe v tabelah, ki
  jih izvedemo na primarnem streniku, samodejno prenesejo naprej.

  Zdaj pa k pomembnemu delu. Imenski strenik za dano domeno ne pozna
  naslovov raunalnikov v drugih domenah, niti ne v lastnih poddomenah.
  Kar mora poznati, so naslovi imenskih strenikov za te domene. V naem
  zgledu  primarni imenski strenik za domeno .org ne pozna naslova
  raunalnika www.linuxdoc.org, niti nobenega drugega raunalnika v
  domeni .linuxdoc.org, pozna pa naslov imenskega strenika za domeno
  .linuxdoc.org, in tega lahko vpraa za naslov kateregakoli raunalnika
  v tej poddomeni.

  Sistem domenskih imen je drevesno urejen. Povsem pri vrhu so korenski
  streniki. Vsakdo pozna naslove IP korenskih strenikov - vgrajeni so
  e v programje DNS. Korenski imenski streniki poznajo naslove
  imenskih strenikov za vrhnje domene, kot denimo .com, .org ali .si,
  ne pa naslovov vseh raunalnikov v teh domenah. Imenski streniki za
  vrhnje domene poznajo naslove imenskih strenikov za domene neposredno
  pod njimi, in tako naprej.

  Sistem domenskih imen je bil zasnovan z zamislijo, da minimiziramo
  koliino podatkov o obliki drevesa, ki ga mora poznati vsak raunalnik
  v omreju. Po drugi strani lahko spremembe v pod-drevesih izvedemo
  enostavno s spremembami v tabelah primarnega strenika za to
  poddomeno.

  Ko izdamo zahtevek za naslov raunalnika z imenom www.linuxdoc.org, se
  zgodi naslednje. Lokalni imenski strenik, kateremu smo izdali
  zahtevek, povpraa korenski strenik za naslov strenika za domeno
  .org. Ko ga izve, tega povpraa za naslov strenika za domeno
  .linuxdoc.org, in tega, ko ga izve, povpraa za naslov raunalnik
  www.linuxdoc.org.

  Veinoma pa tako dolga pot ni potrebna. Ko je enkrat izvedel naslov,
  imenski strenik nekaj asa lokalno hrani tabelo preslikav med
  internetnimi imeni in naslovi IP, in ga ob naslednjih poizvedbah
  postree kar iz lokalne tabele. Zato, ko obiemo novo spletie,
  navadno samo na zaetku dobimo sporoilo ,,Looking up host``, pri
  naslednjih dostopih do strani na istem streniku pa gre hitreje.
  Imenski strenik zbranih tabel ne hrani za vse vene ase, ampak imajo
  podatki omejen rok trajanja. Ko ta pretee, mora ponovno opraviti
  celotno pot poizvedbe. To je pomembno, da imenski strenik ne hrani
  napanih podatkov za naslove, ki so se medtem morda spremenili. Naslov
  je takoj vren iz tabele tudi v primeru, ko je raunalnik na tem
  naslovu nedosegljiv.


  13.3.  Paketi in usmerjevalniki


  Brskalnik bi rad na koncu spletnemu streniku posredoval ukaz, s
  katerim bi prebral spletno stran:

   GET /HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html HTTP/1.0

  Zgodi se naslenje. Ukaz se zapre v paket - blok bitov, ki je analogen
  telegramu, in ki vsebuje tri pomembne podatke: naslov poiljatelja
  (torej naslov IP naega raunalnika), naslov prejemnika (v danem
  zgledu 152.19.254.81) in pa tevilko storitve oziroma tevilko vrat.
  Slednja je v naem zgledu enaka 80, ki je dogovorjena vrednost za vse
  spletne poizvedbe.

  Raunalnik polje paket po omreju (krajevnem omreju ali
  telefonskem vodu do ponudnika internetnih storitev), dokler ne pride
  do specializiranega raunalnika, ki mu pravimo usmerjevalnik.
  Usmerjevalnik hrani v pomnilniku zemljevid interneta - ne celotnega,
  ampak del, ki opisuje omreno okolico - in pozna poti do
  usmerjevalnikov za druge omrene okolice v internetu.

  Paket bo verjetno na svoji poti do cilja potoval prek ve
  usmerjevalnikov. Ti so premeteni - hranijo tudi podatke o tem, po kako
  dolgem asu drugi usmerjevalniki potrdijo sprejem paketa, in pakete
  usmerjajo po tistih linijah, ki so hitreje. Opazijo tudi, kadar
  kaken usmerjevalnik ali kabel odpove, in v takih primerih poiejo
  alternativne poti.

  Urbano izroilo pravi, da je bil internet zasnovan tako, da bi
  preivel jedrsko vojno. To sicer ni res, vendar pa je zasnova
  interneta izjemno dobra v tem, da ob nezanesljivi strojni opremi in
  povezavah zagotavlja zanesljivo komunikacijsko pot. To je zato, ker
  so podatki, potrebni za delovanje omreja, razpreni po tisoih
  usmerjevalnikih, namesto da bi bili skoncentrirani le v nekaj
  ogromnih in ranljivih centralah (tako kot denimo telefonsko
  omreje). Zato napake ostanejo lokalizirane, omreje pa se prilagodi
  tako, da poie obvoze.

  Ko paket prispe do naslovnega raunalnika, ta uporabi podatek o
  tevilki vrat, in posreduje paket spletnemu streniku. Ta ve, komu
  poslati odgovor, saj je na paketu oznaen tudi naslov poiljatelja.
  Ko spletni strenik kot odgovor vrne zahtevani spis, se tudi ta
  razdeli na pakete. Velikost paketov je odvisna od prenosnega
  sredstva v omreju in vrste storitve.


  13.4.  TCP in IP


  Da bi razumeli, kako delujejo prenosi ve paketov, moramo vedeti, da
  internet dejansko uporablja za prenos dva protokola, enega vrh
  drugega.

  Na spodnji ravni, IP (angl. Internet Protocol, internetni protokol),
  je reeno, kako posamezni paket prenesti od poiljateljevega naslova
  do naslovnikovega - zato so ti naslovi znani tudi kot naslovi IP.
  Vendar pa IP ni zanesljiv protokol - e se paket na poti sluajno
  izgubi, tega ne poiljatelj, ne naslovnik morda nikoli ne bosta
  izvedela. V omreni terminologiji pravimo takim protokolom
  brezpovezavni protokoli: poiljatelj enostavno polje paket
  naslovniku in ne priakuje potrditve prejema.

  IP je hiter in cenen. Vasih je hitra in cenena, pa eprav
  nezanesljiva komunikacija isto v redu. e po omreju igramo igro
  Doom ali Quake, je vsaka krogla predstavljena s paketom IP. e se
  sem ter tja kakna izgubi, ni prevelike kode.

  Zanesljivost zagotavlja, zgornja raven, TCP (angl. Transmission
  Control Protocol, protokol za nadzor prenosa). Ko se raunalnika
  dogovorita za povezavo TCP (kar opravita s paketi IP), prejemnik ve,
  da mora v dogovorjenem asu poiljatelju poslati potrdilo o prejetem
  paketu. e poiljatelj potrdila ne prejme, ta paket polje e enkrat.
  Nadalje, poiljatelj pakete TCP otevili, tako da jih lahko prejemnik
  sestavi v pravilnem vrstnem redu, eprav so morda prispeli pomeani
  (kar se rado zgodi, kadar se omrena povezava med prenosom prekine).

  Paketi TCP/IP vsebujejo tudi nadzorno vsoto, s katero lahko
  prejemnik ugotovi, ali so paketi prispeli nepokodovani. Nadzorna
  vsota se izrauna tako, da e je pokodovana bodisi sama nadzorna
  vsota, bodisi preostanek paketa, bo ponoven izraun le-te zelo
  verjetno izkazal napako. S stalia nekoga, ki uporablja imenske
  strenike in TCP/IP, so internetne povezave videti kot zanesljiva
  oblika povezave med vrati na poiljateljevem raunalniku in vrati na
  naslovnikovem raunalniku, in se mu ni treba ukvarjati z
  razdelitvijo sporoil na pakete in sestavljanjem le-teh, nadzornimi
  vsotami in ponovnim poiljanjem okvarjenih paketov. Za vse to
  poskrbijo e ravni pod njim.


  13.5.  Uporabniki protokol HTTP


  Vrnimo se k naemu zgledu. Brskalniki in spletni streniki se
  sporazumevajo v uporabnikem protokolu, ki tee nad TCP/IP. Slednjega
  uporablja za enostavno poiljanje podatkovnih nizov tja in nazaj.
  Protokol se imenuje HTTP (angl. Hyper-Text Transfer Protocol, protokol
  za prenos nadbesedila), in pri zgledu GET malo prej smo e videli,
  kako je videti ukaz.

  Ko ukaz GET prispe do vrat tevilka 80 raunalnika www.linuxdoc.org,
  bo posredovan spletnemu strenikemu programu, ki stree vratom 80.
  Veina internetnih storitev je izvedenih s strenikimi programi,
  katerih vsak stree svoja vrata - aka na promet na danih vratih in
  izvaja prispele ukaze.

  e je pri zasnovi interneta kakno splono pravilo, je to, da so vsi
  deli im bolj enostavni in im bolj dostopni ljudem. HTTP, kot tudi
  sorodni protokoli, denimo SMTP (angl. Simple Mail Transfer Protocol,
  preprost protokol za prenos pote), uporablja preproste besedilne
  ukaze, ki jih zakljui z znakom za novo vrstico.

  To je sicer nekoliko neuinkovito - v nekaterih okoliinah bi bila
  uporaba gosto kodiranega binarnega protokola hitreja. Vendar pa so
  izkunje pokazale, da prednosti ukazov, ki jih lovek enostavno
  razume, odtehtajo malenkosten prihranek pri uinkovitosti, ki bi ga
  pridobili z binarnimi protokoli.
  Zatorej  je tudi odgovor, ki ga strenik vrne po protokolu TCP/IP,
  besedilo. Zaetek odgovora bo nekaj podobnega kot to (nekaj vrstic
  zaglavja je izpuenih):

       HTTP/1.1 200 OK
       Date: Sat, 10 Oct 1998 18:43:35 GMT
       Server: Apache/1.2.6 Red Hat
       Last-Modified: Thu, 27 Aug 1998 17:55:15 GMT
       Content-Length: 2982
       Content-Type: text/html

  Glavi sledi prazna vrstica, tej pa besedilo spletne strani. Ko je
  celotno besedilo poslano, se zveza prekine, brskalnik pa izrie stran.
  Podatki v glavi mu pri tem pomagajo - vrstica Content-Type pove, da
  gre za nadbesedilni spis v obliki HTML.


  14.  Dodatno branje

  Na naslovu  <http://www.linuxdoc.org/HOWTO/Reading-List-HOWTO/> je
  seznam knjig, ki obravnavajo teme, ki smo se jih tu dotaknili, bolj v
  podrobnosti. Morda si boste eleli ogledati tudi spis  How To Become A
  Hacker na naslovu <http://www.tuxedo.org/~esr/faqs/hacker-howto.html>.
