Bağlayıcı (bilgi işlem) - Linker (computing)

Bağlama işleminin bir örneği. Nesne dosyaları ve statik kitaplıklar , yeni bir kitaplık veya yürütülebilir dosyada birleştirilir

Gelen bilgi işlem , bir bağlayıcı veya bağlantı düzenleyicisi bir bilgisayardır sistem programı , bir veya daha fazla sürer nesne dosyaları (a tarafından oluşturulan derleyici veya Çevirici tek içine) ve biçerdöverler onları çalıştırılabilir dosyaya, kitaplık dosyası veya diğer bir "nesne" dosyasının.

Bunu yazar daha basit bir versiyonu çıkışı doğrudan bellek denir yükleyici da, yükleme , tipik olarak, ayrı bir işlem olarak değerlendiirlmiştir.

genel bakış

Bilgisayar programları tipik olarak birkaç parça veya modülden oluşur; bu parçaların/modüllerin tek bir nesne dosyası içinde yer almasına gerek yoktur ve bu gibi durumlarda , yürütme için bağlandıklarında bellek adreslerine eşlenen diğer modüllere adresler olarak semboller aracılığıyla birbirlerine atıfta bulunurlar . Tipik olarak, bir nesne dosyası üç tür sembol içerebilir:

  • diğer modüller tarafından çağrılmasına izin veren, bazen "genel" veya "giriş" sembolleri olarak adlandırılan tanımlanmış "harici" semboller,
  • bu sembollerin tanımlandığı diğer modüllere atıfta bulunan tanımsız "harici" semboller ve
  • yer değiştirmeyi kolaylaştırmak için nesne dosyası içinde dahili olarak kullanılan yerel semboller .

Çoğu derleyici için her nesne dosyası, bir girdi kaynak kodu dosyasının derlenmesinin sonucudur. Bir program birden çok nesne dosyası içerdiğinde, bağlayıcı bu dosyaları birleştirilmiş bir yürütülebilir programda birleştirerek, ilerledikçe sembolleri çözer.

Bağlayıcılar, kitaplık veya çalışma zamanı kitaplığı adı verilen bir koleksiyondan nesneler alabilir . Çoğu bağlayıcı çıktıda kitaplığın tamamını içermez; yalnızca diğer nesne dosyaları veya kitaplıklar tarafından başvurulan dosyaları içerirler. Bu nedenle kitaplık bağlama, bazı başvurulan modüllerin ek modüllerin bağlanmasını gerektirmesi vb. ile yinelemeli bir süreç olabilir. Kitaplıklar çeşitli amaçlar için bulunur ve bir veya daha fazla sistem kitaplığı genellikle varsayılan olarak bağlantılıdır.

Bağlayıcı ayrıca, bir programın adres alanındaki nesneleri düzenlemekle de ilgilenir . Bu, belirli bir baz adresi varsayan kodun başka bir baza taşınmasını içerebilir . Derleyici, bir nesnenin nerede bulunacağını nadiren bildiğinden, genellikle sabit bir temel konumu (örneğin, sıfır ) varsayar . Makine kodunun yerinin değiştirilmesi, mutlak sıçramaların, yüklerin ve depoların yeniden hedeflenmesini içerebilir.

Bağlayıcı tarafından yürütülebilir çıktı, nihayet belleğe yüklendiğinde (yürütmeden hemen önce) başka bir yer değiştirme geçişine ihtiyaç duyabilir. Bu geçiş genellikle sanal bellek sunan donanımlarda atlanır : her program kendi adres alanına yerleştirilir, bu nedenle tüm programlar aynı temel adreste yüklense bile çakışma olmaz. Yürütülebilir dosya konumdan bağımsız bir yürütülebilir dosyaysa, bu geçiş de atlanabilir .

SINTRAN III gibi bazı Unix türevlerinde, bir bağlayıcı (nesne dosyalarını bir programa birleştirmek) tarafından gerçekleştirilen işleme, yükleme (bir dosyaya yürütülebilir kodun yüklenmesinde olduğu gibi ) adı verilir . Ek olarak, bazı işletim sistemlerinde, aynı program hem bir programı bağlama hem de yükleme ( dinamik bağlantı ) işlerini yürütür .

Dinamik bağlantı

