Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование в Unix-системах на Си Выпуск 4


Служба Рассылок Subscribe.Ru

ПРОГРАММИРОВАНИЕ В UNIX-СИТЕМАХ

Выпуск No. 4 от 5 января 2002 г.


1.9 Время в UNIX

Исторически сложилось так, что UNIX обслуживает два различных временных значения.

  1. Календарное время. Это значение подсчитывает количество секунд, прошедших от начала сотворения мира (1 января 1970 года). Его называют Универсальным Координатным Временем (Coordinated Universal Time, UTC). Еще его называ-ют временем по Гринвичу. Для него в UNIX определен примитивный тип дан-ных time_t, который хранит количество секунд прошедшее с 1 января 1970 года.
  2. Время процесса. Оно также называется временем CPU и измеряет ресурсы цен-трального процессора, используемые каким-либо процессом. Время процесса измеряется в тиках, которое исторически соответствует 50,60 или 100 тикам в секунду. Для него определен примитивный тип данных clock_t. В дальнейшем стандарт POSIX определил константу CLK_TCK для указания количества ти-ков в секунду.

UNIX работает с тремя значениями времени для процесса:

  • часовое время
  • пользовательское время CPU
  • системное время CPU

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

Пользовательское время CPU - это время процессора, которое тратиться на выполнение инструкций пользователя.

Системное время - это время CPU, затраченное на выполнение кода ядра. Сумма сис-темного и пользовательского времен называется просто - время CPU.

1.10 Системные вызовы и библиотека функций

Все операционные системы предоставляют служебные точки через которые программы запрашивают какие-либо услуги от ядра. Все варианты UNIX систем предоставляют вполне оп-ределенное, ограниченное количество точек входа напрямую к ядру, называемые системные вызовы.

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

Пользовательский процесс вызывает такую функцию, используя стандартный механизм вызова функций в Си. Затем эта функция активизирует соответствующую службу ядра, исполь-зуя ту технологию, которая требуется для данной системы. Например функция может закинуть один или более Си аргументов в основные регистры, а затем выполнять машинные инструкции, которые сгенерируют программное прерывание в ядро. Для наших целей, мы можем рассмат-ривать системный вызов как вызов обычной Си функции.

С точки зрения разработчика, разница между системным вызовом и библиотечной функ-цией фундаментальна. Но с точки зрения пользователя она не существенна. И системный вызов и библиотечные функции действуют как обычные функции в Си. Обе категории предоставляют некий сервис прикладным программам. Однако если нас не устраивает библиотечная функция мы можем ее заменить своей, в тоже время системный вызов не может быть изменен.

Рассмотрим, например, функцию выделения памяти malloc. Существует довольно много способов выполнить выделение памяти. Не существует единственно оптимального механизма для абсолютно всех программ. Системный вызов sbrk в UNIX, который управляет распределе-нием памяти, не является основным целевым менеджером памяти. Он просто увеличивает или уменьшает адресное пространство процесса, указанием количества байтов. А то как уже этим пространством управлять - это дело самого процесса. Функция распределения памяти, malloc, реализует один определенный тип распределения. Если нам не нравиться такая операция, мы можем определить свою собственную функцию, которая, вероятно, будет использовать систем-ный вызов sbrk. Существует большое количество прикладных пакетов, которые реализуют свой собственный алгоритм распределения памяти, используя системный вызов sbrk.

Вот примерная схема взаимосвязи между приложением, функцией malloc и системным вызовом sbrk.

Здесь мы имеем четкий круг обязанностей - системный вызов в ядре выделяет дополнительный кусок пространства процессу. Библиотечная функция malloc управляет этим пространством.

Другой пример, иллюстрирующий разницу между системным вызовом и библиотекой функций это интерфейс предоставляемый UNIX'ом для определения текущего времени и даты. Некоторые операционные системы предоставляют один системный вызов для получения вре-мени, а другой для получения даты. Любая специфическая обработка, такая как преобразование в или из одного формата представления времени в другой, отдельно выполняется ядром, либо требует вмешательство человека. UNIX, с другой стороны, предоставляет единый системный вызов который возвращает количество секунд с начала сотворения мира, 1 января 1970 года, Средне Галактическое Время. Любая интерпретация этого значения, такое как конвертирование в удобно-читаемый формат времени и даты, используя локальную временную зону, остается пользовательскому процессу. Си библиотека предоставляет ряд функций для такой обработки. Приложение может вызвать либо системный вызов, либо функцию библиотеки.


Ведущий рассылки  Астероид

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное