在“UNIX环境中的高级编程”中,用户进程和实际设备之间的顺序如下(从设备到用户进程):1-实际器械
2-tty设备驱动程序
3-tty线
4-内核读、写系统调用
5-用户进程
在另一个链接https://www.linusakesson.net/programming/tty/中,我看到另一个序列如下:1-实际器械
2-驱动装置
3-线纪律
4-tty驱动程序
5-用户进程
我的问题是,上面的第四步链接(tty驱动程序)是否与系统调用相同?或者可以多解释一些,避免一些歧义?
谢谢你的好意
在“UNIX环境中的高级编程”中,用户进程和实际设备之间的顺序如下(从设备到用户进程):1-实际器械
2-tty设备驱动程序
3-tty线
4-内核读、写系统调用
5-用户进程
在另一个链接https://www.linusakesson.net/programming/tty/中,我看到另一个序列如下:1-实际器械
2-驱动装置
3-线纪律
4-tty驱动程序
5-用户进程
我的问题是,上面的第四步链接(tty驱动程序)是否与系统调用相同?或者可以多解释一些,避免一些歧义?
谢谢你的好意
1条答案
按热度按时间vmdwslir1#
Linux有两个世界:用户空间,您的进程所在的地方,以及您启动
/bin/sh
或/bin/bahs
(或其他)并尝试与某个/dev/tty*
设备通信的地方。还有内核空间,实际上是操作系统本身在执行它不稳定的任务。系统调用是跨越这两者之间边界的唯一方法。当您提交
read
或write
系统调用时,您将离开用户空间并请求内核空间代表您执行某些操作。特别是,这意味着内核空间代码将代替您的应用程序(您在其中调用read
或write
)运行。kernel到底会做什么。。这取决于很多因素。例如,与串行设备交谈与与硬盘驱动器交谈有很大的不同-这种差异存在于物理层面,即自然界的工作方式。一个理智的内核是不敢独自处理每一件事和每一件小事的;它宁愿尝试公开一个定义良好的固定通用接口,并在编译时或每次运行时将细节插入其中。司机也是这样:遵循内核要求,它们不能够与某些特定种类的物理设备(例如,串行端口)进行对话。所以在某个时刻,在内核跳转之后,您的
read
或write
将把它传递给内核选择的驱动程序,该驱动程序应该实际将信号传播到设备并回复。我希望这是有意义的,并澄清你的误解。如果没有,请问一个更具体的问题。