Vlastní přemístění - Self-relocation
V počítačovém programování, a samovolné přemístění program je program, který přemístí se vlastní instrukce a data závislá na adrese při spuštění, a je tedy možné je načíst do paměti na libovolné adrese.[1][2] V mnoha případech je samoobslužný kód také formou samočinně se měnící kód.
Přehled
Vlastní přemístění je podobné jako přemístění proces používaný organizací linker -nakladač když je program zkopírován z externího úložiště do hlavní paměti; Rozdíl je v tom, že se jedná o samotný načtený program, nikoli o zavaděč v operační systém nebo skořápka který provádí přemístění.
Jedna forma samočinného přemístění nastane, když program zkopíruje kód svých pokynů z jedné sekvence umístění do jiné sekvence míst v hlavní paměti jednoho počítače a poté přenese řízení procesoru z pokynů nalezených ve zdrojových umístěních paměti podle pokynů nalezených v cílových umístěních paměti. Data provozovaná algoritmem programu jsou tedy posloupností bajtů, které program definují.
K vlastnímu přemístění obvykle dochází v doba načítání (poté, co operační systém načetl software a předal mu kontrolu, ale ještě před dokončením jeho inicializace), někdy také při změně konfigurace programu v pozdější fázi během runtime.[3][4]
Příklady
Zavaděče
Jako příklad lze uvést, že samoobslužné přemístění se často používá v raných fázích bootstrapování operačních systémů na architekturách, jako je Kompatibilní s IBM PC, kde řetězec nižší úrovně zavaděče (jako Master Boot Record (MBR), Volume Boot Record (VBR) a počáteční fáze spouštění operačních systémů, jako je DOS ) se přestěhují z místa, aby načetli další fázi do paměti.
x86 DOS ovladače
Pod DOS, self-relocation je někdy také používán pokročilejšími Řidiči a RSX /TSR načítají se „vysoko“ do horní paměť efektivněji, než je to možné u externě poskytovaných "vysokých" nakladačů (jako LOADHIGH /HILOAD, INSTALLHIGH /HIINSTALL nebo ZAŘÍZENÍ VYSOKÉ /HIDEVICE atd.[5] od DOS 5), aby se maximalizovala paměť dostupná pro aplikace. To je způsobeno skutečností, že operační systém nemá žádné znalosti o vnitřním fungování ovladače, který má být načten, a proto jej musí načíst do volné oblasti paměti dostatečně velké, aby pojal celý ovladač jako blok včetně jeho inicializačního kódu, dokonce pokud by to bylo uvolněno po inicializaci. U TSR musí operační systém také přidělit a Předpona segmentu programu (PSP) a an segment životního prostředí.[6] To může způsobit, že ovladač nebude načten do nejvhodnější oblasti volné paměti, nebo dokonce zabrání tomu, aby byl vůbec načten vysoko. Na rozdíl od toho lze samy přemístitelný ovladač načíst kdekoli (včetně do konvenční paměť ) a poté přemístěte pouze jeho (obvykle mnohem menší) rezidentní část do vhodné oblasti volné paměti v horní paměti. Kromě toho mohou pokročilé samy přemístitelné TSR (i když jsou již operačním systémem načteny do horní paměti) přesunout přes většinu svého vlastního segmentu PSP a vyrovnávací paměti příkazového řádku a uvolnit svůj segment prostředí, aby se dále snížila výsledná stopa paměti a zabránilo se fragmentace. Některé samy přemístitelné TSR mohou také dynamicky měnit svou „povahu“ a proměnit se v ovladače zařízení, i když byly původně načteny jako TSR, čímž obvykle také uvolní část paměti.[4] Nakonec je technicky nemožné, aby externí zavaděč přemístil ovladače do rozšířená paměť (EMS) oblast vysoké paměti (HMA) nebo rozšířená paměť (přes DPMS nebo MASKOVÁNÍ ), protože tyto metody vyžadují malé specifické ovladače pahýly zůstat v konvenční nebo horní paměti za účelem koordinace přístupu do cílové oblasti přemístění,[7][poznámka 1][pozn. 2] a v případě ovladačů zařízení také proto, že hlavička ovladače musí vždy zůstat v prvním megabajtu.[7][6] Aby toho bylo možné dosáhnout, musí být řidiči speciálně navrženi tak, aby podporovali samovolné přemístění do těchto oblastí.[7]
Některé pokročilé ovladače systému DOS také obsahují jak ovladač zařízení (který by operační systém načetl na offset + 0000h), tak TSR (načtený na offset + 0100h), který interně sdílí část společného kódu tlustá binárka.[6] Pokud sdílený kód není navržen tak, aby byl nezávislý na poloze, vyžaduje nějakou formu opravy interních adres podobnou tomu, co by jinak provedla a přemístění nakladače již; je to podobné jako ve fázi opravy samovolného přemístění, ale s kódem, který je již načten v cílovém umístění zavaděčem operačního systému (namísto samotného ovladače).
Programy IBM DOS / 360 a OS / 360
IBM DOS / 360 během načítání neměl schopnost přemístit programy. Někdy bylo zachováno více verzí programu, z nichž každá byla vytvořena pro jinou adresu načítání. Speciální třída programů, nazývaná samorozkládací programy, byla kódována tak, aby se po načtení přemístila sama.[8] IBM OS / 360 přemístili spustitelné programy, když byly načteny do paměti. Vyžadovala se pouze jedna kopie programu, ale po načtení nebylo možné program přesunout (tzv jednorázový kód nezávislý na poloze ).
Další příklady
Jako extrémní příklad (mnohonásobného) přemístění je možné zkonstruovat počítačový program tak, aby nezůstával na pevné adrese v paměti, i když se provádí. The Jablečný červ[9] je dynamický vlastní přemisťovač.
Viz také
- Dynamická eliminace mrtvého kódu
- NAČÍTAČ - rozhraní DR-DOS API, které pomáhá vzdálenému / síťovému zaváděcímu kódu při přemístění při zavádění systému DOS
- Sběr odpadu
- Vlastní replikace
- Vlastní reference
- Quine (výpočetní)
Poznámky
- ^ Výjimkou z požadavku na pahýl je, když rozšířená paměť je převeden na permanentní horní paměť správcem paměti pomocí EMSUMB, a tedy je k němu účinně přistupováno jako horní paměť, ne prostřednictvím EMS.
- ^ Existují dvě výjimky z požadavku na pahýl, který řidič načte do HMA: Pahýl není nutný, když vysoká paměť je trvale povoleno na strojích bez brána A20 logika, protože tato podmínka není obecně splněna, obecné ovladače systému DOS ji nemohou využívat (pokud by předem výslovně tuto podmínku netestovaly). Jinak pahýl také není nutný pod DR DOS 6.0 a vyšší, když jsou rezidentní rozšíření systému (jako PODÍL a NLSFUNC ) zavěste pouze multiplexní přerušení INT 2Fh, protože pak mohou využít rozhraní backdoor k připojení do řetězce přerušení v prostor jádra takže obslužný program brány A20 jádra poskytne funkčnost útržku. Ovladač stále musí provést samočinné přemístění, aby správně fungoval v HMA.
Reference
- ^ Dhamdhere, Dhananjay M. (1999). Systémové programovací a operační systémy. Nové Dillí: Tata McGraw-Hill Vzdělávání. p. 232. ISBN 0-07-463579-4. ISBN 978-0-07-463579-7. Archivováno od původního dne 2020-02-01. Citováno 2011-11-08. (658 stránek)
- ^ Dhamdhere, Dhananjay M. (2006). Operační systémy: koncepční přístup. Nové Dillí: Tata McGraw-Hill Vzdělávání. p. 231. ISBN 0-07-061194-7. ISBN 978-0-07-061194-8. Archivováno od originálu 2020-02-20. Citováno 2020-02-20. (799 stránek)
- ^ Paul, Matthias R .; Frinke, Axel C. (1997-10-13) [1991], FreeKEYB - Vylepšená klávesnice a ovladač konzoly DOS (Uživatelská příručka) (vydání 6.5) [1] (Pozn. FreeKEYB je Unicode - na základě dynamicky konfigurovatelného ovladače podporujícího většinu rozložení klávesnice, kódové stránky, a kódy zemí. Využití off-the-police makro assembler stejně jako rámec automatických analytických nástrojů před a po zpracování ke generování závislosti a morfing kódu metadata které mají být vloženy do spustitelný soubor vedle binární kód a sebevyhazování, relaxační a přemístění nakladače, ovladač podporuje různé načítání a instalaci jako TSR nebo ovladač zařízení a implementuje pokročilé techniky přemisťování sebe sama (včetně těch běžných DOS paměť, UMB, nepoužívané videopaměť, nebo také využití surové paměti předpona segmentu programu přetížení a segment životního prostředí rekombinace) a granulární na úrovni bajtů dynamická eliminace mrtvého kódu na doba načítání stejně jako samočinně se měnící kód a rekonfigurovatelnost na run-time aby minimalizoval svou paměťovou stopu v závislosti na hardwaru, konfiguraci operačního systému a ovladačů a také na vybrané sadě funkcí a národním prostředí.)
- ^ A b Paul, Matthias R .; Frinke, Axel C. (2006-01-16), FreeKEYB - Pokročilý mezinárodní ovladač klávesnice a konzoly DOS (Uživatelská příručka) (7 (předběžné) ed.)
- ^ „Kapitola 10 Správa paměti“. Uživatelská příručka Caldera DR-DOS 7.02. Caldera, Inc. 1998 [1993, 1997]. Archivovány od originál dne 30. 8. 2017. Citováno 2017-08-30.
- ^ A b C Paul, Matthias R. (04.04.2002). „Re: [fd-dev] OZNAM: CuteMouse 2.0 alfa 1“. freedos-dev. Archivováno z původního dne 2020-02-07. Citováno 2020-02-07.
[…] Přidejte do ovladače hlavičku ovladače zařízení SYS, aby mohla být CTMOUSE oba v jednom normální TSR a ovladač zařízení - podobný našemu pokročilému ovladači klávesnice FreeKEYB. […] Toto není opravdu nutné DR DOS protože NAINSTALUJTE = je podporován, protože DR DOS 3.41+ a DR DOS zachovává pořadí [D] CONFIG.SYS směrnic […], ale zlepšilo by to […] flexibilitu […] MS-DOS /PC DOS systémy, které […] vždy vykonávají PŘÍSTROJ = směrnice před jakýmkoli příkazem INSTALL = bez ohledu na jejich pořadí v souboru. […] Software může vyžadovat, aby byl ovladač myši přítomen jako ovladač zařízení, protože ovladače myši byly vždy ovladači zařízení ve starých časech. Tyto ovladače myši měly konkrétní názvy ovladačů zařízení podle toho, jaký protokol použili ("PC $ MYŠ " pro Režim myších systémů například) a některý software může tyto ovladače vyhledat, aby zjistil správný typ myši, která se má použít. […] Další výhodou by bylo, že ovladače zařízení obvykle spotřebovávají méně paměti (č životní prostředí, Ne PSP ) […] Je to v podstatě složitá záhlaví souboru, jiný kód pro analýzu příkazového řádku, jiný vstupní bod a výstupní řádek a některé magické segmenty k překonání rozdílu ORG 0 / ORG 100h. Automatické načítání ovladače zařízení je o něco složitější, protože musíte ponechat záhlaví ovladače tam, kde je, a přemístit pouze zbytek ovladače […]
- ^ A b C Paul, Matthias R. (02.02.2002). „Treiber dynamisch nachladen“ [Dynamické načítání ovladačů] (v němčině). Diskusní skupina: de.comp.os.msdos. Archivováno z původního dne 2017-09-09. Citováno 2017-07-02. (Pozn. Poskytuje přehled o metodách vysokého zatížení v systému DOS, včetně použití LOADHIGH atd. příkazy a metody samovolného přemístění do UMB s využitím XMSUMB API. Rovněž diskutuje sofistikovanější metody je nutné, aby se TSR přestěhovali do EU HMA s využitím přemístění v rámci segmentu.)
- ^ Boothe Management Systems (01.11.1972). „Propustnost - dostáváte vše, co si zasloužíte? - DOSRELO“. Computerworld - Newsweekly pro počítačovou komunitu (reklama). VI (44). San Francisco, Kalifornie, USA: Computerworld, Inc. p. 9. Archivováno z původního dne 2020-02-06. Citováno 2020-02-07.
[…] DOSRELO poskytuje způsob výroby DOS problémové programy samy přemístitelné. DOSRELO dosahuje schopnosti samovolného přemístění všech programů bez ohledu na jazyk přidáním logiky vstupního bodu do kód objektu programu před Editor propojení katalogy na Knihovna základních obrázků. […]
- ^ Dewdney, Alexander Keewatin (Březen 1985). „Computer Recreations - A Core War bestiář virů, červů a dalších hrozeb pro počítačové paměti“. Scientific American. 285: 38–39. Archivováno z původního dne 2017-07-04. Citováno 2017-07-04.
Další čtení
- Kildall, Gary Arlen (Únor 1978). "Jednoduchá technika pro statické přemístění absolutního strojového kódu". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia. Lidová počítačová společnost. 3 (2): 10–13 (66–69). ISBN 0-8104-5490-4. #22. Archivováno z původního dne 2017-09-09. Citováno 2017-08-19. [2] [3] [4] (Tato metoda "změny velikosti", pojmenovaná přemístění hranice stránky, lze použít staticky na a CP / M-80 obraz disku pomocí MOVCPM s cílem maximalizovat TPA pro spuštění programů. Také jej dynamicky využil debugger CP / M Nástroj pro dynamické ladění (DDT) přemístit do vyšší paměti. Stejný přístup vyvinul nezávisle Bruce Van Natta z IMS Associates vyrábět přemístitelné PL / M kód. Tak jako přemístění hranice odstavce jiná varianta této metody byl později dynamicky využit HMA samovolné přemístění TSR jako KLÍČ, PODÍL, a NLSFUNC pod DR DOS 6.0 a vyšší. Mnohem propracovanější a granulární na úrovni bytu metodu ofsetového přemístění založenou na poněkud podobném přístupu navrhli a implementovali samostatně Matthias R. Paul a Axel C. Frinke pro své dynamická eliminace mrtvého kódu dynamicky minimalizovat stopu běhu rezidentních ovladačů a TSR (jako FreeKEYB).)
- Huitt, Robert; Eubanks, Gordone; Rolander, Thomas "Tom" Alan; Zákony, David; Michel, Howard E .; Halla, Brian; Wharton, John Harrison; Berg, Brian; Su, Weilian; Kildall, Scott; Kampe, Bill (2014-04-25). Zákony, David (ed.). „Legacy of Gary Kildall: The CP / M IEEE Milestone Dedication“ (PDF) (přepis videa). Pacific Grove, Kalifornie, USA: Muzeum počítačové historie. CHM Referenční číslo: X7170.2014. Archivováno (PDF) z původního dne 2014-12-27. Citováno 2020-01-19.
[…] Zákony: […] “dynamické přemístění "OS. Můžete nám říci, co to je a proč to bylo důležité? [...] Eubanks: […] co Gary bylo […] […] ohromující. […] Pamatuji si den v škola Přišel skákat do laboratoře a řekl: Už jsem přišel na to, jak na to přemístit. Využil skutečnosti, že jediným bajtem bude vždy ten bajt vyššího řádu. A tak vytvořil bitmapa. […] Nezáleželo na tom, kolik paměti měl počítač, operační systém mohl být vždy přesunut do vysoké paměti. Proto byste mohli tento […] komercializovat na strojích s různým množstvím paměti. […] Nemůžete prodat 64 tis CP / M a 47K CP / M. Bylo by směšné mít v adresách tvrdý kompilace. Gary na to tedy přišel jednou v noci, pravděpodobně uprostřed noci a přemýšlel o nějaké kódovací věci, a to opravdu umožnilo CP / M komercializovat. Opravdu si myslím, že bez tohoto přemístění by to byl velmi těžký problém. Chcete-li přimět lidi, aby si ji koupili, zdálo by se jim to komplikované, a pokud jste přidali více paměti, museli byste si pořídit jiný operační systém. […] Intel […] Měl bajtů obráceno, správně, pro adresy paměti. Vždy však byli na stejném místě, takže je můžete přemístit na Hranice 256 bajtů, být přesný. Dalo by se proto vždy přemístit pouze s bitmapou, kde jsou ty […] Zákony: Určitě to nej výmluvnější vysvětlení, jaké jsem kdy měl o dynamickém přemístění […]
[5][6] (33 stránek) - Mitchell, Bridger (červenec – srpen 1988). Carlson, Art (ed.). „Z3PLUS & Relocation - Informace o ZCPR3PLUS a jak psát vlastní přemístitelný kód Z80“. Počítačový deník (TCJ) - Programování, Uživatelská podpora, Aplikace. Pokročilé CP / M. Columbia Falls, Montana, USA (33): 9–15. ISSN 0748-9331. archa: / 13960 / t36121780. Citováno 2020-02-09. [7][8]
- Sage, Jay (září – říjen 1988). Carlson, Art (ed.). „ZCPR3 Corner - více o přemístitelném kódu, souborech PRL, programech ZCPR34 a Type-4“. Počítačový deník (TCJ) - Programování, Uživatelská podpora, Aplikace. Pokročilé CP / M. Columbia Falls, Montana, USA (34): 20–25. ISSN 0748-9331. archa: / 13960 / t0ks7pc39. Citováno 2020-02-09. [9][10]
- Harrell III, John B. (říjen 1983). „DOSPLUS 3,5“. 80 mikro. Posouzení. 1001001, Inc. (45): 160, 162, 164–168, 170. ISSN 0744-7868. archa: / 13960 / t8z906r42. Citováno 2020-02-06. [11][12]
- Smith, Lee; Haines, Lionel (02.02.1989) [14.08.1987]. Formát obrazu aplikace RISC OS (dříve Arthur Image Format) (Technické memorandum) (1.00 ed.). Cambridge, Velká Británie: Acorn Computers Limited, Skupina programovacích jazyků. PLG-AIF. Archivováno z původního dne 2017-08-30. Citováno 2017-08-30.
- Vlastnosti formátu obrazu ARM. 1993. Archivováno z původního dne 2017-08-31. Citováno 2017-08-31.
- Huck, Alex (2016-08-14). „Nachladbare Treiber unter CP / M - PRL2COM“. Domácí počítač DDR (v němčině). Archivováno od původního dne 2020-02-21. Citováno 2020-02-21; Pohlers, Volker (2017-04-24) [2012-02-20, 2009, 2002, 1988-07-26, 1987-10-11]. "PRL2COM". Domácí počítač DDR (v němčině). Archivováno od původního dne 2020-02-21. Citováno 2020-02-21.