Что такое & ldquo; Ожидающий канал & rdquo; процесса?

NTP, как и TCP, имеет глубокую теорию и практический опыт, встроенные в протокол; если вы измените его основные параметры, он перестает иметь свойства синхронизации, для которых он был разработан.

Если ваше устройство спорадически связано, возможно, старый добрый RDATE будет служить вам лучше всего. Он не обрабатывает поворот часов, равно как и усреднение по сверстке, и не может быть защищен от различных тонких хаков, которые мог бы сыграть человек в середине, если бы он стоил того времени. Он просто получает контрольную дату с удаленного сервера и ударяет локальные часы с помощью молотка. Но он делает это, когда вы этого хотите, и его поведение детерминировано.

Точность RDATE намного хуже, чем NTP, я бы не доверял ей лучше, чем ± 1 секунду, но если вы только спорадически привязаны, более точное время не имеет значения; действительно, согласно RDATE , это может даже не иметь смысла.

35
задан 30 December 2010 в 20:51

16 ответов

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

0: процесс не ждет poll_schedule_timeout poll() - системный вызов1, используемый для обработки ввода-вывода. Это похоже на select() .2 Приложения, использующие неблокирующий ввод-вывод, используют эти вызовы, чтобы узнать, могут ли они читать или записывать в файл, а не блокировать его. Они часто используются для потоков ввода / вывода, которые не могут быть заблокированы (иначе, возможно, ваша мышь перестанет двигаться). Ожидающий канал poll_schedule_timeout указывает, что задача ожидает ввода-вывода, будь то аппаратное обеспечение, например клавиатуры и мыши, звуковые устройства или даже сетевые сокеты. Функция в ядре. Они определены в <linux/poll.h>. poll была реализацией, впервые увиденной в System V, select является эквивалентом BSD UNIX. futex_wait_queue_me: Чтобы объяснить это, мы должны взглянуть на Locks. Блокировка - это сохраненное состояние в системе, которое указывает, что задача работает с ресурсом. Например, может быть только одна задача, которая читает файл. Эта задача блокирует файл, любая другая задача1, которая пытается прочитать файл, будет знать, что она заблокирована, и дождитесь, когда блокировка исчезнет, ​​прежде чем она сможет получить к ней доступ. То же самое происходит и для процессорного времени. Современная версия Linux (на большинстве архитектур) использует в ядре Futex (быстрый мьютекс пользовательского пространства). Мьютекс, взаимное исключение, относится к идее, что общий ресурс может быть доступен только одной задачей в любое время. Для этого устанавливаются флаги в системе. Если процесс ожидает заблокированного ресурса, это называется Busy Waiting или «Spinning», ссылаясь на то, что он пытается получить доступ к нему снова и снова, пока это не удастся. Говорят, что задача закрывается, когда она вращается. Блокировки Futex можно рассматривать как число в пользовательском пространстве, которое может увеличиваться или уменьшаться задачей (в случаях, когда к ресурсу можно обращаться несколькими задачами, это число может превышать единицу). Это число показано на диаграмме4. Эти задачи помещаются в очередь ожидания, простая очередь задач, которые должны выполнять некоторую работу, когда время обработки доступно, задачи выполняют свою работу и удаляются из очереди. futex_wait_queue_me ставит задачи. Затем он ждет сигнала, тайм-аут или пробуждение. Задача, которая находится в этом ожидающем канале, не ждет очереди ожидания, они ждут очереди. Задача может быть либо Process3, либо Thread2 A Thread является подразделением процесса. Многие потоки могут запускаться параллельно. Процесс является полномасштабной программой, состоящей из одного или нескольких потоков, хотя программа может также состоять из нескольких процессов. Помните, что это все еще очень высокий уровень представления вещей, он не рассматривает детали реализации __skb_recv_datagram Подождите некоторые данные о заблокированном сетевом сокете. sk_wait_data Подождите несколько данных в сетевом сокете. do_exit Это последняя часть выхода из процесса. do_exit() вызывает следующий schedule(), чтобы запланировать другой процесс. Когда вызывается do_exit(), процесс является ZOMBIE. do_wait Процесс добавляется в очередь ожидания планировщика. pipe_wait, unix_stream_data_wait Процесс ожидает данных из подпроцесса. Это происходит, например, при запуске такого кода:
echo | sleep 10 && echo hallo              # pipe
или
cat < hello.c                              # unix data stream
hrtimer_nanosleep Процесс спящий, используя метод hrtimer_nanosleep(). Этот метод может использоваться для программ для сна в течение определенных интервалов времени с точностью до наносекунды.

Это еще не все, но я не наблюдал других. Опубликуйте комментарий, если я пропустил что-нибудь.

40
ответ дан 25 May 2018 в 23:44
  • 1
    Я встретил sleep_on_page_killable? – Mr Axilus 4 December 2012 в 21:18
  • 2
    Наиболее вероятной причиной для sleep_on_page_killable является то, что процесс пытается загрузить страницу, которая не находится в памяти, поэтому она вызывает ошибку страницы, и процесс должен быть усыпан до загрузки страницы. Если подсистема ввода-вывода перегружена (возможно, потому, что вы делаете много операций ввода-вывода), это может часто появляться. – tsuna 26 September 2013 в 21:22

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

