В конце 1990-х, когда я учился в аспирантуре, газета
JH Saltzer; DP Reed; Д. Д. Кларк: Сквозные аргументы в дизайне системы . ACM Trans. Вычи. Сист. 2 (4): 277-288, 1984. DOI = 10.1145 / 357401.357402
в каждом классе операционных систем в каждом университете требовалось чтение, и это все еще кажется одним из основных руководящих принципов, лежащих в основе дизайна Интернета. (См., Например: J Kempf, R Austein (eds) и IAB, « Подъем середины и будущее сквозного : размышления об эволюции архитектуры Интернета », RFC 3724, март 2004 г. )
Принцип сквозного принципа гласит (Saltzer et al., 1984):
[Если] рассматриваемая функция может быть полностью и правильно реализована только с ведома и при помощи приложения, стоящего в конечных точках системы связи, ... при условии, что эта сомнительная функция как функция самой системы связи не является возможный. [Хотя] иногда неполная версия функции, предоставляемой системой связи, может быть полезна в качестве повышения производительности.
Или более кратко (из аннотации):
Сквозной аргумент предполагает, что функции, размещенные на низких уровнях системы, могут быть избыточными или иметь небольшую ценность по сравнению со стоимостью их предоставления на этом низком уровне.
Но у меня был небольшой успех в применении сквозного принципа в моем собственном опыте (который относится к компьютерной архитектуре, а не к интернет-архитектуре). Поскольку принцип сформулирован как «стихотворение» (т. Е. В английской прозе с набором терминов, которые не определены математически), довольно легко обмануть себя, полагая, что «данная функция может быть полностью и правильно реализована только с знание и помощь приложения. " Но что такое «рассматриваемая функция», не говоря уже о «знаниях и помощи» приложения?
Пример: внутрипроцессным сетям (в отличие от интернета) запрещается отбрасывать пакеты, но они имеют довольно ограниченную буферизацию, поэтому необходимо иметь какой-либо способ избежать или восстановиться из тупика. С другой стороны, приложение должно быть само по себе свободным от тупиков, не так ли? Таким образом, я мог бы поспорить, что я должен ускорить общий случай (без тупиков) и отключить предотвращение тупиковых ситуаций в приложении. На самом деле это то, что мы попробовали на Алефай и Фугу (Маккензи и др., Использование доставки в двух случаях для быстрой защиты сообщений , Int'l Symp High-Perf Comp Arch, (HPCA-4): 231-242, 1998. Или диссертация Джона Кубятовича.) Это «сработало» (благодаря тому, что межсоединение прерывало процессор, когда буферы были заполнены, и увеличив операционную систему с программной буферизацией), но я не видел никого в академических кругах или промышленности (включая кого-либо из нас, кто был автором этого HPCA paper) мчится вокруг, пытаясь воспроизвести идею. Таким образом, очевидно, что предотвращение взаимоблокировок в сети - это не та «рассматриваемая функция», как предотвращение взаимоблокировок на уровне приложений, или сквозной принцип неверен.
Можно ли превратить сквозной принцип из «стихотворения» в теорему? Или, по крайней мере, это можно сформулировать в терминах, понятных компьютерному архитектору?