鍵盤敲入 A 字母時,操作系統期間發生了什麼?

来源:https://www.cnblogs.com/chenchen4396/archive/2023/08/28/17662687.html
-Advertisement-
Play Games

# 鍵盤敲入 A 字母時,操作系統期間發生了什麼? 關於[8.1 鍵盤敲入 A 字母時,操作系統期間發生了什麼?](https://xiaolincoding.com/os/7_device/device.html)的總結,前面都介紹了,但是在最後總結操作系統發生了什麼的時候,我覺得有點不詳細,於是 ...


鍵盤敲入 A 字母時,操作系統期間發生了什麼?

關於8.1 鍵盤敲入 A 字母時,操作系統期間發生了什麼?的總結,前面都介紹了,但是在最後總結操作系統發生了什麼的時候,我覺得有點不詳細,於是寫一寫自己的補充和理解,不一定正確。

  1. 鍵盤敲擊之後,鍵盤控制器根據敲擊的鍵生成掃描碼,寫入寄存器同時通過中斷控制器向CPU發出中斷請求。CPU接到中斷請求後即停止正在執行的程式,保存現場,轉入鍵盤中斷服務程式。
  2. 中斷服務程式從寄存器中讀出鍵盤掃描碼轉換成Ascii碼與掃描碼一起存入鍵盤緩衝區。然後即返回原程式運行。

而顯示是另外程式的事。有些程式選擇只讀不顯示,比如游戲控制。有的程式不要求輸入比如計算一百萬位圓周率,鍵盤輸入會一直存緩衝區,緩衝區(一般16個字元)滿了就丟棄。有的程式需要即時操作,在讀緩衝區之前會先清除緩衝區等你新鮮按鍵。比如賽車游戲,在開始載入時你瞎按了一些鍵。如果不清除,等賽車就位就可能先瞎轉一氣當一個程式需要鍵盤輸入時,即查詢鍵盤緩衝區,如果有按鍵即讀入,如果沒有就等待一直到鍵盤緩衝區中有新的輸入。鍵盤中斷與程式讀鍵盤類似生產者與消費者。瓜農(操作系統)聽到西瓜熟了的聲音(中斷)就去把瓜揀了放入倉庫。用戶(程式)想吃瓜就去倉庫,如果有就抱走,如果沒有就死等。如果西瓜成熟沒有聲音,瓜農就只好整天在瓜地轉悠(輪詢),這樣效率很低。

這時候你可能會想,輸入緩衝區只有一個,操作系統如何對應知道當前的輸入對應哪一個程式?

焦點和活動視窗: 操作系統會跟蹤當前的活動視窗,即用戶正在與之交互的視窗。這個視窗可能是用戶最後點擊的視窗,或者是用戶通過任務切換等方式設定的。操作系統知道哪個視窗是活動視窗,並因此決定將鍵盤輸入發送到這個視窗。
活動視窗或應用程式會擁有一個事件隊列。當鍵盤輸入發生時,操作系統會創建一個鍵盤事件,並將其放入活動視窗的事件隊列中。
應用程式通常在事件迴圈中不斷地檢查事件隊列。當應用程式發現有新的鍵盤事件時,它會從事件隊列中取出事件並執行相應的處理。這可能包括更新用戶界面、執行特定操作或進行其他適當的響應。




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 關於IDEA的預覽版 - IDEA會啟用新的UI,這事 ...
  • 本文將分享使用 GitHub Actions 完成對一個.Net Core+Vue 的前後端分離項目 zhontai 的構建,並使用 docker 部署到雲伺服器(阿裡雲),及對docker部署.Net Core+Vue的一些經驗分享。 ...
  • AgileConfig 已經好久好久沒有更新過比較大的功能了。一是 AgileConfig 本身的定位就是比較輕量,不想集成太多的功能。二是比較忙(懶)。但是本次升級給大家帶來了一個比較有用的功能 SSO。 ![](https://static.xbaby.xyz/%E5%BE%AE%E4%BF%A ...
  • TDengine 是國內比較流的時序庫之一,支持群集並且免費,在.NET中資料比較少,這篇文章主要介紹SqlSugar ORM來操作TDengine 優點: 1、SqlSugar支持ADO.NET操作來實現TDengine,並且支持了常用的時間函數、支持聯表、分頁和批量插入和刪等操作 2、使用了原生 ...
  • ****## 前言 在講述之工廠方法模式前,我們來先瞭解簡單工廠模式,簡單工廠模式是最簡單的設計模式之一,它雖然不屬於GoF的23種設計模式,但是應用也較為頻繁,同時它也是學習其他創建型模式的基礎。下麵我們來先瞭解下簡單工廠模式,然後針對它的缺點來引出工廠方法模式。 ## 簡單工廠模式定義 **簡單 ...
  • 經過一段時間的準備,新的一期【ASP.NET Core MVC開發實戰之商城系統】已經開始,在之前的文章中,講解了商城系統的整體功能設計,頁面佈局設計,環境搭建,系統配置,及首頁【商品類型,banner條,友情鏈接,降價促銷,新品爆款】,商品列表頁面,商品詳情,購物車等功能的開發,今天繼續講解訂單管... ...
  • 目錄 Linux運維工程師面試題(3)1 LVS 的工作模式有幾種,分別是什麼2 LVS 由哪幾部分組成3 LVS 相關的術語有哪些4 LVS 集群的負載調度演算法有哪些5 使用LVS 可不可以把iptables給禁用刪除6 haproxy 調度演算法有哪些7 nginx 實現負載均衡的分發策略有那些8... ...
  • > 利用for迴圈語句, # 方案一 ##### > 定義1到10的變數,for語句引用該變數 ### 單行代碼 `list="1 2 3 4 5 6 7 8 9 10"; for i in $list; do echo $i; done` ### 多行代碼 for……do……done ``` li ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...