查看所有文章链接:(更新中)深入浅出操作系统 - 目录

1. 问题

  • 内核级命令如何实现?

1.1 内核级命令的本质

  • 命令所对应的功能需要 内核协助 才能实现
    • 在内核中实现命令的功能(如:获取硬件信息)
    • 创建系统调用接口连接内核功能
    • Shell任务通过 系统调用 实现命令

1.2 命令示例:获取系统物理内存容量(mem)

解决方案:

  1. 系统启动时,在实模式下获取物理内存容量( int 0x15,此时的还是BIOS中断 )
  2. 将物理内存容量暂存于共享内存区
  3. 内核执行时,从共享内存区获取物理内存容量(存入全局变量)
  4. 实现系统调用uint GetMemSize()
  5. Shell任务通过GetMemSize()实现命令mem并打印容量大小

1.2.1 物理内存容量大小获取

78 - 内核级命令实现示例-LMLPHP

1.2.2 物理内存容量大小修正

78 - 内核级命令实现示例-LMLPHP

1.2.3 uint GetMemSize()的实现

78 - 内核级命令实现示例-LMLPHP

1.2.4 mem命令的实现

78 - 内核级命令实现示例-LMLPHP

1.3 编程实验:内核级命令的实现

  1. 测试物理内存容量结果

【参看链接】:78 - 内核级命令实现示例 / 00测试物理内存容量结果

78 - 内核级命令实现示例-LMLPHP
78 - 内核级命令实现示例-LMLPHP

  1. 内核级命令mem的实现

【参看链接】:78 - 内核级命令实现示例 / 01mem命令

78 - 内核级命令实现示例-LMLPHP

2. 小结

  • shell的 本质是一个任务(执行于用户态)
  • shell是 命令解释器,解释用户输入的命令
  • shell的命令可分为3种类型:
    • 启动型命令:启动其它任务(一个或多个)实现功能
    • 应用级命令:shell任务自身实现命令功能
    • 内核级命令:shell依赖内核实现命令功能
04-13 03:01