Önyükleme nedir?


636

Uygulama geliştirme tartışmalarında bahsedilen "önyükleme" yi görmeye devam ediyorum. Hem yaygın hem de önemli görünüyor, ancak henüz önyüklemenin ne olduğuna dair kötü bir açıklama bile görmedim; daha ziyade, herkesin bunun ne anlama geldiğini bilmesi gerekiyormuş gibi görünüyor. Yine de bilmiyorum. Anlayabildiğim kadarıyla, bir uygulamanın başlatma sırasında gerekli başlatma görevleri ile ilgisi var, ancak bu konuda tamamen yanlış olabilirim. Birisi bu fikri anlamama yardımcı olabilir mi?


8
Wikipedia'ya göre, bilgisayarla ilgili olarak "bootstrapping" sözcüğünün dört kullanımı vardır - en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens

1
HeDinges gönderisini bununla güncelledim. Alex'in hangi önyükleme biçimine baktığına dair bir açıklama arıyordum.
Thomas Owens

Yazılım geliştirmede, daha karmaşık, daha hızlı programlama ortamlarının geliştirilmesini ifade eder.
Şanslı

.NET yazılım geliştirmede, benim anlayışım, uygulamanın çalışacağı ortamın kaydedilmesi veya yüklenmesi gereken herhangi bir hizmet gibi kurulumuna atıfta bulunmasıdır.
Neo

Yanıtlar:


318

"Bootstrapping" terimi, "kendi bootstraps'larınız tarafından yukarı çekilmek" teriminden gelir. Wikipedia'dan bu kadar çok şey alabilirsiniz .

Hesaplamada, bir önyükleme yükleyicisi, bir makine başlatıldığında çalışan ilk kod parçasıdır ve işletim sisteminin geri kalanının yüklenmesinden sorumludur. Modern bilgisayarlarda ROM'da saklanır, ancak PDP-11'deki önyükleme işlemini hatırlıyorum, burada ön panel anahtarları aracılığıyla belirli bir disk segmentini belleğe yüklemek ve daha sonra çalıştırmak için bitleri uyandırırsınız. Söylemeye gerek yok, bootstrap yükleyici normalde oldukça küçük.

"Önyükleme" aynı zamanda kendisini kullanan bir sistemi ya da daha doğrusu önceki sürümü kullanarak bir terim olarak da kullanılır. Örneğin, ANTLR sürüm 3, ANTLR sürüm 2'de geliştirilen bir ayrıştırıcı kullanılarak yazılır.


8
Vay canına, PDP'lerdeki ön panel anahtarlarını neredeyse unutmuştum. Anılar için teşekkürler!!
Jeff Hornby

7
Yanlışım varsa düzelt. Bu cevap, önyüklemenin ne olabileceğinin teknik ayrıntılarını açıklasa da, asıl soruyu soru bağlamında asla cevaplamadı.
jayscript

5
@jayscript - Bu soruya nasıl cevap vermeyi seçersiniz? Bu deyimsel bir ifadedir ve deyimler genellikle onları kullanan sosyal grup tarafından iyi anlaşılır ve bunun dışında anlaşılmaz. Örnekle cevap vermeye çalıştım, ki bu da deyimi tercüme etmenin birkaç yolundan biri olduğuna inanıyorum.

3
@kdgregory Bu soruya cevap aramaya geldiğim için bu soruya cevap veremezdim. Önyükleme sözcüğünün kendisinin, gevşek bir şekilde ilişkili olan ve karışıklığın kaynağı olabilecek birkaç farklı teknik kavram için bir metafor olduğunu tahmin ediyorum.
jayscript

2
PDP 11 ?! Burada yaşlı insanlar olduğumuzu fark etmemiştim. : P
John Red

255

Bazı web çerçevelerinde önyükleme örneği verilebilir. İndex.php (önyükleyici) öğesini çağırırsınız ve ardından çerçeve yardımcılarını, modelleri, yapılandırmayı yükler ve sonra denetleyiciyi yükler ve denetimden geçirir.

Gördüğünüz gibi, büyük bir işlem başlatan basit bir dosya.