0: процесс не ждет poll_schedule_timeout poll() - системный вызов1, используемый для обработки ввода-вывода. Это похоже на select() .2 Приложения, использующие неблокирующий ввод-вывод, используют эти вызовы, чтобы узнать, могут ли они читать или записывать в файл, а не блокировать его. Они часто используются для потоков ввода / вывода, которые не могут быть заблокированы (иначе, возможно, ваша мышь перестанет двигаться). Ожидающий канал poll_schedule_timeout указывает, что задача ожидает ввода-вывода, будь то аппаратное обеспечение, например клавиатуры и мыши, звуковые устройства или даже сетевые сокеты. Функция в ядре. Они определены в <linux/poll.h>. poll была реализацией, впервые увиденной в System V, select является эквивалентом BSD UNIX. futex_wait_queue_me: Чтобы объяснить это, мы должны взглянуть на Locks. Блокировка - это сохраненное состояние в системе, которое указывает, что задача работает с ресурсом. Например, может быть только одна задача, которая читает файл. Эта задача блокирует файл, любая другая задача1, которая пытается прочитать файл, будет знать, что она заблокирована, и дождитесь, когда блокировка исчезнет, ​​прежде чем она сможет получить к ней доступ. То же самое происходит и для процессорного времени. Современная версия Linux (на большинстве архитектур) использует в ядре Futex (быстрый мьютекс пользовательского пространства). Мьютекс, взаимное исключение, относится к идее, что общий ресурс может быть доступен только одной задачей в любое время. Для этого устанавливаются флаги в системе. Если процесс ожидает заблокированного ресурса, это называется Busy Waiting или «Spinning», ссылаясь на то, что он пытается получить доступ к нему снова и снова, пока это не удастся. Говорят, что задача закрывается, когда она вращается. Блокировки Futex можно рассматривать как число в пользовательском пространстве, которое может увеличиваться или уменьшаться задачей (в случаях, когда к ресурсу можно обращаться несколькими задачами, это число может превышать единицу). Это число показано на диаграмме4. Эти задачи помещаются в очередь ожидания, простая очередь задач, которые должны выполнять некоторую работу, когда время обработки доступно, задачи выполняют свою работу и удаляются из очереди. futex_wait_queue_me ставит задачи. Затем он ждет сигнала, тайм-аут или пробуждение. Задача, которая находится в этом ожидающем канале, не ждет очереди ожидания, они ждут очереди. Задача может быть либо Process3, либо Thread2 A Thread является подразделением процесса. Многие потоки могут запускаться параллельно. Процесс является полномасштабной программой, состоящей из одного или нескольких потоков, хотя программа может также состоять из нескольких процессов. Помните, что это все еще очень высокий уровень представления вещей, он не рассматривает детали реализации __skb_recv_datagram Подождите некоторые данные о заблокированном сетевом сокете. sk_wait_data Подождите несколько данных в сетевом сокете. do_exit Это последняя часть выхода из процесса. do_exit() вызывает следующий schedule(), чтобы запланировать другой процесс. Когда вызывается do_exit(), процесс является ZOMBIE. do_wait Процесс добавляется в очередь ожидания планировщика. pipe_wait, unix_stream_data_wait Процесс ожидает данных из подпроцесса. Это происходит, например, при запуске такого кода: echo | sleep 10 && echo hallo # pipe или cat < hello.c # unix data stream hrtimer_nanosleep Процесс спящий, используя метод hrtimer_nanosleep(). Этот метод может использоваться для программ для сна в течение определенных интервалов времени с точностью до наносекунды.

Это еще не все, но я не наблюдал других. Опубликуйте комментарий, если я пропустил что-нибудь.

41
ответ дан 25 July 2018 в 22:41

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

0: процесс не ждет poll_schedule_timeout poll() - системный вызов1, используемый для обработки ввода-вывода. Это похоже на select() .2 Приложения, использующие неблокирующий ввод-вывод, используют эти вызовы, чтобы узнать, могут ли они читать или записывать в файл, а не блокировать его. Они часто используются для потоков ввода / вывода, которые не могут быть заблокированы (иначе, возможно, ваша мышь перестанет двигаться). Ожидающий канал poll_schedule_timeout указывает, что задача ожидает ввода-вывода, будь то аппаратное обеспечение, например клавиатуры и мыши, звуковые устройства или даже сетевые сокеты. Функция в ядре. Они определены в <linux/poll.h>. poll была реализацией, впервые увиденной в System V, select является эквивалентом BSD UNIX. futex_wait_queue_me: Чтобы объяснить это, мы должны взглянуть на Locks. Блокировка - это сохраненное состояние в системе, которое указывает, что задача работает с ресурсом. Например, может быть только одна задача, которая читает файл. Эта задача блокирует файл, любая другая задача1, которая пытается прочитать файл, будет знать, что она заблокирована, и дождитесь, когда блокировка исчезнет, ​​прежде чем она сможет получить к ней доступ. То же самое происходит и для процессорного времени. Современная версия Linux (на большинстве архитектур) использует в ядре Futex (быстрый мьютекс пользовательского пространства). Мьютекс, взаимное исключение, относится к идее, что общий ресурс может быть доступен только одной задачей в любое время. Для этого устанавливаются флаги в системе. Если процесс ожидает заблокированного ресурса, это называется Busy Waiting или «Spinning», ссылаясь на то, что он пытается получить доступ к нему снова и снова, пока это не удастся. Говорят, что задача закрывается, когда она вращается. Блокировки Futex можно рассматривать как число в пользовательском пространстве, которое может увеличиваться или уменьшаться задачей (в случаях, когда к ресурсу можно обращаться несколькими задачами, это число может превышать единицу). Это число показано на диаграмме4. Эти задачи помещаются в очередь ожидания, простая очередь задач, которые должны выполнять некоторую работу, когда время обработки доступно, задачи выполняют свою работу и удаляются из очереди. futex_wait_queue_me ставит задачи. Затем он ждет сигнала, тайм-аут или пробуждение. Задача, которая находится в этом ожидающем канале, не ждет очереди ожидания, они ждут очереди. Задача может быть либо Process3, либо Thread2 A Thread является подразделением процесса. Многие потоки могут запускаться параллельно. Процесс является полномасштабной программой, состоящей из одного или нескольких потоков, хотя программа может также состоять из нескольких процессов. Помните, что это все еще очень высокий уровень представления вещей, он не рассматривает детали реализации __skb_recv_datagram Подождите некоторые данные о заблокированном сетевом сокете. sk_wait_data Подождите несколько данных в сетевом сокете. do_exit Это последняя часть выхода из процесса. do_exit() вызывает следующий schedule(), чтобы запланировать другой процесс. Когда вызывается do_exit(), процесс является ZOMBIE. do_wait Процесс добавляется в очередь ожидания планировщика. pipe_wait, unix_stream_data_wait Процесс ожидает данных из подпроцесса. Это происходит, например, при запуске такого кода: echo | sleep 10 && echo hallo # pipe или cat < hello.c # unix data stream hrtimer_nanosleep Процесс спящий, используя метод hrtimer_nanosleep(). Этот метод может использоваться для программ для сна в течение определенных интервалов времени с точностью до наносекунды.

