9.3 联机命令接口的实现

L53

学习目标

本节对应课件 9.3 联机命令接口的实现;已融入原有原理与实验内容。

  • 掌握 9.3 联机命令接口的实现 的核心概念。

原理 · 深入理解

9.3 联机命令接口的实现

本节概览:先建立「联机命令接口的实现」的框架,再依次展开下列小节。

  1. 键盘终端处理程序
  2. MS-DOS解释程序
  3. Shell解释程序

9.3.1 键盘终端处理程序

回送显示(回显):每当用户从键盘输入一个字符后,终端处理程序便将该字符送到屏幕上显示出来,便于用户确认输入是否正确。

键入口令时则需关闭回显,避免口令留在屏幕上泄露。

屏幕编辑:用户经常希望对从键盘打入的数据进行修改,如删除或插入一个或多个字符。终端处理程序应能实现屏幕编辑功能,提供若干编辑键。

  1. 删除字符键
  2. 删除一行键
  3. 插入键
  4. 移动光标键
  5. 屏幕上卷或下移键等

字符接收功能:键盘终端处理程序必须能接收从终端输入的字符并传送给用户程序。有两种实现方式——面向字符方式和面向行方式。

字符缓冲功能:为暂存从终端键入的字符、降低中断处理器的频率,终端处理程序还须具有字符缓冲功能,可采用专用缓冲方式或公用缓冲方式。

  1. 面向字符方式
  2. 面向行方式
  3. 专用缓冲方式
  4. 公用缓冲方式

微机或终端上配置的键盘终端处理程序应具有下述功能:① 接收用户从终端打入的字符;② 字符缓冲,暂存所接收的字符;③ 回送显示;④ 屏幕编辑;⑤ 特殊字符处理。

9.3.2 MS-DOS解释程序

命令解释程序的组成:以 MS-DOS 的 COMMAND.COM 为例,它包括以下三部分。

  1. 常驻部分:常驻内存,负责处理中断和出错处理
  2. 初始化部分:系统启动时获得控制权,完成系统初始化并自动执行 AUTOEXEC.BAT,之后把控制权交给暂存部分
  3. 暂存部分:驻留内存但可被覆盖,负责读入并处理用户命令

命令解释程序的工作流程:系统接通电源或复位后,初始化部分获得控制权,对整个系统完成初始化,并自动执行 AUTOEXEC.BAT,之后把控制权交给暂存部分。

暂存部分首先读入键盘缓冲区中的命令,判别其文件名、扩展名及驱动器名是否正确;若发现错误,给出出错信息后返回;若无错,再识别该命令并转相应处理程序执行。

图9-2 COMMAND.COM的工作流程 读命令 内部命令 / 外部命令 执行
图9-2 COMMAND.COM的工作流程

命令解释程序的作用:在联机操作方式下,终端处理程序把用户键入的信息送键盘缓冲区保存。一旦用户键入回车符,便立即把控制权交给命令解释程序。

命令解释程序主要作用:在屏幕上给出提示符,请用户键入命令;读入命令并识别;转到相应命令处理程序的入口地址,把控制权交给该处理程序执行;把处理结果显示在屏幕上。若命令有错或执行中出现问题时,应显示出错信息。

9.3.3 Shell解释程序

Shell 命令的特点:Shell 命令类型多而复杂,导致 Shell 命令解释程序十分复杂。

  1. 一条命令行中可含有多个命令
  2. 具有不同的分隔符(如「;」「&」「|」等)
图9-3 命令表型结点及其左、右子树 命令结点 左:参数 右:下一命令
图9-3

Linux 命令解释程序的工作流程:在 Linux 系统中,系统初启后,内核为每个终端用户建立一个进程,去执行 Shell 解释程序。

Shell 进程读入命令行后,按结构解析为二叉树,递归地执行各结点:内部命令直接执行,外部命令 fork 子进程执行,管道结点用管道连接两子进程的输入输出。

图9-3 命令表型结点及其左、右子树 命令结点 左:参数 右:下一命令
图9-3 命令表型结点及其左、右子树

二叉树结构的命令行树:Shell 命令解释程序按命令行语句的结构顺序进行检查,遇到分隔符时建立相应结点,将分隔符左面部分构成左子树、右面部分构成右子树。

命令表型结点:遇到「;」及「&」分隔符时建立命令表型结点。例如命令行 Command1; Command2 & Command3 会构成一棵命令表型二叉树。

图9-4 管道文件型结点及其左、右子树 管道结点 左命令 右命令 左边的输出接到右边的输入
图9-4

简单命令型结点:对于简单命令,命令行中只有一条命令,可立即执行,系统无需为它建立二叉树结构的命令行树。命令解释程序读入命令后,若判定是简单命令,再进一步确定是否是内部命令。

图9-4 管道文件型结点及其左、右子树 管道结点 左命令 右命令 左边的输出接到右边的输入
图9-4 管道文件型结点及其左、右子树

Linux 命令解释程序的工作流程:系统初启后,内核为每个终端用户建立一个进程,去执行 Shell 解释程序。

工作流程

系统初启后,内核为每个终端用户建立一个进程执行 Shell 解释程序。

图9-5 Shell基本执行过程及父子进程之间的关系 读入命令 fork 子进程 exec 程序 wait 回收
图9-5 Shell基本执行过程及父子进程之间的关系

自学 · 建议步骤

先读「原理」,再动手;不要跳过检查点。

  1. 阅读本节原理,完成文中检查点。

总结与提升

  • 能用自己的话复述本节要点。

延伸思考

  • 联机命令接口的实现 与嵌入式实践有何联系?

← 本阶段封面 · 课程列表