Áthelyezés (számítástechnika) - Relocation (computing)
Az áthelyezés az a folyamat, amikor terhelési címeket rendelnek hozzá egy program pozíciófüggő kódjához és adataihoz, és a kódot és az adatokat a hozzárendelt címekhez igazítják. A többfolyamatos rendszerek megjelenése előtt, és még mindig sok beágyazott rendszerben, az objektumok címei abszolút egy ismert helyen kezdődtek, gyakran nulla. Mivel a többprocesszoros rendszerek dinamikusan kapcsolódnak és váltanak a programok között, szükségessé vált, hogy az objektumokat helyfüggetlen kóddal át lehessen helyezni . A linker általában az áthelyezést a szimbólumfeloldással együtt hajtja végre , a fájlok és könyvtárak keresésének folyamata, hogy a szimbolikus hivatkozásokat vagy könyvtárak neveit tényleges használható címekre cserélje a memóriában egy program futtatása előtt.
Relocation általában úgy történik, a kapcsoló a kapcsolat ideje , de ez is elvégezhető betöltési időt egy áthelyezésével rakodó , vagy futás közben a futó program maga . Egyes architektúrák teljesen elkerülik az áthelyezést azzal, hogy a cím -hozzárendelést a futási időre halasztják ; ezt nulla cím aritmetikának nevezik .
Szegmentáció
Az objektumfájlok különböző memóriaszegmens típusokba vannak osztva . A példaszegmensek közé tartozik a kódszegmens (.text) , az inicializált adatszegmens (.data) , az inicializálatlan adatszegmens (.bss ) vagy mások.
Áthelyezési táblázat
Az áthelyezési táblázat a fordító ( fordító vagy összeállító ) által létrehozott és az objektumban vagy a végrehajtható fájlban tárolt mutatók listája . A táblázat minden bejegyzése vagy "javítás" egy mutató az abszolút címre az objektumkódban, amelyet meg kell változtatni, amikor a betöltő áthelyezi a programot, hogy az a megfelelő helyre utaljon. A javításokat úgy tervezték, hogy támogassák a program teljes egységként történő áthelyezését. Bizonyos esetekben a táblázat minden javítása önmagában a nulla alapcímhez képest van, ezért magukat a javításokat meg kell változtatni, amikor a betöltő áthalad a táblán.
Bizonyos architektúrákban az olyan javítás, amely átlép bizonyos határokat (például egy szegmenshatárt), vagy nem igazodik egy szóhatárhoz, illegális, és a linkelő hibaként jelzi.
DOS és 16 bites Windows
A távoli mutatók ( 32 bites mutatók szegmens : eltolás, a DOS programok számára rendelkezésre álló 20 bites 640 KB memóriahely kezelésére ), amelyek a DOS futtatható fájlon ( EXE ) található kódra vagy adatra mutatnak , nem rendelkeznek abszolút szegmensekkel, mert A kód/adatok tényleges címe attól függ, hogy a programot hol töltötték be a memóriába, és ez a program betöltéséig nem ismert.
Ehelyett a szegmensek relatív értékek a DOS EXE fájlban. Ezeket a szegmenseket ki kell javítani, amikor a végrehajtható fájl betöltődött a memóriába. Az EXE betöltő egy áthelyezési táblát használ a kiigazítandó szegmensek megkereséséhez.
32 bites Windows
A 32 bites Windows operációs rendszereknél nem kötelező áthelyezési táblázatokat biztosítani az EXE fájlokhoz, mivel ezek az első kép, amelyet a virtuális címtérbe töltenek be, és így a kívánt alapcímre töltődnek be.
Mind a DLL -ek, mind az EXE -ek esetében, amelyek a címtér -elrendezés randomizálását (ASLR) választják - ez a Windows Vista rendszerben bevezetett kizsákmányolás -csökkentési technika, az áthelyezési táblák ismét kötelezővé válnak, mivel lehetséges, hogy a bináris fájl dinamikusan áthelyezhető a végrehajtás előtt, annak ellenére, hogy továbbra is az első dolog, ami betöltődik a virtuális címtérbe.
64 bites Windows
Ha natív 64 bites bináris fájlokat futtat Windows Vista vagy újabb verzióin, az ASLR kötelező, és így a fordító nem hagyhatja ki az áthelyezési szakaszokat.
Unix-szerű rendszerek
A legtöbb Unix-szerű rendszer által használt Végrehajtható és összekapcsolható formátum (ELF) végrehajtható formátum és megosztott könyvtári formátum lehetővé teszi többféle áthelyezés meghatározását.
Áthelyezési eljárás
A linker beolvassa a szegmensinformációkat és az áthelyezési táblázatokat az objektumfájlokban, és végrehajtja az áthelyezést:
- az összes közös típusú szegmens egyesítése az adott típusú egyetlen szegmensbe
- egyedi futási időcímek hozzárendelése minden szakaszhoz és szimbólumhoz, minden kódnak (funkciónak) és adatnak (globális változók) egyedi futási időcímek megadása
- hivatkozva az áthelyezési táblára a szimbólumok módosításához úgy, hogy azok a helyes futási időcímekre mutassanak.
Példa
A következő példa Donald Knuth „s MIX építészet és MIXAL assembly. Az elvek ugyanazok minden architektúránál, bár a részletek változnak.
- (A) A program SUBR -t úgy állítjuk össze, hogy létrehozza a (B) objektumfájlt, amely gépi kódként és összeszerelőként is megjelenik. A fordító elindíthatja a fordított kódot tetszőleges helyen, gyakran az 1. helyen, ahogy az látható. A 13. hely tartalmazza az 5. utasítás ST utasításához való ugrási utasítás gépkódját az 5. helyen.
- (C) Ha a SUBR -t később más kóddal kapcsolják össze, akkor az 1 -től eltérő helyen tárolható. Ebben a példában a linker a 120 -as helyre helyezi. Az ugrási utasításban szereplő címet, amely most a 133 -as helyen van, át kell helyezni hogy az ST utasítás kódjának új helyére mutasson , most 125. [1 61 az utasításban látható 125 -ös MIX gépi kódábrázolás].
- (D) Amikor a programot betöltik a memóriába a futtatáshoz, akkor a linker által kijelölt helytől eltérő helyre lehet betölteni. Ez a példa a SUBR -t mutatja most a 300 -as helyen. Az ugrásutasítás 313 -as címét újra át kell helyezni, hogy az az ST , 305 frissített helyére mutasson. [4 49 a 305 -ös MIX gépi ábrázolása].
Lásd még
- Linker (számítástechnika)
- Könyvtár (számítástechnika)
- Objektum fájl
- Előkötés
- Statikus könyvtár
- Önáthelyezés
- Pozíciófüggetlen kód (PIC)
- Újra alapozás
- Szemétgyüjtés
Hivatkozások
További irodalom
- Johnson, Glenn (1975-12-21) [1975-11-13], 11/34 Memóriakezelés alapvető logikai teszt , Digital Equipment Corporation (DEC), MAINDEC-11-DFKTA-AD , letöltve 2017-08-19
- Kildall, Gary Arlen (1978. február). "Egyszerű technika az abszolút gépi kód statikus áthelyezéséhez" . Dr. Dobb Journal of Computer Calisthenics & Orthodontia . Népi Számítógépes Vállalat . 3 (2): 10–13 (66–69). ISBN 0-8104-5490-4. #22. Archiválva az eredetiből 2017-09-09 . Letöltve: 2017-08-19 . [4] [5] [6] (Ez az "átméretezés" módszer, az oldalhatár áthelyezése , statikusan alkalmazható egy CP/M-80 lemezképre a MOVCPM annak érdekében, hogy maximalizálja a programok futásához szükséges TPA- t. azt is használják, dinamikusan a CP / M debugger Dynamic hibakereső eszköz (DDT), hogy helyezze át magát a nagyobb memória. Ugyanezt a megközelítést önállóan fejlesztette ki Bruce Van Natta az IMS Associates termelni áthelyezhető PL / M kódot. Mivel bekezdés határ áthelyezése , egy másik változata az e módszert később felhasználta dinamikusan HMA önálló áthelyezésének TSR mint KEYB , SHARE , és NLSFUNC alatt DR DOS 6.0 és magasabb. egy sokkal kifinomultabb és byte-szintű szemcsés alapuló módszer egy némileg hasonló megközelítést függetlenül kidolgozása és alkalmazása Matthias R. Paul és Axel C. Frinke a dinamikus holtkód -megszüntetésért, hogy dinamikusan minimalizálják a rezidens járművezetők és a TSR-ek futási idejét (például FreeKEYB).)
-
Huitt, Robert; Eubanks, Gordon ; Rolander, Thomas "Tom" Alan ; Törvények, David; Michel, Howard E .; Halla, Brian; Wharton, John Harrison ; Berg, Brian; Su, Weilian; Kildall, Scott ; Kampe, Bill (2014-04-25). Törvények, David (szerk.). "Legacy of Gary Kildall: The CP/M IEEE Milestone Dedication" (PDF) (videó átírás). Pacific Grove, Kalifornia, USA: Számítógép -történeti Múzeum . CHM Hivatkozási szám: X7170.2014. Archiválva (PDF) az eredetiből 2014-12-27 . Letöltve: 2020-01-19 .
[…] Törvények: […] az operációs rendszer „dinamikus áthelyezése”. El tudná mondani, mi ez és miért volt fontos? […] Eubanks : […] amit Gary tett, […] elképesztő volt. […] Emlékszem arra a napra az iskolában, amikor beugrott a laborba, és azt mondta: rájöttem, hogyan kell áthelyezni. Kihasználta azt a tényt, hogy az egyetlen bájt mindig a magas rendű bájt lesz . Így létrehozott egy bitképet . […] Nem számít, hogy mennyi memóriája van a számítógépnek, az operációs rendszer mindig áthelyezhető a nagy memóriába. Ezért ezt kereskedelmi forgalomba hozhatja […] különböző memóriamennyiségű gépeken. […] Nem tudott 64 000 CP/M és 47 000 CP/M eladni . Nevetséges lenne, ha kemény fordítást készítene a címekben. Gary tehát egy este rájött erre, valószínűleg az éjszaka közepén, amikor valami kódolási dologra gondolt, és ez valóban lehetővé tette a CP/M forgalmazását. Valójában azt gondolom, hogy az áthelyezés nélkül ez nagyon nehéz probléma lett volna. Ahhoz, hogy az embereket megvegyék, bonyolultnak tűnik számukra, és ha több memóriát ad hozzá, akkor más operációs rendszert kell vásárolnia. […] Az Intel […] megfordította a bájtokat , igaz, a memóriacímekhez. De mindig ugyanazon a helyen voltak, így pontosabban áthelyezhette egy 256 bájtos határra . Ezért mindig áthelyezhette egy kis térkép segítségével, hogy hol vannak […] Törvények: Természetesen a legbeszédesebb magyarázat a dinamikus áthelyezésre […]
[7] [8] (33 oldal) - 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 (1. rész) (németül). 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 (2. rész) (németül). Heise Verlag . 1987 (2): 78–85; Huck, Alex (2016-10-09). "RSM für CP/M 2.2" . Háziszámítógép DDR (németül). Archiválva az eredetiből 2016-11-25 . Letöltve: 2016-11-25 .
-
Guzis, Charles "Chuck" P. (2015-03-16). "Re: CP/M assembly nyelv programozás" . Vintage számítógépes fórum . Műfaj: CP/M és MP/M. Archiválva az eredetiből 2020-02-01 . Letöltve 2020-02-01 .
[…] Gondolkozott már azon, hogyan működik a MOVCPM ? Mivel a BDOS és a CCP nagy memóriában van, a felhasználói alkalmazás felett a címeket minden alkalommal meg kell változtatni, amikor a rendszermemória méretét megváltoztatják. Ez megköveteli a címek áthelyezését 8080 kódban, mivel a relatív címzés nem része a hardvernek. Teljes körű áthelyező összeszerelő és rakodógép alkalmazása nélkül hogyan lehet ezt elérni? Valójában nagyon okos, és az MP/M még ezt a sémát is használja az oldalra áthelyezhető fájlok létrehozásához. Egyszerűen csak kétszer állítsa össze a forrásprogramot , a második összeszerelési origó 100H (256 bájt) magasabb, mint az első. A két bináris képet ezután bájt bájtonként összehasonlítjuk, és egy térképet állítunk össze, ahol a bájpárok értéke pontosan 100H -val különbözik. Az eredmény azoknak a helyeknek a listája, ahol az áthelyezési értéket módosítani kell, ha egy program helyét a memóriában el akarják helyezni. Az MP/M ezt a fajta fájlt PRL -nek (oldaláthelyezhetőnek) nevezi, de nem tudom, hogy a CP/M 2.2 valaha is kitalált volna -e nevet. […]
-
Guzis, Charles "Chuck" P. (2015-07-29). "Re: Hogyan működik a MOVCPM.COM?" . Vintage számítógépes fórum . Műfaj: CP/M és MP/M. Archiválva az eredetiből 2020-02-01 . Letöltve 2020-02-01 .
[…] A MOVCPM egy korai típusú PRL formátumot használ. Alapvetően a CP/M -t kétszer szerelik össze; a második alkalom 100H bájt eltolás. A két bináris fájlt összehasonlítják, és bitképet készítenek . A beállított bit azt jelenti, hogy a cím nagyrendű bájtját be kell állítani. Az alacsony rendelési címbájtokat ez nem érinti; ennélfogva "Oldal áthelyezhető fájl". A bittérkép minden bájtja 8 bájtnak felel meg a bináris adatokban. […] Tehát minden, amit a MOVCPM -ben mozgatni kell, a kép és annak áthelyezési bitképének része. […]
-
Guzis, Charles "Chuck" P. (2016-11-08). "Re: Biztonságos az RST 28h használata CP/M összeszerelő programokban?" . Vintage számítógépes fórum . Műfaj: CP/M és MP/M. Archiválva az eredetiből 2020-02-01 . Letöltve 2020-02-01 .
[…] Hivatkoztam a PRL fájlokra, és arra, hogyan kezdték el eredetileg a MOVCPM -et , de az MP/M és a CP/M 3.0 szerves részévé váltak . A PRL fájlok azonban bittérképet használnak , amelyben minden bit megfelel egy memóriahelynek; egy bit azt jelzi, hogy egy oldaláthelyezési eltolást hozzá kell adni a megfelelő memóriahelyhez. Ha nagyon kevés abszolút memória hivatkozással rendelkezik (szemben a relatív referenciákkal), akkor érdemes bitmutató helyett mutatólistát (2 bájt referenciánként) használni. Ez nem valószínű a 8080 kódban, amely nem rendelkezik relatív ugrásokkal, de figyelembe veheti a Z80 kódot. A trükk ennek gyors kiderítésére az, hogy kétszer össze kell állítani a programot; másodszor 100H eltolással, majd hasonlítsa össze a két bináris fájlt. A futásidejű áthelyezés előnye, hogy nem kell büntetést fizetnie a kódért, amely megpróbálja kikerülni az áthelyezés problémáját-nincsenek "trükkök"; csak egyenes kódot írjon. […]
- Roth, Richard L. (1978. február) [1977]. "Az áthelyezés nem csak programok mozgatása" . Dr. Dobb Journal of Computer Calisthenics & Orthodontia . Ridgefield, CA, USA: People's Computer Company . 3 (2): 14–20 (70–76). ISBN 0-8104-5490-4. #22. Archiválva az eredetiből 2019-04-20 . Letöltve: 2019-04-19 .
- Calingaert, Peter (1979) [1978-11-05]. "8.2.2 A rakodó áthelyezése". Írta az Észak -Karolinai Egyetemen, a Chapel Hillben . A Horowitz, Ellis (Ed.). Összeszerelők, fordítók és programfordítás . Számítógépes szoftver mérnöki sorozat (1. nyomtatás, 1. kiadás). Potomac, Maryland, USA: Computer Science Press, Inc. pp. 237 -241. ISBN 0-914894-23-4. ISSN 0888-2088 . LCCN 78-21905 . Letöltve: 2020-03-20 . (2+xiv+270+6 oldal)
- A Microsoft OBJ fájlformátuma . Microsoft , terméktámogatási szolgáltatások. Alkalmazási megjegyzés SS0288. Archiválva az eredetiből 2017-09-09 . Letöltve: 2017-08-21 .
- Tanenbaum, Andrew Stuart ; Bos, Herbert (2015). Modern operációs rendszerek (4 szerk.). Pearson Education Inc. ISBN 978-0-13359162-0.
-
Elliott, John C. (2012-06-05) [2000-01-02]. "PRL fájlformátum" . seasip.info . Archiválva az eredetiből 2020-01-26 . Letöltve: 2020-01-26 .
[…] A PRL fájl egy áthelyezhető bináris fájl, amelyet az MP/M és a CP/M Plus használ a .COM fájloktól eltérő különféle modulokhoz . A fájlformátumot az Amstrad PCW FID fájljaihoz is használják . Számos fájlformátum használja a PRL verzióit: SPR (System PRL), RSP (Resident System Process). A LINK-80 képes OVL (overlay) fájlokat is létrehozni, amelyek PRL fejléccel rendelkeznek, de nem helyezhetők át. A GSX illesztőprogramok PRL formátumban vannak; így a Resident System Extensions (.RSX) is. […]
[9] -
Elliott, John C. (2012-06-05) [2000-01-02]. "Microsoft REL formátum" . seasip.info . Archiválva az eredetiből 2020-01-26 . Letöltve: 2020-01-26 .
[…] A REL formátumot a Microsoft M80 és a Digital Research RMAC generálja . […]
-
feilipu (2018-09-05) [2018-09-02]. "PRL támogatása, oldaláthelyezhető végrehajtható fájl MP/M számára" . z88dk . Archiválva az eredetiből 2020-02-01 . Letöltve: 2020-01-26 .
[…] Az összeállított Microsoft .REL fájlok közül a linkelőnek létre kell hoznia egy .PRL formátumú futtatható fájlt az MP/M számára . A .PRL formátum lényegében egy .COM fájl, amely további információkat tartalmaz a program és adatainak bármely oldalra való áthelyezéséhez. Hogyan néz ki egy .PRL fájl? Az első bájtok a program mérete, majd a program eredete 0x0100. A programot követően egy bit-byte-maszk van hozzáfűzve, amely lehetővé teszi az MP/M rendszer számára, hogy megtudja, mely bájtokat kell megváltoztatni a programban, amikor a programot át kell helyezni. Hogyan teszi ezt a linker az egész alkalmazás szétszerelése nélkül? Előzetesen a program két különböző forráshoz, 0x0100 és 0x0200, a .REL objektumokhoz kapcsolódik. A linker trükk egyszerűen annak felismerése, hogy a végrehajtható fájl két verziójában melyik bájt különbözik. Ezeket a bájtokat ezután a futtatható fájlt követően tárolt bitmaszkba rögzítik, és a végső .PRL programot úgy tervezték, hogy 0x0100 -tól és annak oldaleltolásától kezdve fusson. Ugyanezt a trükköt hajtják végre a .RSP és .SPR futtatható fájlok esetében is, azzal a különbséggel, hogy mindkét formátum elhagyja az eltolást, és 0x0000 -tól kezdődik, valamint az oldaleltolódás. […]
- Testvérek, Hardin (1983. április). "Az áthelyezhető kód megértése" . 80 Mikro . A következő lépés. 1001001, Inc. (39): 38 , 40, 42, 45. ISSN 0744-7868 . Letöltve 2020-02-06 . [10] [11]
- Testvérek, Hardin (1985. április). "Áthelyezhető programok: Mikroszámítógépek csavargói" . 80 Mikro . A következő lépés. CW Communications/Peterborough, Inc. (63): 98 , 100, 102–103. ISSN 0744-7868 . Letöltve 2020-02-06 . [12] [13]
- Mitchell, Bridger (1988. július – augusztus). Carlson, Art (szerk.). "Z3PLUS és áthelyezés - Információk a ZCPR3PLUS -ról és az önáthelyező Z80 kód írásáról" . A Computer Journal (TCJ) - programozás, felhasználói támogatás, alkalmazások . Haladó CP/M. Columbia Falls, Montana, USA (33): 9–15 . ISSN 0748-9331 . bárka:/13960/t36121780 . Letöltve: 2020-02-09 . [14] [15]
- Sage, Jay (1988. szeptember – október). Carlson, Art (szerk.). "ZCPR3 Corner - További információ az áthelyezhető kódról, a PRL fájlokról, a ZCPR34 és a 4 -es típusú programokról" . A Computer Journal (TCJ) - programozás, felhasználói támogatás, alkalmazások . Haladó CP/M. Columbia Falls, Montana, USA (34): 20 -25. ISSN 0748-9331 . bárka:/13960/t0ks7pc39 . Letöltve: 2020-02-09 . [16] [17]
- Ganssle, Jack (1992. február). "Áthelyezhető kód írása - Néhány beágyazott kódnak több címen kell futnia" . Beágyazott rendszerek programozása . A Ganssle Group - A beágyazott rendszerek építésének művészetének tökéletesítése / TGG. Archiválva az eredetiből 2019-07-18 . Letöltve: 2020-02-20 .