Это еще не все, но я не наблюдал других. Опубликуйте комментарий, если я пропустил что-нибудь.

41
ответ дан 2 August 2018 в 04:07

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

  • 0 : процесс не ждет
  • poll_schedule_timeout poll () - системный вызов1, используемый для обработки ввода-вывода. Это похоже на select () .2 Приложения, использующие неблокирующий ввод-вывод, используют эти вызовы, чтобы увидеть, могут ли они читать или записывать в файл, причем его нужно блокировать. Они часто используются для потоков ввода / вывода, которые не могут быть заблокированы (иначе, возможно, ваша мышь перестанет двигаться). Ожидающий канал poll_schedule_timeout указывает, что задача ожидает ввода-вывода, будь то аппаратное обеспечение, например клавиатуры и мыши, звуковые устройства или даже сетевые сокеты. Функция в ядре. Они определены в & lt; linux / poll.h & gt; . poll - это реализация, впервые увиденная в System V, select - эквивалент BSD UNIX.
  • futex_wait_queue_me : Чтобы объяснить это, мы должны взглянуть на Locks. Блокировка - это сохраненное состояние в системе, которое указывает, что задача работает с ресурсом. Например, может быть только одна задача, которая читает файл. Эта задача блокирует файл, любая другая задача1, которая пытается прочитать файл, будет знать, что она заблокирована, и дождитесь, когда блокировка исчезнет, ​​прежде чем она сможет получить к ней доступ. То же самое происходит и для процессорного времени. Современная версия Linux (на большинстве архитектур) использует в ядре Futex (быстрый мьютекс пользовательского пространства). Мьютекс, взаимное исключение, относится к идее, что общий ресурс может быть доступен только одной задачей в любое время. Для этого устанавливаются флаги в системе. Если процесс ожидает заблокированного ресурса, это называется Busy Waiting или «Spinning», ссылаясь на то, что он пытается получить к нему доступ снова и снова, пока это не удастся. Задача считается заблокирована , когда она вращается. If you can read this, you are obligated to correct at least one mistake in this answer :P [!d29] Блокировки Futex можно рассматривать как число в пользовательском пространстве, которое может быть увеличено или уменьшено задачей (в тех случаях, когда ресурс может быть доступен несколькими задачами, этот номер может стать больше одного). Это число показано на диаграмме4. Эти задачи задерживаются в очереди ожидания , простой очереди задач, которые должны выполнять некоторую работу, когда время обработки доступно, задачи выполняют свою работу и удаляются из очереди. futex_wait_queue_me задает задачи. Затем он ждет сигнала, тайм-аут или пробуждение. Задача, которая находится в этом ожидающем канале , не ждет очереди ожидания, они ждут, чтобы быть в очереди. Задача может быть либо Process3, либо Thread2 A Thread является подразделением процесса. Многие потоки могут запускаться параллельно. Процесс является полномасштабной программой, состоящей из одного или нескольких потоков, хотя программа может также состоять из нескольких процессов. Помните, что это все еще очень высокий уровень представления вещей, он не рассматривает детали реализации
  • __ skb_recv_datagram Подождите, пока некоторые данные о заблокированном сетевом сокете.
  • sk_wait_data Дождитесь получения некоторых данных в сетевом сокете.
  • do_exit Это последняя часть выхода из процесса. do_exit () вызывает расписание () next, чтобы запланировать другой процесс. Когда вызывается do_exit () , процесс является ZOMBIE .
  • do_wait Процесс добавляется к ожидающим планировщика очередь.
  • pipe_wait , unix_stream_data_wait Процесс ожидает данных из подпроцесса. Это происходит, например, при запуске такого кода: echo | сон 10 & amp; & amp; echo hallo # pipe или cat & lt; hello.c # unix data stream
  • hrtimer_nanosleep Процесс спящий, используя метод hrtimer_nanosleep () . Этот метод может использоваться для программ для сна в течение определенных интервалов времени с точностью до наносекунды.

Это еще не все, но я не наблюдал других. Опубликуйте комментарий, если я пропустил что-нибудь.

