如图18.2所示,用户进程和实际设备之间的顺序如下(从设备到用户进程):

1-实际设备

2-TTY设备驱动程序

3-tty线Dicpline

4-内核读写系统调用

5个用户进程

在另一个链接https://www.linusakesson.net/programming/tty/中,我看到另一个序列如下:

1-实际设备

2-设备驱动程序

3-TTY线路纪律

4 TTY驱动程序

5个用户进程

我的问题是,上面链接中的第四步(tty驱动程序)是否与系统调用相同?或者可以更多地解释,以避免一些模棱两可的地方?

谢谢

推荐答案

Linux OS有两个世界:用户空间,进程所在的地方,以及启动/bin/sh/bin/bahs(或其他任何东西)并try 与/dev/tty*设备对话的地方.以及内核空间,这实际上是操作系统本身在执行其令人不安的职责.

系统调用是跨越这两者之间边界的唯一方法.当您提交readwrite系统调用时,您离开了您的用户空间,并要求内核空间为您做一些事情.特别是,这意味着将运行内核空间代码,而不是您的应用程序(您在应用程序中调用了readwrite).

内核到底会做什么.嗯,这取决于很多因素.例如,与串口设备交谈与与硬盘交谈有很大的不同--这种区别在于物理层面,也就是大自然的工作方式.一个理智的内核不敢独自处理每一件事和每一小点;它宁愿try 公开一个定义良好的公司泛型接口,并让细节在编译时或每次运行时插入其中.驱动程序也是这种类型的:遵守内核要求,它们确实封装了与某些特定类型的物理设备的对话,例如,串口.所以在某个时刻,在内核跳进来之后,你的readwrite会把它传递给被内核选中的驱动程序,那个驱动程序应该实际上将信号传播到设备并回复.

希望这是有意义的,并澄清你的误解.如果没有,请提出更具体的问题.

Linux相关问答推荐

为什么在已连接的设备上调用 btmgmt conn-info 返回:状态 0x02(未连接)

erlang 格式的 utf8 变为 \x(反斜杠 x)ascii 编码

在服务器目录之外启动 DolphinDB 服务器时出错

将文件的一部分插入到另一个文件的特定位置

awk/sed 命令仅在模式 2 匹配时打印模式 1

sed 命令在 gitlab runner 上无法正确执行

`std::cout` 是如何实现的?

sig_atomic_t 实际上是如何工作的?

ld-linux.so.2 和 linux-gate.so.1 是什么?

如何在 linux 'screen' 中搜索任何单词

更改核心转储的位置

何时判断 EINTR 并重复函数调用?

execv() 和 fork() 的时间浪费

./studio.sh 之后的 Android Studio 错误

如何使用 Ansible 等待服务器重启?

Linux AMD64 中如何使用 fs/gs 寄存器?

Mac OS X 中的 ldconfig 等效项?

如何在 Linux 上查找不包含文本的文本文件?

如何将路径名中的..转换为 bash 脚本中的绝对名称?

如何从 Linux 内核模块的 init_module 代码创建设备 node ?