Частично исправлены и дополнены Баховым Владимиром. Мои размышления на тему задач: 1.1 1) Система прерываний 2) Защита ОП. 3) Привелиг режим. 4) Таймер Замена: Вставка проверок в компилятор. Интерпритация. Отсутвие одного из 4х пуктов-равносильно отсутвию всех. 2.1. Как в решениях. 2.2 int Proc[N]; int index = 0; int CurProcPid; semaphore s = 1;//main int test; semaphore access = 0; void P(s) { do {//access =0 – access granted; 1- denied tsl(test, access); // [test = access, access =1] } while(test);// waiting for access to semaphore if(s == 0) { Proc[index ++ ]= pid(); access = 0;// разрешаем другим пользоваться операциями V и P API_Interrupt();// во избежания активного ожидания и расхода процессорного времени, не на долго прерываем процесс. } else { CurProcPid =Pid(); s--; access = 0;} } V(s) { do { tsl(test,access); } while(test) if(s == 0) { if(index > 0) { CurProcPid = Proc[0];//хотя ждущих процессоров index, тем не менее будим 0й, по принципу FIFO для справедливости. index--; Wake(CurProcPid); // переключаемся на ждущий ресурса процесс. } else s++; } access=0; } 2.3 Вроде в решениях все верно. С коротким методом согласен. 2.4 Страшная формула, верная для числа процов>1 Полтора часа придумывали, но не вакт что верно: ((L-2)divN)(L2-2) + N + (L2-2 - [N- {(L2-2)modN -1}]) 2.5 Согласен с решениями 2.6-2.7, кажется тоже верны, блин, еще бы запомнить все виды консистенстности и сами алгоритмы. 3.1 6(Ts+N*Tb) 3.2 6(Ts+Tb) или не так? 3.3. Решение: Мое видение решения задачи со SCATTER (3.3) 3.4 Кажется в ответах верно 6(Ts+L*Tb) для 4*4 14(Ts+L*Tb) для 8*8 3.5 Получается что в буф режиме должно быть 6(Ts+L*Tb) или 6(Ts+Тб*L/2), хотя как же тогда делимость сообщения? Ведб насколькоя понимаю буфф режим предпологает получение полного соощния? А в небуф режиме 6Ts+Тб*L/2+6Tb, а не 6Ts+Тб*L/2+6 как в ответах. Как првильно, кто как решил, почему? Откуда там в ответе эта отдельная шестерка? Чем отличается синхронный режим, от режима готовности? Получается что в синхранном режме мы еще кучу всремени потратим на подтверждения? Да В буф все сообщения до отправки буферизуются - 6(Ts+Тб*L/2) , в небуферизованном есть возможность после получения первого байта перенаправлять сообщения на выход и тут (внимание!!!) не +6 , а + 5, так как эта однобайтовая задержка возникает только на 5 процессах между первым и последним. итого 6Ts + Тб*L/2 + 5 4.1 Согласен с решением и ответом. 4.2 О как же сообщения ответов, мы их что, не учитываем? По идее получется 16*15*(Ts+Tb*Lm)+ /*Столько же ответов*/16*15*(Ts+Tb*Lansv) 4.3 Согласен с ответами. 4.4 Стронно как то, у меня совсем подругому, там ведь два запроса от каждого процесса в одну стороны: запрос, сообщения об освобождении КС, и один в другую: разрешение, и распаралелить это все не удается. Но на глаз-число намного больше чем в ответе. 4.5 С задирой вообще все темно, как бцдешь считать, такой ответ и получишь помоему. Единственно, что я понял это 15ый процесс в конце потратит 6(Ts+N*Tb) на то, чтобы броадкастом оповестить всех о том, что он координатор, а сколько до этого-ильно зависит от разных факторов имхо. 4.6 Ну, тут если организовать на матрице круг, то получиться 2 круга по 16*(Ts+L1*Tb) и 16*(Ts+L2*Tb) тиков, причем еще же подтрвержения на первом руге, которые будут идти в противотоке и вроде не окажут влияния на ответ. Присылайте свои идеи, выложу под вашим авторством!