41
ответ дан 4 August 2018 в 20:10

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

  • 0 : процесс не ждет
  • poll_schedule_timeout poll () - системный вызов1, используемый для обработки ввода-вывода. Это похоже на select () .2 Приложения, использующие неблокирующий ввод-вывод, используют эти вызовы, чтобы увидеть, могут ли они читать или записывать в файл, причем его нужно блокировать. Они часто используются для потоков ввода / вывода, которые не могут быть заблокированы (иначе, возможно, ваша мышь перестанет двигаться). Ожидающий канал poll_schedule_timeout указывает, что задача ожидает ввода-вывода, будь то аппаратное обеспечение, например клавиатуры и мыши, звуковые устройства или даже сетевые сокеты. Функция в ядре. Они определены в & lt; linux / poll.h & gt; . poll - это реализация, впервые увиденная в System V, select - эквивалент BSD UNIX.
  • futex_wait_queue_me : Чтобы объяснить это, мы должны взглянуть на Locks. Блокировка - это сохраненное состояние в системе, которое указывает, что задача работает с ресурсом. Например, может быть только одна задача, которая читает файл. Эта задача блокирует файл, любая другая задача1, которая пытается прочитать файл, будет знать, что она заблокирована, и дождитесь, когда блокировка исчезнет, ​​прежде чем она сможет получить к ней доступ. То же самое происходит и для процессорного времени. Современная версия Linux (на большинстве архитектур) использует в ядре Futex (быстрый мьютекс пользовательского пространства). Мьютекс, взаимное исключение, относится к идее, что общий ресурс может быть доступен только одной задачей в любое время. Для этого устанавливаются флаги в системе. Если процесс ожидает заблокированного ресурса, это называется Busy Waiting или «Spinning», ссылаясь на то, что он пытается получить к нему доступ снова и снова, пока это не удастся. Задача считается заблокирована , когда она вращается. If you can read this, you are obligated to correct at least one mistake in this answer :P [!d29] Блокировки Futex можно рассматривать как число в пользовательском пространстве, которое может быть увеличено или уменьшено задачей (в тех случаях, когда ресурс может быть доступен несколькими задачами, этот номер может стать больше одного). Это число показано на диаграмме4. Эти задачи задерживаются в очереди ожидания , простой очереди задач, которые должны выполнять некоторую работу, когда время обработки доступно, задачи выполняют свою работу и удаляются из очереди. futex_wait_queue_me задает задачи. Затем он ждет сигнала, тайм-аут или пробуждение. Задача, которая находится в этом ожидающем канале , не ждет очереди ожидания, они ждут, чтобы быть в очереди. Задача может быть либо Process3, либо Thread2 A Thread является подразделением процесса. Многие потоки могут запускаться параллельно. Процесс является полномасштабной программой, состоящей из одного или нескольких потоков, хотя программа может также состоять из нескольких процессов. Помните, что это все еще очень высокий уровень представления вещей, он не рассматривает детали реализации
  • __ skb_recv_datagram Подождите, пока некоторые данные о заблокированном сетевом сокете.
  • sk_wait_data Дождитесь получения некоторых данных в сетевом сокете.
  • do_exit Это последняя часть выхода из процесса. do_exit () вызывает расписание () next, чтобы запланировать другой процесс. Когда вызывается do_exit () , процесс является ZOMBIE .
  • do_wait Процесс добавляется к ожидающим планировщика очередь.
  • pipe_wait , unix_stream_data_wait Процесс ожидает данных из подпроцесса. Это происходит, например, при запуске такого кода: echo | сон 10 & amp; & amp; echo hallo # pipe или cat & lt; hello.c # unix data stream
  • hrtimer_nanosleep Процесс спящий, используя метод hrtimer_nanosleep () . Этот метод может использоваться для программ для сна в течение определенных интервалов времени с точностью до наносекунды.

Это еще не все, но я не наблюдал других. Опубликуйте комментарий, если я пропустил что-нибудь.

41
ответ дан 6 August 2018 в 04:12

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

  • 0 : процесс не ждет
  • poll_schedule_timeout poll () - системный вызов1, используемый для обработки ввода-вывода. Это похоже на select () .2 Приложения, использующие неблокирующий ввод-вывод, используют эти вызовы, чтобы увидеть, могут ли они читать или записывать в файл, причем его нужно блокировать. Они часто используются для потоков ввода / вывода, которые не могут быть заблокированы (иначе, возможно, ваша мышь перестанет двигаться). Ожидающий канал poll_schedule_timeout указывает, что задача ожидает ввода-вывода, будь то аппаратное обеспечение, например клавиатуры и мыши, звуковые устройства или даже сетевые сокеты. Функция в ядре. Они определены в & lt; linux / poll.h & gt; . poll - это реализация, впервые увиденная в System V, select - эквивалент BSD UNIX.
  • futex_wait_queue_me : Чтобы объяснить это, мы должны взглянуть на Locks. Блокировка - это сохраненное состояние в системе, которое указывает, что задача работает с ресурсом. Например, может быть только одна задача, которая читает файл. Эта задача блокирует файл, любая другая задача1, которая пытается прочитать файл, будет знать, что она заблокирована, и дождитесь, когда блокировка исчезнет, ​​прежде чем она сможет получить к ней доступ. То же самое происходит и для процессорного времени. Современная версия Linux (на большинстве архитектур) использует в ядре Futex (быстрый мьютекс пользовательского пространства). Мьютекс, взаимное исключение, относится к идее, что общий ресурс может быть доступен только одной задачей в любое время. Для этого устанавливаются флаги в системе. Если процесс ожидает заблокированного ресурса, это называется Busy Waiting или «Spinning», ссылаясь на то, что он пытается получить к нему доступ снова и снова, пока это не удастся. Задача считается заблокирована , когда она вращается. If you can read this, you are obligated to correct at least one mistake in this answer :P [!d29] Блокировки Futex можно рассматривать как число в пользовательском пространстве, которое может быть увеличено или уменьшено задачей (в тех случаях, когда ресурс может быть доступен несколькими задачами, этот номер может стать больше одного). Это число показано на диаграмме4. Эти задачи задерживаются в очереди ожидания , простой очереди задач, которые должны выполнять некоторую работу, когда время обработки доступно, задачи выполняют свою работу и удаляются из очереди. futex_wait_queue_me задает задачи. Затем он ждет сигнала, тайм-аут или пробуждение. Задача, которая находится в этом ожидающем канале , не ждет очереди ожидания, они ждут, чтобы быть в очереди. Задача может быть либо Process3, либо Thread2 A Thread является подразделением процесса. Многие потоки могут запускаться параллельно. Процесс является полномасштабной программой, состоящей из одного или нескольких потоков, хотя программа может также состоять из нескольких процессов. Помните, что это все еще очень высокий уровень представления вещей, он не рассматривает детали реализации
  • __ skb_recv_datagram Подождите, пока некоторые данные о заблокированном сетевом сокете.
  • sk_wait_data Дождитесь получения некоторых данных в сетевом сокете.
  • do_exit Это последняя часть выхода из процесса. do_exit () вызывает расписание () next, чтобы запланировать другой процесс. Когда вызывается do_exit () , процесс является ZOMBIE .
  • do_wait Процесс добавляется к ожидающим планировщика очередь.
  • pipe_wait , unix_stream_data_wait Процесс ожидает данных из подпроцесса. Это происходит, например, при запуске такого кода: echo | сон 10 & amp; & amp; echo hallo # pipe или cat & lt; hello.c # unix data stream
  • hrtimer_nanosleep Процесс спящий, используя метод hrtimer_nanosleep () . Этот метод может использоваться для программ для сна в течение определенных интервалов времени с точностью до наносекунды.

