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 最后的实现,最后就是上面这段代码。