Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Поля, связанные с атрибутами процесса



К категории атрибутов процесса мы относим характеристики процесса, связанные с со­стоянием и идентификацией процесса. Рассматривая значения этих полей в произвольное время, хакер ядра может узнать текущее состояние процесса. Рис. 3.2 иллюстрирует поля task_struct, которые связаны с атрибутами процесса.

State

Поле state отслеживает состояние процесса, в котором процесс находится во время своего жизненного цикла. Может хранить значения TASK__RUNNING, TASK_INTERRUP-TIBLE, TASK..UNINTERRUPTIBLE, TASK_ZOMBIE, TASK_STOPPED и TASK_DEAD (см. более детальное описание в разделе «Жизненный цикл процесса»).

Pid

В Linux каждый процесс имеет уникальный идентификатор процесса (process identifi­er, pid. Его тип можно привести к целочисленному, а максимальное знаение по умолча­нию равно 32768 (наибольшее значение для short int).

Flags

Флаги определяют специальные атрибуты, принадлежащие процессу. Флаги процессов определены в файле include/linux/sched.h и включают флаги, перечисленные в таблице 3.1. Значения флагов позволят хакеру получить больше информации о работе процесса.


Описатель процесса



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

current > forrr   linux_binfmt linux_binfmt   linux_binfmt    
lats------------- ►                
  next |- next next  
task.struct            
       
             
state    
flags  
pid  
binfmt      
       
exit.code    
exjt.signal  
pdeath_signal  
   
                   

Рис. 3.2. Поля, связанные с атрибутами процесса Таблица 3.1. Избранные значения флагов task_struct


Имя флага


Когда устанавливается


 


PF_STARTING

PF_EXITING

PF_DEAD

PF FORKNOEXEC


При создании процесса

Во время вызова do_exit ()

Во время вызова exit__notif у () при выходе из процесса. В этой точке процесс находится в состоянии TASK__ZOMBIE или TASK_DEAD

Родитель устанавливает этот флаг перед ветвлением


Bitfmt

Linux поддерживает несколько исполнимых форматов. Исполнимый формат определяет, как структура кода вашей программы будет загружена в память. Рис. 3.2 иллюстрирует связь между task_struct и структурой linux_binfmt, которая содержит всю ин­формацию, относящуюся к определенному бинарному формату (см. гл. 9).



Глава 3 • Процессы: принципиальная модель выполнения


3.2.1.5 exit_code и exit_signal

Поля exit_code и exit_signal хранят код выхода процесса и сигнал завершения (если он был использован). Таким образом выходное значение дочернего процесса пере­дается его родителю.

Pdeath.signal

pdeath__signal - это сигнал, посылаемый при смерти родителя.

Comm

Чаще всего процесс создается с помощью вызова исполнимого файла из командной стро­ки. Поле comm хранит имя исполнимого файла, вызванного из командной строки.

Ptrace

ptrace устанавливается системным вызовом ptrace (), вызываемым при измерении производительности процесса. Обычно флаги ptrace () определяются в файле in­clude /linux/ptrace.h.

3.2.2 Поля, связанные с планировщиком

Операции с процессами выполняются так, как будто они выполняются на собственном виртуальном процессоре. Тем не менее на самом деле он делит процессор с другими про­цессами. Чтобы поддерживать переключение между выполняемыми процессами, каждый процесс тесно взаимодействует с планировщиком (более подробно это описано в гл. 7).

Тем не менее для того чтобы разобраться с назначением некоторых полей, вам необ­ходимо понять несколько базовых концепций планировщика. Когда для запуска готово более одного процесса, планировщик решает, какой из них запустить первым и на какое время. Планировщик достигает равномерной производительности и эффективности, вы­деляя каждому процессу временной срез (timeslice) и приоритет (priority). Временной срез определяет длительность времени, отводимую процессу до того, как будет выполне­но переключение на другой процесс. Приоритет процесса - это значение, определяющее относительный порядок, в котором процессу будет позволено выполняться с учетом ожи­дающих процессов, - чем выше приоритет процесса, тем быстрее планировщик его запус­тит. Поля, показанные на рис. 3.3, отслеживают значения, необходимые планировщику.

Prio

В гл. 7 мы увидим, что динамический приоритет процесса - это значение, зависящее от истории планировщика процессов и определяющее значение nice. (Более подробно значение nice описано в следующей вставке.) Оно обновляется во время sleep, когда процесс не выполняется и когда будет использован следующий временной срез. Это


Описатель процесса



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        task_struct   task_struct   task_struct    
                     
    runlst.next runlist.prev runlist.next runlist.prev runlistnext runlist.prev  
  task struct                
         
  prio  
static prio                
array    
    nrio arrav t I  
sleep avg  
interactive credit  
tunestanp  
runlist.next runlist.prev      
policy    
cpus_allowed  
time_slice      
    nr_active    
first_time_slice    
       
activated   bitmap    
rt_priority  
nivcsw        
       
nicsw   queue    
   
       
       
                               

Рис. 3.3. Поля, связанные с планировщиком

значение prio связано со значением поля static_prio, описанного далее. Поле prio хранит +/- 5 к значению static_prio, зависящие от истории процесса; он получает бо­нус +5, если слишком долго спал, и штраф -5, если удерживал процессор в течение слиш­ком многих временных срезов.

3.2.2.2 static_prio

s tatic_prio - это эквивалент значения nice. Значение static_prio по умолчанию равно MAX_PRIO-20. В нашем ядре значение по умолчанию для MAX_PRIO составляет 140.

Runjist

Поле run_list указывает на runqueue; runqueue содержит список всех выполняе­мых процессов. (См. раздел «Базовые структуры» для получения более подробной ин­формации о структуре runqueue.)



Глава 3 • Процессы: принципиальная модель выполнения


Nice

Системный вызов nice () позволяет пользователю изменять статический приоритет пла­нировщика для процесса. Значение nice может варьироваться от -20 до 19. Далее функция nice () вызывает set_user_nice () для установки поля static_prio структуры task_ struct. Значение static_prio рассчитывается из значения nice с помощью макроса PRIO_TO_.NI СЕ. Аналогично значение nice рассчитывается из значения static_prio с помощью вызова NICE_TO_PRIO.

------------------------------------------------- kernel/sched.с

tdefine NICE_TO_PRIO(nice) (MAX_RT_PRIO + nice + 20) tdefine PRIO_TO_NICE (prio) (prio - MAX_RT_PRIO - 20)

Array

Поле array указывает на массив приоритетов runqueue. (Раздел «Слежение за процес­сом: базовые конструкции планировщика» в этой главе описывает этот массив более подробно.)

3.2.2.5 sleep_avg

Поле sleep__avg используется для расчета эффективного приоритета задачи, равного среднему количеству тиков счетчика, потраченному задачей на сон.

Timestamp

Поле timestamp используется для расчета sleep__avg, когда задача приостановлена или спит.

3.2.2.7 interactive_credit

Поле interactive__credit используется вместе со sleep_avg и активизирует поля для расчета sleep_avg.

Policy

policy определяет тип процесса (например, разделяющий время или работающий в ре­альном времени). Тип процесса сильно зависит от приоритета планировщика. (Более подробно это поле описано в гл. 7.)

3.2.2.9 cpus_allowed

Поле cpus__allowed указывает, какой процессор обрабатывает задачу. Это один из спо­собов указания конкретного процессора для данной задачи при работе на многопроцес­сорной системе.


3.2 Описатель процесса



3.2.2.10 time.slice

Поле time_slice определяет максимальный отрезок времени, разрешенный процессу для выполнения.

3.2.2.11 firstjime_slice

Поле first_time_slice периодически устанавливается в 0 и отслеживается пла­нировщиком.

3.2.2.12 activated

Поле activated отслеживает инкрементирование и декрементирование среднего вре­мени сна. Если выполняется непрерываемая задача, это поле устанавливается в -1.

3.2.2.13 rtpriority

rt_priority - это статическое значение, которое может быть обновлено только вызо­вом schedule (). Это значение необходимо для поддержки задач реального времени.

3.2.2.14 nivcsw и nvcsw

Существуют различные типы контекстов. Ядро отслеживает их с целью профилирования. Глобальный счетчик переключений устанавливается одним из четырех контекстных счетчиков переключений в зависимости от типа перехода выполняемого при переключе­нии контекста (переключение контекстов описано в гл. 7). Ниже представлены счетчики для базовых переключений контекста.

Поле nivcsw (количество непринудительных переключений контекста) хранит счетчик приоритета ядра, примененного к задаче. Он увеличивается только при возвращении задачи на основе приоритета ядра, когда счетчик переключений уста­навливается с помощью nivcsw.

Поле nvcsw (количество принудительных переключений контекста) хранит счетчик переключений контекста, основанных на приоритете ядра. Счетчик переключений устанавливается в nvcsw, если предыдущее состояние не было активным приорите­том.


Поделиться:



Популярное:

  1. Аварийно-спасательные работы, связанные с тушением пожара
  2. Административные процедуры как правовой институт в структуре административного процесса
  3. Аллювий, его фации и их особенности. Полезные ископаемые, связанные с аллювием.
  4. Анализ заводского технологического процесса
  5. Анализ производственного процесса корпорации.
  6. Баня - апофеоз очистительного процесса.
  7. Бизнес-процесс «построение учебного процесса»
  8. Будущее демократического процесса: от экспансии к консолидации
  9. Бюджетный процесс и полномочия его основных участников, направления реформирования бюджетного процесса.
  10. во время всего процесса выполнения деятельности и по ее окончании важно создавать положительный эмоциональный настрой у ребенка.
  11. Вопрос 4. Наказания, не связанные с ограничением или лишением свободы.
  12. Временные ряды с использованием процесса скользящего среднего могут иметь место, когда уровни динамического ряда характеризуются случайной колеблемостью.


Последнее изменение этой страницы: 2016-03-25; Просмотров: 761; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.041 с.)
Главная | Случайная страница | Обратная связь