Birçok işletim sistemi ortamı, bir program çalıştırılana kadar bazı tanımsız sembollerin çözünürlüğünü erteleyerek dinamik bağlantıya izin verir. Bu, yürütülebilir kodun hala tanımsız semboller ve ayrıca bunlar için tanımlar sağlayacak bir nesne veya kitaplık listesi içerdiği anlamına gelir. Programın yüklenmesi bu nesneleri/kütüphaneleri de yükleyecek ve son bir bağlantı gerçekleştirecektir.

Bu yaklaşım iki avantaj sunar:

  • Sık kullanılan kitaplıkların (örneğin standart sistem kitaplıklarının) her bir yürütülebilir dosyada çoğaltılmadan yalnızca tek bir yerde saklanması gerekir, böylece sınırlı bellek ve disk alanından tasarruf edilir .
  • Bir kitaplık işlevindeki bir hata kitaplık değiştirilerek düzeltilirse, onu dinamik olarak kullanan tüm programlar, yeniden başlatıldıktan sonra düzeltmeden yararlanacaktır. Statik bağlantı ile bu işlevi içeren programların önce yeniden bağlanması gerekir.

Dezavantajları da vardır:

  • Windows platformunda " DLL cehennemi " olarak bilinen, uyumsuz bir güncelleştirilmiş kitaplık, yeni sürüm yanlışlıkla geriye dönük uyumlu değilse, kitaplığın önceki sürümünün davranışına bağlı olan yürütülebilir dosyaları bozar .
  • Bir program, kullandığı kitaplıklarla birlikte bir paket olarak sertifikalandırılabilir (örneğin doğruluk, belge gereksinimleri veya performans açısından), ancak bileşenlerin değiştirilip değiştirilemeyeceği (bu aynı zamanda kritik sistemlerdeki otomatik işletim sistemi güncellemelerine de karşı çıkar; her ikisinde de) durumlarda, işletim sistemi ve kitaplıklar nitelikli bir ortamın parçasını oluşturur ).

Statik bağlama

Statik bağlama, bağlayıcının programda kullanılan tüm kitaplık rutinlerini yürütülebilir görüntüye kopyalamasının sonucudur. Bu, dinamik bağlantıdan daha fazla disk alanı ve bellek gerektirebilir, ancak çalıştığı sistemde kitaplığın bulunmasını gerektirmediğinden daha taşınabilirdir . Statik bağlantı aynı zamanda "DLL cehennemini" de önler, çünkü her program diğer programlarla çakışma olmadan tam olarak ihtiyaç duyduğu kitaplık rutinlerinin sürümlerini içerir. Bir kitaplıktan yalnızca birkaç rutin kullanan bir program, kitaplığın tamamının yüklenmesini gerektirmez.

yer değiştirme

Derleyici, nihai çıktıdaki nesnelerin yerleşimi hakkında hiçbir bilgiye sahip olmadığı için, başka bir nesnenin adresine bir gereksinim koyan daha kısa veya daha verimli komutlardan yararlanamaz. Örneğin, bir atlama komutu, mutlak bir adrese veya geçerli konumdan bir uzaklığa başvurabilir ve kayma, hedefe olan mesafeye bağlı olarak farklı uzunluklarda ifade edilebilir. İlk önce en muhafazakar talimatı (platforma bağlı olarak genellikle en büyük göreceli veya mutlak değişken) üreterek ve gevşeme ipuçları ekleyerek , son bağlantı sırasında daha kısa veya daha verimli talimatları değiştirmek mümkündür. Atlama optimizasyonları ile ilgili olarak buna otomatik atlama boyutlandırma da denir . Bu adım ancak tüm girdi nesneleri okunduktan ve geçici adresler atandıktan sonra gerçekleştirilebilir; Bağlayıcı gevşeme geçiş, daha sonra da daha fazla potansiyel gevşemeler oluşmasına izin verebilir adresleri, atar. Genel olarak, ikame edilmiş diziler daha kısadır, bu da bu işlemin sabit bir nesne sırası verilen en iyi çözümde her zaman yakınsamasına izin verir; durum böyle değilse, gevşemeler çatışabilir ve bağlayıcının her iki seçeneğin de avantajlarını tartması gerekir.

Talimat gevşemesi tipik olarak bağlantı zamanında gerçekleşirken, iç modül gevşemesi, derleme zamanında optimizasyon sürecinin bir parçası olarak zaten gerçekleşebilir . Bazı durumlarda, yeniden yerleştirme sürecinin bir parçası olarak veya dinamik ölü kod eleme teknikleriyle birlikte yükleme zamanında gevşeme de meydana gelebilir .

