Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
June 20 2026 00:36:40   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 36517
Учимся удалять!... 33383
Примеры, синони... 24548
Декартовы коорд... 24092
Просмотр готовы... 23912
FAST (методика ... 22634
содержание - се... 22019
Просмотр готовы... 20961
Работа с инстру... 16607
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 9,955
новичок: Logyattella
Друзья сайта
Ramblers Top100
Рейтинг@Mail.ru

https://sofia-moskva.ru/
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ по Delphi
Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog
8.2 СИСТЕМНЫЕ ОПЕРАЦИИ, СВЯЗАННЫЕ СО ВРЕМЕНЕМ
Существует несколько системных функций, имеющих отношение к времени протекания процесса: stime, time, times и alarm. Первые две имеют дело с глобальным системным временем, последние две — с временем выполнения отдельных процессов.
Функция stime дает суперпользователю возможность заносить в глобальную переменную значение глобальной переменной. Выбирается время из этой переменной с помощью функции time:
time(tloc);
где tloc — указатель на переменную, принадлежащую процессу, в которую заносится возвращаемое функцией значение. Функция возвращает это значение и из самой себя, например, команде date, которая вызывает эту функцию, чтобы определить текущее время.
Функция times возвращает суммарное время выполнения процесса и всех его потомков, прекративших существование, в режимах ядра и задачи. Синтаксис вызова функции:
times(tbuffer)
struct tms *tbuffer;
где tms — имя структуры, в которую помещаются возвращаемые значения и которая описывается следующим образом:
struct tms {
/* time_t — имя структуры данных, в которой хранится время */
time_t tms_utime; /* время выполнения процесса в режиме задачи */
time_t tms_stime; /* время выполнения процесса в режиме ядра */
time_t tms_cutime; /* время выполнения потомков в режиме задачи */
time_t tms_cstime; /* время выполнения потомков в режиме ядра */
};
Функция times возвращает время, прошедшее "с некоторого произвольного момента в прошлом", как правило, с момента загрузки системы.
#include ‹sys/types.h›
#include ‹sys/times.h›
extern long times();
main() {
int i;
/* tms — имя структуры данных, состоящей из 4 элементов */
struct tms pb1, pb2;
long pt1, pt2;
pt1 = times(&pb1);
for (i = 0; i ‹ 10; i++) if (fork() == 0) child(i);
for (i = 0; i ‹ 10; i++) wait((int*) 0);
pt2 = times(&pb2);
printf("процесс-родитель: реальное время %u в режиме задачи %u в режиме ядра %u потомки: в режиме задачи %u в режиме ядра %u\n",
pt2 - pt1, pb2.tms_utime - pb1.tms_utime, pb2.tms_stime - pb1.tms_stime, pb2.tms_cutime - pb1.tms_cutime, pb2.tms_cstime - pb1.tms_cstime);
}
child(n)
int n;
{
int i;
struct tms cb1, cb2;
long t1, t2;
t1 = times(&cb1);
for (i = 0; i ‹ 10000; i++);
t2 = times(&cb2);
printf("потомок %d: реальное время %u в режиме задачи %u в режиме ядра %u\n",
n, t2 - t1, cb2.tms_utime - cb1.tms_utime, cb2.tms_stime - cb1.tms_stime);
exit();
}
Рисунок 8.7. Пример программы, использующей функцию times
На Рисунке 8.7 приведена программа, в которой процесс-родитель создает 10 потомков, каждый из которых 10000 раз выполняет пустой цикл. Процесс-родитель обращается к функции times перед созданием потомков и после их завершения, в свою очередь потомки вызывают эту функцию перед началом цикла и после его завершения. Кто-то по наивности может подумать, что время выполнения потомков процесса в режимах задачи и ядра равно сумме соответствующих слагаемых каждого потомка, а реальное время процесса-родителя является суммой реального времени его потомков. Однако, время выполнения потомков не включает в себя время, затраченное на исполнение системных функций fork и exit, кроме того оно может быть искажено за счет обработки прерываний и переключений контекста.
С помощью системной функции alarm пользовательские процессы могут инициировать посылку сигналов тревоги ("будильника") через кратные промежутки времени. Например, программа на Рисунке 8.8 каждую минуту проверяет время доступа к файлу и, если к файлу было произведено обращение, выводит соответствующее сообщение. Для этого в цикле, с помощью функции stat, устанавливается момент последнего обращения к файлу и, если оно имело место в течение последней минуты, выводится сообщение. Затем процесс с помощью функции signal делает распоряжение принимать сигналы тревоги, с помощью функции alarm задает интервал между сигналами в 60 секунд и с помощью функции pause приостанавливает свое выполнение до момента получения сигнала. Через 60 секунд сигнал поступает, ядро подготавливает стек задачи к вызову функции обработки сигнала wakeup, функция возвращает управление на оператор, следующий за вызовом функции pause, и процесс исполняет цикл вновь.
Все перечисленные функции работы с временем протекания процесса объединяет то, что они опираются на показания системных часов (таймера). Обрабатывая прерывания по таймеру, ядро обращается к различным таймерным счетчикам и инициирует соответствующее действие.
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Преодолевая ионосферу
7.1. Интерпретация...
Принцип 1. Как мож...
NavCompanion
Продукционные сис...
Необычные дуги
СПИСОК ЛИТЕРАТУРЫ
2.4.7.4 Построение...
Вспомогательные ...
Формальный синтаксис
Использование един...
10.5 ВЫВОДЫ
8.1. Управление тр...
Определение связи
3.1.1. Организация...
Первый параграф пр...
содержание - сетев...
Код Хемминга
Глава 4. Краткий ...
Глава 12. Fortuna...
Цена до 500 долларов
Сканируем
Размер и форма блоков
2.2.2. Понимание п...
Идея вторая: Измер...
Разъем данных
6.5.2 Выделение об...
Одометр
9.1.2.2 Выгрузка с...
Управление програм...
4.6 НАЗНАЧЕНИЕ ИНД...
11.4 ГНЕЗДА
Отзывы о книге Сет...
6.4.5 Копирование ...
2.4.6 Код Хемминга...
Глава 1. Что это з...
Cканирование вниз
5.12 КАНАЛЫ
7.2.1 Обработка си...
3.1. Внутренняя с...
Мини-чат
Вам необходимо залогиниться.

Нет присланных сообщений.
Copyright © 2009