Это еще не все, но я не наблюдал других. Опубликуйте комментарий, если я пропустил что-нибудь.

41
ответ дан 7 August 2018 в 22:12

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

  • 0 : процесс не ждет
  • poll_schedule_timeout poll () - системный вызов1, используемый для обработки ввода-вывода. Это похоже на select () .2 Приложения, использующие неблокирующий ввод-вывод, используют эти вызовы, чтобы увидеть, могут ли они читать или записывать в файл, причем его нужно блокировать. Они часто используются для потоков ввода / вывода, которые не могут быть заблокированы (иначе, возможно, ваша мышь перестанет двигаться). Ожидающий канал poll_schedule_timeout указывает, что задача ожидает ввода-вывода, будь то аппаратное обеспечение, например клавиатуры и мыши, звуковые устройства или даже сетевые сокеты. Функция в ядре. Они определены в & lt; linux / poll.h & gt; . poll - это реализация, впервые увиденная в System V, select - эквивалент BSD UNIX.
  • futex_wait_queue_me : Чтобы объяснить это, мы должны взглянуть на Locks. Блокировка - это сохраненное состояние в системе, которое указывает, что задача работает с ресурсом. Например, может быть только одна задача, которая читает файл. Эта задача блокирует файл, любая другая задача1, которая пытается прочитать файл, будет знать, что она заблокирована, и дождитесь, когда блокировка исчезнет, ​​прежде чем она сможет получить к ней доступ. То же самое происходит и для процессорного времени. Современная версия Linux (на большинстве архитектур) использует в ядре Futex (быстрый мьютекс пользовательского пространства). Мьютекс, взаимное исключение, относится к идее, что общий ресурс может быть доступен только одной задачей в любое время. Для этого устанавливаются флаги в системе. Если процесс ожидает заблокированного ресурса, это называется Busy Waiting или «Spinning», ссылаясь на то, что он пытается получить к нему доступ снова и снова, пока это не удастся. Задача считается заблокирована , когда она вращается. If you can read this, you are obligated to correct at least one mistake in this answer :P [!d29] Блокировки Futex можно рассматривать как число в пользовательском пространстве, которое может быть увеличено или уменьшено задачей (в тех случаях, когда ресурс может быть доступен несколькими задачами, этот номер может стать больше одного). Это число показано на диаграмме4. Эти задачи задерживаются в очереди ожидания , простой очереди задач, которые должны выполнять некоторую работу, когда время обработки доступно, задачи выполняют свою работу и удаляются из очереди. futex_wait_queue_me задает задачи. Затем он ждет сигнала, тайм-аут или пробуждение. Задача, которая находится в этом ожидающем канале , не ждет очереди ожидания, они ждут, чтобы быть в очереди. Задача может быть либо Process3, либо Thread2 A Thread является подразделением процесса. Многие потоки могут запускаться параллельно. Процесс является полномасштабной программой, состоящей из одного или нескольких потоков, хотя программа может также состоять из нескольких процессов. Помните, что это все еще очень высокий уровень представления вещей, он не рассматривает детали реализации
  • __ skb_recv_datagram Подождите, пока некоторые данные о заблокированном сетевом сокете.
  • sk_wait_data Дождитесь получения некоторых данных в сетевом сокете.
  • do_exit Это последняя часть выхода из процесса. do_exit () вызывает расписание () next, чтобы запланировать другой процесс. Когда вызывается do_exit () , процесс является ZOMBIE .
  • do_wait Процесс добавляется к ожидающим планировщика очередь.
  • pipe_wait , unix_stream_data_wait Процесс ожидает данных из подпроцесса. Это происходит, например, при запуске такого кода: echo | сон 10 & amp; & amp; echo hallo # pipe или cat & lt; hello.c # unix data stream
  • hrtimer_nanosleep Процесс спящий, используя метод hrtimer_nanosleep () . Этот метод может использоваться для программ для сна в течение определенных интервалов времени с точностью до наносекунды.

Это еще не все, но я не наблюдал других. Опубликуйте комментарий, если я пропустил что-нибудь.

