Yer değiştirme (bilgi işlem) - Relocation (computing)
Yer değiştirme , bir programın konuma bağlı kodu ve verileri için yük adreslerinin atanması ve kodun ve verilerin atanan adresleri yansıtacak şekilde ayarlanması işlemidir. Çok işlemli sistemlerin ortaya çıkmasından önce ve hala birçok gömülü sistemde, nesnelerin adresleri , genellikle sıfır olan bilinen bir konumdan başlayarak mutlaktı . Çoklu işlem sistemleri dinamik olarak programlar arasında bağlantı kurduğu ve geçiş yaptığı için, konumdan bağımsız kod kullanarak nesnelerin yerini değiştirebilmek gerekli hale geldi . Bir bağlayıcı genellikle , bir programı çalıştırmadan önce bellekteki sembolik referansları veya kitaplık adlarını gerçek kullanılabilir adreslerle değiştirmek için dosya ve kitaplık arama işlemi olan sembol çözünürlüğü ile birlikte yeniden konumlandırma gerçekleştirir .
Yer değiştirme tipik olarak linker tarafından bağlantı zamanında yapılır , ancak aynı zamanda yükleme zamanında yer değiştiren bir yükleyici tarafından veya çalışma zamanında çalışan programın kendisi tarafından da yapılabilir . Bazı mimariler, adres atamasını çalışma zamanına erteleyerek yer değiştirmeyi tamamen önler ; bu, sıfır adres aritmetiği olarak bilinir .
segmentasyon
Nesne dosyaları çeşitli bellek segment türlerine ayrılır. Örnek segmentler arasında kod segmenti(.text) , başlatılmış veri segmenti(.data) , başlatılmamış veri segmenti(.bss ) veya diğerleri bulunur.
Yer değiştirme tablosu
Taşınma masa listesidir işaretçiler çevirmen (a yarattığı derleyici veya montajcı ) ve nesne veya yürütülebilir dosyada saklanır. Tablodaki her giriş veya "düzeltme", yükleyici programı doğru konuma başvuracak şekilde yeniden konumlandırdığında değiştirilmesi gereken nesne kodundaki mutlak bir adrese yönelik bir işaretçidir . Düzeltmeler, programın tam bir birim olarak yeniden yerleştirilmesini desteklemek için tasarlanmıştır. Bazı durumlarda, tablodaki her düzeltmenin kendisi sıfır temel adresine göredir, bu nedenle yükleyici tabloda hareket ederken düzeltmelerin kendileri değiştirilmelidir.
Bazı mimarilerde, belirli sınırları (bir segment sınırı gibi) geçen veya bir sözcük sınırına hizalanmayan bir düzeltme yasa dışıdır ve bağlayıcı tarafından bir hata olarak işaretlenir.
DOS ve 16 bit Windows
Bir DOS yürütülebilir dosyası ( EXE ) içindeki koda veya verilere işaret eden uzak işaretçiler ( segment :offset ile 32-bit işaretçiler, DOS programlarında kullanılabilen 20-bit 640 KB bellek alanını adreslemek için kullanılır ), mutlak segmentlere sahip değildir, çünkü kodun/verinin gerçek adresi , programın bellekte nereye yüklendiğine bağlıdır ve program yüklenene kadar bu bilinmez.
Bunun yerine segmentler, DOS EXE dosyasındaki göreli değerlerdir. Yürütülebilir dosya belleğe yüklendiğinde bu bölümlerin düzeltilmesi gerekir. EXE yükleyici , ayarlanması gereken bölümleri bulmak için bir yer değiştirme tablosu kullanır.
32 bit Windows
32 bit Windows işletim sistemlerinde EXE dosyaları için yer değiştirme tablolarının sağlanması zorunlu değildir, çünkü bunlar sanal adres alanına yüklenen ilk görüntüdür ve bu nedenle tercih edilen temel adrese yüklenir.
Hem DLL'ler hem de adres alanı düzeni rastgeleleştirmesini (ASLR) seçen EXE'ler için - Windows Vista ile tanıtılan bir istismar azaltma tekniği - ikili dosyanın yürütülmeden önce dinamik olarak hareket ettirilebilmesi olasılığı nedeniyle yer değiştirme tabloları bir kez daha zorunlu hale gelir. hala sanal adres alanına yüklenen ilk şeydir.
64 bit Windows
Windows Vista ve üzeri sürümlerde yerel 64 bit ikili dosyaları çalıştırırken, ASLR zorunludur ve bu nedenle yer değiştirme bölümleri derleyici tarafından atlanamaz.
Unix benzeri sistemler
Çalıştırılabilir ve Bağlantılanabilir Biçim Unix benzeri sistemlerde yer değiştirme çeşitli sağlayan en kullandığı (ELF) yürütülebilir biçimi ve ortak kitaplığı biçimi tarif edilecek.
Yer değiştirme prosedürü
Bağlayıcı, nesne dosyalarındaki segment bilgilerini ve yer değiştirme tablolarını okur ve yer değiştirme işlemini şu şekilde gerçekleştirir:
- ortak tipteki tüm segmentleri o tipteki tek bir segmentte birleştirmek
- tüm kod (fonksiyonlar) ve veri (global değişkenler) benzersiz çalışma süresi adresleri vererek, her bölüme ve her sembole benzersiz çalışma süresi adresleri atama
- sembolleri doğru çalışma zamanı adreslerini gösterecek şekilde değiştirmek için yer değiştirme tablosuna başvurun.
Örnek
Aşağıdaki örnek kullanır Donald Knuth 'ın MIX mimarisi ve MIXAL montaj dili. Detaylar değişse de ilkeler her mimari için aynıdır.
- (A) Program SUBR , hem makine kodu hem de birleştirici olarak gösterilen nesne dosyası (B) üretmek için derlenir. Derleyici, derlenmiş kodu, gösterildiği gibi, genellikle konum 1 olmak üzere, rastgele bir konumda başlatabilir. Konum 13, konum 5'teki ST ifadesine atlama komutu için makine kodunu içerir .
- (C) SUBR daha sonra başka bir kodla bağlantılıysa, 1 dışında bir yerde saklanabilir. Bu örnekte, bağlayıcı onu 120 konumuna yerleştirir. Şu anda 133 konumunda olan atlama talimatındaki adresin yeri değiştirilmelidir. ST ifadesi için kodun yeni konumuna işaret etmek için , şimdi 125. [1 61 talimatta gösterilen, 125'in MIX makine kodu gösterimidir].
- (D) Program çalıştırılmak üzere belleğe yüklendiğinde, bağlayıcı tarafından atanan yerden başka bir yere yüklenebilir. Bu örnek, şimdi SUBR konumunda 300'ü göstermektedir . Şimdi 313'te olan atlama komutundaki adresin, ST , 305'in güncellenmiş konumuna işaret etmesi için yeniden konumlandırılması gerekmektedir. [4 49, 305]'in MIX makine temsilidir.
Ayrıca bakınız
- Bağlayıcı (bilgi işlem)
- Kütüphane (bilgi işlem)
- nesne dosyası
- ön bağlama
- statik kitaplık
- kendi kendine yer değiştirme
- Konumdan bağımsız kod (PIC)
- yeniden temellendirme
- Çöp toplama
Referanslar
daha fazla okuma
- Johnson, Glenn (1975-12-21) [1975-11-13], 11/34 Bellek Yönetimi Temel Mantık testi , Digital Equipment Corporation (DEC), MAINDEC-11-DFKTA-AD , alındı 2017-08-19
- Kildall, Gary Arlen (Şubat 1978). "Mutlak makine kodunun statik olarak yeniden konumlandırılması için basit bir teknik" . Dobb's Journal of Computer Calisthenics & Orthodontia . Halk Bilgisayar Şirketi . 3 (2): 10-13 (66-69). ISBN'si 0-8104-5490-4. # 22. 2017-09-09 tarihinde kaynağından arşivlendi . 2017-08-19 alındı . [4] [5] [6] ( Sayfa sınırının yeniden konumlandırılması olarak adlandırılan bu "yeniden boyutlandırma" yöntemi, programların çalışması için TPA'yı en üst düzeye çıkarmak amacıyla MOVCPM kullanılarak bir CP/M-80 disk görüntüsüne statik olarak uygulanabilir . aynı zamanda CP tarafından dinamik kullanılmıştır / M ayıklayıcı Dinamik hata ayıklama Aracı (DDT) için kendisini taşınmaya yüksek belleğe. aynı yaklaşım bağımsız tarafından geliştirilen Bruce Van Natta ait IMS Associates relocatable üretmek için PL / M kodu. As paragraf sınır taşınma , başka bir varyant , bu yöntemin daha sonra dinamik ile kullanılmıştır HMA kendi kendine yerini değiştirme TSR gibi KEYB , SSE ve NLSFUNC altında DR DOS 6.0 ve daha yüksek. a çok daha sofistike ve bayt seviyesinde tanecikli bir şekilde benzer bir yaklaşıma göre yöntem, bağımsız bir şekilde tasarlanmış ve uygulanmıştır Matthias R. Paul ve Axel C. Frinke tarafından yerleşik sürücülerin ve TSR'lerin (FreeKEYB gibi) çalışma zamanı ayak izini dinamik olarak en aza indirmek için dinamik ölü kod ortadan kaldırılması için.)
-
Huitt, Robert; Eubanks, Gordon ; Rolander, Thomas "Tom" Alan ; Kanunlar, David; Michel, Howard E.; Halla, Brian; Wharton, John Harrison ; Berg, Brian; Su, Weilian; Kildal, Scott ; Kampe, Bill (2014-04-25). Kanunlar, David (ed.). "Gary Kildall'ın Mirası: CP/M IEEE Kilometre Taşı Adanması " (PDF) (video transkripsiyon). Pacific Grove, California, ABD: Bilgisayar Tarihi Müzesi . CHM Referans numarası: X7170.2014. 2014-12-27 tarihinde orijinalinden arşivlendi (PDF) . 2020-01-19 alındı .
[…] Kanunlar: […] İşletim sisteminin "dinamik yer değiştirmesi". Bize bunun ne olduğunu ve neden önemli olduğunu söyleyebilir misiniz? […] Eubanks : […] Gary'nin yaptığı […] akıllara durgunluk veren bir şeydi. […] Okulda laboratuara sıçrayarak geldiği günü hatırlıyorum ve " Nasıl yer değiştireceğimi buldum" dedi. Tek baytın her zaman yüksek sıralı bayt olacağı gerçeğinden yararlandı . Ve böylece bir bitmap oluşturdu . […] Bilgisayarın ne kadar belleği olursa olsun, işletim sistemi her zaman yüksek belleğe taşınabilirdi. Bu nedenle, bunu […] farklı miktarlarda belleğe sahip makinelerde ticarileştirebilirsiniz. […] 64K CP/M ve 47K CP/M satıyor olamazsınız . Adreslerde zor bir derleme yapmak saçma olurdu. Yani Gary bir gece, muhtemelen gecenin bir yarısı kodlamayla ilgili bir şey düşünürken bunu anladı ve bu gerçekten CP/M'nin ticarileştirilmesini mümkün kıldı. Bu taşınma olmadan gerçekten çok zor bir sorun olacağını düşünüyorum. İnsanların onu satın almasını sağlamak onlara karmaşık gelebilir ve eğer daha fazla bellek eklerseniz, farklı bir işletim sistemi almanız gerekir. […] Intel […] bellek adresleri için baytları tersine çevirdi . Ancak her zaman aynı yerdeydiler, bu yüzden kesin olarak 256 baytlık bir sınırda yerini değiştirebilirsiniz . Bu nedenle, her zaman bu […]
[7] [8] (33 sayfa) - Lieber, Eckhard; von Massenbach, Thomas (1987). "CP/M 2 bilgi dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M". c't - magazin für computertechnik (bölüm 1) (Almanca). Heise Verlag'ın fotoğrafı . 1987 (1): 124–135; Lieber, Eckhard; von Massenbach, Thomas (1987). "CP/M 2 bilgi dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M". c't - magazin für computertechnik (bölüm 2) (Almanca). Heise Verlag'ın fotoğrafı . 1987 (2): 78-85; Huck, Alex (2016-10-09). "CP/M 2.2 için RSM" . Ev bilgisayarı DDR (Almanca). 2016-11-25 tarihinde kaynağından arşivlendi . 2016-11-25 alındı .
-
Guzis, Charles "Chuck" P. (2015-03-16). "Re: CP/M Assembly dili programlama" . Eski Bilgisayar Forumu . Tür: CP/M ve MP/M. 2020-02-01 tarihinde kaynağından arşivlendi . 2020-02-01 alındı .
[…] MOVCPM'nin nasıl
çalıştığını hiç merak ettiniz mi? Yana BDOS ve CCP yüksek bellekte olduğu, kullanıcı uygulaması yukarıda, adresleri sistem belleği boyutu her değiştiğinde değiştirilmesi gerekir. Artık bu, 8080 kodunda adreslerin yeniden konumlandırılmasını gerektiriyor , çünkü göreli adresleme donanımın bir parçası değil. Tam gelişmiş bir yeniden yerleştirme montajcı ve yükleyici uygulamadan, bu nasıl olur? Aslında oldukça zekice ve MP/M bu şemayı sayfa yeniden yerleştirilebilir dosyalarını oluşturmak için bile kullanıyor. Kaynak programı , birinciden 100H (256 bayt) daha yüksek ikinci derleme orijini ile iki kez birleştirmeniz yeterlidir . Daha sonra iki ikili görüntü karşılaştırılır, bayt bayt ve bayt çiftlerinin değerlerinin tam olarak 100H farklılık gösterdiği bir harita oluşturulur. Sonuç, bellekteki bir programın konumu taşınacaksa, yer değiştirme değerinin ayarlanması gereken konumların bir listesidir. MP/M bu tür bir dosyaya PRL (sayfa yeniden yerleştirilebilir) adını verir, ancak CP/M 2.2'nin bunun için bir isim bulduğunu bilmiyorum. […] -
Guzis, Charles "Chuck" P. (2015-07-29). "Re: MOVCPM.COM nasıl çalışır?" . Eski Bilgisayar Forumu . Tür: CP/M ve MP/M. 2020-02-01 tarihinde kaynağından arşivlendi . 2020-02-01 alındı .
[…] MOVCPM erken türde bir PRL formatı kullanır. Temel olarak, CP/M iki kez monte edilir; ikinci kez 100H bayt ofsettir. İki ikili karşılaştırılır ve bir bitmap oluşturulur. Bir set bit , bir adresin yüksek dereceli baytının ayarlanması gerektiğini ifade eder. Düşük sıralı adres baytları etkilenmez; bu nedenle, "Sayfa yeniden yerleştirilebilir dosya". Bitmap'teki her bayt, ikili verilerdeki 8 bayta karşılık gelir. […] Yani MOVCPM'de taşınacak her şey görüntünün ve onun yer değiştirme bit eşleminin bir parçasıdır. […]
-
Guzis, Charles "Chuck" P. (2016-11-08). "Re: CP/M montaj programlarında RST 28h kullanmak güvenli midir?" . Eski Bilgisayar Forumu . Tür: CP/M ve MP/M. 2020-02-01 tarihinde kaynağından arşivlendi . 2020-02-01 alındı .
[…] PRL dosyalarına ve ilk olarak MOVCPM ile nasıl başladıklarına , ancak MP/M ve CP/M 3.0'ın ayrılmaz bir parçası haline
geldiklerine değindim . Ancak PRL dosyaları , her bitin bir bellek konumuna karşılık geldiği bir bit haritası kullanır ; bir bit, ilgili bellek konumuna bir sayfa yer değiştirme ofsetinin eklenmesi gerektiğini belirtir. Çok az mutlak bellek referansınız varsa (göreceli olanların aksine), bir bitmap yerine bir işaretçi listesi (referans başına 2 bayt) kullanmak isteyebilirsiniz. Göreceli atlamaları olmayan 8080 kodunda bu olası değildir, ancak Z80 kodu için dikkate alınabilir . Bunu çabucak bulmanın püf noktası, programınızı iki kez bir araya getirmektir; ikinci kez 100H ile ofset, ardından iki ikili dosyayı karşılaştırın. Çalışma zamanı yer değiştirmenin avantajı , yer değiştirme sorununu aşmaya çalışan kod için bir cezaya maruz kalmanıza gerek olmamasıdır - "hile" yok; sadece düz kod yazın. […] - Roth, Richard L. (Şubat 1978) [1977]. "Taşıma Sadece Programları Taşımak Değildir" . Dobb's Journal of Computer Calisthenics & Orthodontia . Ridgefield, CA, ABD: Halkın Bilgisayar Şirketi . 3 (2): 14–20 (70–76). ISBN'si 0-8104-5490-4. # 22. 2019-04-20 tarihinde kaynağından arşivlendi . 2019-04-19 alındı .
- Calingaert, Peter (1979) [1978-11-05]. "8.2.2 Yükleyicinin Yerini Değiştirme". Chapel Hill'deki Kuzey Karolina Üniversitesi'nde yazıldı . Gelen Horowitz, Ellis (ed.). Birleştiriciler, Derleyiciler ve Program Çevirisi . Bilgisayar yazılım mühendisliği serisi (1. baskı, 1. baskı). Potomac, Maryland, ABD: Computer Science Press, Inc. s. 237 –241. ISBN'si 0-914894-23-4. ISSN 0888-2088 . LCCN 78-21905 . 2020-03-20 alındı . (2+xiv+270+6 sayfa)
- Microsoft OBJ Dosya Biçimi . Microsoft , Ürün Destek Hizmetleri. Uygulama Notu SS0288. 2017-09-09 tarihinde kaynağından arşivlendi . 2017-08-21 alındı .
- Tanenbaum, Andrew Stuart ; Bos, Herbert (2015). Modern İşletim Sistemleri (4 ed.). Pearson Eğitim A.Ş. ISBN 978-0-13359162-0.
-
Elliott, John C. (2012-06-05) [2000-01-02]. "PRL dosya biçimi" . seasip.info . 2020-01-26 tarihinde kaynağından arşivlendi . 2020-01-26 alındı .
[…] Bir PRL dosyası, MP/M ve CP/M Plus tarafından .COM dosyaları dışındaki çeşitli modüller için kullanılan, yeri değiştirilebilen bir ikili dosyadır . Dosya formatı Amstrad PCW'deki FID dosyaları için de kullanılır . PRL sürümlerini kullanan birkaç dosya formatı vardır: SPR (Sistem PRL), RSP (Yerleşik Sistem Süreci). LINK-80 ayrıca, bir PRL başlığına sahip olan ancak yeri değiştirilemeyen OVL (bindirme) dosyaları da üretebilir. GSX sürücüleri PRL formatındadır; böylece vardır Yerleşik Sistem Uzantıları (.RSX). […]
[9] -
Elliott, John C. (2012-06-05) [2000-01-02]. "Microsoft REL biçimi" . seasip.info . 2020-01-26 tarihinde kaynağından arşivlendi . 2020-01-26 alındı .
[…] REL formatı Microsoft'un M80'i ve Digital Research'ün RMAC'ı tarafından oluşturulur. […]
-
feilipu (2018-09-05) [2018-09-02]. "PRL desteği, MP/M için sayfa yeniden yerleştirilebilir yürütülebilir" . z88dk . 2020-02-01 tarihinde kaynağından arşivlendi . 2020-01-26 alındı .
[…] Birleştirilmiş Microsoft .REL dosyalarından, bağlayıcının MP/M için yürütülebilir bir .PRL formatı oluşturması gerekir . .PRL formatı, esasen , programın ve verilerinin herhangi bir sayfaya yeniden yerleştirilmesini sağlamak için bazı ek bilgiler içeren bir .COM dosyasıdır . Bir .PRL dosyası neye benziyor? İlk bayt, programın boyutudur, ardından 0x0100'deki program orijini gelir. Programın ardından, MP/M sisteminin, programın yeri değiştirildiğinde programdaki hangi baytların değiştirilmesi gerektiğini bilmesini sağlamak için bayt başına bir bit maskesi eklenir. Bağlayıcı, tüm uygulamayı sökmeden bunu nasıl yapar? Önceden program, .REL nesnelerinden 0x0100 ve 0x0200 olmak üzere iki farklı orijin için bağlanır. Bağlayıcı hilesi, yürütülebilir dosyanın iki sürümündeki hangi baytların farklı olduğunu basitçe tanımaktır. Bu baytlar daha sonra yürütülebilir dosyanın ardından depolanan bit maskesine kaydedilir ve son .PRL programı 0x0100 artı sayfa ofsetinden çalışacak şekilde tasarlanmıştır. Aynı numara, .RSP ve .SPR yürütülebilir dosyaları için de yapılır, ancak bu biçimlerin her ikisi de ofsetten önce gelir ve 0x0000 artı sayfa ofsetinden çalıştırılır. […]
- Kardeşler, Hardin (Nisan 1983). "Yeniden Yerleştirilebilir Kodu Anlama" . 80 Mikro . Sonraki adım. 1001001, Inc. (39): 38 , 40, 42, 45. ISSN 0744-7868 . 2020-02-06 alındı . [10] [11]
- Kardeşler, Hardin (Nisan 1985). "Yeniden Yerleştirilebilir Programlar: Microcomputing'in Hoboları" . 80 Mikro . Sonraki adım. CW Communications/Peterborough, Inc. (63): 98 , 100, 102–103. ISSN 0744-7868 . 2020-02-06 alındı . [12] [13]
- Mitchell, Bridger (Temmuz-Ağustos 1988). Carlson, Sanat (ed.). "Z3PLUS ve Yer Değiştirme - ZCPR3PLUS hakkında bilgiler ve kendi kendine yer değiştiren Z80 kodunun nasıl yazılacağı" . Bilgisayar Dergisi (TCJ) - Programlama, Kullanıcı Desteği, Uygulamalar . Gelişmiş CP/M. Columbia Şelaleleri, Montana, ABD (33): 9 –15. ISSN 0748-9331 . ark:/13960/t36121780 . 2020-02-09 alındı . [14] [15]
- Adaçayı, Jay (Eylül-Ekim 1988). Carlson, Sanat (ed.). "ZCPR3 Köşesi - Yeniden yerleştirilebilir kod, PRL dosyaları, ZCPR34 ve Type-4 programları hakkında daha fazlası" . Bilgisayar Dergisi (TCJ) - Programlama, Kullanıcı Desteği, Uygulamalar . Gelişmiş CP/M. Columbia Şelaleleri, Montana, ABD (34): 20 –25. ISSN 0748-9331 . ark:/13960/t0ks7pc39 . 2020-02-09 alındı . [16] [17]
- Ganssle, Jack (Şubat 1992). "Relocatable Code Yazma - Bazı gömülü kodlar birden fazla adreste çalışmalıdır" . Gömülü Sistem Programlama . Ganssle Group - Gömülü Sistemler İnşa Etme Sanatını Mükemmelleştirmek / TGG. 2019-07-18 tarihinde kaynağından arşivlendi . 2020-02-20 alındı .