50
Web geliştirme açısından (orijinal sorunun bağlamı), bunun en iyi cevap olduğunu düşünüyorum.
cartbeforehorse

Laravel ile oldukça ilgili görünüyor, ancak Laravel 2009'da hala orada değildi.
LppEdd

@Vajdan Ali Hayır, bu kabul edilen cevap olmamalı. Bu, bazılarının aslında çok daha erken bir terimin yanlış kullanımı olduğunu iddia ettiği, önyükleme teriminin yeni bir kullanımının mikroskobik bir görünümüdür. "Bootstrap'a", kendinizi bootstraps'lerinizle, yani bir şeyden güç almak için kendini kullanmak anlamına gelir. "Bilgisayarınızı önyüklemek" teriminin başlangıcıdır. Web geliştirmedeki mevcut pop kullanımı, kelimenin tek (veya orijinal) kullanımı değildir. Diğer pek çok yanıt buna uygun olarak cevap vermektedir.
Kallaste

3
@Kallaste, tamam, ama aradığım cevap bu ve orijinal sorunun bağlamına ("uygulama geliştirme") göre, daha önce de belirtildiği gibi en uygun cevap gibi görünüyor.
Bynary

@ aaron.bynum, hayır, verilen cevap web geliştirme çerçeveleri için geçerlidir ve kesinlikle uygulama geliştirme için geçerli değildir. Cevap yanıltıcı ve kusurludur, çünkü önyüklemenin gerçekte ne olduğu ve nereden geldiği konusunda yaygın olarak yanlış anlaşılmaya dayanır. Sadece yanlış bilgi yayıyor. Eğer buraya gelip buysa, o zaman para cezası, ama bir bütün olarak SO doğru bilgileri doğrular. Böylece benim yorumum.
Kallaste

51

Bootstrapping hakkındaki Wikipedia makalesine bakın .

Bilgi İşlem'de ne anlama geldiğini açıklayan bir bölüm ve bağlantılar vardır . Sahada dört farklı kullanımı vardır.

İşte bazı alıntılar, ancak daha ayrıntılı bir açıklama ve alternatif anlamlar için yukarıdaki bağlantılara bakın.

"... basit bir bilgisayar programının daha karmaşık bir program sistemini aktive ettiği bir tekniktir."

"Önyükleme teriminin farklı bir kullanımı, önce yeni dilde yeni derleyicinin daha fazla programını derlemek için yeni bir programlama dilinin derleyicisinin küçük bir kısmını mevcut bir dilde yazarak derlemek için bir derleyici kullanmaktır."


6
Okuyucular cevaplarını almak için birden fazla web sitesinden geçmek zorunda kalmayacaklarından alıntı yapabilir veya yorumlayabilir misiniz?
Kurt W. Leucht

5
"Yazılım Endüstrisi,: standart altı mal yasal olarak satmak ve yükseltmeleri için ücret benzersiz iş."
Stein Åsmul

Derleyici'de Bootstrapping cevabı arıyordum . Bu yardımcı oldu.
Siraj Alam

48

"Önyükleme" terimi genellikle bir sistemin kendi başlamasına, bir tür tavuk ve yumurta problemine bağlı olduğu bir durum için geçerlidir.

Örneğin:

  • C ile yazılmış bir C derleyicisini nasıl derlersiniz?
  • İşletim sistemini henüz çalıştırmadıysanız işletim sistemi başlatma işlemini nasıl başlatırsınız?
  • İstemcilerin sistemdeki yeni eşler hakkında bilgi edinmek için şu anda bilinen eşlerine bağımlı olduğu dağıtılmış (eşler arası) bir sistemi nasıl başlatırsınız?

Bu durumda, önyükleme, genellikle harici bir varlığın yardımıyla dairesel bağımlılığı kırmanın bir yolunu, örn.

  • Kendi derleyicinizi derlemek (bootstrap) için başka bir C derleyicisini kullanabilir ve sonra kendisini yeniden derlemek için kullanabilirsiniz
  • İşletim sistemi tarafından sağlanan işlevlere bağlı olmadan ilk işlemi ayarlayan ayrı bir kod parçası kullanırsınız
  • İlk eşlerin sabit kodlu bir listesini veya eş listesini sağlayan sabit kodlu bir izleyici URL'sini kullanırsınız

