Existem basicamente tres metodos de controle de entrada e saida:- pooling (ou entrada/saida programada);- E/S por interrupcao;- acesso direto a memoria, DMA (Direct Memory Access).Na entrada e saida programada o processador fica em um estado de inquisicao para os dispositivos de E/S. Em cada dispositivo e verificada a palavra de status. Se um dado foi enviado ao dispositivo, ou chegou de um dispositivo, o registrador de status do controlador e alterado o que permite ao processador saber se existem dados a serem tratados. Na segunda hipotese de transferencia de dados, o processador nao se preocupa em perguntar aos dispositivos se existem novos dados, mas o proprio dispositivo pede ao processador sua atencao usando um pedido de interrupcao. Neste caso o processador deve parar a execucao do processo corrente e atender ao dispositivo que o chama.Finalmente o processo de DMA desafoga o processador do controle de entrada e saida dos dados entre a memoria e o dispositivo periferico.No DMA o processador usa um dispositivo externo, chamado controlador de DMA, para programar as transferencias de dados. Tipicamente, o processador informa os enderecos da memoria e do dispositivo de E/S envolvidos na transacao e a quantidade de dados a ser transferida. Depois ele libera os barramentos para uso e controle do controlador de DMA. O processo de transferencia de dados diretamente para memoria implica no acesso aos barramentos do sistema (barramento de enderecos, dados e controle que interliga o sistema de memorias, o processador e os dispositivos de E/S). E preciso um arbitro para os barramentos a fim de garantir que cada modulo os utiliza no momento adequado. ThreadThread e uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas simultaneamente. O suporte a thread e fornecido pelo proprio sistema operacional (SO), no caso da Kernel-Level Thread, ou implementada atraves de uma biblioteca de uma determinada linguagem, no caso de um usuario nivel thread.Uma linha de execucao permite que o usuario de programa, por exemplo, utilize uma funcionalidade do ambiente enquanto outras linhas de execucao realizam outros calculos e operacoes.Em hardwares equipados com uma unica CPU, cada linha de execucao(Thread) e processada de forma aparentemente simultanea, pois a mudanca entre uma linha e outra e feita de forma tao rapida que para o usuario isso esta acontecendo paralelamente. Em hardwares com multiplos CPUs ou multi-cores as linhas de execucao(Threads) podem ser realizadas realmente de forma simultanea;Os sistemas que suportam apenas uma unica linha de execucao sao chamados de monothread e aqueles sistemas que suportam multiplas linhas de execucao sao chamados de multithread.ExemploUm exemplo simples pode ser expressado atraves de um jogo onde o mesmo pode ser modelado com linhas de execucao diferentes, sendo uma para desenho de imagem e outra para audio; Neste caso, ha um thread para tratar rotinas de desenho e outro thread para tratar audio; No ponto de vista do usuario, a imagem e desenhada ao mesmo tempo em que o audio e emitido pelos auto-falantes; Porem, para sistemas com uma unica CPU, cada linha de execucao e processada por vez;No navegador como por