100 б, информатика
Одним из методов выделения памяти процессам в операционной системе является использование разделов фиксированного размера. В этом случае каждый процесс при рождении получает раздел памяти и освобождает эту память после завершения. Все разделы имеют заданный размер, а у процессов есть потребность в памяти. Соответственно процесс может занять раздел не меньший, чем требуемая ему память. При этом каждый процесс занимает раздел целиком, даже если размер раздела больше, чем требуемая процессу память. Если в момент рождения процесса ему доступны разделы разного, но достаточного для него размера, то операционная система всегда выделит для этого процесса меньший из них.
Рассмотрим вычислительную систему. Ее память разделена на 12 разделов: 2 раздела по 32 МБайт, 4 раздела по 16 МБайт и 6 разделов по 8 МБайт.
В систему регулярно поступают запросы на вычисления от двух клиентов. Каждый запрос порождает процесс его вычисления. Системное время дискретно и измеряется в условных тактах.
Для каждого клиента определен набор параметров: количество тактов, по истечении которого появляется очередной запрос от этого клиента, количество тактов, необходимое для выполнения запроса от этого клиента, и объем памяти, необходимый для создания процесса вычисления для каждого запроса.
Будем считать, что конкуренции за процессорное время не возникает, и время выполнения процессов всегда одинаковое и не зависит от того, сколько процессов одновременно выполняется в системе.
В начальный момент времени одновременно приходят запросы от обоих клиентов, а в дальнейшем они приходят через промежутки, указанные в таблице. Если в один момент времени приходят запросы от обоих клиентов, то сначала осуществляется попытка создать процесс для запроса от клиента 1.
Аварией будем считать ситуацию, когда очередной процесс не может быть создан, поскольку в момент появления запроса нет раздела памяти требуемого размера.
Определите, какой по счету запрос от какого клиента вызовет аварию. В ответе укажите через пробел два числа. Сначала номер клиента (1 или 2), а затем номер запроса от этого клиента, который вызвал аварию.
Примечания:
1. Запрос появляется в начальный момент такта. Например, второй запрос от клиента 1 поступит в начале такта 12.
2. Память освобождается в конце такта, который был последним для процесса выполнения соответствующего запроса. Например, процесс обработки первого запроса от клиента 1 освободит память в конце 64-го такта и в начале следующего такта этот раздел памяти вновь будет доступен.
3. У каждого клиента независимая нумерация запросов с 1.
Answers & Comments
язык С++