\documentclass[a4paper,12pt]{report}
\usepackage[portuges,brazil]{babel}
\usepackage{amssymb,amsmath,amsfonts}
\usepackage[latin1]{inputenc}
\usepackage{euler}
\usepackage[top=30mm,bottom=30mm,left=20mm,right=20mm]{geometry}
%\topmargin -2cm \oddsidemargin -0.5cm \textwidth 16,5cm
\textheight 25cm
\parindent=1cm
\newcommand{\portanto}{\ensuremath{. {}^. .\;}}
\newcommand{\talque}{ \, \mid \,}
\newcommand{\nat}{\mathbb{N}}
\newcommand{\inteiros}{\mathbb{Z}}
\newcommand{\rac}{\mathbb{Q}}
\newcommand{\reais}{\mathbb{R}}
\newcommand{\complexos}{\mathbb{C}}
\pagestyle{empty}
\newcommand{\dmat}{\displaystyle}
\newcommand{\hsa}{\hspace{0.1cm}}
\newcommand{\hsb}{\hspace{0.25cm}}
\newcommand{\hsc}{\hspace{0.5cm}}
\newcommand{\hsd}{\hspace{0.75cm}}
\newcommand{\hse}{\hspace{1.0cm}}
\begin{document}
\noindent {\bf Universidade Católica Dom Bosco \\
              Curso de Sistemas de Informação \\
              Disciplina: Sistemas Distribuídos\\
              Professor: Ricardo Santos\\
              RA:$_{----------}$ Nome:$_{---------------------------------}$Data:$_{------------}$}\\

\centerline{\bf Avaliação n$^{\textrm{\scriptsize
\b{o}}}$ 1 }


\noindent
\begin{itemize}
\item[1)] Assinale a alternativa correta (V ou F)
\begin{itemize}
\item[( )] Abertura, transparência, concorrência, e compartilhamento
são características de um SD.
\item[( )] Abertura e compartilhamento são características que
indicam que um SD pode ser estendido para suportar mais
usuários/máquinas.
\item[( )] Sistemas Multicomputadores e Multiprocessadores são
sistemas com memória distribuída.
\item[( )] A principal diferença entre um NOS e um DOS é que o NOS
esconde a multiplicidade do hardware dos elementos de software
enquanto o DOS se preocupa em compartilhar os recursos entre os
elementos de software.
\item[( )] Na migração de processos, a política iniciada pelo
transmissor possibilita que uma máquina ociosa inicie a busca por
processos em máquinas que estão sobrecarregadas.
\item[( )] Duas threads podem atribuir valores a uma variável de
maneira a deixá-la inconsistente.
\item[( )] A adoção de middleware, como CORBA, possibilita maior
transparência de localização do que a utilização de
\textit{sockets}.
\item[( )] Ao adotar um serviço de nomes (SN), toda requisição de um
objeto cliente para um objeto servidor deve, obrigatoriamente,
passar por esse serviço já que é ele (o SN) o responsável pela
contacto entre cliente e servidor.
\item[( )] O algoritmo bully consegue eleger um líder mesmo quando um líder eleito ``cai'' antes de enviar a mensagem de líder.
\item[( )] O algoritmo do anel necessita de $2(N-1)$ mensagens, $N=\#$ de processos, no
pior caso, para eleger um líder.
\item[( )] Uma falha no algoritmo distribuído de exclusão mútua
acontece quando  todos os processos não respondem às
requisições. Essa falha acontece no algoritmo
\textit{token ring} quando um processo deseja entrar na região crítica mas o \textit{token} está no próximo processo, na organização do anel.
\item[( )] De maneira geral, a construção de um servidor utilizando \textit{sockets} adota as seguintes primitivas (nessa ordem): \textit{socket}, \textit{listen}, \textit{read}, \textit{bind},  \textit{accept}, \textit{write}, \textit{close}.
\end{itemize}

\newpage

\item[2)] Diferencie as arquiteturas de \textit{threads}: \textit{thread}
por requisição, \textit{thread} por conexão e \textit{thread} por
objeto.




\vspace{12cm}









\item[3)] Descreva o funcionamento do algoritmo de eleição Bully e informe qual é a situação de melhor caso para a esclha do líder?

\newpage

\item[4)] Mostre que o algoritmo centralizado utiliza menos
mensagens para entrar na região crítica que o algoritmo
distribuído.

\newpage
\item[5)] Queremos desenvolver uma aplicação distribuída usando \textit{Sockets} que, dado um valor na linha de comando (args[0]), envia esse valor para um servidor. O servidor deve receber esse valor e enviar uma mensagem do tipo ``OK'' como resposta. Considere os códigos do cliente e servidor a seguir que devem implementar essa aplicada distribuída. Indique quais linhas, no código, contém erros e o que é necessário para corrigi-los.
\begin{itemize}
\item \textbf{Cliente}
\begin{verbatim}
1) Socket s = null;
2) int serverPort = 7896;
3) int send=10;
4) s = new Socket(InetAddress.getByName(args[0]), serverPort);    
5) DataInputStream in = new DataInputStream( s.getInputStream());
6) DataOutputStream out = new DataOutputStream(s.getOutputStream());
7) out.writeUTF(Integer.toString(send));
8) String data = in.readUTF();
\end{verbatim}

\item \textbf{Servidor}
\begin{verbatim}
1) int serverPort = 7896;
2) DataOutputStream in;
3) DataInputStream out;
4) ServerSocket listenSocket = new ServerSocket(serverPort);
5) while(true) {
6)   Socket clientSocket = listenSocket.accept();
7)   in = new DataInputStream( clientSocket.getInputStream());
8)   out =new DataOutputStream( clientSocket.getOutputStream());
9)   out.writeUTF("OK");
10)}
\end{verbatim}
\end{itemize}

\end{itemize}
\end{document}

-----------------------------------------------------------

\documentclass[12pt,fleqn]{report}
\usepackage[brazil]{babel}
\usepackage{amssymb}
\usepackage{amsmath}
%\usepackage{amsfonts}
\topmargin -2cm \oddsidemargin .1cm \textwidth 15cm \textheight
26cm
\parindent=1cm
\newcommand{\portanto}{\ensuremath{. {}^. .\;}}
\newcommand{\talque}{ \, \mid \,}
\newcommand{\nat}{\mathbb{N}}
\newcommand{\inteiros}{\mathbb{Z}}
\newcommand{\rac}{\mathbb{Q}}
\newcommand{\reais}{\mathbb{R}}
\newcommand{\complexos}{\mathbb{C}}
\newcommand{\dmat}{\displaystyle}
\pagestyle{empty}
