Siirto (tietojenkäsittely) - Relocation (computing)
Uudelleensijoittaminen on prosessi, jossa kuormitusosoitteet määritetään ohjelman sijaintiriippuvaiselle koodille ja ohjelman tiedoille ja säädetään koodi ja tiedot vastaamaan osoitettuja osoitteita. Ennen moniprosessijärjestelmien tuloa ja monissa sulautetuissa järjestelmissä objektien osoitteet olivat absoluuttisia alkaen tunnetusta paikasta, usein nolla. Koska moniprosessointijärjestelmät linkittävät ja vaihtavat ohjelmia dynaamisesti, tuli tarpeelliseksi pystyä siirtämään kohteita paikasta riippumattoman koodin avulla . Linkkeri yleensä tekee siirtäminen yhdessä symbolin resoluutio , hakuprosessi tiedostot ja kirjastot korvata symbolinen viittauksia tai nimet kirjastojen kanssa käytettävissä olevan osoitteet muistiin ennen käynnissä ohjelma.
Siirtäminen tehdään tyypillisesti linkkerillä linkin aikaa , mutta se voi myös olla tehty latausajan jonka siirtämällä kuormaajan , tai ajon aikana etenevästä ohjelmasta itse . Jotkut arkkitehtuurit välttävät siirtämisen kokonaan lykkäämällä osoitteen osoittamisen ajoaikaan ; tätä kutsutaan nollaosoitteen aritmeettiseksi .
Segmentointi
Objektitiedostot on jaettu eri muistisegmenttityyppeihin . Esimerkkejä segmenteistä ovat koodisegmentti (.text) , alustettu datasegmentti (.data) , alustamaton datasegmentti (.bss ) tai muut.
Siirtotaulukko
Siirtotaulukko on luettelo osoittimista , jotka kääntäjä ( kääntäjä tai kokoonpanija ) on luonut ja jotka on tallennettu objektiin tai suoritettavaan tiedostoon. Jokainen taulukon merkintä tai "korjaus" on osoitin absoluuttiseen osoitteeseen objektikoodissa, joka on muutettava, kun lataaja siirtää ohjelman niin, että se viittaa oikeaan paikkaan. Korjaukset on suunniteltu tukemaan ohjelman siirtämistä kokonaiseksi kokonaisuudeksi. Joissakin tapauksissa taulukon jokainen korjaus on itse suhteessa perusosoitteeseen nolla, joten itse korjaukset on muutettava kuormaimen liikkuessa taulukon läpi.
Joissakin arkkitehtuureissa korjaus, joka ylittää tietyt rajat (kuten segmentin rajan) tai jota ei ole kohdistettu sanan rajalle, on laitonta ja linkittäjä merkitsee sen virheeksi.
DOS ja 16-bittinen Windows
Kauko- osoittimilla ( 32-bittiset osoittimet segmentillä : offset, käytetään DOS- ohjelmien käytettävissä olevan 20-bittisen 640 kt: n muistitilan osoittamiseen ), jotka osoittavat koodia tai tietoja DOS-suoritettavassa tiedostossa ( EXE ), ei ole absoluuttisia segmenttejä, koska todellinen koodin/datan osoite riippuu siitä, missä ohjelma on ladattu muistiin, ja tämä tiedetään vasta, kun ohjelma on ladattu.
Sen sijaan segmentit ovat suhteellisia arvoja DOS EXE -tiedostossa. Nämä segmentit on korjattava, kun suoritettava tiedosto on ladattu muistiin. EXE -lataaja käyttää siirtotaulukkoa löytääkseen muokattavat segmentit.
32-bittinen Windows
32-bittisissä Windows-käyttöjärjestelmissä ei ole pakollista antaa siirtotaulukoita EXE-tiedostoille, koska ne ovat ensimmäinen virtuaaliseen osoitetilaan ladattu kuva ja ne ladataan siten haluamallasi perusosoitteella.
Sekä DLL -tiedostoille että EXE -tiedostoille, jotka ottavat käyttöön ASLR -osoitteen asettelun satunnaistamisen - Windows Vistan käyttöön otettu hyväksikäytön lieventämistekniikka, siirtotaulukot ovat jälleen pakollisia, koska binaari voidaan siirtää dynaamisesti ennen sen suorittamista, vaikka ovat edelleen ensimmäinen asia, joka ladataan virtuaaliseen osoitetilaan.
64-bittinen Windows
Kun suoritat 64-bittisiä binaaritiedostoja Windows Vistassa tai uudemmassa, ASLR on pakollinen, joten kääntäjä ei voi jättää pois siirto-osia.
Unixin kaltaiset järjestelmät
Executable ja yhdistettävissä Format (ELF) executable muodossa ja jaetun kirjaston käyttämä tiedostomuoto useimmat Unixin kaltaisissa järjestelmissä mahdollistaa useita erilaisia siirtäminen määriteltävä.
Siirtomenettely
Linkittäjä lukee objektitiedostojen segmenttitiedot ja siirtotaulukot ja suorittaa siirron seuraavasti:
- yhdistämällä kaikki yleisen tyypin segmentit samaan segmenttiin
- yksilöivien suoritusaikaosoitteiden määrittäminen kullekin osalle ja jokaiselle symbolille, antamalla kaikille koodi (toiminnot) ja tiedot (globaalimuuttujat) yksilölliset suoritusaikaosoitteet
- viittaamalla siirtotaulukkoon symbolien muuttamiseksi siten, että ne osoittavat oikeisiin suoritusaikaosoitteisiin.
Esimerkki
Seuraavassa esimerkissä käytetään Donald Knuth : n MIX arkkitehtuuria ja MIXAL konekielellä. Periaatteet ovat samat kaikille arkkitehtuureille, vaikka yksityiskohdat muuttuvat.
- (A) Ohjelma SUBR kootaan tuottamaan objektitiedosto (B), joka näkyy sekä konekoodina että kokoonpanijana. Kääntäjä voi aloittaa käännetyn koodin mielivaltaisesta paikasta, usein sijainnista 1, kuten on esitetty. Sijainti 13 sisältää konekoodin hyppyohjeelle lausekkeelle ST sijainnissa 5.
- (C) Jos SUBR linkitetään myöhemmin muuhun koodiin, se voidaan tallentaa muuhun paikkaan kuin 1. Tässä esimerkissä linkitin sijoittaa sen paikkaan 120. Hyppyohjeen osoite, joka on nyt paikassa 133, on siirrettävä osoittamaan lausekkeen ST koodin uuteen paikkaan , nyt 125. [1 61, joka on esitetty ohjeessa, on MIX -konekoodiesitys 125].
- (D) Kun ohjelma ladataan muistiin suoritettavaksi, se voidaan ladata johonkin muuhun paikkaan kuin linkittäjän määrittämään paikkaan. Tässä esimerkissä SUBR on nyt sijainnissa 300. Hyppyohjeen osoite, joka on nyt kohdassa 313, on siirrettävä uudelleen, jotta se osoittaa ST: n päivitetyn sijainnin 305. [4 49 on 305: n MIX -koneen esitys].
Katso myös
- Linker (tietojenkäsittely)
- Kirjasto (tietojenkäsittely)
- Objektitiedosto
- Esisidonta
- Staattinen kirjasto
- Itsensä muuttaminen
- Sijainnista riippumaton koodi (PIC)
- Uudelleen perustaminen
- Roskakokoelma
Viitteet
Lue lisää
- Johnson, Glenn (1975-12-21) [1975-11-13], 11/34 Muistinhallinnan peruslogiikkatesti , Digital Equipment Corporation (DEC), MAINDEC-11-DFKTA-AD , haettu 2017-08-19
- Kildall, Gary Arlen (helmikuu 1978). "Yksinkertainen tekniikka absoluuttisen konekoodin staattiseen siirtämiseen" . Dobbin Journal of Computer Calisthenics & Orthodontia . People's Computer Company . 3 (2): 10–13 (66–69). ISBN 0-8104-5490-4. #22. Arkistoitu alkuperäisestä 2017-09-09 . Haettu 2017-08-19 . [4] [5] [6] (Tätä "koon muuttamismenetelmää", nimeltään sivun reunojen siirtäminen , voitaisiin soveltaa staattisesti CP/M-80- levyn kuvaan käyttämällä MOVCPM -toimintoa maksimoidakseen suoritettavien ohjelmien TPA . se oli myös hyödyntää dynaamisesti CP / M virheenkorjauksen Dynaaminen virheenkorjaus Tool (DDT) ja muuttamaan itse korkeampia muistiin. samaa lähestymistapaa kehittänyt itsenäisesti Bruce Van Natta on IMS Associates tuottaa relocatable PL / M -koodi. Kuten kohta rajan siirtäminen , tämän menetelmän toista versiota käytettiin myöhemmin dynaamisesti HMA- itsensä siirtävillä TSR: llä, kuten KEYB , SHARE ja NLSFUNC , DR DOS 6.0 ja uudemmat. Paljon kehittyneempi ja tavutason rakeinen menetelmä, joka perustuu hieman samanlaiseen lähestymistapaan, suunniteltiin ja toteutettiin itsenäisesti kirjoittaneet Matthias R.Paul ja Axel C.Frinke heidän dynaamisesta kuolleen koodin poistamisestaan minimoidakseen asukkaiden ja TSR: ien (kuten FreeKEYB) ajonaikaisen jalanjäljen.
-
Huitt, Robert; Eubanks, Gordon ; Rolander, Thomas "Tom" Alan ; Lait, David; Michel, Howard E .; Halla, Brian; Wharton, John Harrison ; Berg, Brian; Su, Weilian; Kildall, Scott ; Kampe, Bill (25.4.2014). Laws, David (toim.). "Legacy of Gary Kildall: The CP/M IEEE Milestone Dedication" (PDF) (videon transkriptio). Pacific Grove, Kalifornia, USA: Tietokonehistoriallinen museo . CHM -viitenumero: X7170.2014. Arkistoitu (PDF) alkuperäisestä 2014-12-27 . Haettu 2020-01-19 .
[…] Lait: […] käyttöjärjestelmän "dynaaminen siirtäminen". Voitko kertoa meille, mikä se on ja miksi se oli tärkeää? […] Eubanks : […] Gary teki […] järkyttävää. […] Muistan päivän koulussa, jolloin hän tuli pomppimaan laboratorioon ja sanoi: "Olen keksinyt, miten muuttaa. Hän käytti hyväkseen sitä tosiasiaa, että ainoa tavu oli aina korkean tason tavu . Ja niin hän loi bittikartan . […] Sillä ei ollut väliä kuinka paljon muistia tietokoneella oli, käyttöjärjestelmä voitiin aina siirtää korkealle muistille. Siksi voit kaupallistaa tämän […] koneissa, joissa on eri muistimääriä. […] Et voinut myydä 64 000 CP/M ja 47 000 CP/M. Olisi vain naurettavaa saada kova kääntäminen osoitteisiin. Joten Gary tajusi tämän eräänä iltana, luultavasti keskellä yötä ajatellen jotain koodausta, ja tämä todella mahdollisti CP/M: n kaupallistamisen. Uskon todella, että ilman muuttoa se olisi ollut erittäin vaikea ongelma. Saadakseen ihmiset ostamaan sen se tuntuisi heille monimutkaiselta, ja jos lisäsit enemmän muistia, sinun on hankittava toinen käyttöjärjestelmä. […] Intel […] käänsi tavut päinvastaisesti muistiosoitteiden osalta. Mutta ne olivat aina samassa paikassa, joten voit siirtää sen 256 tavun rajalle . Siksi voit aina siirtää sen vain kartalla siitä, mistä […] Lait: Varmasti kaikkein puhuvin selitys, joka minulla on koskaan ollut dynaamisesta siirtämisestä […]
[7] [8] (33 sivua) - Lieber, Eckhard; von Massenbach, Thomas (1987). "CP/M 2 lernt dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M". c't - magazin für computertechnik (osa 1) (saksaksi). Heise Verlag . 1987 (1): 124 - 135; Lieber, Eckhard; von Massenbach, Thomas (1987). "CP/M 2 lernt dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M". c't - magazin für computertechnik (osa 2) (saksaksi). Heise Verlag . 1987 (2): 78–85; Huck, Alex (10.09.2016). "RSM CP/M 2.2" . Kotitietokone DDR (saksaksi). Arkistoitu alkuperäisestä 25.11.2016 . Haettu 2016-11-25 .
-
Guzis, Charles "Chuck" P. (16.3.2015). "Re: CP/M -kokoonpanokielen ohjelmointi" . Vintage Tietokonefoorumi . Lajityyppi: CP/M ja MP/M. Arkistoitu alkuperäisestä 2020-02-01 . Haettu 2020-02-01 .
[…] Oletko koskaan miettinyt, miten MOVCPM toimii? Koska BDOS- ja CCP -muistissa on paljon muistia, käyttäjäsovelluksen yläpuolella, osoitteet on vaihdettava joka kerta, kun järjestelmämuistin kokoa muutetaan. Nyt se vaatii osoitteiden siirtämisen 8080 -koodiin , koska suhteellinen osoittaminen ei ole osa laitteistoa. Ilman täysipainoista uudelleensijoittavaa kokoonpanijaa ja kuormaajaa, miten tästä eteenpäin? Se on itse asiassa melko älykäs ja MP/M käyttää jopa tätä mallia sivun siirrettävien tiedostojen rakentamiseen. Voit yksinkertaisesti koota lähdeohjelman kahdesti , kun toisen kokoonpanon alkuperä on 100H (256 tavua) suurempi kuin ensimmäinen. Kahta binäärikuvaa verrataan sitten tavua tavua kohden ja karttaa , jossa tavuparit eroavat toisistaan täsmälleen 100H. Tuloksena on luettelo paikoista, joissa siirtoarvoa on muutettava, jos ohjelman sijainti muistissa on siirrettävä. MP/M kutsuu tällaista tiedostoa PRL (sivu siirrettävissä), mutta en tiedä, että CP/M 2.2 olisi koskaan keksinyt sille nimen. […]
-
Guzis, Charles "Chuck" P. (29.7.2015). "Re: Miten MOVCPM.COM toimii?" . Vintage Tietokonefoorumi . Lajityyppi: CP/M ja MP/M. Arkistoitu alkuperäisestä 2020-02-01 . Haettu 2020-02-01 .
[…] MOVCPM käyttää varhaista PRL -muotoa. Periaatteessa CP/M kootaan kahdesti; toinen aika on 100H tavua. Kahta binaaritiedostoa verrataan ja muodostetaan bittikartta . Asetettu bitti tarkoittaa, että osoitteen korkean tason tavua on säädettävä. Tämä ei vaikuta alhaisiin tilausosoitteisiin; siis "Sivun siirrettävä tiedosto". Jokainen bittikartan tavu vastaa binaaridatan 8 tavua. […] Kaikki MOVCPM: ssä siirrettävä on siis osa kuvaa ja sen siirtymisbittikarttaa. […]
-
Guzis, Charles "Chuck" P. (08.11.2016). "Re: Onko turvallista käyttää RST 28h: ta CP/M -kokoonpano -ohjelmissa?" . Vintage Tietokonefoorumi . Lajityyppi: CP/M ja MP/M. Arkistoitu alkuperäisestä 2020-02-01 . Haettu 2020-02-01 .
[…] Olen viitannut PRL -tiedostoihin ja siihen, miten ne alun perin saivat alkunsa MOVCPM: llä , mutta siitä tuli olennainen osa MP/M: ää ja CP/M 3.0: ta . Mutta PRL -tiedostot käyttävät bittikarttaa , jossa jokainen bitti vastaa muistipaikkaa; yksi bitti osoittaa, että sivun siirtämispoikkeama on lisättävä vastaavaan muistipaikkaan. Jos sinulla on hyvin vähän absoluuttisia muistiviittauksia (toisin kuin suhteelliset), saatat haluta käyttää osoitinluetteloa (2 tavua viitettä kohti) bittikartan sijasta. Tämä on epätodennäköistä 8080 -koodissa, jossa ei ole suhteellisia hyppyjä, mutta se voi olla huomio Z80 -koodille . Temppu nopeasti selvittää tämä on koota ohjelma kahdesti; toisen kerran 100H siirtymällä, vertaa sitten kahta binääriä. Etuna ajonaikaisen siirtäminen on, että sinun ei tarvitse syntyä rangaistuspotku koodia, joka yrittää kiertää siirtäminen kysymys - ei "temppuja"; kirjoita vain suora koodi. […]
- Roth, Richard L. (helmikuu 1978) [1977]. "Muutto ei ole vain ohjelmien siirtämistä" . Dobbin Journal of Computer Calisthenics & Orthodontia . Ridgefield, CA, USA: People's Computer Company . 3 (2): 14–20 (70–76). ISBN 0-8104-5490-4. #22. Arkistoitu alkuperäisestä päällä 20.4.2019 . Haettu 2019-04-19 .
- Calingaert, Peter (1979) [1978-11-05]. "8.2.2 Kuormaimen siirtäminen". Kirjoitettu Pohjois -Carolinan yliopistossa Chapel Hillissä . Vuonna Horowitz, Ellis (toim.). Kokoajat, kääntäjät ja ohjelmien kääntäminen . Tietokoneohjelmistosuunnittelusarja (1. painos, 1. painos). Potomac, Maryland, USA: Computer Science Press, Inc. s. 237 -241. ISBN 0-914894-23-4. ISSN 0888-2088 . LCCN 78-21905 . Haettu 2020-03-20 . (2+xiv+270+6 sivua)
- Microsoftin OBJ -tiedostomuoto . Microsoft , tuotetukipalvelut. Sovellushuomautus SS0288. Arkistoitu alkuperäisestä 2017-09-09 . Haettu 2017-08-21 .
- Tanenbaum, Andrew Stuart ; Bos, Herbert (2015). Nykyaikaiset käyttöjärjestelmät (4 toim.). Pearson Education Inc. ISBN 978-0-13359162-0.
-
Elliott, John C. (06.05.2012) [2000-01-02]. "PRL -tiedostomuoto" . seasip.info . Arkistoitu alkuperäisestä 2020-01-26 . Haettu 2020-01-26 .
[…] PRL -tiedosto on siirrettävä binääritiedosto, jota MP/M ja CP/M Plus käyttävät eri moduuleihin kuin .COM -tiedostoihin . Tiedostomuotoa käytetään myös Amstrad PCW : n FID -tiedostoihin . On olemassa useita tiedostomuotoja, jotka käyttävät PRL -versioita: SPR (System PRL), RSP (Resident System Process). LINK-80 voi myös tuottaa OVL (overlay) -tiedostoja, joissa on PRL-otsikko, mutta joita ei voi siirtää. GSX -ajurit ovat PRL -muodossa; samoin Resident System Extensions (.RSX). […]
[9] -
Elliott, John C. (06.05.2012) [2000-01-02]. "Microsoft REL -muoto" . seasip.info . Arkistoitu alkuperäisestä 2020-01-26 . Haettu 2020-01-26 .
[…] REL -muoto luodaan Microsoftin M80: n ja Digital Researchin RMAC: n avulla. […]
-
feilipu (05.09.2018) [02-09-08] "Tuki PRL: lle, sivun siirrettävä suoritettava tiedosto MP/M: lle" . z88dk . Arkistoitu alkuperäisestä 2020-02-01 . Haettu 2020-01-26 .
[…] Linkitetyn on luotava kootusta Microsoft .REL -tiedostosta .PRL -muotoinen suoritettava tiedosto MP/M: lle . .PRL -muoto on pohjimmiltaan .COM -tiedosto, jossa on joitain lisätietoja, jotta ohjelma ja sen tiedot voidaan siirtää mille tahansa sivulle. Miltä .PRL -tiedosto näyttää? Ensimmäiset tavut ovat ohjelman koko, jota seuraa ohjelman alkuperä 0x0100. Ohjelman jälkeen on liitetty bittitavu-maski, jonka avulla MP/M-järjestelmä voi tietää, mitkä tavut ohjelmassa on vaihdettava, kun ohjelma siirretään. Miten linkittäjä tekee sen purkamatta koko sovellusta? Ohjelma linkitetään etukäteen kahdelle eri lähteelle 0x0100 ja 0x0200 .REL -objekteista. Linkkerin temppu on yksinkertaisesti tunnistaa, mitkä tavut suoritettavan tiedoston kahdessa versiossa eroavat toisistaan. Nämä tavut tallennetaan suoritettavan tiedoston jälkeen tallennettuun bittimaskiin, ja lopullinen .PRL -ohjelma on suunniteltu toimimaan 0x0100: sta ja sen sivusiirrosta. Sama temppu tehdään suoritettaville .RSP- ja .SPR -tiedostoille, paitsi että molemmat muodot luopuvat siirtymästä ja alkavat 0x0000 plus sivun siirtymä. […]
- Veljekset, Hardin (huhtikuu 1983). "Understanding Relocatable Code" . 80 Mikro . Seuraava vaihe. 1001001, Inc. (39): 38 , 40, 42, 45. ISSN 0744-7868 . Haettu 2020-02-06 . [10] [11]
- Veljekset, Hardin (huhtikuu 1985). "Uudelleensijoitettavat ohjelmat: mikrotietokoneiden hobot" . 80 Mikro . Seuraava vaihe. CW Communications/Peterborough, Inc. (63): 98 , 100, 102–103. ISSN 0744-7868 . Haettu 2020-02-06 . [12] [13]
- Mitchell, Bridger (heinä -elokuu 1988). Carlson, Art (toim.). "Z3PLUS ja uudelleensijoittaminen - Tietoja ZCPR3PLUS -laitteesta ja siitä, miten itse muuttuva Z80 -koodi kirjoitetaan" . Tietokonepäiväkirja (TCJ) - ohjelmointi, käyttäjätuki, sovellukset . Edistynyt CP/M. Columbia Falls, Montana, USA (33): 9–15 . ISSN 0748-9331 . arkki:/13960/t36121780 . Haettu 2020-02-09 . [14] [15]
- Sage, Jay (syyskuu – lokakuu 1988). Carlson, Art (toim.). "ZCPR3 Corner - Lisätietoja siirrettävästä koodista, PRL -tiedostoista, ZCPR34- ja Type -4 -ohjelmista" . Tietokonepäiväkirja (TCJ) - ohjelmointi, käyttäjätuki, sovellukset . Edistynyt CP/M. Columbia Falls, Montana, USA (34): 20 -25. ISSN 0748-9331 . arkki:/13960/t0ks7pc39 . Haettu 2020-02-09 . [16] [17]
- Ganssle, Jack (helmikuu 1992). "Uudelleensijoitettavan koodin kirjoittaminen - Jotkin upotetut koodit on suoritettava useammassa kuin yhdessä osoitteessa" . Sulautettujen järjestelmien ohjelmointi . Ganssle -ryhmä - sulautettujen järjestelmien rakentamisen taiteen parantaminen / TGG. Arkistoitu alkuperäisestä päällä 18.7.2019 . Haettu 2020-02-20 .