Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции кошкин.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
667.65 Кб
Скачать

(2) Синхронизация. Реализация взаимного исключения. Семафоры.

Процедура синхронизации предусматривает активизацию только одного процесса. Поэтому наиболее простой подход к реализации таких процессов – это метод взаимного исключения. В основу механизмов синхронизации применение тех методов, которые были доступны, использовались на более низком уровне. Основными считаются два подхода: 1) маскирование прерываний. 2) взаимное исключение одновременного доступа к ячейке памяти. Чтобы реализовать эти процессы вводят понятие активного ожидания. Эта процедура как бы имитирует блокировку, осуществляя повторяющуюся проверку состояния (признака). Второе средство взаимного исключения – семафоры. Семафор состоит из счетчика – счетчик целочисленный (1;2; и т.д.). Помимо счетчика организуется очередь ожидания. При создании семафора начальное состояние счетчика не 0 – очередь пустая. Семафор применяют как индикатор при реализации некоторых условий. Если в семафоре состояние <0, процессы помещаются в очередь. Если 0 или больше, то состояние активно и выполняются процессы. Поскольку счетчик программный, то одна операция разрешает работу процесса, в счетчике значение уменьшается. Другая операция увеличивает значение счетчика, в результате он возвращается в начальное состояние. В реальных программах может быть несколько семафоров, которые обслуживают свои подпрограммы или свои процедуры. Механизм семафоров часто применяют при работе с ВУ. Физически процедуры заканчиваются прерываниями. Логически выполняется синхронизация. Т.е. к этому моменту готовятся следующие процедуры на выполнение. Если возникает проблема анализа какого-либо состояния чаще всего используются «сторожевые часы». Когда процедура начинает опрашивать состояние, запускается таймер и выход возможен: 1) по активному состоянию. 2) по значению таймера. Если опрашиваемое состояние за это время не стало активным.

Загрузчики.

  1. Загрузчик, абсолютный загрузчик

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

Необходимость загрузки управляющих программ существует у каждой вычислительной машины. В большинстве современных вычислителей загрузчик вступает в работу после нажатия кнопки «питание» или по сигналу триггера «Шмидта» отслеживающего уровень питающего напряжения. Чтобы запустить программу необходимо сформулировать начальный адрес. Эти два действия (сигнал и «питание») определяют начальный адрес программы загрузчика. Загрузчик обеспечивает чтение памяти команд, перенос операционной системы в ОЗУ. Ранее загрузчик вводился с клавишного регистрового пульта управления. Если загрузчик достаточно большой применяли промежуточное решение. Через клавишный регистровый пульт обращались к небольшому ПЗУ, которое обеспечивало управляющие команды для периферийных устройств (ПУ). Загрузчик, по сути, обеспечивает активизацию ВУ, проверку его работоспособности и запись конкретного файла в ОЗУ. В современных ЦВМ не имеющих клавиатуры рабочая программа начинается выполняться сразу после загрузки ОС. Существует так называемый раскручивающий загрузчик. Такие загрузчики находятся в начале любой объектной программы. Если ОС не загружена – машина пустая. Сами ОС могут иметь раскручивающий загрузчик, который и позволяет загрузить ОС.

Абсолютный загрузчик – простейшая программа обеспечивающая запись объектной программы в ОЗУ. Процедура перенесения содержимого выполняется за один просмотр. Первоначально, чтобы убедится, что программа переданная для загрузки корректна, проверяется запись заголовка этой программы. Затем последовательно читается вся программа и объектный код помещается в ОЗУ. Обязательно абсолютный загрузчик содержит адрес, с которого программа размещается в памяти. Как только загружается конец программы, загрузчик передает управление по адресу, заданному в качестве начала выполнения программы, т.е. извлекает из загруженной программы начальный адрес и пересылает его в адресный регистр. В процессе чтения иногда приходится преобразовывать символы, поскольку каждый символ – это один байт информации, тогда как один байт кода команды включает в себя два символа. Подобных проблем не возникает если коды изначально представляются в двоичной форме. Абсолютный загрузчик прост и эффективен, но не удобен: при загрузке необходимо определить фактический адрес начала загрузки. Если вычислитель не сложный, этот адрес можно назначить исходя из адресного пространства ОЗУ. Но в многопрограммных режимах вводиться несколько программ и если применять абсолютный загрузчик, то эти программы следует распределять по всему адресному пространству. Оператор эффективно это сделать не сможет. Отсюда логичнее использовать программное размещение. Кроме того абсолютный загрузчик не удобен при работе с библиотеками. Стандарт программного адреса в библиотеке фиксирован, и велика вероятность того, что оператор «попадет» своей программной на этот адрес.