Ero sivun ”Jaetut kirjastot” versioiden välillä
Siirry navigaatioon
Siirry hakuun
Pientä viilausta.
Jem (keskustelu | muokkaukset) (Linuxin jaettujen kirjastojen historia, nykytila ja käyttö.) |
Jem (keskustelu | muokkaukset) (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 | ||
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 | ||
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ä]] |