DAY13 (Старые версии Машбука или нечто подобное)

2019-05-08СтудИзба

Описание файла

Файл "DAY13" внутри архива находится в следующих папках: Старые версии Машбука или нечто подобное, Лекции (Машечкин 1998). Документ из архива "Старые версии Машбука или нечто подобное", который расположен в категории "". Всё это находится в предмете "операционные системы" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "DAY13"

Текст из документа "DAY13"

4

Лекция №13

Лекция 13

На прошлой лекции мы закончили рассмотрение двух способов взаимодействия процессов: с помощью сигналов и именованных каналов. Мы выяснили, что канал представляет собой некую сущность, с которой ассоциированы два ФД. Один - на чтение, другой - на запись. Как мы уже знаем файловый дескриптор - номер строки в таблице, которая определена в каждом процессе. Атрибуты файла записываются в найденную свободную строку этой таблицы. Схема создания канала тривиальна: мы обращаемся к функции pipe, которая «занимает» два файловых дескриптора. Механизм каналов является простейшим средством синхронизации (приостановка в случае чтения из пустого буфера и записи в полный буфер). Мы выяснили, что в принципе эти ожидания необязательны, их наличие зависит от стандартных установок, определенных в системе.

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

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

Проблема отладки программ. Способы реализации.

Отладка программы, что это? Еще на первом курсе вы узнали, что тестирование программы - это проверка программы на работоспособность или неработоспособность на фиксированных наборах данных. Цель тестирования - сделать утверждение, работает программа на фиксированных наборах данных или нет. Многие студенты на экзамене отождествляют понятия отладки и тестирования. На самом деле это заблуждение, вызванное незнанием. Отладка - это поиск и локализация места ошибки в программе. Средства отладки разнообразны. Но большинство средств отладки основывается на следующих возможностях:

  • У нас есть отлаживаемый процесс.

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

  • Мы (мы - это программист) должны иметь возможность просмотра и модификации данных отлаживаемого процесса. Под данными в данном случае подразумеваются те данные, с которыми оперирует процесс и код программы. Причем хорошо было бы иметь возможность устанавливать контрольные точки как по символьным адресам (хочу остановиться у этого символьного оператора), так и по адресам виртуальным (хочу остановиться по адресу 01753795). Сделаю два небольших замечания. Во-первых, контрольная точка может быть как одно- так и многократной. Если точка однократная, то по приходе на нее эта контрольная точка снимается. В случае многократной контрольной точки количество ее срабатываний может быть задано константой. Во-вторых, при останове процесса после прихода на контрольную точку мы должны иметь возможность просмотра и модификации данных, причем как по заданию адреса (хочу изменить слово по адресу 612436124), так и по символьной информации (хочу переменную z положить равной 777.7), также возникает необходимость иметь доступ к значениям регистров программы.

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

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

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

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

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

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

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

Перейдем теперь к реализации отладочных средств в ОС UNIX. Рассмотрим функцию ptrace:

ptrace(int op, int pid, int addr, int data);

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

  • op=0 - подтверждение данного процесса, что он разрешает себя трассировать. Это код, который обеспечивает разрешение на трассировку данного процесса-сына процессом-отцом. Заметим, что все остальные значения параметра op могут встретиться только при вызове функции ptrace процессом-отцом.

  • op=1 или op=2 - ptrace возвращает значение слова, адрес которого задан параметром addr из адресного пространства процесса с идентификатором pid. Если есть самостоятельные адресные пространства сегмента кода и сегмента данных, то при обращении к ptrace с параметром op=1 функция прочитает слово из сегмента кода, соответственно при op=2 - из сегмента данных.

  • op=4 и op=5 - параметры, которые вызывают запись данных, размещенных в параметре data по адресу addr. В случае разделенного адресного пространства при op=4 ptrace запишет слово в сегмент кода, при op=5, соответственно в сегмент данных. В случае ошибки, ptrace возвращает -1 (пояснения в errno).

  • op=3, op=6. При op=3 происходит чтение данных из контекста отлаживаемого процесса. При op=6 - запись данных в контекст отлаживаемого процесса. Суть этого чтения/записи заключается в том, что в системе определена некоторая структура, которая является доступной для чтения и записи с помощью ptrace. Причем какие-то поля доступны только на чтение, другие на чтение и запись. В этих полях обычно находятся копии регистровой памяти, режимы настройки процессора и прочие характеристики отлаживаемого процесса.

  • op=7 - происходит продолжение выполнения приостановленного процесса. Пока отлаживаемый процесс остановлен, весь окружающий мир действует, возможны приходы сигналов. Что делать с этими сигналами? Здесь как раз и используется ptrace при op=7. Если data=0, то при продолжении выполнения процесса все пришедшие к нему за время останова сигналы будут проигнорированы. Если data>0, то после продолжения работы процесса произойдет реакция на событие, связанное с приходом сигнала №data, а все остальные сигналы, пришедшие за время простоя процесса будут проигнорированы. Т. е. произойдет моделирование прихода сигнала №data. Кроме того, если addr=1, то процесс продолжит свое выполнение с того места, на котором он был приостановлен. Если addr>1, то осуществится переход по адресу addr.

  • op=8 - завершение трассируемого процесса.

  • op=9 - установка бита трассировки. Это обеспечивает пошаговое выполнение машинных команд. После выполнения каждой машинной команды в процессе возникает сигнал SIG-TRAP и процесс приостанавливается.

Функция ptrace описана нами для некоторой обобщенной системы в реальных версия ОС UNIX ptrace имеет больше параметров и более сложную схему работы.

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

Кроме того, в отладчике должна иметься таблица, которая содержит информацию о контрольных точках:

Таблица контрольных точек

№ контрольной точки

Адрес контрольной

Точки

Системная

Информация

Кратность

(число срабатываний)

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

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

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

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

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

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

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

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
428
Средний доход
с одного платного файла
Обучение Подробнее