14

Я читал критический раздел Проблема из концепции операционной системы Петра Б. Галвина. Согласно этомуЧто такое прогресс и ограниченное ожидание в критическом разделе?

1) Прогресс: если ни один процесс не выполняется в критической секции и некоторые процессы, хотят ввести свои критические секции, то только те процессы, которые не исполняющие в их остаточных секциях могут участвовать в принятии решений который войдет в свой критический раздел дальше, и этот отбор не может быть отложен на неопределенный срок.

И

2) Ограниченность ожидание: Там существует граница, или ограничения на количество раз, другие процессы могут вводить свои критические секции после того, как процесс сделал запрос на ввод его и до того, как этот запрос будет предоставлен.

Я не понимаю, что автор хочет сказать в обоих случаях.

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

Thank you.

ответ

56

Во-первых, позвольте мне привести некоторые термины. A критический раздел (CS) - это последовательность инструкций, которые могут выполняться не более чем одним процессом одновременно. При использовании критических разделов код может быть разбит на следующие разделы:

// Some arbitrary code (such as initialization). 

EnterCriticalSection(cs); 

// The code that constitutes the CS. 
// Only one process can be executing this code at the same time. 

LeaveCriticalSection(cs); 

// Some arbitrary code. This is called the remainder section. 

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

Для обеспечения правильной работы критических секций необходимо выполнить три условия. Вы упомянули о двух из них (о чем я расскажу ниже). Третье - взаимное исключение, которое, очевидно, жизненно важно. Стоит отметить, что взаимное исключение относится только к CS и разделу отпуска. Однако остальные три раздела не являются исключительными.

Первое условие: прогресс. Цель этого условия состоит в том, чтобы убедиться, что какой-либо процесс в настоящее время находится в CS и выполняет некоторую работу, или, если есть хотя бы один процесс, который хочет войти в CS, он будет выполнять некоторую работу. В обоих случаях некоторые работы выполняются, и поэтому все процессы достигают прогресса в целом.

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

Давайте поймем это предложение определения предложением. не

Если ни один процесс выполняется в критической секции

Если процесс выполняется в критической секции (даже если не указано явно, это включает в себя раздел отпуска, а), то это означает, что некоторые работы выполняются. Поэтому мы добиваемся прогресса. В противном случае, если бы это было не так ...

и некоторые процессы желают вводить свои критические секции

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

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

Это означает, что мы говорим о тех, процессы, которые выполняются в одном из первых двух разделов (помните, что ни один процесс не выполняется в критической секции или секции отпуска) ...

могут участвовать в принятии решений, которые будут входить в критическую секцию рядом,

Поскольку существует хотя бы один процесс, который хочет войти в его CS, мы должны выбрать один из них, чтобы ввести его CS. Но кто это сделает? Те, кто уже просил разрешения войти в свои критические разделы, имеют право участвовать в принятии этого решения. Кроме того, те процессы, которые могут, хотят войти в свои CS, но еще не просили разрешения на это (это означает, что они выполняются в первом разделе) также имеют право участвовать в принятии этого решения.

и этот отбор нельзя отложить на неопределенный срок.

Это означает, что для выбора процесса ввода его CS потребуется ограниченное время. В частности, не будет deadlock or livelock. Таким образом, через это ограниченное количество времени процесс войдет в его CS и проделает определенную работу, тем самым достигнет прогресса.

Теперь я объясню последнее условие, а именно ограниченное ожидание. Цель этого условия - убедиться, что каждый процесс получает возможность фактически войти в свой критический раздел, чтобы не было процесса starves forever. Однако учтите, что ни это условие, ни прогресс не гарантируют справедливость. Внедрение CS не должно быть справедливым.

Bounded ожидания: Там существует предел, или предел, на количество раз другие процессы позволили ввести их критические секции после того, как процесс сделал запрос на ввод в критическую секцию и до этого запроса предоставляется.

Давайте поймем это определение предложения предложением, начиная с последнего.

после того, как процесс сделал запрос на ввод своего критического раздела и , прежде чем этот запрос будет предоставлен.

Другими словами, если есть процесс, который запросил ввести его CS, но еще не ввел его. Давайте назовем этот процесс П.

Там существует предел, или предел, на количество раз другие процессы могут ввести их критические секции

В то время как P ждет, чтобы войти в CS, другие процессы также могут ждать, а некоторые процессы выполняются в его CS. Когда он покидает свой CS, необходимо выбрать другой процесс для ввода CS, который может быть или не быть P. Предположим, что был выбран процесс, отличный от P. Такая ситуация может случиться снова и снова. То есть, другие процессы получают возможность войти в свои CS, но никогда не помнят, что прогресс идет, но другими процессами, а не P. Проблема в том, что P не получает возможности выполнять какую-либо работу. Чтобы предотвратить голодание, должна быть гарантирована, что P в конечном итоге войдет в ее CS. Чтобы это произошло, количество раз, когда другие процессы входят в свои CS, должно быть ограничено. В этом случае P, безусловно, получит шанс войти в свою CS.

Я хотел бы упомянуть, что определение CS может быть обобщено так, чтобы в их критических разделах выполнялось не более N процессов, где N - любое положительное целое число. Существуют также варианты критических разделов считывающего устройства.

+2

Замечательная строка за строкой –

+1

Вы потрясаете. Отличное объяснение! – void

1

В целом, решение проблемы критической секции должны удовлетворять трем условиям:

  1. Взаимное исключение: Эксклюзивный доступ каждого процесса к совместно используемой памяти. В любой момент времени в критическом разделе может быть только один процесс.

  2. Прогресс: Если ни один процесс не находится в критической секции, и если один или несколько потоков требуется выполнить их критическую секцию, то любой из этих нитей должно быть позволено войти в критическую секцию.

  3. Bounded Ожидание: После того, как процесс делает запрос на получение в критическую секцию, существует предел того, как многие другие процессы могут попасть в их критическую секцию до запроса этого процесса является само собой разумеющееся. Таким образом, после достижения лимита система должна предоставить разрешение на процесс доступа в свой критический раздел. Целью этого условия является обеспечение того, чтобы каждый процесс получал возможность фактически войти в его критический раздел, чтобы ни один процесс не оставался навсегда.

2

Взаимное исключение

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

Изображения для прогресса:

Progress

Прогресса

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

Bounded ждет

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

Примечание
Никаких предположений не связано с H/W или скорость обработки.