Как установить новую операционную систему на свой компьютер. Как будет работать игры если куплю комп без ОС

7 (92221) 34 176 787 5 лет

Установка операционной системы на компьютер

Если Вы никогда ранее не устанавливали (переустанавливали) операционную систему на персональный компьютер или ноутбук, но хотите научиться, то данная статья для Вас. Ничего особенно сложного в данной процедуре нет, главное проявить внимательность и не торопиться.
Определения

Для начала разберемся с определениями и сокращениями, которые встречаются в данной статье:

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

Windows – самая популярная коммерческая ОС от компании Microsoft.

Linux – семейство ОС на основе одноименного ядра. Поставляется в виде различных дистрибутивов, среди которых множество бесплатных.

Дистрибутив ОС – набор, включающий ядро ОС, утилиты и программы.

Программное обеспечение (сокращенно ПО) – набор программ, выполняющих определенный вид задач.

Драйвер – специальная программа, с помощью которой другие программы обращаются к комплектующим компьютера.
Риски самостоятельной установки

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

Второй риск – это ошибки в процессе установки, из-за которых невозможно установить ОС (операционную систему) на данный компьютер. В этом случае компьютер останется неработоспособен, пока кто-нибудь не сможет помочь преодолеть данное препятствие. По типу ошибки можно попытаться найти ответ в интернете или посоветоваться со знакомым опытным в области компьютерных технологий. Также в данном случае можно попробовать установить другую версию операционной системы.

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

В качестве вывода: если есть возможность, экспериментируйте на старом «резервном» компьютере или ноутбуке. Если такой возможности нет, то взвесьте все «за» и «против», оценив возможные риски.
Основные этапы установки ОС:

Независимо от того, какую операционную систему Вы решили установить на свой компьютер (Windows или Linux), предполагается выполнение следующих этапов:

1. Подготовка жесткого диска.

5. Установка драйверов.

7. Настройка ОС.

Рассмотрим вместе с «Чесноком» каждый этап подробнее:
1. Подготовка жесткого диска.

Если необходимой информации на жестком диске нет или жесткий диск новый, то можно сразу перейти ко второму этапу.

Если на жестком диске имеется необходимая информация, то обязательно выполните резервное копирование перед установкой операционной системы.

С этой целью можно использовать Flash-накопитель, DVD-диск или второй жесткий диск (например, внешний с USB-интерфейсом). Скопируйте на данный носитель все необходимые Вам данные (документы, музыку, фильмы, файлы закладок браузеров, файлы настройки программ и т.п.). Не забудьте скопировать содержимое рабочего стола, если вы храните на нем документы, и зайдите в папку «Мои документы», обычно в неё сохраняются созданные файлы различными программами. для надежности можно выполнить копирование на два вида носителей.

После копирования не забудьте отключить накопитель от компьютера.

Чтобы установить операционную систему, необходим установочный дистрибутив. Он может быть на CD или DVD-диске, Flash-накопителе или на скрытом разделе жесткого диска. Наиболее универсальный способ установки с оптического диска (CD или DVD).

Диск с лицензионной версией ОС Windows можно приобрести практически в любом магазине компьютерной техники.

Диск с ОС Linux можно создать самостоятельно, загрузив образ диска с официального сайта (например, дистрибутив Ubuntu) и записав его на диск DVD-R (сделать это необходимо, конечно, заранее, до начала процесса установки).

Примечание: У ноутбуков, поставляемых с предустановленной ОС, обычно в инструкции указан способ переустановки операционной системы. Чаще всего для этого необходимо во время загрузки зажать определенную функциональную клавишу и дождаться начала установки ОС (у ноутбуков ASUS это клавиша F9).

Для загрузки с установочного диска необходимо при включении компьютера вызвать загрузочное меню («Boot menu»), выбрать соответствующее устройство для загрузки (DVD-привод или USB Flash-диск).
Также можно зайти в BIOS Setup и в разделе Boot выставить первым в очереди загрузки DVD-привод или USB Flash-диск.
3. Определение параметров установки.

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

Выбор выполняется либо указателем мыши, либо перемещением курсора с помощью стрелок на клавиатуре.
4. Следование инструкциям мастера установки.

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

При запросе указания раздела жесткого диска для установки ОС, возможны три варианта:

На жестком диске нет разделов: с помощью мастера установки создайте два раздела (один для ОС размером 30-40 Гигабайт и программ, второй раздел для файлов пользователя используя всё оставшееся пространство на жестком диске).
На жестком диске один раздел: желательно удалить раздел (все данные при этом будут утеряны) и создать два раздела с помощью мастера установки (смотрите предыдущий вариант).
На жестком диске два или более разделов: оптимальный вариант, изменять разделы нет необходимости, если первый раздел имеет размер более 30 Гигабайт.

После создания разделов выберите первый раздел для установки ОС и можно продолжить без потери данных на остальных разделах.

Процесс установки обычно занимает от 20 до 40 минут, поэтому следует запастись терпением. Большую часть этого времени компьютер не требует Вашего внимания, выполняя копирование файлов и осуществляя различные настройки.

Примечание: Иногда может показаться, что компьютер завис, но не стоит его принудительно перегружать. Если состояние компьютера не меняется более 10 минут и при этом нет обращения к жесткому диску (красный индикатор на системном блоке), то можно выполнить принудительную перезагрузку (кнопка «Reset») или, зажав кнопку питания на 5-10 секунд, выполнить принудительное выключение с последующим включением.
5. Установка драйверов.

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

Примечание: Если диска с драйверами нет, то их необходимо загрузить заранее, до начала процесса установки ОС.
6. Активация ОС (для ОС Windows).

Для платных операционных систем (ОС Windows) необходимо выполнить проверку на подлинность. Для этого запустите соответствующий пункт в меню ОС. Для активации ОС потребуется серийный номер, который можно найти на упаковке диска или на наклейке на корпусе компьютера (ноутбука).
7. Настройка ОС.

Следующий этап – настройка операционной системы. Подробно этот пункт рассмотрим в одной из следующих статей на сайте 4esnok.

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

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

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

Компьютер включается, но не запускается операционная система: причины

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

Тут есть три варианта:

  • появляется черный экран;
  • возникает синий экран BSoD;
  • операционная система стартует, но не может полностью загрузиться.

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

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

Что делать, если не загружается компьютер, и операционная система не стартует по вышеуказанным причинам? В зависимости от ситуации есть несколько решений. Непосвященному пользователю они могут показаться достаточно сложными, однако в определенных ситуациях для реанимации системы можно применить только их. Поэтому придется потратить и время, и силы.

Компьютер включается, но не загружается: что делать в первую очередь?

Итак, начнем с самого простого. Предположим, что в системе произошел кратковременный технический сбой, например при некорректном завершении работы или перепадах напряжения.

Как правило, практически все сегодня используемые модификации Windows обычно при рестарте автоматически активируют запуск Если этого не произошло, перед стартом системы придется использовать клавишу F8 для вызова дополнительного загрузочного меню (в Windows 10 используется другой метод).

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

Возможное вирусное заражение

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

Среди всего многообразия антивирусного ПО отдельно стоит отметить дисковые утилиты, которые стартуют непосредственно с оптического носителя или USB-устройства, имеют собственные загрузочные записи и даже графический интерфейс наподобие Windows. Одним из самых мощных средств можно назвать Kaspersky Rescue Disk. Его использование может гарантировать почти стопроцентное обнаружение вирусов, даже скрывающихся в оперативной памяти.

Конфликты оперативной памяти

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

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

Если же систему удастся хоть как-нибудь загрузить, используя тот же безопасный режим, «оперативку» сразу же следует проверить утилитой Memtest86+, которая и поможет выявить истинную причину неполадок.

Система не видит жесткий диск

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

Винчестер может иметь неполадки и программного, и физического характера, хотя иногда дело даже не в этом. Проблема может быть совершенно банальной: у пользователя в настройках BIOS установлен приоритет загрузки со съемного устройства, например, с оптического диска, который в данный момент находится в дисководе, но системным не является. Его следует просто извлечь и повторить загрузку.

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

Иногда помогает и изменение настроек первичной системы ввода/вывода BIOS. Здесь нужно найти раздел, связанный с настройкой винчестера, и в параметрах конфигурации SATA деактивировать использование режима AHCI.

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

Использование установочного диска

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

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

Проблемы с загрузчиком BOOTMGR

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

Исправить эту проблему можно при условии старта с загрузочного диска и перехода к командной строке в консоли восстановления, для вызова которой следует нажать клавишу «R». Далее нужно сначала использовать команду проверки диска, а затем исправить (восстановить) загрузочные записи.

Вся последовательность выглядит следующим образом:

  • chkdsk c: /f /r;
  • Bootrec.exe /FixMbr;
  • Bootrec.exe /FixBoot.

После ввода команд знаки препинания не ставятся, а нажимается клавиша ввода. Если по каким-то причинам выполнение этих команд положительного эффекта не возымело, как вариант можно использовать полную перезапись загрузочного сектора, которая производится командой Bootrec.exe /RebuildBcd. Если жесткий диск не имеет физических повреждений, это должно сработать, как говорится, на все сто.

Можно применять и некоторые сторонние утилиты. Наиболее подходящей программой выглядит средство под названием MbrFix, которое входит в состав загрузочного комплекта Hiren’s Boot CD. После ее вызова, например, для Windows 7 при условии того, что именно эта система установлена, причем только на одном диске (разбиение на разделы отсутствует), следует прописать следующее:

  • MbrFix.exe /drive 0 fixmbr /win7.

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

Проблемы с доступом к файлу NTLDR

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

Однако если результат достигнут не будет, нужно будет скопировать оригинальный файл в корень системного раздела. Например, если это диск «C», а дисковод - «E», команда будет иметь следующий вид:

  • E:\i386> copy ntldr C:\ (после копирования система загрузится без проблем).

