版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Unix文件系统,UNIX 文件系统,此讲义用于教学,任何人未经作者同意,不得用于商业行为或赢利性活动。 牛纪桢 大连理工大学计算机系 。,Unix文件系统,UNIX 文件分类 UNIX文件目录结构 UNIX 文件逻辑结构 UNIX文件物理结构 UNIX文件存储器管理 UNIX文件系统调用,UNIX 文件系统,Unix文件系统,UNIX 文件分类,普通文件(文本,图像,代码,声音) 目录文件 设备文件(字符设备,块设备),Unix文件系统,UNIX 文件逻辑结构,无结构的流式文件 由顺序的字节流构成,读写系统调用须指定字节数 read(fd,string,n),read(fd,s,5),Uni
2、x文件系统,UNIX文件物理结构,多重索引结构,i-addr13,i-_addr0,i-_addr10,i-_addr1,i-_addr12,i-_addr11,设块物理地址用四个字节表示,每个索引块可表示128块,5120B,512*128=64K,512*128*128=8M,512*1283 =1G,180块的文件占多少磁盘块?,Unix文件系统,文件的目录结构,/,lib,/,usr,student,etc,UNIX,bin,dev,tmp,s1,sn,d1,f1,lib,bin,ls,sh,passwd,init,hda,Unix文件系统,目录文件与索引节点(i节点),目录文件 (每
3、项16B),i节点(64B),为什么采用这种结构?,这可能是什么文件?,Unix文件系统,目录文件与索引节点(续),文件: /s1/d1/file1,/ 文件,s1:i_node,s1文件,d1:i_node,d1文件,file1:i_node,file1文件,设file1为5块,至少需读盘多少次?最多呢?,Unix文件系统,文件存储器管理空白块成组链接法,卷资源表filsys,50,49,Unix文件系统,磁盘文件索引节点(i_node),Struct dinode i_mode; 权限(主人,组员,其它人) i_addr13; 物理地址 i_nlink; 共享计数 i_uid; 用户 i_
4、gid; 组 i_size; 大小 i_atime; 访问时间 i_mtime; 修改时间 i_ctime; 建立时间 ,Unix文件系统,卷资源表(超级块),struct filsys 文件卷总块数; i节点表块数; 空闲块总数 空闲块栈区; 空闲i节点总数; 空闲i节点数组指针; 修改,互斥标志等 ,Unix文件系统,磁盘结构,引导块 超级块 i节点区 数据块,目录文件放在哪儿?,Unix文件系统,内存文件数据结构(1),每个进程 user中: u_ofileN ;用户打开文件表 u_cdir; 当前目录 u_base; 内存地址 u_count; 存取字节数 系统调用 u_offset;
5、 文件指针,Unix文件系统,内存文件数据结构(2),一个系统打开文件表file struct file f_flag; 读写标志 f_count;共享该读写指针的进程数 f_inode; 活动i节点号 f_offset; 读写指针 ,Unix文件系统,内存文件数据结构(3),每个打开文件一个活动i节点 struct inode dinode; 磁盘i节点拷贝,去掉时间信息 i_dev; i节点所在设备号 i_number;磁盘i节点编号 i_count; file 中共享i节点的个数 i_flag; i节点在内存是否被修改 i_lastr; 最后一次读的磁盘块号 ,Unix文件系统,内存文件
6、数据结构的关系,2,Unix文件系统,文件系统调用,建立文件:creat 删除文件:unlink 读文件:read 写文件: write 打开文件:open 关闭文件:close 文件指针定位:lseek 文件连结:link 设置文件权限:chmod 建立管道文件:pipe 复制文件fd:dup,Unix文件系统,建立文件creat,fd=creat(filename,mode)=,-1 失败 u_ofile下标,申请一个i_node 填写i_node 修改目录文件 打开文件,例:int fd; fd=creat(“file1”,0740);,Unix文件系统,打开文件open,fd=open
7、(filename,mode)=,-1 失败 u_ofile下标,mode=,0-读 1-写 2-读写,进行权限检查 若活动i节点存在:i_count+; 否则:找到磁盘i节点,拷贝到内存,设i_dev,i_number,i_count=1 file中申请一项,f_flage=mode,f_count=1,f_inode=活动inode地址 在进程u_ofile中找一个空元素(从下标0开始找),填写file项地址 返回u_ofile下标 例:int fd; fd=open(“file1”,2);,Unix文件系统,open示意图,file1,u_ofile,file,i_node,u_ofil
8、ei,i_node,fd=? f_flag=? f_inode=? f_count=? f_offset=? i_count=?,j,Unix文件系统,读文件read,read(fd,buf,count)=,-1 失败 0 文件尾 实际读字节数,例:char s50; int fd; fd=open(“file1”,0); read(fd,s,20);,read(fd,buf,count) fp=fd f_flag与本次操作相符? y u_base=buf;u_count=count, u_offset=f_offset device file? n lbn=u_offset/512; on=
9、u_offset%512; n=min(512-on,u_count) dn=i_dev bn=lbn-pbn,lbn=i_lastr+1? n y read bn read bn,bn+1 i_last=lbn,i_flag=1 buffer(on,n) buf u_offset+=n u_base+=n u_count-=n free buffer u_count=0? y set f_offset return(read bytes),n,n,i_addr0 device driver,y,ER,buffer?,Unix文件系统,写文件write,write(fd,buf,count)=
10、,-1 失败 实际写字节数,例:char s50; int fd; fd=open(“file1”,0); scanf(“%s”,s); write(fd,s,20);,write(fd,buf,count) fp=fd f_flag与本次操作相符? y u_base=buf,u_count=count, u_offset=f_offset device file? n lbn=u_offset/512; on=u_offset%512; n=min(512-on,u_count) dn=i_dev bn=lbn-pbn,n=512? n y read bn alloc buffer buf
11、buffer u_offset+=n u_base+=n u_count-=n buffer full? disk write i_size+=n,i_flag=1 u_count=0? y set f_offset return(write bytes),n,n,i_addr0 device driver,y,ER,y,n,buffer,Unix文件系统,关闭文件close,close(fd) main() fd=open(file1,0); read(); close(fd); ,close(fd) f_count- - ,free u_ofile entry f_count= =0? r
12、eturn y i_count- - ,free file entry i_count= =0? return y i_flag = = 1? y i_node=disk free active i_node return,n,n,n,Unix文件系统,文件定位 lseek,lseek(fd,offset,where) 0 file head where= 1 current 2 file tail,lseek(fd,9,0),lseek(fd,5,1),f_offset=“where”+offset,offset value=?,Unix文件系统,建立文件链结link,link(oldnam
13、e,newname); 例:link(fileo,filen);,目录文件,i_node,i_link,Unix文件系统,删除文件unlink,unlink(filename);,i_link - - i_link = = 0? y free file data block free i_node delete directory entry return,n,Unix文件系统,修改文件权限chmod,chmod(file,mode) 例:chmod(file1,0742);,i_mode=mode; i_flag=1;,Unix文件系统,建立无名管道文件pipe,Pipe(int fd2)=
14、,fd0=read u_ofile下标 fd1=write u_ofile下标,u_ofile,file,i_node,fd0,fd1,i_count=2; 使用i_addr0 9,Unix文件系统,关于pipe的要点,lseek( ) ? f_offset? 读、写指针放在i_node中 共享管道文件? 同一进程对同一管道文件 的读写问题 管道的同步与互斥问题,A B C D E F G,pipe(),创建新进程时会引起管道文件的那些变化?,一个管道文件可以有几个读指针?几个写指针?,管道例,子1,子2,管道,父,main() char s20; int i, fd2; pipe(fd);
15、if(fork()=0) for(i=1;i=100;i+) scanf(“%s”,s); write(fd1,s,20); exit(0); else ,if(fork()=0) for(i=1;i=50;i+) scanf(“%s”,s); write(fd1,s,20); exit(0); for(;) read(fd0,s,20); printf(“”%sn”,s); wait(0); wait(0); ,?,父,子1,子2,Unix文件系统,文件重定向(1),dup(fd)=u_ofile 的新下标。 复制用户打开文件表表项,fd,返回,u_ofile,file,返回值一定比fd大吗
16、?,Unix文件系统,文件重定向(2),当进程创建时:系统自动打开三个文件,u_ofile,u_ofile0 u_ofile1 u_ofile2 u_ofilei,stdin: keyboard stdout: screen stderr: screen,$ ls abc fd=open(“abc”,1); close(stdout); dup(fd); close(fd);,abc,$sort feli1 ?,X,Unix文件系统,shell程序的实现,接受输入,进行语法比较 处理后台运行符 处理管道,重定向 建立进程,执行相应程序。,main() . while(1) putchar$);
17、 read(stdin,buffer,number); 语法检查,分出command and parameters; if(fork()=0) if(输出/入重定向 ) fd=creat(newfile,mode); /*fd=open(feli,mode); close(stdout/in); dup(fd); close(fd); if(管道|) pipe(fds); if(fork()=0);/*第一个命令,close(ftdout); dup(fds1); close(fds1); closefds0); execlp(command1,); close(ftdin); dup(fds0); close(fds1); closefds0); execlp(command1,); if(非后台运行 /*while end ,Unix文件系统,小结,UNIX 文件分类(3类) UNIX文件目录结构 UNIX 文件逻辑结构(stream) UNIX文件物理结构(多重索引) UNIX文件存储器管理(空白块成组链结) UNIX文件系统调用(creat,open,read,write ,lseek,chmod,close,pi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 任务三 电机旋变信号电路的故障诊断与检修
- 永寿县2025年四年级数学下学期期中教学质量检测试题(含答案)
- 永善县2025届数学三年级下学期期末调研模拟试题含解析
- 2026年1月试卷8年级(数学)期末复习易错题满分必练(25大题型56题)(北师大版)(原卷版)
- 魔能 详情及通关详细心得
- 传感器-项目二-任务3 磁传感器安装与测试
- 2026年环境保护活动方案策划
- 2026年艺术类实践活动综评
- 2026年班级活动促进学生成长
- 2026年社区指导业委会换届流程
- 2026广东江门市开平江开储能技术有限公司招聘4人备考题库及完整答案详解一套
- 工业机器人系统操作员职业技能等级认考试复习定题(附答案)
- 2026春人教版六年级语文下册期末综合复习提纲(完整版)
- 2026年辽宁高考物理题库含答案
- 2025年北京市延庆区卫生健康委员会所属事业单位第三批招聘医务人员9人考试模拟试题及答案解析
- 2026年威海预售房合同(1篇)
- 2026届广东省广州市华南师大附中生物八年级第二学期期末教学质量检测试题含解析
- 排球上手发球课件教学
- 2026人教版小学三年级语文下册期末考试卷及答案
- 门诊护理流程优化及患者满意度提升
- 制造业工厂安全知识竞赛试题及答案
评论
0/150
提交评论