My-library.info
Все категории

Архитектура операционной системы UNIX (ЛП) - Бах Морис Дж.

На электронном книжном портале my-library.info можно читать бесплатно книги онлайн без регистрации, в том числе Архитектура операционной системы UNIX (ЛП) - Бах Морис Дж.. Жанр: Интернет год 2004. В онлайн доступе вы получите полную версию книги с кратким содержанием для ознакомления, сможете читать аннотацию к книге (предисловие), увидеть рецензии тех, кто произведение уже прочитал и их экспертное мнение о прочитанном.
Кроме того, в библиотеке онлайн my-library.info вы найдете много новинок, которые заслуживают вашего внимания.

Название:
Архитектура операционной системы UNIX (ЛП)
Дата добавления:
17 сентябрь 2020
Количество просмотров:
194
Читать онлайн
Архитектура операционной системы UNIX (ЛП) - Бах Морис Дж.

Архитектура операционной системы UNIX (ЛП) - Бах Морис Дж. краткое содержание

Архитектура операционной системы UNIX (ЛП) - Бах Морис Дж. - описание и краткое содержание, автор Бах Морис Дж., читайте бесплатно онлайн на сайте электронной библиотеки My-Library.Info

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

Архитектура операционной системы UNIX (ЛП) читать онлайн бесплатно

Архитектура операционной системы UNIX (ЛП) - читать книгу онлайн бесплатно, автор Бах Морис Дж.

11.1 ТРАССИРОВКА ПРОЦЕССОВ

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

if ((pid = fork()) == 0) {

 /* потомок — трассируемый процесс */

 ptrace(0, 0, 0, 0);

 exec("имя трассируемого процесса");

}

/* продолжение выполнения процесса-отладчика */

for (;;) {

 wait((int *) 0);

 read(входная информация для трассировки команд);

 ptrace(cmd, pid, …);

 if (условие завершения трассировки) break;

}

Рисунок 11.1. Структура процесса отладки

Псевдопрограмма, представленная на Рисунке 11.1, имеет типичную структуру отладочной программы. Отладчик порождает новый процесс, запускающий системную функцию ptrace, в результате чего в соответствующей процессу-потомку записи таблицы процессов ядро устанавливает бит трассировки. Процесс-потомок предназначен для запуска (exec) трассируемой программы. Например, если пользователь ведет отладку программы a.out, процесс-потомок запускает файл с тем же именем. Ядро отрабатывает функцию exec обычным порядком, но в финале замечает, что бит трассировки установлен, и посылает процессу-потомку сигнал прерывания. На выходе из функции exec, как и на выходе из любой другой функции, ядро проверяет наличие сигналов, обнаруживает только что посланный сигнал прерывания и исполняет программу трассировки процесса как особый случай обработки сигналов. Заметив установку бита трассировки, процесс-потомок выводит своего родителя из состояния приостанова, в котором последний находится вследствие исполнения функции wait, сам переходит в состояние трассировки, подобное состоянию приостанова (но не показанное на диаграмме состояний процесса, см. Рисунок 6.1), и выполняет переключение контекста.

Тем временем в обычной ситуации процесс-родитель (отладчик) переходит на пользовательский уровень, ожидая получения известия от трассируемого процесса. Когда соответствующее известие процессом-родителем будет получено, он выйдет из состояния ожидания (wait), прочитает (read) введенные пользователем команды и превратит их в серию обращений к функции ptrace, управляющих трассировкой процесса-потомка. Синтаксис вызова системной функции ptrace:

ptrace(cmd, pid, addr, data);

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

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

int data[32];

main() {

 int i;

 for (i = 0; i ‹ 32; i++) printf("data[%d] = %dn", i, data[i]);

 printf("ptrace data addr 0x%xn", data);

}

Рисунок 11.2. Программа trace (трассируемый процесс)

#define TR_SETUP 0

#define TR_WRITE 5

#define TR_RESUME 7

int addr;

main(argc, argv)

int argc;

char *argv[];

{

 int i, pid;

 sscanf(argv[1], "%x", &addr);

 if ((pid = fork() == 0) {

  ptrace(TR_SETUP, 0, 0, 0);

  execl("trace", "trace", 0);

  exit();

 }

 for (i = 0; i ‹ 32, i++) {

  wait((int *) 0);

  /* записать значение i в пространство процесса с идентификатором pid по адресу, содержащемуся в переменной addr */

  if (ptrace(TR_WRITE, pid, addr, i) == -1) exit();

  addr += sizeof(int);

 }

 /* трассируемый процесс возобновляет выполнение */

 ptrace(TR_RESUME, pid, 1, 0);

}

Рисунок 11.3. Программа debug (трассирующий процесс)

Рассмотрим две программы, приведенные на Рисунках 11.2 и 11.3 и именуемые trace и debug, соответственно. При запуске программы trace с терминала массив data будет содержать нулевые значения; процесс выводит адрес массива и завершает работу. При запуске программы debug с передачей ей в качестве параметра значения, выведенного программой trace, происходит следующее: программа запоминает значение параметра в переменной addr, создает новый процесс, с помощью функции ptrace подготавливающий себя к трассировке, и запускает программу trace. На выходе из функции exec ядро посылает процессу-потомку (назовем его тоже trace) сигнал SIGTRAP (сигнал прерывания), процесс trace переходит в состояние трассировки, ожидая поступления команды от программы debug. Если процесс, реализующий программу debug, находился в состоянии приостанова, связанного с выполнением функции wait, он "пробуждается", обнаруживает наличие порожденного трассируемого процесса и выходит из функции wait. Затем процесс debug вызывает функцию ptrace, записывает значение переменной цикла i в пространство данных процесса trace по адресу, содержащемуся в переменной addr, и увеличивает значение переменной addr; в программе trace переменная addr хранит адрес точки входа в массив data. Последнее обращение процесса debug к функции ptrace вызывает запуск программы trace, и в этот момент массив data содержит значения от 0 до 31. Отладчики, подобные sdb, имеют доступ к таблице идентификаторов трассируемого процесса, из которой они получают информацию об адресах данных, используемых в качестве параметров функции ptrace.


Бах Морис Дж. читать все книги автора по порядку

Бах Морис Дж. - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки My-Library.Info.


Архитектура операционной системы UNIX (ЛП) отзывы

Отзывы читателей о книге Архитектура операционной системы UNIX (ЛП), автор: Бах Морис Дж.. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.