Поврежденный или отсутствующий файл HAL.dll

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

В этой ситуации нужно загрузить систему в безопасном режиме, вызвать командную консоль и прописать в ней такую строку:

  • C:\windows\system32\restore\rstrui.exe (далее нажимается клавиша Enter и производится рестарт).

Вместо итога

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

Cуществуют отдельные программы, способные работать при отсутствии какой-либо операционной системы. Эти программы одновременно играют роль и загрузчика, и операционной системы, и приложения. Применение подобных программ ограничено узкоспециальными задачами, а выход из таких приложении является перезагрузкой компьютера. Примерами подобных программ, загружаемых с дискеты, являются утилиты тестирования оперативной памяти Windows Memory Diagnostic и низкоуровневого тестирования жёстких дисков MHDD.

Первые персональные компьютеры не имели операционных систем и были похожи на современные игровые приставки. При включении компьютера в сеть процессор обращался к постоянной памяти (ПЗУ), в котором была записана программа поддержки несложного языка программирования, например языка БЕЙСИК или похожего. Первичное изучение команд этого языка обычно занимало не более нескольких часов, и вскоре на компьютере можно было набирать и запускать несложные программы. Подключив к компьютеру магнитофон, можно было загрузить постороннюю программу. Загруженная программа отключала ПЗУ и далее работа с компьютером происходила под управлением загруженной программы (как в игровых приставках).

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

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

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



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

Работа компьютера возможна благодаря взаимодействию программного и аппаратного обеспечения. На самом деле, программный часть компьютера неоднородна и представляет собой сложную структуру. Всё программное обеспечение можно представить как три "слоя", покрывающие аппаратную часть, - "Прикладные программы, Операционная система, и Микропрограмма BIOS.

Осуществляется написание кодов событийных процедур и управление объектами

Процедура и их виды

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

Процедуры бывают: СОБЫТИЙНЫЕ и ОБЩИЕ.

Событийная процедура - подпрограмма, которая начинает выполняться после достижения какого то события (например, при щелчке по кнопке появляется картина).

В событийной процедуре могут участвовать несколько объектов. Например, само событие происходит с первым объектом (Объект 1), в результате второй (Объект 2) изменяет значение своего свойства, а третий (Объект 3) реализует какой-либо метод.

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

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

3.2 Виды событийных процедур

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

Событийные процедуры бывают локальные и глобальные.

Локальная процедура доступна только внутри данного программного модуля и не может быть вызвана из другого модуля. В процедурах используется ключевое слово Private, которое указывает, что данные процедуры являются локальными.

Глобальные процедуры доступны из всех программных модулей. Они предваряются ключевым словом Public. Однако его наличие не является обязательным. По умолчанию, если перед ключевым словом Sub ключевые слова отсутствуют, процедура является глобальной.

3.3 Механизм управления событийными процедурами

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

Событие (Event) – что-либо, что происходит (обычно, но не всегда вследствие действия пользователя за клавиатурой) во время работы программы.

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

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

Блок (block) – секция кода, представляющая единое целое. Большинство событийных процедур начинаются с оператора Private Sub... и заканчиваются строкой End Sub.

Блок Private – End показывает первую и последнюю строки этой событийной процедуры. Строки, находящиеся между этими строками, составляют тело событийной процедуры. Все элементы управления имеют уникальные имена. Все событийные процедуры также имеют уникальные имена. Имя событийной процедуры всегда принимает следующую форму: ControlName_eventName()

Событийная процедура всегда состоит из имени элемента управления, символа подчеркивания и имени события процедуры. Если необходимо реа-гировать как на событие щелчка, так и на событие двойного щелчка, которые могут быть применимы, например, к командной кнопке Exit, пользователю придется написать событийную процедуру с именем cmdExit_Click () и еще одну событийную процедуру с именем cmdExit_DblClick(). Событие двойного щелчка называется DblClick, а событие нажатия клавиши называется KeyDown. В верхней части каждого окна Code содержится поле с раскрывающимся списком, в котором находится каждое воз-можное событие для элемента управления, приведенного в левом поле с рас-крывающимся списком. Левое поле с раскрывающимся списком содержит имя каждого элемента управления в форме. Именование событийной процедуры не является пользовательским ре-шением, а является условным обозначением языка VB. Событийная процедура Click для командной кнопки с именем cmdTest всегда будет cmdTest_Click (). Имя из двух частей делает событийную процедуру абсолютно определенной: исходя из ее имени, и вы, и VB знаете, что код выполняется только, если пользователь щелкнет на командной кнопке cmdTest.

Определите последовательность установки. Если вы хотите пользоваться Linux одновременно с Windows, то сначала вам стоит установить Windows, а затем Linux. Это обусловлено тем, что Windows имеет довольно строгий бутлоадер (загрузчик), который должен запускаться перед Linux, иначе система не загрузится.

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

  • На большинстве компьютеров этими кнопками являются F2, F10, F12 и Del/Delete.
  • После того как вы окажетесь в меню настроек BIOS, зайдите в меню загрузки (Boot). Выберите ваш DVD/CD в качестве первостепенного загрузочного устройства (first boot device). Если вы загружаетесь с флешки, убедитесь, что она вставлена, и выберите ее.
  • После того, как вы выбрали необходимое устройство, сохраните изменения и выйдите из меню настроек. Ваш компьютер перезагрузится.

Протестируйте дистрибутив Linux перед установкой. Большинство дистрибутивов Linux можно запустить перед тем, как начинать установку. Это позволит вам протестировать операционную систему перед тем, как ее устанавливать. Когда вы будете готовы к установке, запустите установочную программу на рабочем столе.

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

    • Скорее всего, вам понадобится выбрать некоторые базовые настройки, такие как язык и раскладка клавиатуры.
  • Введите свой код активации. Если вы устанавливаете Windows 8, вам нужно будет ввести код активации перед началом установки. Более старые версии Windows требуют код активации по окончанию установки. Пользователи Linux не должны вводить код активации, за исключением платных версий, например, Red Hat.

  • Выберите тип установки. Windows предложит вам выбрать между Обновлением системы или Выборочной установкой. Даже если вы обновляете старую версию Windows, настоятельно рекомендуется выбирать Выборочную установку и устанавливать систему с нуля. Это позволит избежать проблем, связанных с несовместимостью старых и новых настроек.

    • Если вы устанавливаете Linux, вам будет предложено установить Linux рядом с текущей Windows или очистить диск и установить только Linux. Выберите то, что больше всего вам подходит. Если вы выберете установку рядом с Windows, вам нужно будет выбрать количество места на жестком диске, отведенного для Linux.
  • Отформатируйте разделы. Если вы устанавливаете Windows, вам нужно будет выбрать раздел, на который вы хотите ее установить. Удаление разделов приведет к удалению всех данных, а свободное место превратится в Нераспределенную область. Выберите Нераспределенную область и создайте новый раздел.

    • Если вы устанавливаете Linux, раздел нужно отформатировать в Ext4.
  • Настройте Linux. Перед началом установки установщик Linux попросит вас выбрать часовой пояс и создать имя пользователя и пароль. Вы будете использовать их для входа в ваш дистрибутив Linux, а также при авторизации системных изменений.

  • Не было достаточно подробно описано самого главного: как же запустить этот код на реальном железе? Как создать собственный загрузочный диск? В этой статье мы подробно ответим на все эти вопросы (частично данные вопросы разбирались в предыдущей статье, но для удобства чтения позволим себе небольшое дублирование материала).

    В интернете существует огромное количество описаний и туториалов о для того как написать собственную мини-ОС, даже существуют сотни готовых маленьких хобби-ОС. Один из наиболее достойных ресурсов по этой тематике, который хотелось бы особо выделить, это портал osdev.org. Для дополнения предыдущей статьи про PCI (и возможности писать последующие статьи о различных функциях, которые присутствуют в любой современной ОС), мы опишем пошаговые инструкции по созданию загрузочного диска с привычной программой на языке С. Мы старались писать максимально подробно, чтобы во всем можно было разобраться самостоятельно.

    Итак, цель: затратив как можно меньше усилий, создать собственную загрузочную флешку, которая всего-навсего печатает на экране компьютера классический “Hello World”.

    Если быть более точным, то нам нужно “попасть” в защищенный режим с отключенной страничной адресацией и прерываниями – самый простой режим работы процессора с привычным поведением для простой консольной программы. Самый разумный способ достичь такой цели – собрать ядро поддерживающее формат multiboot и загрузить его с помощью популярного загрузчика Grub. Альтернативой такого решения является написание собственного volume boot record (VBR), который бы загружал написанный собственный загрузчик (loader). Приличный загрузчик, как минимум, должен уметь работать с диском, с файловой системой, и разбирать elf образы. Это означает необходимость написания множества ассемблерного кода, и немало кода на С. Одним словом, проще использовать Grub, который уже умеет делать все необходимое.

    Начнем с того, что для дальнейших действий необходим определенный набор компиляторов и утилит. Проще всего воспользоваться каким-нибудь Linux (например, Ubuntu), поскольку он уже будет содержать все что нужно для создания загрузочной флэшки. Если вы привыкли работать в Windows, то можно настроить виртуальную машину с Linux (при помощи Virtual Box или VMware Workstation).

    Если вы используете Linux Ubuntu, то прежде всего необходимо установить несколько утилит:
    1. Grub. Для этого воспользуемся командой:
    sudo apt-get install grub

    2. Qemu. Он нужен, чтобы все быстро , для этого аналогично команда:
    sudo apt-get install qemu

    Теперь наш план выглядит так:
    1. создать программу на C, печатающую строку на экране.
    2. собрать из нее образ (kernel.bin) в формате miniboot, чтобы он был доступен для загрузки с помощью GRUB.
    3. создать файл образа загрузочного диска и отформатировать его.
    4. установить на этот образ Grub.
    5. скопировать на диск созданную программу (kernel.bin).
    6. записать образ на физический носитель или запустить его в qemu.

    А процесс загрузки системы:

    Чтобы все получилось, необходимо будет создать несколько файлов и каталогов:

    Шаг 1. Создание кода целевой программы (ядра):

    Создаем файл kernel.c, который будет содержать следующий код, печатающий сообщение на экране:

    #include "printf.h" #include "screen.h" #include "types.h" void main(void) { clear_screen(); printf("\n>>> Hello World!\n"); }

    Тут все привычно и просто. Добавление функций printf и clear_screen будет рассмотрено дальше. А пока надо дополнить этот код всем необходимым, чтобы он мог загружаться Grub’ом.
    Для того что бы ядро было в формате multiboot, нужно что бы в первых 8-ми килобайтах образа ядра находилась следующая структура:

    Если все указанные условия выполнены, то Grub через регистры %eax и %ebx передает указатель на структуру multiboot Information и значение 0x1BADB002 соответственно. Структура multiboot Information содержит различную информацию, в том числе список загруженных модулей и их расположение, что может понадобиться для дальнейшей загрузки системы.
    Для того, чтобы файл с программой содержал необходимые сигнатуры создадим файл loader.s, со следующим содержимым:

    Text .global loader # making entry point visible to linker # setting up the Multiboot header - see GRUB docs for details .set FLAGS, 0x0 # this is the Multiboot "flag" field .set MAGIC, 0x1BADB002 # "magic number" lets bootloader find the header .set CHECKSUM, -(MAGIC + FLAGS) # checksum required .align 4 .long MAGIC .long FLAGS .long CHECKSUM # reserve initial kernel stack space .set STACKSIZE, 0x4000 # that is, 16k. .lcomm stack, STACKSIZE # reserve 16k stack .comm mbd, 4 # we will use this in kmain .comm magic, 4 # we will use this in kmain loader: movl $(stack + STACKSIZE), %esp # set up the stack movl %eax, magic # Multiboot magic number movl %ebx, mbd # Multiboot data structure call main # call C code cli hang: hlt # halt machine should kernel return jmp hang

    Рассмотрим код подробнее. Этот код в почти не измененном виде взят с wiki.osdev.org/Bare_Bones . Так как для компиляции используется gcc, то используется синтаксис GAS. Рассмотрим подробнее, что делает этот код.
    .text
    Весь последующий код попадет в исполняемую секцию.text.
    .global loader
    Объявляем символ loader видимым для линковщика. Это требуется, так как линковщик будет использовать loader как точку входа.
    .set FLAGS, 0x0 # присвоить FLAGS = 0x0 .set MAGIC, 0x1BADB002 # присвоить MAGIC = 0x1BADB002 .set CHECKSUM, -(MAGIC + FLAGS) # присвоить CHECKSUM = -(MAGIC + FLAGS) .align 4 # выровнять последующие данные по 4 байта.long MAGIC # разместить по текущему адресу значение MAGIC .long FLAGS # разместить по текущему адресу значение FLAGS .long CHECKSUM # разместить по текущему адресу значение CHECKSUM
    Этот код формирует сигнатуру формата Multiboot. Директива.set устанавливает значение символа в выражение справа от запятой. Директива.align 4 выравнивает последующее содержимое по 4 байта. Директива.long сохраняет значение в четырех последующих байтах.
    .set STACKSIZE, 0x4000 # присвоить STACKSIZE = 0x4000 .lcomm stack, STACKSIZE # зарезервировать STACKSIZE байт. stack ссылается на диапазон.comm mbd, 4 # зарезервировать 4 байта под переменную mdb в области COMMON .comm magic, 4 # зарезервировать 4 байта под переменную magic в области COMMON
    В процессе загрузки grub не настраивает стек, и первое что должно сделать ядро это настроить стек, для этого мы резервируем 0x4000(16Кб) байт. Директива.lcomm резервирует в секции.bss количество байт, указанное после запятой. Имя stack будет видимо только в компилируемом файле. Директива.comm делает то же что и.lcomm, но имя символа будет объявлено глобально. Это значит что, написав в коде на Си следующую строчку, мы сможем его использовать.
    extern int magic

    И теперь последняя часть:
    loader: movl $(stack + STACKSIZE), %esp # инициализировать стек movl %eax, magic # записать %eax по адресу magic movl %ebx, mbd # записать %ebx по адресу mbd call main # вызвать функцию main cli # отключить прерывания от оборудования hang: hlt # остановить процессор пока не возникнет прерывание jmp hang # прыгнуть на метку hang

    Первой инструкцией происходит сохранение значения верхушки стека в регистре %esp. Так как стек растет вниз, то в %esp записывается адрес конца диапазона отведенного под стек. Две последующие инструкции сохраняют в ранее зарезервированных диапазонах по 4 байта значения, которые Grub передает в регистрах %eax, %ebx. Затем происходит вызов функции main, которая уже написана на Си. В случае возврата из этой процедуры процессор зациклится.

    Шаг 2. Подготовка дополнительного кода для программы (системная библиотека):

    Поскольку вся программа пишется с нуля, то функцию printf нужно написать с нуля. Для этого нужно подготовить несколько файлов.
    Создадим папку common и include:

    Mkdir common mkdir include

    Создадим файл common\printf.c, который будет содержать реализацию привычной функции printf. Этот файл целиком можно взять из проекта www.bitvisor.org . Путь до файла в исходниках bitvisor: core/printf.c. В скопированном из bitvisor файле printf.c, для использования в целевой программе нужно заменить строки:

    #include "initfunc.h" #include "printf.h" #include "putchar.h" #include "spinlock.h"
    на строки:
    #include "types.h" #include "stdarg.h" #include "screen.h"

    Потом, удалить функцию printf_init_global и все ее упоминания в этом файле:

    Static void printf_init_global (void) { spinlock_init (&printf_lock); } INITFUNC ("global0", printf_init_global);

    Затем удалить переменную printf_lock и все ее упоминания в этом файле:
    static spinlock_t printf_lock; … spinlock_lock (&printf_lock); … spinlock_unlock (&printf_lock);

    Функция printf использует функцию putchar, которую так же нужно написать. Для этого создадим файл common\screen.с, со следующим содержимым:
    #include "types.h" #define GREEN 0x2 #define MAX_COL 80 // Maximum number of columns #define MAX_ROW 25 // Maximum number of rows #define VRAM_SIZE (MAX_COL*MAX_ROW) // Size of screen, in short"s #define DEF_VRAM_BASE 0xb8000 // Default base for video memory static unsigned char curr_col = 0; static unsigned char curr_row = 0; // Write character at current screen location #define PUT(c) (((unsigned short *) (DEF_VRAM_BASE)) \ [(curr_row * MAX_COL) + curr_col] = (GREEN << 8) | (c)) // Place a character on next screen position static void cons_putc(int c) { switch (c) { case "\t": do { cons_putc(" "); } while ((curr_col % 8) != 0); break; case "\r": curr_col = 0; break; case "\n": curr_row += 1; if (curr_row >= MAX_ROW) { curr_row = 0; } break; case "\b": if (curr_col > 0) { curr_col -= 1; PUT(" "); } break; default: PUT(c); curr_col += 1; if (curr_col >= MAX_COL) { curr_col = 0; curr_row += 1; if (curr_row >= MAX_ROW) { curr_row = 0; } } }; } void putchar(int c) { if (c == "\n") cons_putc("\r"); cons_putc(c); } void clear_screen(void) { curr_col = 0; curr_row = 0; int i; for (i = 0; i < VRAM_SIZE; i++) cons_putc(" "); curr_col = 0; curr_row = 0; }

    Указанный код, содержит простую логику печати символов на экран в текстовом режиме. В этом режиме для записи символа используется два байта (один с кодом символа, другой с его атрибутами), записываемые прямо в видео память отображаемую сразу на экране и начинающуюся с адреса 0xB8000. Разрешение экрана при этом 80x25 символов. Непосредственно печать символа осуществляется при помощи макроса PUT.
    Теперь не хватает всего несколько заголовочных файлов:
    1. Файл include\screen.h. Объявляет функцию putchar, которая используется в функции printf. Содержимое файла:
    #ifndef _SCREEN_H #define _SCREEN_H void clear_screen(void); void putchar(int c); #endif

    2. Файл include\printf.h. Объявляет функцию printf, которая используется в main. Содержимое файла:
    #ifndef _PRINTF_H #define _PRINTF_H int printf (const char *format, ...); #endif

    3. Файл include\stdarg.h. Объявляет функции для перебора аргументов, количество которых заранее не известно. Файл целиком берется из проекта www.bitvisor.org . Путь до файла в коде проекта bitvisor: include\core\stdarg.h.
    4. Файл include\types.h. Объявляет NULL и size_t. Содержимое файла:
    #ifndef _TYPES_H #define _TYPES_H #define NULL 0 typedef unsigned int size_t; #endif
    Таким образом папки include и common содержат минимальный код системной библиотеки, которая необходима любой программе.

    Шаг 3. Создание скрипта для компоновщика:

    Создаем файл linker.ld, который будет использоваться компоновщиком для формирования файла целевой программы (kernel.bin). Файл должен содержать следующее:

    ENTRY (loader) LMA = 0x00100000; SECTIONS { . = LMA; .multiboot ALIGN (0x1000) : { loader.o(.text) } .text ALIGN (0x1000) : { *(.text) } .rodata ALIGN (0x1000) : { *(.rodata*) } .data ALIGN (0x1000) : { *(.data) } .bss: { *(COMMON) *(.bss) } /DISCARD/ : { *(.comment) } }

    Встроенная функция ENTRY() позволяет задать входную точку для нашего ядра. Именно по этому адресу передаст управление grub после загрузки ядра. Компоновщик при помощи этого скрипта создаст бинарный файл в формате ELF. ELF-файл состоит из набора сегментов и секций. Список сегментов содержится в Program header table, список секций в Section header table. Линковщик оперирует с секциями, загрузчик образа (в нашем случае это GRUB) с сегментами.

    Как видно на рисунке, сегменты состоят из секций. Одним из полей, описывающих секцию, является виртуальный адрес, по которому секция должна находиться на момент выполнения. На самом деле, у сегмента есть 2 поля, описывающих его расположение: виртуальный адрес сегмента и физический адрес сегмента. Виртуальный адрес сегмента это виртуальный адрес первого байта сегмента в момент выполнения кода, физический адрес сегмента это физический адрес по которому должен быть загружен сегмент. Для прикладных программ эти адреса всегда совпадают. Grub загружает сегменты образа, по их физическому адресу. Так как Grub не настраивает страничную адресацию, то виртуальный адрес сегмента должен совпадать с его физическим адресом, поскольку в нашей программе виртуальная память так же не настраивается.

    SECTIONS
    Говорит о том, что далее описываются секции.
    . = LMA;
    Это выражение указывает линковщику, что все последующие секции находятся после адреса LMA.
    ALIGN (0x1000)
    Директива выше, означает, что секция выровнена по 0x1000 байт.
    .multiboot ALIGN (0x1000) : { loader.o(.text) }
    Отдельная секция multiboot, которая включает в себя секцию.text из файла loader.o, сделана для того, что бы гарантировать попадание сигнатуры формата multiboot в первые 8кб образа ядра.
    .bss: { *(COMMON) *(.bss) }
    *(COMMON) это область, в которой резервируется память инструкциями.comm и.lcomm. Мы располагаем ее в секции.bss.
    /DISCARD/ : { *(.comment) }
    Все секции, помеченные как DISCARD, удаляются из образа. В данном случае мы удаляем секцию.comment, которая содержит информацию о версии линковщика.

    Теперь скомпилируем код в бинарный файл следующими командами:
    as -o loader.o loader.s gcc -Iinclude -Wall -fno-builtin -nostdinc -nostdlib -o kernel.o -c kernel.c gcc -Iinclude -Wall -fno-builtin -nostdinc -nostdlib -o printf.o -c common/printf.c gcc -Iinclude -Wall -fno-builtin -nostdinc -nostdlib -o screen.o -c common/screen.c ld -T linker.ld -o kernel.bin kernel.o screen.o printf.o loader.o
    С помощью objdump’а рассмотрим, как выглядит образ ядра после линковки:
    objdump -ph ./kernel.bin

    Как можно видеть, секции в образе совпадают с теми, что мы описали в скрипте линковщика. Линковщик сформировал 3 сегмента из описанных секций. Первый сегмент включает в себя секции.multiboot, .text, .rodata и имеет виртуальный и физический адрес 0x00100000. Второй сегмент содержит секции.data и.bss и располагается по адресу 0x00104000. Значит все готово для загрузки этого файла при помощи Grub.

    Шаг 4. Подготовка загрузчика Grub:
    Создать папку grub:
    mkdir grub

    Скопировать в эту папку несколько файлов Grub, которые необходимы для его установки на образ (указанные далее файлы существуют, если в системе установлен Grub). Для этого нужно выполнить следующие команды:
    cp /usr/lib/grub/i386-pc/stage1 ./grub/ cp /usr/lib/grub/i386-pc/stage2 ./grub/ cp /usr/lib/grub/i386-pc/fat_stage1_5 ./grub/

    Создать файл grub/menu.lst, со следующим содержимым:
    timeout 3 default 0 title mini_os root (hd0,0) kernel /kernel.bin

    Шаг 5. Автоматизация и создание загрузочного образа:

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

    CC = gcc CFLAGS = -Wall -fno-builtin -nostdinc -nostdlib LD = ld OBJFILES = \ loader.o \ common/printf.o \ common/screen.o \ kernel.o image: @echo "Creating hdd.img..." @dd if=/dev/zero of=./hdd.img bs=512 count=16065 1>/dev/null 2>&1 @echo "Creating bootable first FAT32 partition..." @losetup /dev/loop1 ./hdd.img @(echo c; echo u; echo n; echo p; echo 1; echo ; echo ; echo a; echo 1; echo t; echo c; echo w;) | fdisk /dev/loop1 1>/dev/null 2>&1 || true @echo "Mounting partition to /dev/loop2..." @losetup /dev/loop2 ./hdd.img \ --offset `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk "{print $$3}"\`*512 | bc` \ --sizelimit `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk "{print $$4}"\`*512 | bc` @losetup -d /dev/loop1 @echo "Format partition..." @mkdosfs /dev/loop2 @echo "Copy kernel and grub files on partition..." @mkdir -p tempdir @mount /dev/loop2 tempdir @mkdir tempdir/boot @cp -r grub tempdir/boot/ @cp kernel.bin tempdir/ @sleep 1 @umount /dev/loop2 @rm -r tempdir @losetup -d /dev/loop2 @echo "Installing GRUB..." @echo "device (hd0) hdd.img \n \ root (hd0,0) \n \ setup (hd0) \n \ quit\n" | grub --batch 1>/dev/null @echo "Done!" all: kernel.bin rebuild: clean all .s.o: as -o $@ $< .c.o: $(CC) -Iinclude $(CFLAGS) -o $@ -c $< kernel.bin: $(OBJFILES) $(LD) -T linker.ld -o $@ $^ clean: rm -f $(OBJFILES) hdd.img kernel.bin

    В файле объявлены две основные цели: all – компилирует ядро, и image – которая создает загрузочный диск. Цель all подобно привычным makefile содержит подцели.s.o и.c.o, которые компилируют *.s и *.c файлы в объектные файлы (*.o), а так же цель для формирования kernel.bin, которая вызывает компоновщик с созданным ранее скриптом. Эти цели выполняют ровно те же команды, которые указаны в шаге 3.
    Наибольший интерес здесь представляет создание загрузочного образа hdd.img (цель image). Рассмотрим поэтапно, как это происходит.
    dd if=/dev/zero of=./hdd.img bs=512 count=16065 1>/dev/null 2>&1
    Эта команда создает образ, с которым будет происходить дальнейшая работа. Количество секторов выбрано не случайно: 16065 = 255 * 63. По умолчанию fdsik работает с диском так, как будто он имеет CHS геометрию, в которой Headers (H) = 255, Sectors (S) = 63, а Cylinders(С) зависит от размера диска. Таким образом, минимальный размер диска, с которым может работать утилита fdsik, без изменения геометрии по умолчанию, равен 512 * 255 * 63 * 1 = 8225280 байт, где 512 – размер сектора, а 1 – количество цилиндров.
    Далее создается таблица разделов:
    losetup /dev/loop1 ./hdd.img (echo c; echo u; echo n; echo p; echo 1; echo ; echo ; echo a; echo 1; echo t; echo c; echo w;) | fdisk /dev/loop1 1>/dev/null 2>&1 || true
    Первая команда монтирует файл hdd.img к блочному устройству /dev/loop1, позволяя работать с файлом как с устройством. Вторая команда создает на устройстве /dev/loop1 таблицу разделов, в которой находится 1 первичный загрузочный раздел диска, занимающий весь диск, с меткой файловой системы FAT32.
    Затем форматируем созданный раздел. Для этого нужно примонтировать его как блочное устройство и выполнить форматирование.
    losetup /dev/loop2 ./hdd.img \ --offset `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk "{print $$3}"\`*512 | bc` \ --sizelimit `echo \`fdisk -lu /dev/loop1 | sed -n 10p | awk "{print $$4}"\`*512 | bc` losetup -d /dev/loop1
    Первая команда монтирует ранее созданный раздел к устройству /dev/loop2. Опция –offset указывает адрес начала раздела, а –sizelimit адрес конца раздела. Оба параметра получаются с помощью команды fdisk.
    mkdosfs /dev/loop2
    Утилита mkdosfs форматирует раздел в файловую систему FAT32.
    Для непосредственной сборки ядра используются рассмотренные ранее команды в классическом синтаксисе makefile.
    Теперь рассмотрим как установить GRUB на раздел:
    mkdir -p tempdir # создает временную директорию mount /dev/loop2 tempdir # монтирует раздел в директорию mkdir tempdir/boot # создает директорию /boot на разделе cp -r grub tempdir/boot/ # копируем папку grub в /boot cp kernel.bin tempdir/ # копирует ядро в корень раздела sleep 1 # ждем Ubuntu umount /dev/loop2 # отмонтируем временную папку rm -r tempdir # удаляем временную папку losetup -d /dev/loop2 # отмонтируем раздел
    После выполнения вышеприведенных команд, образ будет готов к установке GRUB’а. Следующая команда устанавливает GRUB в MBR образа диска hdd.img.
    echo "device (hd0) hdd.img \n \ root (hd0,0) \n \ setup (hd0) \n \ quit\n" | grub --batch 1>/dev/null

    Все готово к тестированию!

    Шаг 6. Запуск:

    Для компиляции, воспользуемся командой:
    make all
    После которой должен появиться файл kernel.bin.
    Для создания загрузочного образа диска, воспользуемся командой:
    sudo make image
    В результате чего должен появиться файл hdd.img.
    Теперь с образа диска hdd.img можно загрузиться. Проверить это можно с помощью следующей команды:
    qemu -hda hdd.img -m 32
    или:
    qemu-system-i386 -hda hdd.img


    Для проверки на реальной машине нужно сделать dd этого образа на флэшку и загрузиться с нее. Например такой командой:
    sudo dd if=./hdd.img of=/dev/sdb

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

    Эмуляторы