2010-06-21 5 views
9

Questa domanda era nel mio colloquio di lavoro .. Ho solo per vedere se ho dato tutti i dettagli ...Cosa succede dal momento in cui premere un tasto sulla tastiera, fino a che non compare nel documento di Word

+3

è una tastiera cablata o wireless? :-) –

+2

Suggerimento: probabilmente l'intervistatore non era interessato a ricevere una risposta standard. La domanda probabilmente intendeva scoprire quanto sai sui diversi livelli di un computer, quanto interesse hai in ogni parte. Rispondendo a una risposta predefinita, manca completamente il punto. –

+2

La maggior parte delle risposte qui omette il dettaglio più importante: se il fusibile di stress (noto anche come deadline fuse) è al di sopra della soglia del produttore, la CPU capovolgerà un po 'in RAM casualmente. Solo per scherzare con te. Su alcuni sistemi operativi è disponibile un supporto più sofisticato e la soglia del fusibile può essere aumentata in modo selettivo, tenendo conto del backup (supporti di memorizzazione connessi e servizi di rete), dell'ora del giorno (più bit flip dopo 3AM!), Umore generale (riconoscimento vocale) di parolacce tramite microfoni rilevati) e importanza del compito (ricerca e-mail completa). – detly

risposta

36
  • mecha interruttore nica cortocircuiti tirare su fine resistore R1 a terra
  • un multiplexer speciale traduce in un messaggio, per ridurre il numero di fili
  • il messaggio interpretato da una CPU incorporato nella tastiera
  • messaggio tradotto a un messaggio di protocollo USB, e modulato come una serie di impulsi elettrici di tensione alternata tra zero e 5 volt
  • USB ricezione mozzo misure campioni tensione periodicamente
  • regolatore del mozzo
  • ospitante traduce il messaggio di dati
  • dati entrano PC tramite Controlle del bus USB r, collegata al bus PCIE, attraverso una combinazione di notificaitons IRQ e un trasferimento DMA, emesso dal conducente autobus
  • Bus driver interpreta il messaggio e lo inoltra lungo la stack di driver, in ultima analisi a un driver HID
  • driver comunica HID a Windows, in ultima analisi risultante in un messaggio finestra inviato a una finestra appartenente al processo msword
  • WM_KEYDOWN è tradotto in WM_CHAR da DefWindowProc(). Mentre la chiave è inattiva, è possibile che vengano creati più WM_CHAR.
  • applicazione Word cattura WM_CHAR per aggiungere un altro carattere al modello del documento e questione ri-rendering di interfaccia utente
  • UI motore di rendering si traduce unicode codepoint di un'immagine grafica caricando rispettivo carattere
  • motore
  • grafico calcola la nuova immagine di tutta la area per evitare lo sfarfallio, e lo mette pixel per pixel sullo schermo
+0

buona risposta. Se tenuto premuto dopo un certo ritardo, la sequenza si ripete ad un intervallo specifico (ad eccezione della chiusura dell'interruttore meccanico iniziale). Quando la chiave viene rilasciata, la sequenza si ripete di nuovo tranne che per la chiusura dell'interruttore che ora è un interruttore aperto e hai KEYUPS invece di KEYDOWNS. Nel caso in cui ti venga chiesto di utilizzare i mouse sul pulsante di rilascio e non sul pulsante di chiusura, prova tu stesso premere il pulsante del mouse su qualche oggetto, spostare il mouse e rilasciarlo su qualcos'altro. –

+3

Mi dispiace, ma dal momento che non hai affrontato il fatto che, poiché con USB, l'host deve chiedere alla tastiera i nuovi dati prima che la tastiera possa essere inviata all'host, la tua risposta è inadeguata. Stavo solo scherzando. Molto bene. – nategoose

1

Uh , se hai un vecchio vecchio computer binario vecchio: http://en.wikipedia.org/wiki/Punched_card

Quindi, nel momento in cui hai premuto il tasto, potresti probabilmente preparare una tazza di tè!

+1

Una volta ero perplesso, perché hanno usato fori così grandi nelle schede perforate. La risposta è stata sorprendente. La scansione non era affatto ottica. L'hanno usato solo per collegare interruttori metallo-metallo. –

+0

La semplicità stessa! –

10
  1. si sente uno scatto;) [ma non necessario in questa fase, forse al 10 o 20]
  2. segnali di tastiera a KB controllore
  3. regolatore emette un interrupt per CPU
  4. kernel del sistema operativo vede interrompere
  5. spedizioni kernel OS interrompono a corrispondenti conducente
  6. conducente
  7. dice CPU per leggere un charcode dal controllore kb
  8. CPU fa
  9. autista qualche modo dice al kernel di inviare un evento 'KEY_DOWN' nel sottosistema UI
  10. kernel invia evento
  11. controlli dei sottosistemi UI se ci finestra attiva
  12. invia un evento KEY_DOWN interfaccia utente per la finestra attiva

... ehm .. :) stanco così, dopo che invierà un tasto, aggiornare i contenuti della finestra, e chiamare il driver video/sottosistema per disegnare che char

+0

11 è sbagliato. 11 è l'evento KEY_DOWN che va all'applicazione attiva, come identificato dalla finestra attiva. Lasciami continuare. 12. l'applicazione tramite il ciclo principale GetMessage() ottiene l'evento e lo invia tramite DispatchMessage(), probabilmente applicando alcune traduzioni (è qui che si esegue la mappatura a quale finestra l'evento va effettivamente). 13. assegnato alla routine di gestione uniforme della finestra viene chiamato e da qui in poi è responsabilità dell'applicazione. L'elaboratore di testi applicherà la pressione del tasto sul documento in memoria e attiverà l'aggiornamento sullo schermo in modo che il nuovo documento in memoria sia correttamente riflesso sullo schermo. – Dummy00001

Problemi correlati