Ero sivun ”Jaetut kirjastot” versioiden välillä

Siirry navigaatioon Siirry hakuun
203 merkkiä lisätty ,  23. syyskuuta 2011
Pientä viilausta.
(Linuxin jaettujen kirjastojen historia, nykytila ja käyttö.)
 
(Pientä viilausta.)
Rivi 15: Rivi 15:
käyttötavasta: joko staattisena ei-jaettuna kirjastona tai jaettuna
käyttötavasta: joko staattisena ei-jaettuna kirjastona tai jaettuna
kirjastona. Ei-jaettu kirjasto koostuu joukosta,
kirjastona. Ei-jaettu kirjasto koostuu joukosta,
tyypillisesti C-kielisestä lähdekoodista käännetyistä
tyypillisesti [[C]]-kielisestä lähdekoodista käännetyistä
objektikooditiedostoista, jotka on koottu yhteen
objektikooditiedostoista, jotka on koottu yhteen
arkistotiedostoon. Tällaisen tiedoston pääte on <tt>.a</tt>.
arkistotiedostoon. Tällaisen tiedoston pääte on <tt>.a</tt>.
Rivi 46: Rivi 46:


Linuxin muistinhallinassa on ominaisuus, joka mahdollistaa
Linuxin muistinhallinassa on ominaisuus, joka mahdollistaa
keskusmuistisivujen jakamisen prosessien kesken. Prosesseilla on
keskusmuistisivujen jakamisen [[Prosessi|prosessien]] kesken. Prosesseilla on
periaatteessa erilliset muistiavaruudet, jotka on suojattu toisiltaan,
erilliset muistiavaruudet, jotka on suojattu toisiltaan,
mutta on mahdollista järjestää asiat niin, että yksi fyysinen
mutta on mahdollista järjestää asiat niin, että yksi fyysinen
muistisivu näkyy useamman prosessin muistiavaruudessa. Tällä
muistisivu näkyy useamman prosessin muistiavaruudessa. Tällä
Rivi 108: Rivi 108:
Kun jaettu kirjasto asennetaan järjestelmään, kirjaston sisältävän
Kun jaettu kirjasto asennetaan järjestelmään, kirjaston sisältävän
tiedoston nimeksi annetaan nimi joka on muotoa
tiedoston nimeksi annetaan nimi joka on muotoa
<tt>libfoo.so.M.N</tt>. M on tässä edellä mainittu major-versionumero
<tt>libfoo.so.''M''.''N''</tt>. M on tässä edellä mainittu major-versionumero
ja N vastaavasti minor-versionumero. Tiedoston pääte .so tulee
ja N vastaavasti minor-versionumero. Tiedoston pääte .so tulee
sanoista shared object, eli jaettu objektitiedosto. Samaan hakemistoon
sanoista shared object, eli jaettu objektitiedosto. Samaan hakemistoon
luodaan symbolinen linkki, jonka nimi on libfoo.so.M, joka osoittaa
luodaan symbolinen linkki, jonka nimi on libfoo.so.''M'', joka osoittaa
kirjaston sisältämään tiedostoon. Esimerkki:
kirjaston sisältämään tiedostoon. Esimerkki:


Rivi 129: Rivi 129:
Jaetut kirjastot voivat olla käyttämättä versioituja symboleja,
Jaetut kirjastot voivat olla käyttämättä versioituja symboleja,
kirjaston tekijän valinnan mukaan. Yksi esimerkki kirjastosta joka
kirjaston tekijän valinnan mukaan. Yksi esimerkki kirjastosta joka
käyttää niitä on standardikirjasto <tt>libc</tt>. Periaate on se, että
käyttää niitä on standardikirjasto <tt>[[libc]]</tt>. Periaate on se, että
kaikki kirjaston aliohjelmat, jotka säilyvät muuttumattomina versiosta
kaikki kirjaston aliohjelmat, jotka säilyvät muuttumattomina versiosta
toiseen, säilyttävät vanhan versionumeronsa. Kun kirjaston aliohjelmaa
toiseen, säilyttävät vanhan versionumeronsa. Kun kirjaston aliohjelmaa
Rivi 154: Rivi 154:
  char *realpath(const char *path, char *resolved_path);
  char *realpath(const char *path, char *resolved_path);


GNU Libc -kirjaston versiossa 2.3 muutettiin funktion toimintaa siten,
[[GNU]] Libc -kirjaston versiossa 2.3 muutettiin funktion toimintaa siten,
että resolved_path-parametrin arvoksi hyväksytään myös NULL, jolloin
että resolved_path-parametrin arvoksi hyväksytään myös NULL, jolloin
funktio itse varaa tarvittavan muistin ja palauttaa sen funktion
funktio itse varaa tarvittavan muistin ja palauttaa sen funktion
Rivi 176: Rivi 176:
Kun uusi ohjelma käynnistetään, käyttöjärjestelmän ydin lataa ohjelman
Kun uusi ohjelma käynnistetään, käyttöjärjestelmän ydin lataa ohjelman
keskusmuistiin. Tarkemmin sanottuna, latausta ei tehdä vielä tässä
keskusmuistiin. Tarkemmin sanottuna, latausta ei tehdä vielä tässä
vaiheessa, vaan tehdään kuvaus (mmap) ohjelmatiedostosta prosessin
vaiheessa, vaan tehdään kuvaus ([[mmap]]) ohjelmatiedostosta prosessin
muistiavaruuteen. Lataus massamuistilta keskumuistiin tapahtuu sitä
muistiavaruuteen. Lataus massamuistilta keskumuistiin tapahtuu sitä
mukaa kuin ohjelman suoritus etenee; jos ohjelman kontrolli siirtyy
mukaa kuin ohjelman suoritus etenee; jos ohjelman kontrolli siirtyy
Rivi 218: Rivi 218:
# Viimeisenä oljenkortena dynaaminen linkkeri etsii kirjastoja hakemistoista /lib ja /usr/lib (ellei ohjelmaa ole linkattu <tt>-z nodeflib</tt>-optiolla).
# Viimeisenä oljenkortena dynaaminen linkkeri etsii kirjastoja hakemistoista /lib ja /usr/lib (ellei ohjelmaa ole linkattu <tt>-z nodeflib</tt>-optiolla).


LD_LIBRARY_PATH-muuttujaa ei turvallisuussyistä huomioida, jos suoritettava ohjelma on [[suid]]-binääri.
LD_LIBRARY_PATH-muuttujaa ei turvallisuussyistä huomioida, jos suoritettava ohjelma on [[suid]]-binääri. Huomaa, että kirjastoa oletusarvoisesti ''ei'' etsitä
* hakemistosta, jossa ohjelma on käynnistetty
* hakemistosta, jossa ohjelmatiedosto sijaitsee


<tt>/etc/ld.so.cache</tt>-tiedosto on binääritiedosto, joka sisältää
<tt>/etc/ld.so.cache</tt>-tiedosto on binääritiedosto, joka sisältää
Rivi 226: Rivi 228:
<tt>.dynamic</tt>-sektiossa. Tämän nimen ei tarvitse olla sama kuin
<tt>.dynamic</tt>-sektiossa. Tämän nimen ei tarvitse olla sama kuin
kirjaston sisältämän tiedoston nimi. Muissa tapauksissa kuin kohdassa
kirjaston sisältämän tiedoston nimi. Muissa tapauksissa kuin kohdassa
3 yllä olevassa hakujärjestyksessä käytetään kuitenkin tiedoston nimeä
4 yllä olevassa hakujärjestyksessä käytetään kuitenkin tiedoston nimeä
samannimisen kirjaston paikallistamiseen.
samannimisen kirjaston paikallistamiseen.


Rivi 274: Rivi 276:


[[Luokka:Käsitteet]]
[[Luokka:Käsitteet]]
[[Luokka:Järjestelmä]]
92

muokkausta

Navigointivalikko