gatoazul (gatoazul) wrote,
gatoazul
gatoazul

Categories:

Самораскрутка

"Загрузить компьютер" на английском звучит как "to boot a computer". Очень странное выражение - причем тут вообще ботинок (boot) ?

О, это интересная история.

Зачем вообще нужна загрузка?

Компьютеры могут исполнять только программы, находящиеся в оперативной памяти. Эта память полностью стирается при выключении питания. Поэтому, если включить машину, она девственно чиста и никаких программ в ней нет.

Программы лежат на внешнем накопителе - например, на жестком диске. Чтобы программы начала выполняться, она должна оказаться в памяти - то есть, загрузиться.

Но кто это может сделать? Загрузить программу в память может только другая программа - например, операционная система (ОС).

Но кто загрузит операционную систему? Ведь память совершенно пустая.

Какая-то программа-загрузчик? Но откуда загрузчик возьмется в пустой памяти?

Мы имеем классическую проблему яйца и курицы.

Как же ее решить?

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



Вот оператор и набирал таким образом небольшую программу, которая читала пачку перфокарт и грузила с них ОС.

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

Надо было придумать что-то другое и как-то решить проблему загрузчика, который должен ухитриться загрузить сам себя.

Поэтому к обычной перезаписываемой компьютерной памяти добавили небольшой блок постоянной памяти - которую никак нельзя изменить. В советской терминологии она называется ПЗУ - постоянно запоминающее устройство в отличие от ОЗУ - оперативного.

При включении компьютера программа, зашитая в ПЗУ, проверяет, все ли исправно - именно в этот момент по экрану бегут разные непонятные строки. А потом она тащит с диска загрузчик, записывает его в память и запускает.

Но не так все просто.

Загрузчик не может лежать в файлах на диске, потому что файлы обслуживаются ОС, а операционки бывают самые разные, и формат файловой системы у них может быть какой угодно. Маленький загрузчик в ПЗУ просто не может о них знать.

Поэтому на диске под загрузчик резервируется место за пределами файловой системы. Обычно это первый или последний сектор диска (на разных системах было по-разному).

Но в один сектор диска большую программу не засунешь. А для загрузки ОС надо сделать много чего - в том числе как-то разобрать ее файлы и взять оттуда ядро системы. Поэтому первичный загрузчик из первого сектора диска обычно грузит вторичный загрузчик, который тоже лежит где-то в условленном месте за пределами ФС. Вторичный загрузчик больше и сложнее, он уже может прочитать диск, найти файлы ОС и загрузить их в память.

Тем, кто придумывал эту схему, она показалась очень забавной - как будто кто-то пытается поднять сам себя за шнурки (как Мюнгхаузен сам себя поднял за волосы вместе с конем). И назвали они ее соответственно - bootstrapping loader, загрузчик, тянущий себя сам себя за шнурки ботинок. А весь процесс, соответственно, - to bootstrap a computer, что со временем сократилось до to boot.

Подведем итоги.

Как задача в конце концов была решена? Небольшой внешней помощью (ПЗУ) и многоступенчатым процессом, который поэтапно раскручивает сам себя.

Другой пример самораскрутки можно найти опять же в компьютере.

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

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

А что если написать компилятор на том же самом вашем мегаязыке? Это дает большие преимущества. Компилятор - большая и сложная программа, и в процессе ее сочинения весь язык подвергается исчерпывающему тестированию. Можно будет сразу понять, годится ли он на что-нибудь, и что надо поменять. Плюс не надо путаться с другими языками.

Решено, пишем компилятор Мегаязыка на Мегаязыке. Да, но как? Чтобы запустить такой компилятор и его скомпилировать, надо уже иметь такой скомпилированный компилятор.

Ну не так все печально.

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

После этого уже есть работающий компилятор, пусть и примитивный. Его уже можно расширять, дописывая в его текст новые функции.

Называется такая система, разумеется, bootstraping compiler.

И здесь идея та же самая - небольшая помощь со стороны и постепенное усложнение.

Но самый мощный пример самораскрутки, конечно, находится в сфере биологии.

Представьте: у вас есть 1 (одна) клетка, таких мизерных размеров, что ее видно только в микроскоп. И из нее вам нужно сделать большой жизнеспособный организм - который умеет дышать, бегать, жевать и все остальное.

Дополнительное ограничение: у вас нет компьютера или чего-то такого, кому можно было бы задать готовую программу "приделай руки, добавь ноги".

Поэтому программа находится прямо в клетке. А еще клетка умеет делиться.

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

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

И поэтому внутри всех клеток организма находится одна и та же программа, но каждая клетка выполняет только ее отдельные куски.

И тут ключевых условий два - помощь извне (которая у разных видов очень даже варьируется. Далеко не все животные вынашивают детенышей)  и постепенная раскрутка.

Если принцип удачный - он поможет в самых разных случаях.
Subscribe

  • Ответ на загадку Новака

    Профессор Новак как-то предложил своим коллегам такую загадку: The poor have it, the rich need it, it is greater than God, more evil than devil,…

  • Загадка Новака

    Следующая загадка предназначется только для тех, кто очень хорошо знает английский язык. К сожалению, адекватно перевести ее на русский, так, чтобы…

  • Ответ на загадку с картинкой

    Этот коллаж иллюстрирует название довольно известной раньше книги. ====================================================== Карл Маркс.…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 27 comments

  • Ответ на загадку Новака

    Профессор Новак как-то предложил своим коллегам такую загадку: The poor have it, the rich need it, it is greater than God, more evil than devil,…

  • Загадка Новака

    Следующая загадка предназначется только для тех, кто очень хорошо знает английский язык. К сожалению, адекватно перевести ее на русский, так, чтобы…

  • Ответ на загадку с картинкой

    Этот коллаж иллюстрирует название довольно известной раньше книги. ====================================================== Карл Маркс.…