Co to jest ładowanie?

636

Ciągle widzę „bootstrapping” wspomniany w dyskusjach na temat rozwoju aplikacji. Wydaje się to zarówno powszechne, jak i ważne, ale jeszcze nie spotkałem się nawet z kiepskim wyjaśnieniem, czym tak naprawdę jest bootstrapping; wydaje się, że wszyscy powinni wiedzieć, co to znaczy. Ale ja nie. O ile mi wiadomo, ma to coś wspólnego z zadaniami inicjalizacyjnymi wymaganymi od aplikacji podczas uruchamiania, ale mogę się w tym całkowicie mylić. Czy ktoś może mi pomóc zrozumieć ten pomysł?

Alex Basson
źródło
8
Według Wikipedii istnieją cztery zastosowania słowa „bootstrapping” w odniesieniu do informatyki - en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens
1
Właśnie zaktualizowałem ten wpis w HeDinges. Szukałem wyjaśnień na temat tego, na co patrzył Alex.
Thomas Owens,
W rozwoju oprogramowania odnosi się do rozwoju coraz bardziej złożonych, szybszych środowisk programowania.
Lucky
Rozumiem, że w tworzeniu oprogramowania .NET odnosi się do konfiguracji środowiska, w którym aplikacja będzie działać, na przykład usług, które należy zarejestrować lub załadować.
Neo,

Odpowiedzi:

318

„Bootstrapping” pochodzi od terminu „ciągnięcie się za własne bootstrapy”. Tyle możesz uzyskać z Wikipedii .

W informatyce moduł ładujący jest pierwszym fragmentem kodu, który jest uruchamiany podczas uruchamiania komputera i jest odpowiedzialny za ładowanie reszty systemu operacyjnego. W nowoczesnych komputerach jest przechowywany w pamięci ROM, ale przypominam sobie proces ładowania początkowego na PDP-11, w którym biłeś bity za pomocą przełączników na panelu przednim, aby załadować określony segment dysku do pamięci, a następnie uruchomić go. Nie trzeba dodawać, że moduł ładujący jest zwykle dość mały.

„Bootstrapping” jest również używany jako termin na zbudowanie systemu z wykorzystaniem samego siebie - lub bardziej poprawnie, poprzedniej wersji. Na przykład ANTLR wersja 3 jest napisana przy użyciu analizatora składni opracowanego w ANTLR wersja 2.


źródło
8
Wow, prawie zapomniałem o przełącznikach na przednim panelu w PDP. Dziękuję za wspomnienia!!
Jeff Hornby,
7
Popraw mnie, jeśli się mylę. Chociaż ta odpowiedź wyjaśnia szczegóły techniczne tego, czym może być ładowanie, nigdy nie odpowiedziała na pierwotne pytanie w kontekście pytania.
jayscript
5
@jayscript - Jak wybrałbyś odpowiedź na to pytanie? Jest to wyrażenie idiomatyczne, a idiomy są zazwyczaj dobrze rozumiane przez grupę społeczną, która ich używa, i niezrozumiałe poza nią. Próbowałem odpowiedzieć przykładem, który moim zdaniem jest jednym z niewielu sposobów, aby spróbować przetłumaczyć idiom.
3
@kdgregory Nie byłbym w stanie odpowiedzieć na to pytanie, ponieważ przybyłem tutaj, aby poszukać odpowiedzi. Spekuluję, że samo słowo bootstrapping jest metaforą kilku różnych pojęć technicznych, które są luźno powiązane, co może być źródłem nieporozumień.
jayscript
2
PDP 11 ?! Nie zdawałem sobie sprawy, że mamy tu starych ludzi. : P
John Red
255

Przykładem ładowania początkowego są niektóre frameworki internetowe. Wywołujesz index.php (bootstrapper), a następnie ładuje pomocniki frameworków, modele, konfigurację, a następnie ładuje kontroler i przekazuje mu kontrolę.

Jak widać, jest to prosty plik, który rozpoczyna duży proces.