41
ответ дан 10 August 2018 в 10:25

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

  • 0 : процесс не ждет
  • poll_schedule_timeout poll () - системный вызов1, используемый для обработки ввода-вывода. Это похоже на select () .2 Приложения, использующие неблокирующий ввод-вывод, используют эти вызовы, чтобы увидеть, могут ли они читать или записывать в файл, причем его нужно блокировать. Они часто используются для потоков ввода / вывода, которые не могут быть заблокированы (иначе, возможно, ваша мышь перестанет двигаться). Ожидающий канал poll_schedule_timeout указывает, что задача ожидает ввода-вывода, будь то аппаратное обеспечение, например клавиатуры и мыши, звуковые устройства или даже сетевые сокеты. Функция в ядре. Они определены в & lt; linux / poll.h & gt; . poll - это реализация, впервые увиденная в System V, select - эквивалент BSD UNIX.
  • futex_wait_queue_me : Чтобы объяснить это, мы должны взглянуть на Locks. Блокировка - это сохраненное состояние в системе, которое указывает, что задача работает с ресурсом. Например, может быть только одна задача, которая читает файл. Эта задача блокирует файл, любая другая задача1, которая пытается прочитать файл, будет знать, что она заблокирована, и дождитесь, когда блокировка исчезнет, ​​прежде чем она сможет получить к ней доступ. То же самое происходит и для процессорного времени. Современная версия Linux (на большинстве архитектур) использует в ядре Futex (быстрый мьютекс пользовательского пространства). Мьютекс, взаимное исключение, относится к идее, что общий ресурс может быть доступен только одной задачей в любое время. Для этого устанавливаются флаги в системе. Если процесс ожидает заблокированного ресурса, это называется Busy Waiting или «Spinning», ссылаясь на то, что он пытается получить к нему доступ снова и снова, пока это не удастся. Задача считается заблокирована , когда она вращается. If you can read this, you are obligated to correct at least one mistake in this answer :P [!d29] Блокировки Futex можно рассматривать как число в пользовательском пространстве, которое может быть увеличено или уменьшено задачей (в тех случаях, когда ресурс может быть доступен несколькими задачами, этот номер может стать больше одного). Это число показано на диаграмме4. Эти задачи задерживаются в очереди ожидания , простой очереди задач, которые должны выполнять некоторую работу, когда время обработки доступно, задачи выполняют свою работу и удаляются из очереди. futex_wait_queue_me задает задачи. Затем он ждет сигнала, тайм-аут или пробуждение. Задача, которая находится в этом ожидающем канале , не ждет очереди ожидания, они ждут, чтобы быть в очереди. Задача может быть либо Process3, либо Thread2 A Thread является подразделением процесса. Многие потоки могут запускаться параллельно. Процесс является полномасштабной программой, состоящей из одного или нескольких потоков, хотя программа может также состоять из нескольких процессов. Помните, что это все еще очень высокий уровень представления вещей, он не рассматривает детали реализации
  • __ skb_recv_datagram Подождите, пока некоторые данные о заблокированном сетевом сокете.
  • sk_wait_data Дождитесь получения некоторых данных в сетевом сокете.
  • do_exit Это последняя часть выхода из процесса. do_exit () вызывает расписание () next, чтобы запланировать другой процесс. Когда вызывается do_exit () , процесс является ZOMBIE .
  • do_wait Процесс добавляется к ожидающим планировщика очередь.
  • pipe_wait , unix_stream_data_wait Процесс ожидает данных из подпроцесса. Это происходит, например, при запуске такого кода: echo | сон 10 & amp; & amp; echo hallo # pipe или cat & lt; hello.c # unix data stream
  • hrtimer_nanosleep Процесс спящий, используя метод hrtimer_nanosleep () . Этот метод может использоваться для программ для сна в течение определенных интервалов времени с точностью до наносекунды.

Это еще не все, но я не наблюдал других. Опубликуйте комментарий, если я пропустил что-нибудь.

41
ответ дан 13 August 2018 в 16:51
  • 1
    Я встретил sleep_on_page_killable? – Mr Axilus 4 December 2012 в 21:18
  • 2
    Наиболее вероятной причиной для sleep_on_page_killable является то, что процесс пытается загрузить страницу, которая не находится в памяти, поэтому она вызывает ошибку страницы, и процесс должен быть усыпан до загрузки страницы. Если подсистема ввода-вывода перегружена (возможно, потому, что вы делаете много операций ввода-вывода), это может часто появляться. – tsuna 26 September 2013 в 21:22
  • 3
    – itsnotmyrealname 5 September 2018 в 23:36

Значение ожидающего канала - это имя функции ядра, в которой процесс в настоящий момент заблокирован.

Имя обычно связано с системным вызовом, который будет иметь страницу руководства.

futex_wait_queue_me относится к futex. Это относится к типу блокировки мьютекса (быстрое взаимное исключение пользователей), которое используется для планирования работы многих процессов на одном процессоре. Состояние указывает, что ваш процесс находится в очереди, чтобы получить блокировку. 2 do_wait связан с ожиданием. и т. д.

Если вы действительно хотите получить более подробную информацию, вы можете проверить исходный код ядра.

Если вы наберете cat /proc/some_pid/stack в терминале, вы получите некоторый результат, например: [ ! d16]

[<c0227f4e>] poll_schedule_timeout+0x3e/0x60
[<c022879f>] do_select+0x55f/0x670
[<c0228f40>] core_sys_select+0x140/0x240
[<c0229241>] sys_select+0x31/0xc0
[<c05c9cc4>] syscall_call+0x7/0xb
[<ffffffff>] 0xffffffff

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

Он имеет дело с источником и опросом.

Источник (ы): 1. канал ожидания процесса (WCHAN) и сигнал тревоги? - 2. Ответ AskUbuntu

11
ответ дан 25 May 2018 в 23:44
  • 1
    Перефразировать , что. :П – Stefano Palazzo♦ 10 January 2011 в 00:04
  • 2
    Похоже, вы заметили, что я снова использовал ваш ответ, чтобы улучшить это ;-) Какую атрибуцию вы хотели бы иметь? – Maxime R. 10 January 2011 в 13:07
  • 3
    Ваш комментарий более чем достаточно, чтобы я был счастлив :) Если вы хотите узнать, как работает атрибуция, есть хороший SO blog post по этому вопросу. Не волнуйтесь слишком много об этом, хотя я хочу, чтобы люди как можно больше использовали мою работу. – Stefano Palazzo♦ 10 January 2011 в 14:03
  • 4
    Ну, я просто писал вопрос по этой теме на мета. (уже прочитал сообщение в блоге) – Maxime R. 10 January 2011 в 14:26
  • 5
    Это здесь . И я готов поспорить, что ваш ответ в какой-то момент закончится мной – Maxime R. 10 January 2011 в 15:11

Значение ожидающего канала - это имя функции ядра, в которой процесс в настоящий момент заблокирован.

Имя обычно связано с системным вызовом, который будет иметь страницу руководства.

futex_wait_queue_me относится к futex. Это относится к типу блокировки мьютекса (быстрое взаимное исключение пользователей), которое используется для планирования работы многих процессов на одном процессоре. Состояние указывает, что ваш процесс находится в очереди, чтобы получить блокировку. 2 do_wait связан с ожиданием. и т. д.

Если вы действительно хотите получить более подробную информацию, вы можете проверить исходный код ядра.