vb.


4
Bu gerçekten sorunun merkezinde yer alıyor. Diğer ikisi cevap verdiğinde, tamamen özledim.
Arturo Hernandez

1
Bu açıklamanın genel olarak yazılım geliştirme ile en alakalı olduğunu hissediyorum. Gerçekten konsepti benim için eve getirdi
Vance Palacio

23

Uygulama geliştirme bağlamında, "önyükleme" genellikle modüler ve / veya otomatik olarak güncellenebilen yazılımdan bahsedilir.

Kullanıcının ihtiyaç duymadığı özellikler de dahil olmak üzere tüm uygulamayı indirmesi ve her güncelleme olduğunda yeniden indirip manuel olarak güncellemesinden ziyade, kullanıcı yalnızca indirip yükleyen küçük bir "bootstrap" yürütülebilir dosyasını indirir ve başlatır. uygulamanın ihtiyaç duyduğu bölümler. Ayrıca, bootstrap bileşeni güncelleştirmeleri arayabilir ve her başlatıldığında yükleyebilir.


4
Bu bağlamda kullanılan “bootstrapping” terimini hiç duymadım.
Bombe

Php uygulamalarında yaygın olarak kullanılır (örneğin bunu başarmak için Composer kullanarak)
AturSams

15

Alex, bilgisayar açıldığında hemen hemen bunu yapıyor. (Bir bilgisayarı 'önyükleme' aslında bootstrapping kelimesinden gelir)

Başlangıçta, BIOS'unuzdaki küçük program çalışır. Bu, daha büyük ve daha karmaşık bir programı yüklemek ve çalıştırmak için yeterli makine kodu içerir.

Bu ikinci program muhtemelen NTLDR (Windows'ta) veya LILO (Linux'ta) gibi bir şeydir;


2
Her ne kadar cevapları okuduğum halde (bu terim iyice genişledi ve biraz oy verdim), bu basit "önyükleme" aka "önyükleme" karşılaştırması bana noktaları birleştirmek için diğerlerini okumak için en iyi motivasyonu verdi. Srsly, 5 yaşındaki bir çocuğa karmaşık bir konuyu açıklamak gibiydi ve anlıyorlar. Teşekkürler.
Chris22

14

Tamlık için, istatistiklerde bir örnekten popülasyon özelliklerini çıkarmak için yeniden örnekleme / simülasyon kullanan oldukça önemli (ve nispeten yeni) bir yöntemdir. Bootstrapping (istatistik) ile ilgili kendi uzun Wikipedia makalesine sahiptir .


1
Nispeten yeni? En az 15 yıl önce istatistik eğitimimin bir parçasıydı.
Toon Krijthe

6
Bu yüzden 'nispeten' dedim: Efron'un ilk makaleleri, 1960'ların sağlamlık literatürünün başlangıcını söylemek yerine 1980'lerin başlarından.
Dirk Eddelbuettel

4

Sözlük anlamının önyüklenmesi, en az kaynakla başlamaktır. Bir İşletim Sistemi Bağlamında, Güç Açma Otomatik Testi (POST) CPU'yu uyandırmanın güvenli olduğunu belirlediğinde, işletim sistemi hızlı bir şekilde yüklenebilmelidir. Önyükleme kayışı kodu BIOS'tan çalıştırılacaktır. BIOS küçük boyutlu bir ROM'dur. Genellikle İşletim sistemini RAM'e yükleyecek bir dizi talimat için bir atlama talimatıdır. Jump'un hedefi, Sabit Diskteki Önyükleme kesimidir. Bios programı kontrol edildikten sonra, depolanan işletim sisteminin başlangıç ​​adresini içeren geçerli bir Önyükleme sektörüdür, yani geçerli bir MBR (Ana Önyükleme Kaydı) olup olmadığı. Geçerli bir MBR ise işletim sistemi bellekte (RAM) kopyalanır ve işletim sisteminde Bellek ve Süreç yönetimini üstlenir.



2

