No final dos anos 90, quando eu estava na faculdade, o jornal
JH Saltzer; DP Reed; DD Clark: Argumentos de ponta a ponta no design do sistema . ACM Trans. Comput. Syst. 2 (4): 277-288, 1984. DOI = 10.1145 / 357401.357402
era praticamente uma leitura obrigatória em todas as classes de sistemas operacionais em todas as universidades e ainda parece ser um dos princípios orientadores principais subjacentes ao design da internet. (Veja, por exemplo: J Kempf, R. Austein (eds), e o IAB, " O surgimento do meio e o futuro de ponta a ponta: reflexões sobre a evolução da arquitetura da Internet ", RFC 3724, março de 2004. )
O princípio de ponta a ponta afirma (Saltzer et al., 1984):
[Se] a função em questão pode ser completa e corretamente implementada somente com o conhecimento e a ajuda do aplicativo nos pontos finais do sistema de comunicação, ..., fornecendo essa função questionada como um recurso do próprio sistema de comunicação não é possível. possível. [Embora] algumas vezes uma versão incompleta da função fornecida pelo sistema de comunicação possa ser útil como um aprimoramento de desempenho.
Ou mais brevemente (do resumo):
O argumento de ponta a ponta sugere que funções colocadas em níveis baixos de um sistema podem ser redundantes ou de pouco valor quando comparadas com o custo de fornecê-las nesse nível baixo.
Mas tive pouco sucesso ao aplicar o princípio de ponta a ponta em minha própria experiência (que é na arquitetura de computadores, não na arquitetura da Internet). Como o princípio é declarado como um "poema" (ou seja, em prosa inglesa com vários termos que não são matematicamente definidos), é muito fácil enganar-se ao pensar que "a função em questão pode ser completa e corretamente implementada apenas com o conhecimento e a ajuda do aplicativo ". Mas qual é "a função em questão", muito menos "o conhecimento e a ajuda" de um aplicativo?
Exemplo: As redes on-chip (diferente da Internet) não têm permissão para descartar pacotes, mas têm um buffer bastante limitado; portanto, é necessário ter uma maneira de evitar ou recuperar-se de um conflito. Por outro lado, o aplicativo também precisa se tornar livre de impasse, certo? Portanto, posso pensar que devo tornar o caso comum (sem conflito) rápido e desativar a prevenção de conflitos no aplicativo. Isso é, de fato, o que tentamos em Alewife e Fugu (Mackenzie, et al., Explorando a entrega em dois casos para mensagens com proteção rápida , Int'l Symp High-Perf Comp Arch, (HPCA-4): 231-242, 1998. Ou a dissertação de John Kubiatowicz.) "Funcionou" (interrompendo a interconexão do processador quando os buffers foram preenchidos e o SO aumentado com o buffer do software), mas não vi ninguém na academia ou na indústria (incluindo qualquer um de nós que éramos autores desse Papel HPCA), tentando replicar a ideia. Portanto, aparentemente, a prevenção de conflitos em uma rede não é a mesma "função em questão" que a prevenção de conflitos no nível do aplicativo, ou o princípio de ponta a ponta está errado.
É possível transformar o princípio de ponta a ponta de um "poema" em um teorema? Ou pelo menos, pode ser afirmado em termos compreensíveis para um arquiteto de computador?