Если вы наберете cat /proc/some_pid/stack в терминале, вы получите некоторый результат, например: [ ! d16] [<c0227f4e>] poll_schedule_timeout+0x3e/0x60 [<c022879f>] do_select+0x55f/0x670 [<c0228f40>] core_sys_select+0x140/0x240 [<c0229241>] sys_select+0x31/0xc0 [<c05c9cc4>] syscall_call+0x7/0xb [<ffffffff>] 0xffffffff

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

Он имеет дело с источником и опросом.

Источник (ы): 1. канал ожидания процесса (WCHAN) и сигнал тревоги? - 2. Ответ AskUbuntu

11
ответ дан 25 July 2018 в 22:41
  • 1
    Перефразировать , что. :П – Stefano Palazzo♦ 10 January 2011 в 00:04
  • 2
    Похоже, вы заметили, что я снова использовал ваш ответ, чтобы улучшить это ;-) Какую атрибуцию вы хотели бы иметь? – Maxime R. 10 January 2011 в 13:07
  • 3
    Ваш комментарий более чем достаточно, чтобы я был счастлив :) Если вы хотите узнать, как работает атрибуция, есть хороший SO blog post по этому вопросу. Не волнуйтесь слишком много об этом, хотя я хочу, чтобы люди как можно больше использовали мою работу. – Stefano Palazzo♦ 10 January 2011 в 14:03
  • 4
    Ну, я просто писал вопрос по этой теме на мета. (уже прочитал сообщение в блоге) – Maxime R. 10 January 2011 в 14:26
  • 5
    Это здесь . И я готов поспорить, что ваш ответ в какой-то момент закончится мной – Maxime R. 10 January 2011 в 15:11

Значение ожидающего канала - это имя функции ядра, в которой процесс в настоящий момент заблокирован.

Имя обычно связано с системным вызовом, который будет иметь страницу руководства.

futex_wait_queue_me относится к futex. Это относится к типу блокировки мьютекса (быстрое взаимное исключение пользователей), которое используется для планирования работы многих процессов на одном процессоре. Состояние указывает, что ваш процесс находится в очереди, чтобы получить блокировку. 2 do_wait связан с ожиданием. и т. д.

Если вы действительно хотите получить более подробную информацию, вы можете проверить исходный код ядра.

Если вы наберете cat /proc/some_pid/stack в терминале, вы получите некоторый результат, например: [ ! d16] [<c0227f4e>] poll_schedule_timeout+0x3e/0x60 [<c022879f>] do_select+0x55f/0x670 [<c0228f40>] core_sys_select+0x140/0x240 [<c0229241>] sys_select+0x31/0xc0 [<c05c9cc4>] syscall_call+0x7/0xb [<ffffffff>] 0xffffffff

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

Он имеет дело с источником и опросом.

Источник (ы): 1. канал ожидания процесса (WCHAN) и сигнал тревоги? - 2. Ответ AskUbuntu

11
ответ дан 2 August 2018 в 04:07
  • 1
    Перефразировать , что. :П – Stefano Palazzo♦ 10 January 2011 в 00:04
  • 2
    Похоже, вы заметили, что я снова использовал ваш ответ, чтобы улучшить это ;-) Какую атрибуцию вы хотели бы иметь? – Maxime R. 10 January 2011 в 13:07
  • 3
    Ваш комментарий более чем достаточно, чтобы я был счастлив :) Если вы хотите узнать, как работает атрибуция, есть хороший SO blog post по этому вопросу. Не волнуйтесь слишком много об этом, хотя я хочу, чтобы люди как можно больше использовали мою работу. – Stefano Palazzo♦ 10 January 2011 в 14:03
  • 4
    Ну, я просто писал вопрос по этой теме на мета. (уже прочитал сообщение в блоге) – Maxime R. 10 January 2011 в 14:26
  • 5
    Это здесь . И я готов поспорить, что ваш ответ в какой-то момент закончится мной – Maxime R. 10 January 2011 в 15:11

Значение ожидающего канала - это имя функции ядра, в которой процесс в настоящий момент заблокирован.

Имя обычно связано с системным вызовом, который будет иметь страницу руководства.

  • futex_wait_queue_me связан с futex . Он относится к типу mutex lock (быстрое взаимное исключение пользователей), которое используется для планирования многих процессов на одном процессоре. Состояние указывает на то, что ваш процесс заблокирован, чтобы получить блокировку. 2
  • do_wait связано с wait .
  • и т. д.

Если вам действительно нужна более подробная информация, вы можете проверить источник ядра .

Если вы

  [& lt; c0227f4e & gt;] poll_schedule_timeout + 0x3e / 0x60  cat / proc / some_pid / stack  в терминале, вы получите некоторый результат:  & lt; c022879f & gt;] do_select + 0x55f / 0x670 [& lt; c0228f40 & gt;] core_sys_select + 0x140 / 0x240 [& lt; c0229241 & gt;] sys_select + 0x31 / 0xc0 [& lt; c05c9cc4 & gt;] syscall_call + 0x7 / 0xb [& lt; ffffffff & gt;] 0xffffffff   

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

Он имеет дело с асинхронным вводом-выводом и опросом .

Источник (ы): 1. канал ожидания процесса (WCHAN) и аварийный сигнал? - 2. Ответ AskUbuntu

11
ответ дан 4 August 2018 в 20:10

Значение ожидающего канала - это имя функции ядра, в которой процесс в настоящий момент заблокирован.

Имя обычно связано с системным вызовом, который будет иметь страницу руководства.

  • futex_wait_queue_me связан с futex . Он относится к типу mutex lock (быстрое взаимное исключение пользователей), которое используется для планирования многих процессов на одном процессоре. Состояние указывает на то, что ваш процесс заблокирован, чтобы получить блокировку. 2
  • do_wait связано с wait .
  • и т. д.

Если вам действительно нужна более подробная информация, вы можете проверить источник ядра .

