1 标准C库IO函数
- 标准C库跨平台方式,在不同平台下调用不同平台的API。
- 标准C库,效率比系统IO函数更高,因为有缓冲区,降低了写磁盘的次数。
- 根据不同的情况选择,比如对磁盘读写时,选着标准C库IO函数;网络通信要求较高的实时率,就要选择Linux系统IO函数了。
2 标准C库IO函数和Linxu系统IO的关系
调用与被调用的关系
标准C库IO函数将数据读取缓冲区,缓冲区满后写入磁盘。
3 虚拟地址空间
程序所使用的内存地址叫做虚拟内存地址(Virtual Memory Address)。实际存在硬件里面的空间地址叫物理内存地址(Physical Memory Address)。操作系统引入了虚拟内存,进程持有的虚拟地址会通过 CPU 芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存.
- 一个程序运行后对应一个进程,一个进程拥有一个虚拟地址空间
- 32位机器有
2^32B=4GB
的虚拟地址空间 - 虚拟地址空间中的数据会被MMU(内存管理单元)映射到真实的物理内存
- 实际上不会占用4G的内存空间
- 堆空间:从低地址到高地址
- 栈空间:从高地址到低地址
- 通过系统调用操纵内核
4 文件描述符
内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
5
- 文件描述符保存在内核区,由该进程的PCB(进程控制块)管理
- 文件描述符表最大1024,前三个默认被占用,与当前终端绑定
- 同一个文件可以打开多次,但对应的文件描述符不一样
参考链接
如何理解虚拟地址空间?
文件描述符
https://www.nowcoder.com/study/live/504/1/19