ryeguy
źródło
50
Jeśli chodzi o tworzenie stron internetowych (co było kontekstem pierwotnego pytania), myślę, że to najlepsza odpowiedź.
cartbeforehorse
Wygląda na dość spokrewnionego z Laravelem, ale Laravela nadal nie było w 2009 roku.
LppEdd
@Wajdan Ali Nie, to nie powinna być zaakceptowana odpowiedź. Jest to mikroskopijne spojrzenie na nowe użycie terminu bootstrapping, co zdaniem niektórych jest niewłaściwym użyciem znacznie wcześniejszego terminu. „Bootstrap” odnosi się do podciągania się za bootstrap, to znaczy do używania siły czegoś, aby się wykorzystać. To jest pochodzenie terminu „uruchomić komputer”. Obecne użycie popu przy tworzeniu stron internetowych nie jest jedynym (lub oryginalnym) użyciem tego słowa. Wiele innych odpowiedzi rozwiązuje to odpowiednio.
Kallaste,
3
@Kallaste, w porządku, ale to jest odpowiedź, której szukałem i, w oparciu o kontekst pierwotnego pytania („tworzenie aplikacji”), wydaje się, że jest to najbardziej odpowiednia odpowiedź, jak już wskazano.
przez
@ aaron.bynum, nie, podana odpowiedź dotyczy ram programistycznych i zdecydowanie nie dotyczy tworzenia aplikacji. Odpowiedź jest myląca i błędna, ponieważ opiera się na powszechnym nieporozumieniu, czym właściwie jest bootstrapping i skąd się wziął. To tylko rozpowszechnianie dezinformacji. Jeśli właśnie tego tu szukałeś, to dobrze, ale SO jako całość ceni prawidłowe informacje. Tak więc mój komentarz.
Kallaste,
51

Zobacz artykuł w Wikipedii na temat ładowania .

Istnieje sekcja i linki wyjaśniające, co to znaczy w informatyce . Ma cztery różne zastosowania w terenie.

Oto kilka cytatów, ale aby uzyskać bardziej szczegółowe wyjaśnienia i alternatywne znaczenia, zapoznaj się z powyższymi linkami.

„... to technika, za pomocą której prosty program komputerowy aktywuje bardziej skomplikowany system programów”.

„Innym zastosowaniem pojęcia ładowania początkowego jest użycie kompilatora do samodzielnej kompilacji, najpierw pisząc niewielką część kompilatora nowego języka programowania w istniejącym języku, aby skompilować więcej programów nowego kompilatora napisanych w nowym języku.”

HeDinges
źródło
6
Czy możesz podać cytat lub parafrazę, aby czytelnicy nie musieli przeglądać wielu stron internetowych, aby uzyskać odpowiedź?
Kurt W. Leucht,
5
„Przemysł oprogramowania: wyjątkowa działalność polegająca na legalnym sprzedawaniu towarów niespełniających norm i naliczaniu opłat za ich aktualizacje”.
Stein Åsmul,
Szukałem odpowiedzi Bootstrapping w kompilatorze . To było pomocne.
Siraj Alam,
48

Termin „bootstrapping” zwykle odnosi się do sytuacji, w której system zależy od siebie, czegoś w rodzaju problemu z kurczakiem i jajkiem.

Na przykład:

  • Jak skompilujesz kompilator C napisany w C?
  • Jak rozpocząć proces inicjalizacji systemu operacyjnego, jeśli system operacyjny jeszcze nie działa?
  • Jak uruchomić rozproszony system (peer-to-peer), w którym klienci polegają na swoich obecnie znanych elementach równorzędnych, aby dowiedzieć się o nowych elementach równorzędnych w systemie?

W takim przypadku ładowanie początkowe odnosi się do sposobu przełamania okrągłej zależności, zwykle za pomocą zewnętrznego podmiotu, np

  • Możesz użyć innego kompilatora C do kompilacji (bootstrap) własnego kompilatora, a następnie możesz użyć go do ponownej kompilacji
  • Używasz oddzielnego fragmentu kodu, który konfiguruje proces początkowy, niezależnie od funkcji udostępnianych przez system operacyjny
  • Używasz zakodowanej listy początkowych elementów równorzędnych lub zakodowanego na stałe adresu URL śledzenia, który dostarcza listę elementów równorzędnych

itp.

Iwan Poliakow
źródło
4
To naprawdę stanowi sedno pytania. Tam, gdzie pozostałe dwie odpowiedzi, całkowicie tego brakuje.
Arturo Hernandez
1
Wydaje mi się, że to wyjaśnienie było najbardziej odpowiednie dla rozwoju oprogramowania w ogóle. Naprawdę przyniósł mi koncepcję do domu
Vance Palacio
23

W kontekście rozwoju aplikacji zwykle pojawia się „ładowanie”, gdy mówimy o oprogramowaniu modułowym i / lub automatycznej aktualizacji.

Zamiast pobierać całą aplikację, w tym funkcje, których nie potrzebuje, a także ponownie pobierać i ręcznie aktualizować, gdy tylko pojawi się aktualizacja, użytkownik tylko pobiera i uruchamia mały plik wykonywalny „bootstrap”, który z kolei pobiera i instaluje te części aplikacji, których potrzebuje użytkownik. Ponadto składnik bootstrap może wyszukiwać aktualizacje i instalować je przy każdym uruchomieniu.

Michael Borgwardt
źródło
4
Nigdy nie słyszałem terminu „ładowanie” używanego w tym konkretnym kontekście.
Bombe,
Powszechnie używane w odniesieniu do aplikacji php (na przykład za pomocą Composer, aby to osiągnąć)
AturSams
15

Alex, to właściwie to, co robi twój komputer po uruchomieniu. („Uruchamianie” komputer faktycznie pochodzi od słowa bootstrapping)

Początkowo działa mały program w systemie BIOS. Zawiera wystarczającą ilość kodu maszynowego, aby załadować i uruchomić większy, bardziej złożony program.

Ten drugi program jest prawdopodobnie czymś w rodzaju NTLDR (w systemie Windows) lub LILO (w systemie Linux), który następnie uruchamia się i jest w stanie załadować, a następnie uruchomić resztę systemu operacyjnego.

davewasthere
źródło
2
Chociaż przeczytałem wszystkie odpowiedzi (które rozszerzyły się na ten termin i głosowałem trochę), to proste porównanie „bootowanie”, czyli „bootstrapping”, dało mi najlepszą motywację do przeczytania wszystkich pozostałych, aby połączyć kropki. Srsly, to było jak wyjaśnienie skomplikowanego tematu pięciolatkowi i oni to rozumieją. Dzięki.
Chris22
14

Dla kompletności jest to również dość ważna (i stosunkowo nowa) metoda w statystyce, która wykorzystuje ponowne próbkowanie / symulację w celu wywnioskowania właściwości populacji z próbki. Ma swój długi artykuł w Wikipedii na temat ładowania (statystyki) .

Dirk Eddelbuettel
źródło
1
Stosunkowo nowy? Było to częścią mojej edukacji statystycznej co najmniej 15 lat temu.
Toon Krijthe
6
Dlatego powiedziałem „względnie”: początkowe artykuły Efron pochodzą z wczesnych lat osiemdziesiątych, a nie z początku literatury poświęconej solidności z lat sześćdziesiątych.
Dirk Eddelbuettel,
4

Bootowanie pasujące do słownika oznacza uruchomienie z minimalnymi zasobami. W kontekście systemu operacyjnego system operacyjny powinien mieć możliwość szybkiego ładowania, gdy autotest po włączeniu zasilania (POST) ustali, że proces budzenia jest bezpieczny. Kod paska rozruchowego będzie uruchamiany z systemu BIOS. BIOS to mały ROM. Ogólnie jest to instrukcja skoku do zestawu instrukcji, która załaduje system operacyjny do pamięci RAM. Celem skoku jest sektor rozruchowy na dysku twardym. Po sprawdzeniu przez program bios jest to prawidłowy sektor rozruchowy, który zawiera adres początkowy zapisanego systemu operacyjnego, tj. Czy jest to prawidłowy MBR (główny rekord rozruchowy), czy nie. Jeśli jest to prawidłowy MBR, system operacyjny zostanie skopiowany do pamięci (RAM), a stamtąd system operacyjny zajmie się zarządzaniem pamięcią i procesem.

achoora
źródło
2

IMHO nie ma lepszego wytłumaczenia niż to, jak napisano pierwszy kompilator?

Obecnie ładowanie systemu operacyjnego jest najczęstszym procesem zwanym ładowaniem początkowym

Ivanzinho
źródło
Link podany w odpowiedzi był bardzo pomocny.
Siraj Alam,
2

Bootstrapping ma jeszcze inne znaczenie w kontekście uczenia się przez zbrojenie, które może być przydatne dla programistów, oprócz jego wykorzystania w tworzeniu oprogramowania (większość odpowiedzi tutaj, np. Przez kdgregory ) i jego zastosowania w statystykach omówionych przez Dirka Eddelbuettel .

Od Sutton i Barto :

Widrow, Gupta i Maitra (1973) zmodyfikowali algorytm LMS (ang. Least-Mean-Square) algorytmu Widrowa i Hoffa (1960), aby stworzyć regułę uczenia wzmacniającego, która mogłaby uczyć się na podstawie sygnałów sukcesu i niepowodzenia zamiast przykładów treningowych. Nazwali tę formę uczenia się „ selektywną adaptacją bootstrapu ” i opisali ją jako „uczenie się z krytykiem” zamiast „uczenie się z nauczycielem”. Przeanalizowali tę zasadę i pokazali, jak można nauczyć się grać w blackjacka. To była odosobniona próba uczenia się wzmacniającego przez Widrow, którego wkład w nadzorowane uczenie się był znacznie bardziej wpływowy.

Książka opisuje różne algorytmy zbrojenia, w których wartość docelowa opiera się na poprzednim przybliżeniu jako metodach ładowania początkowego:

Na koniec zwracamy uwagę na ostatnią specjalną właściwość metod DP [Programowanie dynamiczne]. Wszystkie aktualizują oszacowania wartości stanów na podstawie oszacowań wartości stanów następczych. Oznacza to, że aktualizują szacunki na podstawie innych szacunków. Nazywamy to ładowaniem ogólnym pomysłem . Wiele metod uczenia się przez wzmacnianie wykonuje ładowanie, nawet te, które nie wymagają, jak wymaga DP, pełnego i dokładnego modelu środowiska.

Zauważ, że różni się to od agregowania bootstrapu i eksplozji inteligencji, o której wspomniano na stronie wikipedia o ładowaniu.

Scipio
źródło
1

Jeśli chodzi o korzystanie z popularnego Bootstrap na Twitterze, wydaje mi się, że ten rodzaj bootstrapowania polega na zintegrowaniu modułowego komponentu z aplikacją internetową, przy czym aplikacja internetowa nie musi nawet potwierdzać, że modułowy moduł istnieje, dopóki go nie potrzebuje lub do którego się odwołuje .

Deweloper może bezproblemowo zintegrować domyślną kopię motywu Bootstrap CSS na Twitterze, po prostu ładując go (odwołując się) do aplikacji sieci Web. Vuola! Następnie może być konieczne zastąpienie niektórych z tych zmian, ale można to zrobić w taki sposób, aby zasób / komponent był nietknięty i można go było ponownie wykorzystać.

Ta sama koncepcja dotyczy sposobu, w jaki Web Devs implementują interfejsy API jQuery i tak dalej, ale nie jest tak naprawdę wyrażany przez Devs jako ładowanie jako takie. To, co robi, poprawia elastyczność i możliwość ponownego użycia, umożliwiając jednocześnie izolację różnych komponentów / zasobów aplikacji w celu swobodnego przebywania na tym samym serwerze lub serwerach CDN.

UWAGA: Podczas obliczania ładowania początkowego zajmuje się MBR, aw UNIX wymaga specjalnego programu ładującego lub menedżera, który jest małym programem w pamięci ROM, który ładuje system operacyjny do pamięci RAM. Jeśli się nad tym zastanowić, to ta sama koncepcja ma miejsce w działaniu modułu ładującego bootstrap sprawdzającego MBR i ładującego system operacyjny na podstawie tej tabeli, co ma miejsce, gdy system operacyjny nie ma pojęcia, że ​​tak się dzieje.

yardpenalty.com
źródło
0

Należę do generacji, która przerzuciła przełączniki, aby uruchomić program rozruchowy. Na początku lat 80. pracowałem nad mikrokomputerem o nazwie Micro-78, opracowanym przez Electronics Corporation of India Ltd (ECIL). Był to swego rodzaju klon Altair 8800. Pamiętam wyraźnie, co się dzieje, gdy wprowadzono mały program rozruchowy za pomocą przełączników i wykonano go naciskając przycisk. Program odczytuje drugi program rozruchowy zawarty w 1. ścieżce dyskietki i zastępuje go na sobie w taki sposób, że drugi program rozruchowy zaczyna się uruchamiać, aby załadować system operacyjny dysku. Myślę, że termin „bootstrap” odnosi się do procesu pierwszego programu rozruchowego, który odczytuje i nadpisuje drugi program rozruchowy na sobie, w sposób „podciągając się” dzięki dodatkowej funkcjonalności drugiego programu rozruchowego.

Murthy KVM
źródło
-3

Jako skromny początkujący w świecie programowania i przeglądający wszystkie odpowiedzi tutaj po zobaczeniu tego słowa używanego w pozornie nieco odmienny sposób w różnych miejscach, zacząłem czytać stronę Wikipedii na temat Bootstrapping (duh! Nie myślałem o albo na początku) jest bardzo pouczające, aby zrozumieć różnice w użyciu tego słowa. Czy to możliwe ...... w bardzo rzadkich przypadkach ...... Wikipedia może nawet lepiej wyjaśniać niektóre terminy niż ... (redagowane)? Czy jednak przyniosą punkty przedstawicielskie na Wikipedii?

Wydaje mi się, że wszystkie znaczenia mają coś wspólnego: zacznij od czegoś tak prostego, jak to możliwe, Thing1, zrób coś nieco bardziej złożonego z Thing2, a teraz możesz używać Thing2 do wykonywania niektórych zadań bardziej wydajnie i szybciej niż możesz pierwotnie z Thing1. Następnie powtórz od Thing2 do Thing 3 ad infinitum ...

Widzę to jako ściśle związane zarówno z ewolucją biologiczną, jak i „Warstwami abstrakcji” (nowicjusze tacy jak ja, ahem, Wikipedia, kaszel) - ewolucja komputerów z lat 40. XX wieku z przełącznikami, kodem maszynowym, asemblerem, C, Python, AI, które możesz dać wszelkiego rodzaju skomplikowane instrukcje, aby polubić „zrób obiad w% 4 ^% zgodnie z moimi domyślnymi wymaganiami i ^ $% i oczyść podłogę, którą% $ £" @: ~ "w pijackim slangu w języku angielskim lub dialekcie plemiennym Amazonii, bez zgłaszania wyjątku „(znowu dla początkujących ... zgadłeś) - przegapiłem wiele linków z powodu zwykłej niewiedzy.

Następnie w niektórych konkretnych znaczeniach oprogramowania: Znaczenie 1: Thing1 służy do ładowania najnowszej wersji Thing2 (ponieważ oczywiście Thing2 będzie większy niż Thing1, tak jak Thing3 będzie większy niż Thing2).

Znaczenie 2: Thing1 to język niższego poziomu (bliższy 1001011100 .... 011001 niż print („Witaj”, nazwa użytkownika.)) Użyty do napisania trochę wyższego języka Thing2, to ten kawałek Thing2 jest używane do rozszerzania samej Thing2 z poziomu słownictwa dla dorosłych na poziom słownictwa dla dorosłych (Thing2 zaczyna być przetwarzane lub używa prawidłowego terminu technicznego „skompilowanego” przez samą wersję dla dziecka (to sprytne dziecko!), podczas gdy wersja dla dziecka dla Thing2 sama oczywiście mogłaby zostać skompilowana tylko przez Thing1, ponieważ nie może istnieć, zanim ona istnieje, prawda, duh!), a następnie wersja potomna Thing2 kompiluje wersję Thing2 Surly Teenager, w którym to momencie społeczność programistyczna decyduje, czy „problemy” Surly Teenager ( program i metafora!) warto poświęcić wystarczająco dużo czasu na rozwiązanie problemu, aby zostać zaakceptowanym przez dłuższy czas,lub porzucić je (nie wiem, gdzie wziąć analogię tutaj).

Jeśli tak, to Thing2 ma „Bootstrapped” (być może kilka razy) od dzieciństwa do dorosłości: „dziecko jest ojcem mężczyzny” (Wordsworth, sugeruj, nie próbuj szukać cytatu lub autora na Stack Overflow) .

Will Croxford
źródło