读书人

从表盘到本质 分析一下

发布时间: 2013-08-16 14:29:57 作者: rapoo

从表面到本质 分析一下
cin>>a;//执行 输入1 回车

我想问:
那个1是怎样放到指定的内存单元的????
恳求大神结合 组成原理,微机原理,操作系统,数字电路 方面的知识进行解答。从逻辑层面(相关函数,译码电路选择内存单元,写信号有效,相关关微命令序列 等等哈),给个大概思路的解答 不要求很详细,我只想懂起个大致思路。 我和我的小伙伴们期待您的回答! 内存 操作系统 组成原理 数字电路 微机原理
[解决办法]
code层:程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。
过程:键盘中断-〉系统响应-〉获得键值-〉线程处理

其实你这么问倒是不好回答,你去看下键盘驱动以及信号流程就能对你的问题解释的很清楚了。
[解决办法]
键盘扫描码→键码==ASCII码→二进制码
《计算机组成原理》
[解决办法]
执行这条语句的时候, 操作系统发现缓冲区里面没有数据, 把进程挂起,
用户按下键盘, 触发 CPU 中断, 调用操作系统预先设置好的中断服务程序, 中断服务程序进行一些识别处理后把它交给键盘的驱动程序, 驱动程序检查状态, 翻译成一个键盘的编码, 然后操作系统查找输入时有焦点的窗口, 翻译成 WM_KEYDOWN, WM_CHAR, WM_KEYUP 等消息发送给窗口.
控制台窗口实际上是有 Win32 子系统的进程 csrss.exe 在管理, 它获得消息后把消息分发给窗口的 WNDPROC 函数, 这个函数把消息中对应的按键放到控制台的输入缓冲中, 并通过进程通信机制通知控制台所属的进程.
进程收到通知后, 从沉睡状态苏醒过来, 把控制台的输入缓冲放到 stdin 文件缓冲里面, 然后再读入到程序里面的变量 a 中去.
[解决办法]
按下键帽,和键帽固定在一起的键盘开关闭合,电路接通,经过防抖电路处理后的稳定电平被键盘处理芯片检测到并根据闭合点对应的行号和列号组合出硬件键盘扫描码保存到键盘硬件数据端口60h中。(未完待续)
[解决办法]
键盘驱动、设备文件、标准输入……
这样一层层抽象上来的。

读书人网 >C++

热点推荐