Bootstrapping, yazılım geliştirmedeki kullanımına (burada en çok cevap, örneğin kdgregory tarafından ) ve Dirk Eddelbuettel tarafından tartışıldığı gibi istatistiklerde kullanılmasına ek olarak, geliştiriciler için bilinmesi yararlı olabilecek pekiştirici öğrenme bağlamında başka bir anlama sahiptir .

Gönderen Sutton ve Barto :

Widrow, Gupta ve Maitra (1973), eğitim örneklerinden ziyade başarı ve başarısızlık sinyallerinden öğrenebilecek bir takviye öğrenme kuralı üretmek için Widrow ve Hoff (1960) 'ın En Küçük-Kare (LMS) algoritmasını değiştirdiler. Bu öğrenme biçimini “ seçici önyükleme adaptasyonu ” olarak adlandırdılar ve bunu “bir öğretmenle öğrenmek” yerine “bir eleştirmenle öğrenme” olarak tanımladılar. Bu kuralı analiz ettiler ve blackjack oynamayı nasıl öğrenebileceklerini gösterdiler. Bu, denetimli öğrenmeye katkıları çok daha etkili olan Widrow'un takviye öğrenimine izole edilmiş bir baskıydı.

Kitap, hedef değerin önyükleme yöntemleri olarak önceki bir yaklaşıma dayandığı çeşitli takviye algoritmalarını açıklar:

Son olarak, DP [Dinamik Programlama] yöntemlerinin son bir özel özelliğine dikkat çekiyoruz. Hepsi, halef durumlarının değerlerinin tahminlerine dayanarak durumların değerlerini günceller. Yani, tahminleri diğer tahminler temelinde güncellerler. Biz buna genel fikir önyükleme diyoruz . Pek çok takviye öğrenme yöntemi, DP'nin gerektirdiği gibi, ortamın eksiksiz ve doğru bir modelini gerektirmeyenler bile önyükleme gerçekleştirir.

Bunun, bootstrapping hakkındaki wikipedia sayfasında belirtilen bootstrap toplama ve istihbarat patlamasından farklı olduğunu unutmayın .


1

Popüler Twitter Bootstrap'ı kullanma açısından, bu tür önyükleme modüler bir bileşeni, Web uygulaması modüler bileşeni ihtiyaç duyuncaya veya referans alana kadar varlığını kabul etmek zorunda kalmadan bir Web uygulamasına entegre etme eylemi gibi hissediyorum. .

Geliştirici, CSS Twitter Bootstrap temasının varsayılan bir kopyasını Web uygulamasına yükleyerek (referans vererek) sorunsuz bir şekilde entegre edebilir. Vuola! Sonra bu değişikliklerin bazılarını geçersiz kılmanız gerekebilir, ancak bunu kaynak / bileşene dokunulmamış ve tamamen yeniden kullanılabilir olacak şekilde yapabilirsiniz.

Web Devs'in jQuery API'lerini ve benzerlerini nasıl uyguladığı da aynıdır, ancak Devs tarafından aslında bootstrapping olarak ifade edilmez. Yaptığı şey, bir uygulamanın farklı bileşenlerinin / kaynaklarının izolasyonunun aynı sunucu / sunucularda veya muhtemelen bir CDN'de serbestçe bulunmasına izin verirken esnekliği ve yeniden kullanılabilirliği geliştirmesidir.

NOT: Önyükleme işleminde MBR ile ilgilenilirken ve UNIX'te, ROM'da işletim sistemini RAM'e yükleyen küçük bir program olan özel bir önyükleyici veya yönetici gerekir. Bunu düşünürseniz, aynı kavram, MBR'yi kontrol eden ve işletim sisteminin gerçekleştiği hakkında herhangi bir fikri olmayan bu tabloya dayanarak işletim sistemini yükleyen bootstrap yükleyicinin eyleminde yer alır.


0

