20211301 学习笔记5
教材知识点总结
11.1 EXT2文件系统
-
EXT2:linux的默认文件系统
-
EXT3:扩展,增加了日志文件
-
EXT4:磁盘块的分配
11.2 EXT2文件系统数据结构
-
创建虚拟磁盘:创建指定个块和索引节点的文件系统,可以在虚拟磁盘也可以在真实设备上
-
虚拟磁盘布局:
- 超级块:容纳整个文件系统的信息
-
常用块:小文件系统1kb,大文件系统4kb
-
块组件描述符:将磁盘块分为几个组,每组用一个块组件描述符结构来描述,指向块组的快位图、索引节点位图、索引节点起始块。
-
块位图:Bmap 位图用来表示某种项的位序列,分配和回收项
-
索引节点位图:一个索引节点用来代表一个文件的数据结构
-
索引节点:每个文件都用一个128字节的唯一索引节点结构体表示
直接块:指向直接磁盘块
间接块:指向一个包含256个块编号的磁盘块,每个块指向1个磁盘块
双重间接块:指向一个指向256个块的快,每个块指向256个磁盘块
-
数据块:紧跟在索引节点块后面
-
目录条目:包含dir——entry结构(可扩充结构,不含终止NULL)
-
邮差算法:线性地址转换为街区地址
-
邮差算法应用:
-
索引节点:将索引节点号转换为磁盘上的索引节点
11.10
-
三级文件系统:支持文件系统的挂载、卸载和文件保护
-
挂载算法
mount filesys mount_point
可将某个文件系统挂载在mount——point目录上,允许文件系统包含其他文件系统作为现有文件系统的一部分
-
卸载算法:卸载文件系统操作可卸载已经挂载的文件系统,将挂载文件与挂载点分开
- 交叉挂载点:挂载必须修改函数,遍历一个路径名可能出现交叉
向下遍历:跟随指针来定位挂载表条目,将根索引节点放入内存,然后在挂载设备的根索引节点下搜索x
向上遍历:向上级目录遍历,会与挂载点交叉,切换根目录
-
文件保护:通过文件索引节点的权限位实现文件保护
-
实际uid:当某进程执行setuid程序时,该程序打开文件的setuid位,有效uid就变成了uid
-
有效uid: 简单起见,忽略
-
文件锁定:允许进程对一个文件设置文件锁,防止在更新文件时出现竟态条件
代码实现
- 用一个c程序实现linux中who的功能
#include <stdio.h>
#include <stdlib.h>
#include <utmp.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
int main() {
struct utmp current_record;
int utmpfd;
int reclen = sizeof(current_record);
if ((utmpfd = open(UTMP_FILE, O_RDONLY)) == -1) {
perror(UTMP_FILE);
exit(1);
}
while (read(utmpfd, ¤t_record, reclen) == reclen) {
if (current_record.ut_type == USER_PROCESS) {
printf("%-8.8s", current_record.ut_user);
printf(" ");
printf("%-8.8s", current_record.ut_line);
printf(" ");
long t = current_record.ut_time;
printf("%12.12s", ctime(&t) + 4);
printf(" ");
#ifdef SHOWHOST
printf("(%s)", current_record.ut_host);
#endif
printf("\n");
}
}
close(utmpfd);
return 0;
}
- 交叉挂载
int dev;
if(pathname[0]=='\')
dev = root->dev;
else
dev = runnig->cwd->dev;
int ino=getino(pathname,&dev)
- man-k用法
苏格拉底提问
参考网站
https://zhuanlan.zhihu.com/p/585475479#目录
标签:record,文件系统,笔记,学习,索引,20211301,磁盘,挂载,节点 From: https://www.cnblogs.com/pengqiqi/p/17765517.html