Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

хорошую работу на сайт">

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

Волжский университет имени В.Н.Татищева

Факультет “Информатика и телекоммуникации”

Кафедра “Информатика и системы управления”

КУРСОВАЯ РАБОТА

по дисциплине: “Системное программное обеспечение”

Тема: “ Загрузчик

Выполнил: студент. ИС-30 3

Красносельцев В . П .

Преподаватель: Трубачева С.И.

Тольятти

Введение

1. Теоретическая часть

2. Проектная часть

2.1 Постановка задачи

2.2 Разработка алгоритма решения задачи

2.3 Описание алгоритма загрузки прикладной программы

2.4 Описание алгоритма загрузки ОС

2.5 Описание алгоритма загрузки Unix с помощью загрузчика LILO

Заключение

Использованная литература

Введение

Актуальность моей курсовой работы заключается в том, что развитие компьютеров и их операционных систем шло параллельно развитию различных программ загрузчиков. Для загрузки определенных операционных систем нужны различные загрузчики. Например, для операционной многопользовательской системы Unix нужен загрузчик LILO и различные служебные программы. Любая загрузка операционной системы затрагивает оперативную память, с которой работает и первичный загрузчик так и вторичный. При загрузке происходят различные вида ошибки, которые загрузчик обходит или завершает процесс загрузки (выводит информационное сообщение).

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

1 . Теоретическая часть

Процесс загрузки ОС фирмы Microsoft

Какую бы операционную систему мы не рассматривали, для того, чтобы ОС могла начать управлять компьютером, ее необходимо загрузить в оперативную память. Поэтому рассмотрим, как происходит процесс загрузки разных ОС. Поскольку нас интересует только загрузка с жестких дисков, то мы не будем рассматривать особенности загрузки с дискеты, CD-ROM и по сети. Начнем с MS-DOS и MS Windows.

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

После завершения тестирования POST вызывает Int 19h, которое пытается найти загрузочное устройство. Поиск производится в том порядке, который определен в Setup BIOS, и осуществляется путем опроса нулевых секторов соответствующих устройств. Если диск является загрузочным, то в его нулевом секторе находится главная загрузочная запись - Master Boot Record (MBR). Последние два байта MBR- это “магическое число”, которое является признаком того, что данный сектор есть MBR, а, следовательно, диск является загрузочным. Кроме “магического числа” MBR содержит таблицу разделов диска, о которой уже было сказано выше, и маленькую программу - первичный загрузчик, объемом всего 446(0*1ВЕ) байт.

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

Таблица 2.1 Структура главного загрузочного сектора

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

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

Вторичный загрузчик загружает первый слой программ, необходимых для запуска ОС. В случае MS - DOS программа-загрузчик загружает IO.SYS по адресу 700h, затем MSDOS.SYS и передает управление разделу SYSINIT модуля IO.SYS.

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

Проблемы с большими дисками

В MS - DOS и первых версиях Windows доступ к дискам был организован через прерывание 13 (Int 13h) BIOS. При этом использовалась адресация секторов на диске на основе указания номеров цилиндра, головки и сектора на дорожке (C/H/S). Точнее:

1)AH - выбор операции;

2)СР - младшие 8 битов номера цилиндра;

3)СL - биты 7-6 соответствуют старшим битам номера цилиндра, биты 5-0 соответствуют номеру сектора;

4)DH - номер считывающей головки;

5)DL - номер диска (80h или 81h).

Надо отметить, что все перечисленные ограничения существенны только на этапе загрузки ОС, поскольку сама Linux и последние версии Windows при работе с дисками уже не используют прерывание 13 BIOS, а используют собственные драйверы для работы с дисками. Но, прежде чем система сможет использовать собственный драйвер, она должна как минимум его загрузить. Поэтому на этапе начальной загрузки любая система вынуждена пользоваться BIOS. Это и вызывает ограничения на размещение многих систем за пределами 8 Гбайт, они не могут оттуда загружаться, хотя после успешной загрузки могут работать с дисками гораздо большего объема. Для того чтобы понять, как можно обойти эти ограничения, нам потребуются некоторые знания о том, как происходит загрузка ОС Linux.