Bir önyükleme programına girmek için anahtarları çeviren nesile aitim. 1980'lerin başında, Electronics Corporation of India Ltd (ECIL) tarafından geliştirilen Micro-78 adlı bir mikrobilgisayar üzerinde çalıştım. Altair 8800'ün bir tür klonuydu. Geçiş anahtarları kullanılarak küçük bir önyükleme programı girildiğinde ve bir düğmeye basıldığında ne olduğunu hatırlıyorum. Program, disketin 1. izinde bulunan ikinci bir önyükleme programını okur ve ikinci önyükleme programı bir disk işletim sistemi yüklemek için yürütmeye başlayacak şekilde kendi üzerine yazar. "Bootstrap" terimi, ikinci önyükleme programının ek işlevsellik ile "kendini yukarı çekerek" kendi üzerine ikinci önyükleme programını okuma ve üzerine yazma işlemine atıfta bulunur.


-3

Programlama dünyasında alçakgönüllü bir acemi olarak ve bu kelimenin farklı yerlerde görünüşte biraz farklı şekillerde çok fazla kullanıldığını gördükten sonra tüm cevapları gözden geçirirken, Bootstrapping'deki Wikipedia sayfasını okudum (duh! ilk başta) bu kelimenin kullanımındaki farklılıkları anlamak için çok bilgilendiricidir . ...... son derece nadir durumlarda olabilir ...... Wikipedia bile bazı terimlerin daha iyi açıklamaları olabilir .... (redaksiyonlu)? Yine de Wikipedia'da destek noktaları getirecekler mi?

Bana göre, bununla ilgili bir anlam ifade ediyor: Mümkün olduğunca basit bir şeyle başlayın Thing1, bu Thing2 ile biraz daha karmaşık bir şey yapın ve şimdi Thing2'yi bir tür görevleri olabildiğince daha verimli ve hızlı bir şekilde yapmak için kullanabilirsiniz aslen Thing1 ile. Ardından Thing2'den Thing 3 ad infinitum'a tekrarlayın ...

Hem biyolojik evrim hem de 'Soyutlama Katmanları' (benim gibi yeni başlayanlar, ahem, Wikipedia, öksürük) ile yakından ilişkili olduğunu görüyorum - 1940'lı bilgisayarların anahtar, makine kodu, Montaj, C, Python, AI'larla evrimi "% 4 ^% akşam yemeğimi varsayılan & ^ $% gereksinimlerime uygun hale getir ve sarhoş argo İngilizce veya Amazon aşiret lehçesinde% $ £ £ @ @ ~ ~ zemini temizlemekten hoşlanmadan her türlü karmaşık talimat '(yeni başlayanlar için ... tahmin ettiniz) - basit cehalet nedeniyle orada birçok bağlantıyı kaçırdınız.

Daha sonra belirli yazılım anlamlarında: Anlamı1: Thing1, Thing2'nin en son sürümünü yüklemek için kullanılır (çünkü Thing2, Thing2'den Thing2'den daha büyük olacağı için Thing2, Thing1'den daha büyük olacaktır).

2 Anlamı: Thing1, Thing2'nin biraz daha yüksek dilini yazmak için kullanılan daha düşük seviyeli bir dildir (1001011100 .... 011001'e daha yakındır ("Merhaba", user.name), o zaman bu Thing2 biraz Thing2'nin kendisini bebek kelime seviyesinden yetişkin kelime dağarcığı seviyesine (Thing2 işlenmeye veya doğru derlenmiş '' derlenmiş '' teknik versiyonunu, bebek versiyonuyla (akıllı bir bebek!) genişletirken, Thing2'nin bebek versiyonu kendisi elbette sadece Thing1 tarafından derlenebilir, çünkü varolmadan var olamaz, doğru duh!), o zaman Thing2'nin alt versiyonu Thing2'nin Surly Young sürümünü derler, bu noktada programlama topluluğu Surly Young'ın 'sorunları' olup olmadığına karar verir ( yazılım terimi ve metafor terimi!) uzun vadeli kabul edilmek için yeterli zaman harcamaya değer,veya onları terk etmek için (benzetmeyi nereden alacağınızdan emin değilim).

Evet ise, Thing2 bebeklikten yetişkinliğe kadar 'Bootstrapped' (muhtemelen birkaç kez): "Çocuk adamın babasıdır" (Wordsworth, teklifi veya Stack Overflow'daki yazarı aramayı denemeyin) .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.