Читайте также:
|
|
3.1. Ознакомиться с синтаксом и особенностями работы перечисленных в предыдущем пункте системных вызовов API процессов.
3.2. Откомпилировать и выполнить несколько раз подряд программу, текст которой приведен ниже. Привести и объяснить в отчете получаемые на экране результаты.
Текст программы "forktest.c":
#include <stdio.h>
#include <unistd.h>
main()
{
int i;
if(fork())
for (i=0;i<10;i++) printf("I am a parent…\n");
else
for (i=0;i<10;i++) printf("I am a child!\n");
}
3.3. Откомпилировать и выполнить вторую программу, результат выполнения с комментариями также поместить в отчет.
Текст программы "addrspace.c":
#include <stdio.h>
static int data1;
static unsigned long code, data, extend, stack;
main(int argc, char *argv[], char *envp[])
{
int data2;
printf("Addr of first env. var.: %08x\n", envp[0]);
printf("Addr of printf: %08x\n",printf);
printf("Addr of main: %08x\n",main);
printf("Addr of data1: %08x\n",&data1);
printf("Addr of data2: %08x\n",&data2);
printf("------------------------------------------\n");
asm ("movl %cs, code");
asm ("movl %ds, data");
asm ("movl %es, extend");
asm ("movl %ss, stack");
printf(" CS: %04x\n",code);
printf(" DS: %04x\n",data);
printf(" ES: %04x\n",extend);
printf(" SS: %04x\n",stack);
}
3.4. Написать на языке Си функцию procinfo(), выводящую на экран в компактной форме следующую информацию о текущем процессе:
- идентификаторы: PID, PPID, UID, GID, SID, PGID
- управляющий терминал
- кол-во открытых файлов
- текущий каталог
- строку запуска программы
- текущий приоритет
- маску создания файлов
- карту виртуальной памяти процесса следующего вида:
Сегмент | Код | Данные | Стек | Среда |
Начало | Xxxxx | Xxxxx | Xxxxx | Xxxxx |
Конец | Xxxxx | Xxxxx | Xxxxx | Xxxxx |
3.5. Откомпилировать функцию procinfo() в одноименную выполняемую программу.
3.6. Написать программу, которая работает по следующему сценарию:
1) вызвать функцию procinfo()
2) породить новый процесс и в нем запустить программу procinfo
3) ждать завершения процесса-потомка с помощью вызова wait()
4) породить для запуска procinfo() новый поток выполнения
5) ждать завершения порожденного потока
6) завершить работу.
Содержание отчета
4.1. Синтаксис и краткое описание изученных системных вызовов.
4.2. Исходные тексты и результаты выполнения программ п. 3.2 - 3.6 с комментариями.
5. Конторльные вопросы
Лабораторная работа N8
Интерфейс прикладного программирования ОС UNIX:
Сигналы и управление процессами
Цель работы
Изучение программного интерфейса сигналов а также механизмов посылки, получения и обработки сигналов процессами.
Дата добавления: 2014-12-19; просмотров: 106 | Поможем написать вашу работу | Нарушение авторских прав |