(um HD externo, por exemplo) quanto dispositivos que transmitem um volume pequeno, mas precisam de urgencia, como o teclado e o mouse. Voce nao gostaria que o mouse ficasse com as respostas lentas ao salvar um grande arquivo no HD externo, por exemplo. Prevendo isso, o USB suporta tres modos de operacao distintos, chamados de interrupt (interrupcao), bulk (grande volume) e isochronous (isocronico).O modo de interrupcao e um modo de alta prioridade, destinado a teclados, mouses e outros dispositivos de entrada. O controlador reserva 10% da banda disponivel para eles, mantendo sempre um canal descongestionado.O modo isocronico e destinado a dispositivos que precisam transmitir dados via streaming, como, por exemplo, caixas de som e headsets USB. Eles transmitem um volume relativamente pequeno de dados, mas tambem precisam de uma certa prioridade.Finalmente, temos as transferencias em modo bulk, onde temos grandes pacotes de dados, transmitidos com baixa prioridade (como no caso do HD externo). Como os canais para os outros dois modos sao reservados primeiro, as grandes transferencias podem ser feitas utilizando a banda disponivel, sem atrapalhar os outros dispositivos.Essa politica de uso de banda e similar a utilizada em redes, onde os dados sao transmitidos na forma de frames ou pacotes. Isso permite que dispositivos USB 1.1 sejam conectados em portas USB 2.0 sem reduzir a velocidade para outros dispositivos conectados na mesma porta. O controlador simplesmente disponibiliza 12 megabits para o dispositivo USB 1.1 e continua disponibilizando o restante da banda para os demais dispositivos.Outra caracteristica interessante do USB e a capacidade de enumerar e reconhecer novos dispositivos, coisa que nao existia na epoca das portas seriais. Detectar mouses ou modems seriais era um pesadelo para qualquer programador, ja que nao existia uma simples de saber que tipo de dispositivo estava plugado na porta, ou mesmo se a porta estava sendo usada ou nao.A unica forma era apelar para tecnicas indiretas, enviando dados atraves da porta e tentando deduzir quem estava do outro lado a partir das respostas. E por isso que algumas distribuicoes Linux antigas pediam que voce movimentasse seu mouse serial num certo ponto da instalacao, para que ele pudesse ser detectado.No USB as coisas funcionam de forma muito mais eficiente. O controlador percebe quando um dispositivo e conectado e envia um pacote de controle, que o dispositivo responde enviando uma serie de informacoes, incluindo a classe, velocidade, fabricante, string de identificacao e assim por diante.Alem de permitirem que o controlador reserve corretamente os recursos usados pelo dispositivo, essas informacoes sao enviadas ao sistema operacional. Isso permite que o dispositivo seja ativado e o programa ou o aviso correspondente seja mostrado na tela. Aqui temos um exemplo de mensagens de kernel geradas por uma distribuicao Linux ao plugar um joystick USB:usb 1-3: new low speed USB device using ohci_hcd and address 3usb 1-3: configuration #1 chosen from 1 choiceinput: Logitech WingMan Precision USB as /class/input/input2input: USB HID v1.10 Joystick [Logitech WingMan Precision USB] on usb-0000:00:02.0-3As informacoes permitem tambem programar acoes para quando determinados dispositivos sao plugados. No caso do Linux, por exemplo, isso e feito atraves do udev, o