操作系统或系统程序如何等待用户输入?

Cia*_*n E 3 events system input dispatch

我来自网络编程领域,通常服务器通过指定的方法(get、post 等)设置一个超全局变量,使用户输入到字段中的数据可用。另一种方法是使用 AJAX 将回调方法注册到 AJAX XMLhttpRequest 对象将在浏览器通知后启动的事件(我假设......)。所以我想我的问题是,是否存在某种调度接口,系统程序员的代码必须与之交互以响应用户输入来替代执行,还是程序员直接控制“等待”过程?如果有调度,操作系统中是否有等待特定事件发生的循环结构?

我被提示在这里问这个问题是因为我在上基本的编程逻辑课,教授不会回答这样一个“复杂”的问题。我的书给出了一个模糊的伪代码示例,例如:

    //start
    sentinel_val = 'stop';
    get user_input;
while (user_input not equal to sentinel_val)
     {
         // do something.
         get user_input;
     }
     //stop
Run Code Online (Sandbox Code Playgroud)

这个例子让我相信 1) 如果没有收到用户的输入,循环将继续重复使用旧输入或没有输入的序列“做某事”,直到新输入神奇地出现,然后它会再次重复,或者一个空值。这本书似乎试图使用启动和读取文件的示例来传达程序如何从事件驱动的输入中获取数据,不是吗?

我糊涂了 :(

Ben*_*tto 5

在最低级别,计算机的输入是异步的——它通过“中断”发生,这基本上是 CPU(键盘控制器)外部的东西向 CPU 发送一个信号,说“停止你正在做的事情并接受这个数据”。(这很复杂,但这是总体思路)。所以 CPU 停止,抓取击键,并将其放入缓冲区以供读取,然后继续执行中断前的操作。

入站网络流量以及从磁盘读取的结果等都会发生非常相似的事情。

在更高级别上,它更依赖于您使用的操作系统或框架。

对于键盘输入,可能会有一个进程(基本上是应用程序)被阻塞,等待用户输入。这个“块”并不意味着计算机只是坐在那里等待,而是让其他进程运行。但是当键盘结果进来时,它会唤醒等待它的人。

从等待过程的角度来看,他们调用了一些函数“get_next_character()”,并且该函数返回了字符。等等。

坦率地说,所有这些东西如何联系在一起非常有趣且易于理解。:)