Состояние гонки в xv6

Я новичок в области ОС и пытаюсь изучить это, взломав xv6. Я сомневаюсь, что мы можем решить, прежде чем делать вызов fork, запускать ли родительский или дочерний с помощью системных вызовов. аргумент в пространство ядра и решить, запускать ли сначала родительский или дочерний. Аргумент может быть: 1-родительский 0-дочерний.


person user3274335    schedule 27.02.2016    source источник
comment
И для чего вам это нужно? Как вы гарантируете, что ребенок не будет отложен до того, как он сделает то, что вы от него хотите?   -  person employee of the month    schedule 28.02.2016
comment
Мне нужно это, чтобы контролировать политику планирования. По умолчанию это сначала родительский. Я хотел бы контролировать, запускать ли сначала дочерний или родительский на основе аргумента через системный вызов. Дочерний элемент не будет запланирован раньше, потому что я бы сделал системный вызов для определения политики перед вызовом fork.   -  person user3274335    schedule 28.02.2016
comment
Это не отвечает на мой вопрос. Позвольте мне указать препятствие еще раз. Скажем, вы планируете запустить ребенка первым. Он запускается, начинает выполнять некоторый код и выходит из расписания. Теперь родитель получает процессор. С какой целью ребенок бежал первым и как вы гарантировали достижение этой цели? Например, если ребенок должен был сделать 2 действия, скорее всего, он мог сделать только 1. Или, говоря иначе, пока это выглядит так, как будто вы пытаетесь сделать что-то не так.   -  person employee of the month    schedule 28.02.2016
comment
Если вам нужно что-то сделать до того, как ребенок запустится, и вам не нужен pid ребенка, сделайте это до разветвления. Если вам нужно подождать, пока ребенок что-то сделает, просто подождите, пока ребенок уведомит вас о том, что он сделал то, что вы ждете. Это может быть реализовано, например. наличие общей страницы. Ребенка можно попросить подождать таким же образом, если это действительно необходимо. В любом случае, игры с расписанием звучат в корне неправильно.   -  person employee of the month    schedule 28.02.2016


Ответы (1)


Я думаю, проблема в том, что fork() просто создает копию процесса и делает его работоспособным, но модуль, отвечающий за разрешение его запуска, — это планировщик. Следовательно, упомянутый вами параметр также должен каким-то образом предоставлять эту информацию планировщику.

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

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

person mike    schedule 28.02.2016