Загрузчик LILO из дистрибутива ОС Linux

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

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

Программа /sbin/lilo, которая запускается из-под Linux, служит для того, чтобы записать всю информацию, необходимую на этапе загрузки, в соответствующие места. Ее необходимо перезапускать каждый раз после внесения изменения в ядро или в конфигурационный файл LILO;

Различные служебные файлы, которые нужны LILO во время загрузки. Эти файлы обычно располагаются в каталоге /boot. Самые важные из них - это собственно загрузчик и map-файл(/boot/map), в котором указывается местоположение ядра. Еще один важный файл - это файл конфигурации LILO, который обычно имеет имя /etc/lilo.conf;

Собственно загрузчик - это часть LILO, которая первой загружается в память через прерывание BIOS, и которая загружает ядро Linux или загрузочный сектор другой ОС. Загрузчик тоже состоит из двух частей. Первая часть записывает в загрузочный сектор и служит для загрузки второй части, которая значительно больше по размеру. Обе части обычно хранятся на диске в файле /boot/boot.b.

Загрузочный сектор LILO при инсталляции системы можно разместить в следующих местах:

Загрузочный сектор дискеты в формате Linux(/dev/fd0,…);

MBR первого жесткого диска (/dev/had, /dev/sda,…);

Загрузочный сектор первичного раздела файловой системы Linux на первом жестком диске (/dev/hda1, /dev/hda2,…);

Загрузочный сектор логического раздела в расширенном разделе первого жесткого диска (/dev/hda5,…). Правда большинство программ типа fdisk не предполагают, что можно загружаться из расширенного раздела и отказываются объявлять его активным. Поэтому в состав LILO включена специальная программа (activate), которая позволяет обойти это ограничение. Но программа fdisk из дистрибутива Linux поддерживает возможность активизации расширенного раздела. Для этого надо использовать либо опцию -b, либо переменную BOOT.

Загрузочный сектор LILO не может быть размещен в следующих местах:

Загрузочный сектор дискеты или первичного раздела, отформатированный в других файловых системах;

В swap-разделе Linux;

Кроме того, что LILO во время загрузки нужны еще следующие файлы:

-/boot/map(создается при запуске /sbin/lilo);

Все загружаемые версии ядра (если вы выбираете версию ядра на этапе загрузки);

Загрузочные сектора других ОС, которые будут загружаться через LILO;

Выдаваемые при загрузке сообщения(если таковые определены)

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

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

L [код ошибки] - первичный загрузчик загрузился и стартовал (на него передано управление), но он не сумел загрузить вторичный загрузчик. Двухзначный код ошибки указывает на конкретную причину проблемы. Обычно это связано с дефектами носителя или неправильно заданной геометрией диска. Если только LILO не остановился на этом этапе, выдавая бесконечную последовательность кодов ошибки, проблема обычно легко решаема.

LI - первичный загрузчик сумел загрузить вторичный загрузчик, но не сумел запустить его на выполнение. Это может быть вызвано ошибкой в задание геометрии диска или тем, что файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.

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

LIL? - вторичный загрузчик был загружен по неправильному адресу. Обычно вызвано ошибкой в задании геометрии диска или тем, что файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.

LIL- - таблица дескрипторов разрушена. Обычно вызвано ошибкой в задании геометрии диска или тем, что файл /boot/boot.b был перемещен без перезапуска /sbin/lilo.

LILO - все части LILO успешно загружены.

Процесс init и файл /etc/inittab

Как вы знаете, после включения питания компьютера и завершения тестирования аппаратной части BIOS считывается из первого сектора загрузочного диска, которую программу - загрузчик. Эта программа запускает основной системный загрузчик (например, LILO) который, в свою очередь, загружает в память ядро системы, которое обычно хранится в файле vmlinuz-x.y.z-a в каталоге /boot.

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

Точный список этих операций зависит так называемого уровня выполнения (run level). Уровень выполнения определяет перечень действий, выполняемых процессом init, и состояние системы после загрузки, т.е. конфигурацию запущенных процессов. Уровень выполнения идентифицируется одним символом. В ОС Linux существует 8 основных уровней выполнения:

