- •Лабораторна робота №1
- •Основні положення. Поняття операційної системи.
- •Завдання
- •Лабораторна робота № 2.
- •Основні положення
- •1. Поняття файлу
- •2. Поняття файлової системи
- •3. Типи файлів
- •4. Імена файлів
- •5. Організація інформації у файловій системі
- •6. Загальні відомості про файлові операції
- •Приклад виконання завдання.
- •Завдання
- •Контрольні питання
- •Лабораторна робота № 3
- •Основні положення.
- •1. Каталоги
- •2. Операції над каталогами
- •3. Робота з каталогами в posix
- •Приклад виконання завдання
- •Завдання
- •Контрольні питання
- •Лабораторна робота № 4
- •Основні положення.
- •Створення процесу.
- •Ієрархія процесів.
- •Реалізація процесів.
- •4. Системні виклики для роботи з процесами
- •Приклад виконання завдання
- •Завдання
- •Контрольні питання
- •Лабораторна робота № 5
- •Основні положення
- •1. Застосування каналів.
- •Приклади виконання завдань
- •Завдання
- •Контрольні питання
- •Лабораторна робота № 6
- •Основні положення.
- •1. Черга повідомлень.
- •2. Створення черг повідомлень.
- •Прикдад виконання завдання
- •Завдання
- •Контрольні питання
Приклад виконання завдання
У розглянутому прикладі після породження процесу - нащадка батьківський процес виводить на термінал ідентифікатор породженого процесу, затримується на 5 секунд і викликає функцію для опитування стану процесу - нащадка. Породжений процес виводить повідомлення, що містить значення змінної x. Слід звернути увагу на те, що значення цієї змінної співпадають і у батька, і у нащадка.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main()
{
int x, pid;
x=2;
printf("Single process, x=%d\n",x);
pid=fork();
if(pid == 0)
printf("New, x=%d\n",x); // Нащадок
else if(pid > 0){ // Батько
printf("Old, pid=%d, x=%d\n",pid,x);
sleep(5);
wait(pid);
}
else {
perror("Fork error ");
return -1;
}
return 0;
}
Завдання
Розробити програму, що виконує " розгалудження" за допомогою системного виклику fork(). Вивести на екран ідентифікатори PID і PPID батьківського і дочірнього процесів. Використати функцію перенаправлення стандартного виведення у файл.
Варіанти завдань
1. Призупинити на 1 секунду батьківський процес. У дочірньому процесі з допомогою системного виклику system() виконати стандартну команду ps, перенаправивши виведення у файл номер 1. Услід за цим завершити дочірній процес. У батьківському процесі викликати ps і перенаправити у файл номер Звільнити ячейку таблиці процесів породженого процесу.
2. Призупинити на 1 секунду батьківський процес. Виконати в дочірньому процесі один з системних викликів exec(), передавши йому в якості параметра стандартну програму ps. Аналогічно виконати виклик ps у батьківському процесі. Результати роботи команд ps в обох процесах перенаправити в один і той же файл.
3. Визначити в програмі глобальну змінну var зі значенням, рівним 1. Перевизначити стандартне виведення і батьківського, і дочірнього процесів в один і той же файл. До виконання розгалудження збільшити на 1 змінну var, причому вивести її значення, як до збільшення, так і після. У батьківському процесі збільшити значення змінної на 3, а в дочірньому на 5. Вивести значення змінної до збільшення і після нього усередині кожного з процесів. Результат пояснити.
4. Призупинити на 1 секунду дочірній процес. У дочірньому процесі за допомогою системного виклику system() виконати стандартну команду ps, перенаправивши виведення у файл номер 1. Услід за цим завершити дочірній процес. У батьківському процесі викликати ps і перенаправити у файл номер Звільнити елемент таблиці процесів породженого процесу.
5. Призупинити на 1 секунду дочірній процес. Виконати в дочірньому процесі один з системних викликів exec(), передавши йому в якості параметра стандартну програму ps. Аналогічно виконати виклик ps у батьківському процесі. Результати роботи команд ps в обох процесах перенаправити в один і той же файл. Звільнити елемент таблиці процесів породженого процесу.
6. Програма породжує через кожні 2 секунди 5 нових процесів. Кожен з цих процесів виконується заданий час і зупиняється, повідомляючи про це батька. Програма-батько виводить на екран усі повідомлення про зміни у процесах.
7. Програма запускає за допомогою функції exec() новий процес. Завершити процес-нащадок раніше формування батьком виклику. Повторити запуск програми за умови, що процес-нащадок завершується після формування виклику wait(). Проаналізувати результати.