鍵盤敲入 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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...