IO与显示器

printf的整个过程

库函数printf 系统调用write 字符设备接口crw_table[] tty设备写

如果要输出字符,可以想象printf里操作了与显示器相关的文件。

让外设工作起来。

让外设工作的原理很简单,向外设的寄存器写数据就可以了。

控制器对应着端口,所以最终对外设的使用就是一条指令 OUT xx, AL,各种代码落实到最后就是这条指令。

但是日常使用不是这样,会在这条指令外面包裹很多层代码,目的是让使用变得更简单。

外设使用

  • 向寄存器写数据

  • 等待外设中断

向寄存器写比较麻烦,是非常麻烦。不同设备寄存器不同,和厂家强相关,非常繁琐。需要查寄存器地址、内容语义格式,很麻烦。如果直接这么使用,上层用户是无法接受的。

所以操作系统需要给用户提供一个简单的使用方式。文件视图。文件接口。

一个实际的例子。

int fd = open("/dev/xxx");

for (int i = 0; i < 10; i++)
{
    write(fd, i, sizeof(int));
}

close(fd);

无论什么什么设备都是 open, read, write, close。这就是操作系统提供的统一接口。printf 最后的实现,最后就是上面这段代码。

最后更新于