操作系统实验7:终端设备字符显示的控制

实验目的

  1. 加深对操作系统设备管理基本原理的认识,实践键盘中断、扫描码等概念;
  2. 通过实践掌握Linux 0.11对键盘终端和显示器终端的处理过程。

实验内容

本实验的基本内容是修改Linux 0.11的终端设备处理代码,对键盘输入和字符显示进行非常规的控制。

在初始状态,一切如常。用户按一次F12后,把应用程序向终端输出所有字母都替换为“*”。用户再按一次F12,又恢复正常。第三次按F12,再进行输出替换。依此类推。

以ls命令为例:

正常情况:

ls
hello.c hello.o hello

第一次按F12,然后输入ls:

 **
*****.* *****.* *****

第二次按F12,然后输入ls:

ls
hello.c hello.o hello

第三次按F12,然后输入ls:

**
*****.* *****.* *****

实验过程

要完成这个实验,要清楚两点,第一是键盘输入是如何处理的,第二点是信息是怎么显示到显示器上的,详细的过程可以看李治军老师的书《操作系统原理、实现与实践》中的第8章。

键盘输入处理

键盘I/O是典型的中断驱动,所以这个过程是从中断开始的,当然这里指的是按下按键之后。以scanf()函数为例,整个过程如下:

keyboard_interrupt ---> inb 0x60,al ---> do_self ---> read_q ---> copy_to_cooked ---> secondary --->
wake_up ---> tty_read ---> rw_ttyx ---> rw_char ---> sys_read ---> read ---> scanf.

当然并不是所有按键都调用do_self函数进行处理,对于F12按键,其调用的函数是func,因此要对该函数进行修改或者重写,目的就是要在按下F12的时候进行标记。

信息显示过程

以调用printf()函数为例,打印到显示器信息需要经历下面的过程:

printf ---> write ---> sys_write ---> rw_char ---> rw_ttyx --- > tty_write ---> wtite_q --->
 con_write ---> "mov ax,[pos]"

上面的过程中,con_write函数是真正的写函数,因此需要在此之前修改显示的内容,可以在写write_q队列的时候进行修改。

结合上面的两个过程,总结起来要修改两个地方,一是按键处理,二是显示处理。

修改F12按键的处理函数

在`kernel/chr_drv/keyboard.S文件中找到key_table数组,在其中找到F12对应的处理函数,如下图所示:
在这里插入图片描述
由于func函数对应多个按键,因此这里将F12按键对应的处理函数改称myfunc,然后实现myfunc函数,这里函数里主要是标记F12是否按下。

F12按键处理函数的实现

处理函数的实现很简单,仅仅只是标记F12是否按下。为了方便(其实是偷懒),将这个函数放到已有的c文件中,这里我把它放到console.c文件中,同时定义一个全局变量,用于标记F12的状态。代码如下:

int f12_flag = 0;

extern void myfunc(void);

void myfunc(void)
{
	if(f12_flag)
		f12_flag = 0;
	else
		f12_flag = 1;
}

显示处理

上面已经标记了按键状态,则显示的时候只需要根据全局变量的值进行相应的显示就可以了。这里在写write_q队列的时候进行修改,即在con_write函数中修改,该函数在kernel/chr_drv/tty_io.c文件中,修改如下:
在这里插入图片描述

验证

编译然后运行,测试结果如下:(注意,笔记本可能需要按Fn + F12)
在这里插入图片描述
可以发现,在第二次按下之后,可以恢复显示,为了能够更清楚的显示,可以保留原来的换行,即不替换换行,代码如下:

/* 新增代码 */
if(f12_flag && c != '\n')
	c = '*';   //按下一次f12后,所有的字符都变成 '*'

在这里插入图片描述
只要弄清楚了键盘中断处理过程和显示过程,这个实验就非常简单了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
操作系统 李治军 pdf》是一本由作者李治军撰写的关于操作系统的书籍的电子版PDF文件。操作系统是计算机系统中的一个核心组成部分,它负责管理和控制计算机的硬件和软件资源,使得计算机能够高效地运行各种应用程序。 在这本书中,李治军详细介绍了操作系统的基本概念、原理和设计原则。他从操作系统的起源和发展历程出发,讲解了多道、分时和实时操作系统等不同类型的操作系统,并深入解析了其内核结构和功能。此外,书中还讨论了进程管理、内存管理、文件系统、输入输出控制等重要的操作系统主题,为读者提供了全面了解和深入学习的机会。 这本书的PDF版本使得读者可以更加便捷地获取其中的内容,无论是在电脑、平板还是手机上都可以进行阅读。通过阅读这本书,读者可以深入了解操作系统的基本原理和相关技术,有助于他们提升对计算机系统的理解和应用。对于学习计算机科学或相关专业的学生和从事软件开发工作的技术人员来说,这本书是一本宝贵的参考资料。 总之,《操作系统 李治军 pdf》是一本全面介绍操作系统的书籍的电子版PDF文件,读者可以通过阅读它来深入了解操作系统的原理和技术。这本书的出现为学习和研究操作系统提供了便利,对于对计算机系统有兴趣的人士来说是一本值得阅读的优秀教材。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忆昔z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值