1)Остановка системы;

2)Однопользовательский режим (для специальных случаев администрирования);

3)Многопользовательский режим без NFS (то же, что и 3, если компьютер не работает с сетью);

4)Полный многопользовательский режим;

5)Использование не регламентировано;

6) Обычно используется для запуска системы в графическом режиме;

S) (или s) - примерно то же, что и однопользовательский режим, но S и s используется в основном в скриптах.

Первым делом после старта процесс init считывает свой конфигурационный файл /etc/inittab. Этот файл состоит из отдельных строк. Если строка начинается со знака # или пуста, то она игнорируется. Все остальные строки состоят из 4 полей, разделенных двоеточиями:

id : runlevels : action : process

id - идентификатор строки;

runlevels - уровни выполнения;

process - процесс;

action - действие;

В поле action стоит ключевое слово, которое определяет дополнительные условия команды, заданной полем process. Допустимые значения поля action:

respawn - перезапустить процесс в случае завершения его работы;

once - выполнить процесс только один раз при переходе на указанный уровень;

wait - процесс будет запущен один раз при переходе на указанный уровень;

sysinit - это ключевое слово обозначает действия, выполняемые в процессе загрузки системы независимо от уровня выполнения (поле id игнорируется).

boot - процесс будет запущен на этапе загрузки системы от уровня выполнения;

bootwait - процесс будет запущен на этапе загрузки системы от уровня выполнения, и init будет дожидаться его завершения;

initdefault - строка, в которой это слово стоит в поле action, определяет уровень выполнения, на который система переходит по умолчанию.

off - игнорировать данный элемент;

powerwait - позволяет процессу init остановить систему, когда пропало питание.

Ctrlaltdel - разрешает init перезагрузить систему, когда пользователь нажимает комбинацию клавиш на клавиатуре.

Этот список не является исчерпывающим. Более подробно о файле inittab можно узнать из man - страниц init (8), inittab(5), и getty(8).

2 . Проектная часть

2.1 Постановка задачи

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

2.2 Разработка алгоритма решения задачи

Исходные данные: Однопроцессорная система, прикладная программа, загрузчик LILO, программа POST, взаимное исключение.

На рисунке 1 - представлен алгоритм «загрузки прикладной программы».

На рисунке 2 - представлен алгоритм «загрузки Оперционной Системы»

2.3 Описание алгоритма загрузки прикладной программы

1) Происходит запуск прикладной программы на выполнение. После происходит активизация системной программы “Загрузчик”.

2) После активизации начинается сканирование оперативной памяти для нахождения свободных областей.

3) Если такие области нашлись то, начинается определение начала адреса размещения свободной области. Потом идем на этот адрес и определяем размер свободной области.

4) После происходит определение размера кода прикладной программы, которая запушена на выполнение.

5) Сравниваем размер кода и размер свободной области в оперативной памяти.

6) Если хватает места в оперативной памяти для копирования кода прикладной программы, тогда происходит установка в таблицу страниц номера виртуальных страниц физических страниц. Потом идет копирование кода прикладной программы в оперативную память. И завершение процесса.

7) Иначе узнаем, хватит ли места в оперативной памяти для части кода прикладной программы. Если да то повторяем те действия, когда хватает места для полного кода прикладной программы. Но после копирования кода в оперативную память происходит копирование части кода в область свопинга.

8) Если не хватает места для части кода, то тогда происходит переход на этап сканирования оперативной память для нахождения свободных областей.

2.4 Описание алгоритма загрузки ОС (Операционная Система)

1) Происходит запуск программы POST. С помощью этой программы идет тестировка доступной памяти, определение наличие других компонентов (различные устройства ПК, например: клавиатура, винчестер и т.д.) и инициализация карт адаптеров.

2) После работы программы POST выводится на экран о результатах ее работы.

3) Вызываем программу 19H, которая пытается найти загрузочное устройство.

4) Прерывание 19H BIOS загружает первичный загрузчик в память компьютера и передает управление этой программе

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

6) Вторичный загрузчик загружает первый слой программ, необходимых для запуска ОС. Программа загрузчик загружает модуль IO.SYS по адресу 700h, затем MSDOS.SYS передает управление разделу SYSINIT модуля IO.SYS.

7) Если по каким-либо причинам на диске был не найден активный раздел в таблице разделов, процесс загрузки продолжается обработкой прерывания 18h.

2.5 Описание алгоритма загрузки Unix с помощью загрузчика LILO

1) Запуск программы /sbin/lilo, чтобы записать всю информацию, необходимую на этапе загрузки, в соответствующие места. Поиск служебных файлов необходимых LILO во время загрузки.

2) Если файлы не найдены, то выводится сообщение о конце загрузки.

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

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

7) Иначе, происходит запуск вторичного загрузчика.

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

9) Если нет, то происходит вывод информационного сообщения о ошибки при загрузки.

10) Проверка разрушена ли таблица дескрипторов. Если да, то вывод информационного сообщения об ошибки при загрузке. А если нет, то происходит загрузка таблицы дескрипторов из map-файла.

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

12) Иначе, вывод информационного сообщения об успешной загрузки LILO.

Заключение

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

Использованная литература

1. Таненбаум Эндрю. Современные операционные системы / Таненбаум Эндрю. - 2-е изд. - СПБ.: Питер, 2002. - 1037с.: ил. - (Классика Computer Science). - ISBN 5-318-00299-4

2. Партыка, Т.Л. Операционные системы, среды и оболочки: учебное пособие для сред. Проф. Обр. рек. МО / Партыка, Т.Л, Попов, И.И.- М.: ФОРУМ: ИНФРА - М, 2006. - 399с.: ил. - (Профессиональное образование). - ISBN 5-8199-0072-5-16-001355-5

3. Олифер, В.Г. Сетевые операционные системы: Учеб. пособие для вузов рек. МО / Олифер, В.Г, Олифер, Н.А. - СПб.: Питер, 2003. - 538с.: ил. - ISBN 5-272-00120-6

4. Трубачева, С.И. Программирование в операционных системах: Методическое пособие / Трубачева, С.И. - Тольятти: ВУиТ, 2006. - 44с.

5. Теренс Чан. Системное программирование на Си++ для Unix / Под ред. Коломыцева. - Киев, 2004.

6. Такет Д., Барнет С. Специальное издание. Использование LINUX / Пер. с англ. - 4-е изд. СПб.: Вильямс, 2003.

7. Иванова Г.С. Программирование на СИ++ / Учебник. Изд. М.: МГТУ, 2002.

Подобные документы

    Общая характеристика системы Android, обзор его аналогов. Необходимые компоненты для начала работы в Android. Настройка конфигураций Ubuntu. Написание script-ов, упрощающих генерацию Linux. Отладка и тестирование программы на плате i.MX53 фирмы freescale.

    курсовая работа , добавлен 12.10.2012

    Рассмотрение характеристик менеджеров загрузки. Описание Download Accelerator Plus, Download Master, FlashGet, GetRight, ReGet, Go!Zilla. Сравнительная характеристика менеджеров загрузки Windows. Программы для операционных систем Unix, Linux и Mac.

    реферат , добавлен 06.09.2014

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

    курсовая работа , добавлен 02.04.2014

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

    презентация , добавлен 20.12.2013

    Анализ технических возможностей операционной системы Mandriva Linux - дистрибутива GNU/Linux, разрабатываемого французской компанией Mandriva, выпускающей свободные, коммерческие и корпоративные версии своего дистрибутива. Этапы установки оболочки Linux.

    презентация , добавлен 23.05.2010

    Основные моменты истории операционных систем, связывающих аппаратное обеспечение и прикладные программы. Характеристика операционной системы Microsoft Windows Seven, анализ операционной системы Linux. Преимущества и недостатки каждой операционной системы.

    курсовая работа , добавлен 07.05.2011

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

    дипломная работа , добавлен 18.07.2013

    Этапы загрузки Linux-системы, регистрация. Управление учетными записями пользователей. Принцип именования устройств, назначение и применение специальных файлов. Управление файлами, доступом к файловой системе, заданиями. Базовая файловая структура Linux.

    методичка , добавлен 15.11.2014

    Рассмотрение различных дистрибутивов операционной системы. Изучение протоколов обмена данными и форматов физического хранения данных. Разработка дистрибутива на основе операционной системы Linux для функционирования в составе сетевого хранилища StarNAS.

    курсовая работа , добавлен 05.11.2015

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

Операционная система хранится во внешней памяти обычно на жестком диске, реже - на гибком.

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

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

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

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

Начинается считывание в оперативную память 0-го сектора 0-й стороны диска, в котором находится загрузчик (ВООТ RECORD). Управление передается загрузчику, который проверяет наличие на системном диске модуля расширения IO.SYS и базового модуля MSDOS.SYS. В случае если они находятся в отведенном для них месте, то он загружает их в оперативную память, в противном случае будет выдано сообщение об их отсутствии. В этом случае рекомендуется произвести повторную загрузку. Сигнал повторной загрузки передает управление постоянному модулю BIOS, который снова переписывает с диска в оперативную память блок начальной загрузки и т.д.

ПРИМЕЧАНИЕ! Для повторной загрузки операционной системы в память нажать одновременно клавиши <Сtгl> <АLT> .

После успешно выполненной загрузки в оперативную память модуля расширения IO.SYS и базового модуля MSDOS.SYS загружается командный процессор СОММАND.СОМ и обрабатывается файл конфигурации CONFIG.SYS, который содержит команды подключения необходимых драйверов. Этот файл может отсутствовать, если пользователя устраивает базовый вариант операционной системы.

Затем выполняется обработка командного файла AUTOEXEC.ВАТ. С помощью этого файла производится настройка параметров операционной среды. К примеру, создать виртуальный диск, обеспечить смену режимов печати, загрузить вспомогательные программы и т.д.

Примечание! Файлы с расширением.ВАТ играют при работе в системной среде особую роль. Οʜᴎ содержат совокупность команд операционной системы или имен исполняемых файлов. После запуска файла с расширением.ВАТ всœе записанные в нем команды выполняются автоматически одна за другой.

Файл со стандартным именем AUTOEXEC.ВАТ отличается от других файлов типа.ВАТ тем, что выполнение помещенных в него команд начинается автоматически сразу после загрузки операционной системы.

В случае отсутствия файла AUTOEXEC.ВАТ будет предложено ввести дату и время:

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

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

10-25-1997 (месяц день год)

7:30:10.00р (часы: минуты: секунды)

После окончания работы файла AUTOEXEC.ВАТ, а также если данный файл не обнаружен, на экран дисплея будет выдано приглашение системного диска, к примеру С:\>. Это является свидетельством нормального завершения процесса загрузки, и можно приступить к работе, введя имя прикладной программы или команду операционной системы.

Примечание. Файлы CONFIG.SYS и AUTOEXEC.ВАТ могут отсутствовать. В этом случае параметры операционной среды будут установлены по умолчанию.

Запомните! На жестком диске крайне важно обеспечить постоянное хранение операционной системы. При включении компьютера всœе дисководы для гибких дисков должны быть открыты.

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

Тестирован программой

Загр. Нет Загр.

на гибком жестком нет

диске диске

Считыв. с гибкого диска Считыв. с жест. диска

IO.SYS, MSDOS.SYS в загрузочном секторе»

Загр. Нет Сообщение

правильна? «Нет системных файлов»

Command. Com «Нет системных файлов»

и файла CONFIG.SYS

При запуске приложения система открывает его исполняемый файл и определяет объем кода и данных приложения. Затем резервирует регион адресного пространства и помечает, что физическая память, связанная с этим регионом, - сам ЕХЕ-файл. Вместо выделения какого-то пространства из страничного файла система использует истинное содержимое или образ (image) ЕХЕ-файла как зарезервированный регион адресного пространства программы. Благодаря этому приложение загружается очень быстро, а размер страничного файла удается заметно уменьшить.

Образ исполняемого файла (т. е. ЕХЕ- или DLL-файл), размещенный на жестком диске и применяемый как физическая память для того или иного региона адресного пространства, называется проецируемым в память файлом (memory-mapped file). При загрузке ЕХЕ или DLL система автоматически резервирует регион адресного пространства и проецирует на него образ файла. Помимо этого, система позволяет (с помощью группы Win32~функ-ций) проецировать на регион адресного пространства еще и файлы данных. (О проецируемых в память файлах мы поговорим в главе 8.)

Когда ЕХЕ- или DLL-файл загружается с дискеты, Windows 95 и Windows NT выделяют для него всю память из страничного файла. Далее система копирует файл с дискеты в оперативную память и в страничный файл; в этом случае страничный файл служит фактически копией содержимого оперативной памяти. Так, в частности, загружаются программы, устанавливающие приложения на компьютер.

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

56. Переданная и зарезервированная память

Адресное пространство, выделяемое процессу в момент создания, практически все свободно (не зарезервировано). Поэтому, чтобы воспользоваться какой-нибудь его частью, нужно вы лить в нем определенные регионы, вызвав Win32-функцию VirtualAlloc (о ней см. главу Операция выделения региона называется резервированием (reserving).

При резервировании система обязательно выравнивает начало региона по четно адресу и учитывает так называемую гранулярность выделения ресурсов (allocation granularit Последняя величина в принципе зависит от типа процессора, но у рассматриваемых в кш (x86, MIPS, Alpha и PowerPC) она одинакова и составляет 64 Кб. Понятие «гранулярного выделения ресурсов» применяется в системе, чтобы упростить служебную запись, хранящую информацию о регионах, зарезервированных в адресном пространстве Вашего процесса, а также чтобы снизить степень фрагментации регионов в этом пространстве.

Если Вы попытаетесь зарезервировать регион в 10 Кб, система автоматически округлит заданное Вами значение до большей четной кратной величины. А это значит, что процессорах х86, MIPS и PowerPC будет выделен регион размером 12 Кб, а на процессе Alpha - 16 Кб. И последнее в этой связи. Когда зарезервированный регион адресного пространство становится не нужен, его следует вернуть в общие ресурсы системы. Эта операция - освобождение (releasing) региона - осуществляется вызовом функции VirtualFree .

Чтобы практически использовать зарезервированный регион адресного пространства, нужно выделить физическую память и отобразить ее на этот регион. Такая операция называете передачей физической памяти (committing physical storage). Чтобы передать физическую память зарезервированному региону, Вы обращаетесь все к той же функции VirtualAlloc . Передавая физическую память регионам, нет нужды отводить ее целому региону Можно, скажем, зарезервировать регион размером 64 Кб и передать физическую память

aтолько его второй и четвертой страницам. На рис. 5-3 представлен пример того, как может выглядеть адресное пространство процесса. Заметьте: структура адресного пространства зависит от архитектуры процессора. Так, на рис. 5-3 слева показано, что происходит с адрес­ным пространством на процессорах х86, MIPS и PowerPC (страницы по 4 Кб), а справа - на процессоре DEC Alpha (страницы по 8 Кб).

Когда физическая память, переданная зарезервированному региону, больше не нуж­на, ее освобождают. Эта операция - возврат физической памяти (decommitting physical storage) - выполняется вызовом функции VirtualFree .

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

Связывание - это связывание двух или более отдельных оттранслированных программ.

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

Функции загрузчика:

  1. распределение ОП;
  2. перемещение программы;
  3. связывание модулей;

Распределение ОП

Перемещение программы

Если внутри модулей имеются адресные константы, которые вычисляются от начала модуля, то адреса будут корректироваться относительно Базы.

Связывание модулей

Виды загрузчиков

Загрузчики типа «компиляция-выполнение»

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

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

  • задачу распределения ОП выполняет программист (с помощью директивы установки начального значения ОП);
  • задачу перемещения программы выполняет компилятор;
  • связывание модулей - решается программистом (call 600);
  • загрузка программ в ОП и запуск на выполнение.

Достоинства:

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

Недостатки:

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

Структура объектного файла абсолютного загрузчика

Информационная запись состоит из:

  1. признак;
  2. абсолютный адрес ОП, куда можно переносить информацию;
  3. количество информационных байтов в сообщении;
  4. байты информации;
  5. контрольные суммы;
  6. нумерация.

Управляющая запись состоит из:

  1. признак;
  2. адрес точки входа.

Работа простого абсолютного загрузчика:

  1. Проверить достаточно ли памяти для данной программы (просмотр первой записи).
  2. Последовательное считывание тела программы и помещение по указанному адресу.
  3. Передача управления по адресу для исполнения программы.

Настраивающий загрузчик

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

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

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

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

Такой загрузчик имеет ряд недостатков:

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

Непосредственно связывающий загрузчик

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

Ассемблер (транслятор) должен передать загрузчику следующую информацию с каждым сегментом программы и данных:

  1. длину сегмента;
  2. список всех символов сегмента, к которым возможно обращение из других сегментов, и их относительные адреса;
  3. список всех символов, не определенных в данном сегменте, к которым есть обращение в данном сегменте;
  4. информацию о расположении адресных констант в сегменте и описание того, каким образом должны изменяться их значения;
  5. машинные коды, полученные в результате трансляции, и приписанные относительные адреса.

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

Динамический загрузчик

В каждой из рассмотренных схем предполагалось, что все необходимые подпрограммы загружаются в память одновременно. Если общее количество памяти, требуемое для подпрограмм меньше доступной памяти машины, возникают затруднения. Эти трудности преодолеваются применением схемы динамической загрузки с последовательным использованием объединителя и загрузчика. Эта схема основывается на том, что обычно разные подпрограммы требуются в разное время и могут взаимно исключать себя. Используя явное определение того, какая подпрограмма содержит обращения к другим подпрограммам, можно задать, так называемую, структуру с перекрытием (оверлейную структуру), которая указывает взаимоисключающие подпрограммы.

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

Динамическое связывание

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

if (условие 1)
вызов подпрограммы 1
if (условие 2)
вызов подпрограммы 2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
if (условие m)
вызов подпрограммы m

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

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

Рис. 9.13. Алгоритм загрузки операционной системы с диска в оперативную память

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

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

Начинается считывание в оперативную память 0-го сектора 0-й стороны диска, в котором находится загрузчик (BOOT RECORD). Управление передается загрузчику, который проверяет наличие на системном диске модуля расширения IO.SYS и базового модуля MSDOS.SYS. Если они находятся в отведенном для них месте (см. рис. 9.10), то он загружает их в оперативную память, в противном случае будет выдано сообщение об их отсутствии. В этом случае рекомендуется произвести повторную загрузку. Сигнал повторной загрузки передает управление постоянному модулю BIOS, который снова переписывает с диска в оперативную память блок начальной загрузки и т.д.

Запомните! Для повторной загрузки операционной системы в память нажать одновременно клавиши .

После успешно выполненной загрузки в оперативную память модуля расширения IO.SYS и базового модуля MSDOS.SYS загружается командный процессор СОМMAND.COM и обрабатывается файл конфигурации CONFIG.SYS, который содержит команды подключения необходимых драйверов. Этот файл может отсутствовать, если вас устраивает базовый вариант операционной системы.

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

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

Файл со стандартным именем AUTOEXEC.BAT отличается от других файлов типа.ВАТ тем, что выполнение помещенных в него команд начинается автоматически сразу после загрузки операционной системы.

В случае отсутствия файла AUTOEXEC.BAT вам будет предложено ввести дату и время:

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

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

10-25-1997 (месяц день год)

7:30:10.00р (часы:минуты:секунды)

После окончания работы файла AUTOEXEC.BAT, а также если этот файл не обнаружен, на экран дисплея будет выдано приглашение системного диска, например C:\>. Это является свидетельством нормального завершения процесса загрузки, и вы можете приступить к работе, введя имя прикладной программы или команду операционной системы.