|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式操作系统基础知识 > 设备管理 > 设备管理方式(设备文件、设备控制、设备无关性、中断处理、缓冲技术、假脱机技术等) > I/O控制方式 >
|
相关知识点:3个
|
|
|
|
中断驱动方式的基本思路是:当一个用户任务需要进行输入/输出操作时,会去调用相应的系统调用函数,由这个函数来发起输入/输出操作,并将当前任务阻塞起来,然后调度其他的任务去使用CPU。当所需的输入/输出操作完成时,相应的设备就会向CPU发出一个中断,系统在中断处理程序当中,如果发现还有数据需要处理,就再次启动输入/输出操作。在中断驱动的控制方式下,数据的每一次读写还是通过CPU来完成,只不过当输入/输出设备在进行数据处理时,CPU不必在那里等待,而是可以去执行其他的任务。
|
|
|
仍以打印字符为例,如下图所示,在中断驱动方式下,对于用户程序来说,它所做的事情可能是:把需要打印的字符串放到一个缓冲区buffer中,然后调用一个系统调用函数print。在print系统调用中,首先把用户缓冲区中的字符串复制到系统内核的字符数组p当中,然后打开中断。接下来是一个循环检测语句,判断打印机的当前状态是否就绪。当打印机就绪后,就把第一个字符放到数据寄存器里面去打印。接下来,未等该字符打印完,就去调用系统的调度器,选择另一个就绪任务去运行。而当前的这个任务,就会被阻塞起来。
|
|
|
|
|
当打印机完成一个字符后,将向CPU发出一个中断。在中断处理程序当中,首先判断一下,如果所有的字符都已打印完,那么就去阻塞队列中,把用户任务唤醒,使它处于就绪状态。如果还有字符需要打印,就直接把下一个字符复制到打印机的数据寄存器当中,启动打印操作,而不需要再去循环地判断打印机是否就绪。接下来是一些后继处理,先向中断控制器发出一个确认信号,然后结束中断处理程序,返回到被中断的那个任务。
|
|
|