Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update ch7 1file-descriptor.rst #229

Merged
merged 1 commit into from
Oct 27, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions source/chapter7/1file-descriptor.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

.. chyyuu 可以简单介绍一下文件的起源???

在UNIX操作系统之前,大多数的操作系统提供了各种复杂且不规则的设计实现来处理各种I/O设备(也可称为I/O资源),如键盘、显示器、以磁盘为代表的存储介质、以串口为代表的通信设备等,使得应用程序开发繁琐且很难统一表示和处理I/O设备。随着UNIX的诞生,一个简洁优雅的I/O设备抽象出现了,这就是 **文件** 。在 UNIX 操作系统中,”**一切皆文件**“ (Everything is a file) 是一种重要的设计思想,这种设计思想继承于 Multics 操作系统的 **通用性** 文件的设计理念,并进行了进一步的简化。在本章中,应用程序访问的 **文件** (File) 就是一系列的字节组合。操作系统管理文件,但操作系统不关心文件内容,只关心如何对文件按字节流进行读写的机制,这就意味着任何程序可以读写任何文件(即字节流),对文件具体内容的解析是应用程序的任务,操作系统对此不做任何干涉。例如,一个Rust编译器可以读取一个C语言源程序并进行编译,操作系统并并不会阻止这样的事情发生
在UNIX操作系统之前,大多数的操作系统提供了各种复杂且不规则的设计实现来处理各种I/O设备(也可称为I/O资源),如键盘、显示器、以磁盘为代表的存储介质、以串口为代表的通信设备等,使得应用程序开发繁琐且很难统一表示和处理I/O设备。随着UNIX的诞生,一个简洁优雅的I/O设备抽象出现了,这就是 **文件** 。在 UNIX 操作系统中,”**一切皆文件**“ (Everything is a file) 是一种重要的设计思想,这种设计思想继承于 Multics 操作系统的 **通用性** 文件的设计理念,并进行了进一步的简化。在本章中,应用程序访问的 **文件** (File) 就是一系列的字节组合。操作系统管理文件,但操作系统不关心文件内容,只关心如何对文件按字节流进行读写的机制,这就意味着任何程序可以读写任何文件(即字节流),对文件具体内容的解析是应用程序的任务,操作系统对此不做任何干涉。例如,一个Rust编译器可以读取一个C语言源程序并进行编译,操作系统并不会阻止这样的事情发生


有了文件这样的抽象后,操作系统内核就可把能读写的I/O资源按文件来进行管理,并把文件分配给进程,让进程以统一的文件访问接口与I/O 资源进行交互。在目前和后续可能涉及到的I/O硬件设备中,大致可以分成以下几种:
Expand Down Expand Up @@ -242,4 +242,4 @@
---------------------------------------------------

由于有基于文件抽象接口和文件描述符表,之前实现的文件读写系统调用 ``sys_read/write`` 可以直接用于标准输入/输出文件,很好地达到了代码重用的目标。
这样,操作系统通过文件描述符在当前进程的文件描述符表中找到某个文件,无需关心文件具体的类型,只要知道它一定实现了 ``File`` Trait 的 ``read/write`` 方法即可。Trait 对象提供的运行时多态能力会在运行的时候帮助我们定位到符合实际类型的 ``read/write`` 方法,完成不同类型文件各自的读写。
这样,操作系统通过文件描述符在当前进程的文件描述符表中找到某个文件,无需关心文件具体的类型,只要知道它一定实现了 ``File`` Trait 的 ``read/write`` 方法即可。Trait 对象提供的运行时多态能力会在运行的时候帮助我们定位到符合实际类型的 ``read/write`` 方法,完成不同类型文件各自的读写。
Loading