2019年5月19日 星期日

按下键时主机与终端的工作

假设您使用一台Unix计算机,且您希望知道现在的时间。显示时间的Unix命令是date。因此,您按下4个键<d><a><t><e>,然后又按下<Enter>键。
随着您按下键,每个字母都会显示在屏幕上,因此可以很自然地猜测您的终端在显示您键入的字母。实际上,情况并非如此。是主机,而不是终端负责将刚键入的内容显示出来。
每次按下键时,终端像主机发送一个信号。然后主机做出响应,在屏幕上显示合适的字符。
例如,当按才<d>键时,终端向主机发送一个含义为“用户刚才发送了一个d字符”的信号。然后主机发送回一个含义为“在终端屏幕上显示字母d”的信号。当着这种情况发生时,我们称主机将字符回显(echo)在屏幕上。
使用鼠标时也会发生相同的事情。
在大多数情况下,所有事情发生的如此之快,就好像键盘和鼠标直接连接到屏幕一样。但是,如果使用一个长距离的连接,例如通过Internet,那么您有时候会注意到按键时间和看到字符显示在屏幕上的时间之间的延迟。当移动鼠标或者按鼠标按键,而屏幕没有立即更新时,也意味着发生了延迟。我们称这一延迟为滞后(lag)

让主机回显的两个原因:
1. 可靠性 如果是终端进行回显,那么当遇到问题时,您就不知道主机的连接是否正常。当您使用一台与主机分离的终端时这一点尤为重要
2. 有一些特定的键(例如<backspace>或者<delete>),按下这些键可以修改刚才键入的内容。Unix的设计目的是要与许多不同的终端一起工作,因此操作系统本身以统一的方式处理按键才有意义,而不要让每种不同类型的终端以自己的方式处理按键。

沒有留言:

張貼留言