Если вы

  [& lt; c0227f4e & gt;] poll_schedule_timeout + 0x3e / 0x60  cat / proc / some_pid / stack  в терминале, вы получите некоторый результат:  & lt; c022879f & gt;] do_select + 0x55f / 0x670 [& lt; c0228f40 & gt;] core_sys_select + 0x140 / 0x240 [& lt; c0229241 & gt;] sys_select + 0x31 / 0xc0 [& lt; c05c9cc4 & gt;] syscall_call + 0x7 / 0xb [& lt; ffffffff & gt;] 0xffffffff   

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

Он имеет дело с асинхронным вводом-выводом и опросом .

Источник (ы): 1. канал ожидания процесса (WCHAN) и аварийный сигнал? - 2. Ответ AskUbuntu

11
ответ дан 6 August 2018 в 04:12

Значение ожидающего канала - это имя функции ядра, в которой процесс в настоящий момент заблокирован.

Имя обычно связано с системным вызовом, который будет иметь страницу руководства.

  • futex_wait_queue_me связан с futex . Он относится к типу mutex lock (быстрое взаимное исключение пользователей), которое используется для планирования многих процессов на одном процессоре. Состояние указывает на то, что ваш процесс заблокирован, чтобы получить блокировку. 2
  • do_wait связано с wait .
  • и т. д.

Если вам действительно нужна более подробная информация, вы можете проверить источник ядра .

Если вы

  [& lt; c0227f4e & gt;] poll_schedule_timeout + 0x3e / 0x60  cat / proc / some_pid / stack  в терминале, вы получите некоторый результат:  & lt; c022879f & gt;] do_select + 0x55f / 0x670 [& lt; c0228f40 & gt;] core_sys_select + 0x140 / 0x240 [& lt; c0229241 & gt;] sys_select + 0x31 / 0xc0 [& lt; c05c9cc4 & gt;] syscall_call + 0x7 / 0xb [& lt; ffffffff & gt;] 0xffffffff   

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

Он имеет дело с асинхронным вводом-выводом и опросом .

Источник (ы): 1. канал ожидания процесса (WCHAN) и аварийный сигнал? - 2. Ответ AskUbuntu

11
ответ дан 7 August 2018 в 22:12

Значение ожидающего канала - это имя функции ядра, в которой процесс в настоящий момент заблокирован.

Имя обычно связано с системным вызовом, который будет иметь страницу руководства.

  • futex_wait_queue_me связан с futex . Он относится к типу mutex lock (быстрое взаимное исключение пользователей), которое используется для планирования многих процессов на одном процессоре. Состояние указывает на то, что ваш процесс заблокирован, чтобы получить блокировку. 2
  • do_wait связано с wait .
  • и т. д.

Если вам действительно нужна более подробная информация, вы можете проверить источник ядра .

Если вы

  [& lt; c0227f4e & gt;] poll_schedule_timeout + 0x3e / 0x60  cat / proc / some_pid / stack  в терминале, вы получите некоторый результат:  & lt; c022879f & gt;] do_select + 0x55f / 0x670 [& lt; c0228f40 & gt;] core_sys_select + 0x140 / 0x240 [& lt; c0229241 & gt;] sys_select + 0x31 / 0xc0 [& lt; c05c9cc4 & gt;] syscall_call + 0x7 / 0xb [& lt; ffffffff & gt;] 0xffffffff   

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

Он имеет дело с асинхронным вводом-выводом и опросом .

Источник (ы): 1. канал ожидания процесса (WCHAN) и аварийный сигнал? - 2. Ответ AskUbuntu

11
ответ дан 10 August 2018 в 10:25

Значение ожидающего канала - это имя функции ядра, в которой процесс в настоящий момент заблокирован.

Имя обычно связано с системным вызовом, который будет иметь страницу руководства.

  • futex_wait_queue_me связан с futex . Он относится к типу mutex lock (быстрое взаимное исключение пользователей), которое используется для планирования многих процессов на одном процессоре. Состояние указывает на то, что ваш процесс заблокирован, чтобы получить блокировку. 2
  • do_wait связано с wait .
  • и т. д.

Если вам действительно нужна более подробная информация, вы можете проверить источник ядра .

Если вы

  [& lt; c0227f4e & gt;] poll_schedule_timeout + 0x3e / 0x60  cat / proc / some_pid / stack  в терминале, вы получите некоторый результат:  & lt; c022879f & gt;] do_select + 0x55f / 0x670 [& lt; c0228f40 & gt;] core_sys_select + 0x140 / 0x240 [& lt; c0229241 & gt;] sys_select + 0x31 / 0xc0 [& lt; c05c9cc4 & gt;] syscall_call + 0x7 / 0xb [& lt; ffffffff & gt;] 0xffffffff   

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

Он имеет дело с асинхронным вводом-выводом и опросом .

Источник (ы): 1. канал ожидания процесса (WCHAN) и аварийный сигнал? - 2. Ответ AskUbuntu

11
ответ дан 13 August 2018 в 16:51
  • 1
    Перефразировать , что. :П – Stefano Palazzo♦ 10 January 2011 в 00:04
  • 2
    Похоже, вы заметили, что я снова использовал ваш ответ, чтобы улучшить это ;-) Какую атрибуцию вы хотели бы иметь? – Maxime R. 10 January 2011 в 13:07
  • 3
    Ваш комментарий более чем достаточно, чтобы я был счастлив :) Если вы хотите узнать, как работает атрибуция, есть хороший SO blog post по этому вопросу. Не волнуйтесь слишком много об этом, хотя я хочу, чтобы люди как можно больше использовали мою работу. – Stefano Palazzo♦ 10 January 2011 в 14:03
  • 4
    Ну, я просто писал вопрос по этой теме на мета. (уже прочитал сообщение в блоге) – Maxime R. 10 January 2011 в 14:26
  • 5
    Это здесь . И я готов поспорить, что ваш ответ в какой-то момент закончится мной – Maxime R. 10 January 2011 в 15:11

Другие вопросы по тегам:

Похожие вопросы: