Что такое начальная загрузка?

636

Я продолжаю видеть "начальную загрузку", упомянутую в обсуждениях разработки приложений. Это кажется широко распространенным и важным, но мне еще не приходилось сталкиваться даже с плохим объяснением того, что собой представляет самозагрузка; скорее, кажется, что все просто должны знать, что это значит. Я не, хотя. Насколько я понимаю, это как-то связано с задачами инициализации, которые требуются приложению при запуске, но я могу быть совершенно неправ в этом. Может ли кто-нибудь помочь мне понять эту идею?

Алекс Бассон
источник
8
Согласно Википедии, есть четыре использования слова «начальная загрузка» в отношении вычислений - en.wikipedia.org/wiki/Bootstrapping#Computing
Томас Оуэнс
1
Я только что обновил сообщение HeDinges с этим. Я искал разъяснения о том, на какую форму начальной загрузки смотрит Алекс.
Томас Оуэнс
В разработке программного обеспечения это относится к разработке последовательно более сложных, более быстрых сред программирования.
Счастливчик
В разработке программного обеспечения .NET я понимаю, что это относится к настройке среды, в которой будет работать приложение, такой как любые службы, которые необходимо зарегистрировать или загрузить.
Нео

Ответы:

318

«Самозагрузка» происходит от термина «подтягивание себя своими собственными самозагрузками». Это вы можете получить из Википедии .

В вычислениях загрузчик начальной загрузки - это первый фрагмент кода, который запускается при запуске компьютера и отвечает за загрузку остальной части операционной системы. На современных компьютерах он хранится в ПЗУ, но я вспоминаю процесс начальной загрузки на PDP-11, где вы вставляете биты с помощью переключателей на передней панели для загрузки определенного сегмента диска в память, а затем запускаете его. Излишне говорить, что загрузчик начальной загрузки обычно довольно маленький.

«Начальная загрузка» также используется как термин для построения системы, использующей себя - или, вернее, версию предшественника. Например, версия 3 ANTLR написана с использованием синтаксического анализатора, разработанного в версии 2 ANTLR.


источник
8
Вау, я почти забыл о переключателях на передней панели PDP. Спасибо за воспоминания!!
Джефф Хорнби
7
Поправь меня, если я ошибаюсь. Хотя этот ответ объясняет технические детали того, что может быть начальной загрузкой, он никогда не отвечал на первоначальный вопрос в контексте вопроса.
jayscript
5
@jayscript - Как бы вы ответили на этот вопрос? Это идиоматическое выражение, и идиомы обычно хорошо понятны той социальной группе, которая их использует, и непостижимо вне ее. Я попытался ответить на примере, который я считаю одним из немногих способов попытаться перевести идиому.
3
@kdgregory Я не смог бы ответить на этот вопрос, так как я пришел сюда, чтобы искать ответы. Я предполагаю, что само слово «самозагрузка» является метафорой для нескольких различных технических понятий, которые слабо связаны, что может стать источником путаницы.
Jayscript
2
PDP 11 ?! Я не понял, что у нас здесь были старики. : P
Джон Ред
255

Пример начальной загрузки есть в некоторых веб-фреймворках. Вы вызываете index.php (загрузчик), а затем он загружает вспомогательные средства, модели, конфигурацию, а затем загружает контроллер и передает ему управление.

Как видите, это простой файл, который запускает большой процесс.

ryeguy
источник
50
С точки зрения веб-разработки (которая была контекстом исходного вопроса), я думаю, что это лучший ответ.
cartbeforehorse
Кажется, довольно
тесно
@ Вадждан Али Нет, это не должен быть принятый ответ. Это микроскопический взгляд на новое использование термина «самозагрузка», который, как утверждают некоторые, на самом деле является неправильным использованием более раннего термина. «Для начальной загрузки» означает подтягивание себя за счет начальной загрузки, то есть использование силы чего-либо для использования самого себя. Это происхождение термина «для загрузки вашего компьютера». Текущее популярное использование в веб-разработке не единственное (или оригинальное) использование слова. Многие другие ответы обращаются к этому соответственно.
Калласте
3
@Kallaste, хорошо, но это ответ, который я искал, и, исходя из контекста исходного вопроса («разработка приложений»), кажется, что это наиболее подходящий ответ, как уже указывалось.
19
@ aaron.bynum, нет, данный ответ относится к фреймворкам веб-разработки и определенно не относится к разработке приложений. Ответ вводит в заблуждение и ошибочен, поскольку он основан на общепринятом недопонимании того, что на самом деле является начальной загрузкой и откуда она взялась. Это просто распространение дезинформации. Если это то, что вы пришли сюда, то хорошо, но SO в целом ценит правильную информацию. Таким образом, мой комментарий.
Калласте
51

Смотрите в Википедии статью о начальной загрузке .

Есть раздел и ссылки, объясняющие, что это означает в вычислительной технике . У этого есть четыре различных использования в области.

Вот некоторые цитаты, но для более глубокого объяснения и альтернативных значений, обратитесь к ссылкам выше.

«... это метод, с помощью которого простая компьютерная программа активирует более сложную систему программ».

«Другое использование термина« начальная загрузка »заключается в использовании компилятора для компиляции, сначала написав небольшую часть компилятора нового языка программирования на существующем языке, чтобы скомпилировать больше программ нового компилятора, написанных на новом языке».

HeDinges
источник
6
Не могли бы вы процитировать или перефразировать, чтобы читателям не приходилось просматривать несколько сайтов, чтобы получить ответ?
Курт В. Лейхт
5
«Индустрия программного обеспечения: уникальный бизнес по продаже некачественных товаров на законных основаниях и взимании платы за их обновление».
Штейн Осмул
Я искал ответ Bootstrapping в компиляторе . Это было полезно.
Сирадж Алам
49

Термин «самозагрузка» обычно применяется к ситуации, когда система зависит от себя, чтобы начать, своего рода проблема курицы и яйца.

Например:

  • Как вы компилируете компилятор C, написанный на C?
  • Как начать процесс инициализации ОС, если у вас еще не запущена ОС?
  • Как запустить распределенную (одноранговую) систему, в которой клиенты зависят от своих известных в настоящее время пиров, чтобы узнать о новых пирах в системе?

В этом случае начальная загрузка относится к способу разрушения циклической зависимости, обычно с помощью внешнего объекта, например

  • Вы можете использовать другой компилятор C для компиляции (начальной загрузки) вашего собственного компилятора, а затем вы можете использовать его для перекомпиляции
  • Вы используете отдельный фрагмент кода, который устанавливает начальный процесс, не завися от каких-либо функций, предоставляемых ОС
  • Вы используете жестко закодированный список начальных пиров или жестко запрограммированный URL-адрес трекера, который предоставляет список пиров

и т.п.

Иван Поляков
источник
4
Это действительно становится основой вопроса. Где два других ответа, пропустите это полностью.
Артуро Эрнандес
1
Я чувствую, что это объяснение было наиболее актуальным для разработки программного обеспечения в целом. Действительно принес концепт домой для меня
Vance Palacio
24

В контексте разработки приложений «самозагрузка» обычно возникает, когда речь идет о модульном и / или автоматически обновляемом программном обеспечении.

Вместо того, чтобы загружать все приложение целиком, включая ненужные ему функции, а также повторно загружать и обновлять его вручную всякий раз, когда происходит обновление, пользователь загружает и запускает только небольшой исполняемый файл «начальной загрузки», который, в свою очередь, загружает и устанавливает эти файлы. части приложения, которые нужны пользователю. Кроме того, компонент начальной загрузки может искать обновления и устанавливать их при каждом запуске.

Майкл Боргвардт
источник
4
Я никогда не слышал термин «начальная загрузка», используемый в этом конкретном контексте.
Бомба
Обычно используется в отношении php-приложений (например, для этого используется Composer)
AturSams
15

Алекс, это почти то, что делает твой компьютер при загрузке. («Загрузка» компьютера на самом деле происходит от слова «начальной загрузки»)

Сначала запускается небольшая программа в вашем BIOS. В нем достаточно машинного кода для загрузки и запуска более крупной и сложной программы.

Эта вторая программа, вероятно, похожа на NTLDR (в Windows) или LILO (в Linux), которая затем запускается и может загрузить, а затем запустить остальную часть операционной системы.

davewasthere
источник
2
Несмотря на то, что я прочитал все ответы (которые хорошо расширились, и я проголосовал за некоторые из них), это простое сравнение «начальной загрузки» или «начальной загрузки» дало мне наилучшую мотивацию для прочтения всех остальных, чтобы соединить точки. Srsly, это было все равно что объяснить сложную тему 5-летнему ребенку, и они поняли это. Спасибо.
Chris22
14

Для полноты, это также довольно важный (и относительно новый) метод в статистике, который использует повторную выборку / моделирование, чтобы вывести свойства популяции из выборки. У него есть своя длинная статья в Википедии о начальной загрузке (статистика) .

Дирк Эддельбюттель
источник
1
Относительно новый? Это было частью моего образования в области статистики, по крайней мере, 15 лет назад.
Toon Krijthe
6
Вот почему я сказал «относительно»: первоначальные статьи Эфрона были написаны в начале 1980-х годов, а не в начале литературы по робастности 1960-х годов.
Дирк Эддельбюттель
4

Загрузка, связывающая словарь, означает запуск с минимальными ресурсами. В контексте ОС ОС должна быть способна быстро загружаться после того, как самотестирование при включении питания (POST) определит, что безопасно пробуждать процессор. Код загрузочного ремешка будет запущен из BIOS. BIOS - это небольшой размер ПЗУ. Обычно это инструкция перехода к набору инструкций, которая загружает операционную систему в ОЗУ. Пункт назначения перехода - это загрузочный сектор на жестком диске. После того, как программа bios проверит, это допустимый загрузочный сектор, который содержит начальный адрес сохраненной ОС, т. Е. Является ли это действительной MBR (Master Boot Record) или нет. Если это действительный MBR, ОС будет скопирована в память (ОЗУ) оттуда в ОС, заботится об управлении памятью и процессами.

achoora
источник
2

ИМХО, нет лучшего объяснения, чем факт о том, как был написан первый компилятор?

В наши дни загрузка операционной системы является наиболее распространенным процессом, называемым начальной загрузкой.

Ivanzinho
источник
Ссылка, которую вы дали в своем ответе, была действительно полезной.
Сирадж Алам
2

Bootstrapping имеет еще одно значение в контексте обучения с подкреплением, которое может быть полезно знать разработчикам, помимо его использования в разработке программного обеспечения (большинство ответов здесь, например, kdgregory ) и его использования в статистике, как обсуждал Дирк Эддельбюттель .

Из Саттона и Барто :

Уидроу, Гупта и Майтра (1973) модифицировали алгоритм Уидроу и Хоффа (LMS) наименьшего среднего квадрата (LMS), чтобы создать правило обучения с подкреплением, которое могло бы учиться на сигналах успеха и неудач, а не на обучающих примерах. Они назвали эту форму обучения « выборочной адаптацией к самозагрузке » и описали ее как «обучение с критикой» вместо «обучение с учителем». Они проанализировали это правило и показали, как можно научиться играть в блэкджек. Это был отдельный набег на подкрепление обучения Уидроу, чей вклад в контролируемое обучение был гораздо более влиятельным.

Книга описывает различные алгоритмы подкрепления, где целевое значение основано на предыдущем приближении в качестве методов начальной загрузки:

Наконец, отметим одно последнее специальное свойство методов DP [Dynamic Programming]. Все они обновляют оценки значений состояний на основе оценок значений состояний-преемников. То есть они обновляют оценки на основе других оценок. Мы называем эту общую идею самозагрузкой . Многие методы обучения с подкреплением выполняют начальную загрузку, даже те, которые не требуют, как того требует DP, полной и точной модели среды.

Обратите внимание, что это отличается от агрегирования начальной загрузки и интеллектуального взрыва, о котором упоминается на странице википедии по начальной загрузке.

Сципион
источник
1

С точки зрения этого в отношении использования популярной Twitter Bootstrap, я чувствую, что этот тип начальной загрузки - это действие по интеграции модульного компонента в веб-приложение, при котором веб-приложение не должно даже признавать, что модульный компонент существует до тех пор, пока он не потребуется или не ссылается на него. ,

Разработчик может легко интегрировать стандартную копию темы «Twitter Twitter Bootstrap» по умолчанию, просто загрузив ее (ссылаясь) в веб-приложение. Вуола! Тогда вам может потребоваться переопределить некоторые из этих изменений, но вы можете сделать это таким образом, чтобы ресурс / компонент не затрагивался и не использовался полностью.

Эта же концепция заключается в том, как Web Devs реализует API-интерфейсы jQuery и т. Д., Но на самом деле Devs не выражает их как самозагрузку. Он повышает гибкость и возможность повторного использования, позволяя изоляции различных компонентов / ресурсов приложения свободно размещаться на одном и том же сервере или, возможно, в CDN.

ПРИМЕЧАНИЕ. При вычислении начальной загрузки имеет дело с MBR, а в UNIX требуется специальный загрузчик или менеджер, представляющий собой небольшую программу в ПЗУ, которая загружает ОС в ОЗУ. Если вы подумаете об этом, то же самое происходит в действии загрузчика начальной загрузки, проверяющего MBR и загружающего ОС на основе этой таблицы, что происходит, когда ОС не подозревает, что это происходит.

yardpenalty.com
источник
0

Я принадлежу к поколению, которое переключало переключатели, чтобы войти в загрузочную программу. В начале 1980-х я работал на микрокомпьютере Micro-78, разработанном компанией Electronics Corporation of India Ltd (ECIL). Это был своего рода клон Altair 8800. Я отчетливо помню, что происходит, когда небольшая загрузочная программа вводилась с помощью тумблеров и выполнялась нажатием кнопки. Программа считывает вторую загрузочную программу, содержащуюся в первой дорожке дискеты, и перезаписывает ее на себя таким образом, что вторая загрузочная программа начинает выполняться для загрузки операционной системы диска. Я думаю, что термин «начальная загрузка» относится к этому процессу, когда первая загрузочная программа читает и перезаписывает вторую загрузочную программу на себя, таким образом, «подтягивая себя» с дополнительными функциями второй загрузочной программы.

Murthy KVM
источник
-3

Будучи скромным новичком в мире программирования и, просматривая все ответы здесь, после того, как увидел, что это слово использовалось, по-видимому, немного по-разному в разных местах, я обнаружил, что читал страницу Википедии по начальной загрузке (да! Я не думал о это либо на первый взгляд) очень информативно, чтобы понять различия в использовании этого слова. Может ли это быть ...... в крайне редких случаях ...... Википедия может даже лучше объяснить некоторые термины, чем .... (отредактировано)? Будут ли они приносить очки репутации в Википедии?

Мне кажется, что все значения имеют какое-то отношение: начните с чего-то настолько простого, насколько это возможно, Thing1, сделайте что-то немного более сложным с этим Thing2, и теперь вы можете использовать Thing2 для выполнения каких-то задач более эффективно и быстро, чем вы могли бы первоначально с Thing1. Затем повторите с Thing2 до Thing 3 до бесконечности ...

Я считаю, что это тесно связано как с биологической эволюцией, так и со «Слоями абстракции» (новички вроде меня, гм, Википедия, кашель) - эволюция компьютеров 1940-х годов с переключателями, машинным кодом, сборкой, C, Python, AI, которые вы можете дать всевозможные сложные инструкции, такие как "приготовить ужин% 4 ^% к моим требованиям по умолчанию и ^ $% и вымыть пол%% £ £" @: ~ "на пьяном сленге на английском или племенном диалекте Амазонки без них, что вызывает исключение '(для новичков снова ... вы уже догадались) - пропустил много ссылок там из-за простого невежества.

Тогда в определенных специфических значениях программного обеспечения: Значение 1: Thing1 используется для загрузки последней версии Thing2 (потому что, конечно, Thing2 будет больше, чем Thing1, точно так же, как Thing3 будет больше, чем Thing2).

Значение 2: Thing1 - это язык более низкого уровня (ближе к 1001011100 .... 011001, чем print («Hello», user.name)), используемый для написания чуть более высокого языка Thing2, тогда этот маленький кусочек Thing2 используется для расширения самого Thing2 с уровня словарного запаса ребенка до уровня словарного запаса взрослого (Thing2 начинает обрабатываться или использовать правильный технический термин «скомпилированный» по самой детской версии (это умный ребенок!), тогда как детская версия Thing2 Само собой, конечно, может быть скомпилировано только Thing1, потому что он не может существовать до того, как он существует, верно!), тогда дочерняя версия Thing2 компилирует версию Thing2 для Surly Teenager, после чего сообщество программистов решает, есть ли у Surly Teenager «проблемы» ( термин программного обеспечения и термин метафора!) стоит потратить достаточно времени, чтобы принять долгосрочное решение,или отказаться от них (не уверен, где провести аналогию здесь).

Если да, то у Thing2 сама «Bootstrapped» (возможно, несколько раз) от детства до зрелого возраста: «ребенок - отец мужчины» (Wordsworth, советуем не пытаться искать цитату или автора в переполнении стека) ,

Уилл Кроксфорд
источник