Linux文件系统-3个重要数据结构及相互间的关系
来源:互联网 发布:2017淘宝双十一规则 编辑:程序博客网 时间:2024/04/27 07:24
在linux文件系统中,有三个重要的数据结构:用户文件描述符,文件表,索引节点表,他们的具体关系如下图所示:
open系统调用将返回文件描述符,作为后续读写等操作使用。每个open调用都导致在用户描述表和内核文件表中分配一个唯一表项。文件项的引用数只有系统调用dup或fork的会使其引用数大于1,内核的索引节点表中,对每个文件只有一个表项,即使对同一文件一个对应读权限打开的文件描述符另一个对应写权限打开的文件描述符。
管道允许在进程之间按先进先出的方式传送数据。管道可用于进程间通信。管道分为两种,无名管道和有名管道,其区别如下:1)无名管道调用pipe创建,有名管道调用open创建;
2)只有相关进程,即发出pipe调用的进程的后代才能共享对无名管道的存取,而所有的进程都能按通常的文件许可权,存取有名管道。
3)无名管道是临时的,当所有进程都结束使用某个管道时,内核便收回它的索引节点,而有名管道在文件系统中永久的存在(可用unlink来清楚)。
进程与管道的接口和进程与文件的接口是一致的。不同的是,在实现上,内核将读写的偏移量放在索引节点中而不是文件表中。
创建无名管道函数pipe一次调用返回两个文件描述符,并且内核也会从文件表中找到两个空闲表项及一个内存inode索引节点,文件描述符和文件表一一对应,而两个文件表则对应同一个inode,执行一个文件表的权限为读,一个文件表的权限为写。inode的引用数设置为2。管道存储数据的缓冲区会由内核从内存中分配出一页大小的内存来作为管道实现数据的读与写。如下图所示:
具体的实现原理后面会用一个篇幅来详细分析,主要涉及其中的数据结构和相应的读写算法。
0 0
- Linux文件系统-3个重要数据结构及相互间的关系
- linux----文件系统中相关数据结构的关系
- linux设备驱动中重要的3个数据结构
- Linux 文件系统(二)---执行过程及结构间的关系
- Linux 文件系统(二)---执行过程及结构间的关系
- Linux 文件系统(二)---执行过程及结构间的关系
- 中断的 3个重要数据结构
- linux 文件系统刨析-数据结构间关系
- linux设备驱动中重要的3个数据结构 &&Linux设备驱动模型几个基本数据结构模型:kobject,kset,subsystem
- 【存储管理】重要数据结构的关系
- linux 文件系统 (一) 文件系统、文件结构、虚拟文件系统的定义及作用、VFS与文件系统的关系
- Linux文件系统学习(二)之重要数据结构
- linux文件系统与设备文件系统的关系?
- Linux kernel 内存管理重要数据结构关系组织图
- Linux 文件系统 重要总结
- linux内存管理重要的数据结构
- linux驱动移植的重要数据结构(一)
- linux驱动移植的重要数据结构(一)
- 仿百度文库文档上传页面的多级联动分类选择器
- Opencv cvAbs函数
- POJ - 1101 The Game DFS
- 音乐作品不像文学或绘画那样
- Java 线程池
- Linux文件系统-3个重要数据结构及相互间的关系
- Coherence(2)配置
- CImage类库
- 开发备忘录
- mysql的SUBSTRING_INDEX 的使用
- STL的内存池的设计源码分析和体会
- linux下获取系统时间
- 使用httpclient模拟表单提交,上传图片
- 一个简单的IOCP(IO完成端口)服务器/客户端类(英文版)