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

Министерство образования и науки Российской Федерации

Казанский государственный технический университет

имени А.Н. Туполева

Лабораторная работа №1

“ Работа с процессами”

по дисциплине “Операционные системы”

Выполнил: студенты группы 4303

Саттаров Р.Р.

Жариков В.

Проверил: Р.Ф. Миннибаев

КАЗАНЬ 2010

Порядок выполнения работы

  1. Создать консольное приложение.

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

  3. Изменить значение переменной окружения. Вывести переменную окружения на консоль.

  4. Изменить текущий каталог.

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

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

  7. Передать дочернему процессу через командную строку определенные параметры (массив из пяти целых чисел).

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

  9. Изменить родительский процесс так, чтобы перед дочерним процессом, из него запускалось какое-нибудь стандартное оконное приложение, например Notepad.

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

  11. Сделать так, чтобы дескриптор порожденного оконного приложения (Notepad) наследовалась дочерним процессом Child.

  12. Дескриптор запущенного стандартного приложения (Notepad) – процесса передать дочернему процессу Child (первый способ – через переменную окружения, второй – через командную строку, подсказка – HANDLE – это длинное целое без знака, для перевода из числа в строку используйте wsprintf, для обратного перевода atol).

  13. Дочерний процесс, получая дескриптор приложения закрывает оконное приложение (Notepad). И выводит в консоль сообщение: “Процесс уничтожен!”

Контрольные вопросы

  1. Что такое процесс?

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

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

  • адресного пространства, в котором содержится код и данные всех EXE- и DLL модулей. Именно в нем находятся области памяти, динамически распределяемой для стеков потоков и других нужд.

  1. Как идентифицируется процесс в системе?

Созданному объекту ядра «процесс» присваивается уникальный идентификатор; ни у каких других объектов этого типа в системе не может быть одинаковых идентификаторов. Это же касается и объектов ядра «поток». Причем идентификаторы процесса и потока тоже разные, и их значения никогда не бывают нулевыми. Завершая свою работу, CreateProcess заносит значения идентификаторов в элементы dwProcessId и dwThreadId структуры PROCESS_INFORMATION. Эти идентификаторы просто облегчают определение процессов и потоков в системе; их используют, как правило, лишь cпециализированные утилиты вроде Task Manager.

Еще один чрезвычайно важный момент: система способна повторно использовать идентификаторы процессов и потоков. Например, при создании процесса система формирует объект «процесс», присваивая ему идентификатор со значением, допустим, 122. Создавая новый объект «процесс», система уже не присвоит ему данный идентификатор. Но после выгрузки из памяти первого объекта следующему cоздаваемому объекту «процесс» может быть присвоен тот же идентификатор — 122.

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