CS162 Lecture 4: Fork, Introduction to I/O
pthread
- pthread library: POSIX thread library
- POSIX: Portable Operating System Interface(for uniX?)
- 一个重要的观点是,Every is a “File”
File System
-
File
- 是文件系统中被命名的数据
- 可以是文本,二进制数据
- Metadata是文件的信息,包括size,Modification time,owner security info,access control
-
Directory
- 包含文件和目录的“文件夹”
I/O and Storage Layers
C High-Level File API - Streams
-
文件高层次的抽象是输入输出流,流被认为是字节序列
C Low-Level File - File Descriptors
-
Unix I/O的设计理念是
- 任何东西都是文件
- 使用前open
- 以字节为单位
- 在kernel中的buffer读写
-
直接使用系统调用实现,而stream是将系统调用read等打包成fread等
-
从加速操作系统的方面来看,应当尽可能少地使用开销巨大的系统调用,如getpid的user版本比kernel版本快了25倍
Process and File
-
fork后的子进程复制了父进程的文件描述符表
-
因此当shell fork一个新进程时,标准输入0,标准输出1,标准错误2都会被复制到子进程中,在一个进程中关闭文件只会改变这个进程的文件描述符表
-
dup用于复制文件描述符
-
在含有多个线程的进程中fork,子进程只会含有一个线程,也就是调用fork的那个进程
CS162 Lecture 4: Fork, Introduction to I/O