Bağlantı düzenleyici

z/Architecture anabilgisayarları için z/OS dahil OS/360 gibi IBM System/360 anabilgisayar ortamlarında , bu program türü bağlantı düzenleyicisi olarak bilinir . Adından da anlaşılacağı gibi, bir bağlantı düzenleyicisi , bireysel program bölümlerinin eklenmesine, değiştirilmesine ve/veya silinmesine izin verme ek yeteneğine sahiptir. OS/360 gibi işletim sistemleri, bir programın bileşen bölümleri hakkında ek veriler içeren yürütülebilir yük modülleri için bir formata sahiptir, böylece tek bir program bölümü değiştirilebilir ve programın diğer bölümleri yeniden yerleştirilebilir adreslerin ve diğer referansların değiştirilebilmesi için güncellenir. sürecin bir parçası olarak bağlantı editörü tarafından düzeltilmelidir.

Bunun bir avantajı, bir programın tüm ara nesne dosyalarını saklamak zorunda kalmadan veya değişmemiş program bölümlerini yeniden derlemek zorunda kalmadan sürdürülmesine izin vermesidir. Ayrıca, program güncellemelerinin yalnızca değiştirilecek nesne modülünü içeren küçük dosyalar (başlangıçta kart desteleri ) şeklinde dağıtılmasına izin verir . Bu tür sistemlerde, nesne kodu 80 bayt delikli kart görüntüleri biçiminde ve biçimindedir, böylece güncellemeler bu ortamı kullanan bir sisteme dahil edilebilir. OS/360'ın sonraki sürümlerinde ve sonraki sistemlerde, yük modülleri, izlenebilir bir güncelleme kaydı oluşturmak için bileşen modüllerinin sürümleri hakkında ek veriler içerir. Ayrıca, halihazırda bağlantılı bir yük modülünden bir bindirme yapısının eklenmesine, değiştirilmesine veya kaldırılmasına da izin verir .

"Bağlantı düzenleyici" terimi, programın bir metin düzenleyici gibi kullanıcı etkileşimli bir modda çalıştığını ima ettiği şeklinde yorumlanmamalıdır. Düzenleme komutlarının kullanıcı tarafından delikli kartlar , DASD veya manyetik bant gibi sıralı olarak organize edilmiş dosyalarda sağlandığı toplu modda yürütme için tasarlanmıştır ve bantlar genellikle işletim sisteminin ilk kurulumu sırasında kullanılmıştır.

Bağlantı düzenleme ( IBM terminolojisi) veya konsolidasyon veya toplama ( ICL terminolojisi), bağlantı düzenleyicisinin veya konsolidatörünün çeşitli parçaları yeniden yerleştirilebilir bir ikili dosyada birleştirme eylemine atıfta bulunurken, hedef adreste bir mutlak ikili dosyaya yükleme ve yeniden yerleştirme normalde ayrı bir dosya olarak kabul edilir. adım.

Ortak uygulamalar

Unix ve Unix benzeri sistemlerde bağlayıcı "ld" olarak bilinir. "ld" adının kökenleri "LoaDer" ve "Link eDitor" dur. "Yükleyici" terimi, bağlantı işlemi sırasında diğer programlardan harici sembollerin yüklenmesi sürecini tanımlamak için kullanılmıştır.

GNU bağlayıcı

GNU bağlayıcı (veya GNU ld) 'dir GNU Projesi 'ın özgür yazılım Unix komut ld uygulanması. GNU ld, bir yazılım projesinin derlenmesi sırasında oluşturulan nesne dosyalarından yürütülebilir bir dosya (veya bir kitaplık) oluşturan bağlayıcıyı çalıştırır. Bağlama süreci üzerinde daha fazla kontrol uygulamak için GNU ld'ye bir bağlayıcı komut dosyası geçirilebilir. GNU bağlayıcısı, GNU İkili Yardımcı Programlarının (binutils) bir parçasıdır . Dayalı geleneksel GNU ld: ld iki versiyonu binutils verilmektedir KolayEvAl ve bir "aerodinamik" ELF-tek versiyon olarak adlandırılan altın .

GNU ld'nin komut satırı ve bağlayıcı komut dosyası sözdizimleri , Unix benzeri dünyanın çoğunda fiili standarttır . LLVM projenin bağlayıcı, lld , drop-in uyumlu olacak şekilde tasarlanmıştır.

Ayrıca bakınız

Referanslar

daha fazla okuma

Dış bağlantılar