其他
快速了解操作系统的文件系统设计
当一个程序运行时,它可以将一些信息保存到内存里面。但是,内存的大小是有限制的。 当进程结束运行的时候,它在内存中的信息会被释放掉。但是有些信息是需要保存下来的。 多个进程需要同时访问某些信息,而虚拟内存会将进程隔离。
必须储存大量的信息。 在进程终止时,能将信息保存下来。 多个进程可以并发的访问这些信息。
普通文件(文本文件与二进制文件) 目录 套接字,(神特么翻译成套接字,谁知道是什么鬼东西),是用来与另一个进程进行跨网络通信的文件。
block 与inode 的总量; 未使用与已使用的inode / block 数量; block 与inode 的大小(block 为1, 2, 4K,inode 为128bytes 或256bytes); filesystem 的挂载时间、最近一次写入资料的时间、最近一次检验磁盘(fsck) 的时间等档案系统的相关信息; 一个valid bit 数值,若此档案系统已被挂载,则valid bit 为0 ,若未被挂载,则valid bit 为1 。
inode
VFS
描述符表(discriptor table)。每个进程都有一个自己独立的描述符表,每个表项指向文件表的一个项。 文件表(open file table)。内核维护一张表(所有进程共享),每个打开的文件都在这个表项里面。一个表项包含打开文件的位置,引用计数,以及 v-node 表的表项。 v-node table,该表也是所有进程共享,它其实就是 i-node 的一个抽象(虚拟对象)。
{
char line[4];
printf("pid = %d\n", getpid());
int fd = open("./files/test_fd.txt", O_RDONLY, S_IRUSR);
read(fd, line, 4);
close(fd);
return 0;
}
{
char line[4];
printf("pid = %d\n", getpid());
int fd = open("./files/test_fd.txt", O_RDONLY, S_IRUSR);
read(fd, line, 4);
printf("read line1 -> %s\n", line);
int fd2 = open("./files/test_fd.txt", O_RDONLY, S_IRUSR);
read(fd2, line, 4);
printf("read line2 -> %s\n", line);
close(fd);
close(fd2);
return 0;
}