UNIX文件系统.ppt
《UNIX文件系统.ppt》由会员分享,可在线阅读,更多相关《UNIX文件系统.ppt(40页珍藏版)》请在冰点文库上搜索。
Unix文件系统,UNIX文件系统,此讲义用于教学,任何人未经作者同意,不得用于商业行为或赢利性活动。
牛纪桢大连理工大学计算机系。
Unix文件系统,UNIX文件分类UNIX文件目录结构UNIX文件逻辑结构UNIX文件物理结构UNIX文件存储器管理UNIX文件系统调用,UNIX文件系统,Unix文件系统,UNIX文件分类,普通文件(文本,图像,代码,声音)目录文件设备文件(字符设备,块设备),Unix文件系统,UNIX文件逻辑结构,无结构的流式文件由顺序的字节流构成,读写系统调用须指定字节数read(fd,string,n),read(fd,s,5),Unix文件系统,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节点),目录文件(每项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),Structdinodei_mode;权限(主人,组员,其它人)i_addr13;物理地址i_nlink;共享计数i_uid;用户i_gid;组i_size;大小i_atime;访问时间i_mtime;修改时间i_ctime;建立时间,Unix文件系统,卷资源表(超级块),structfilsys文件卷总块数;i节点表块数;空闲块总数空闲块栈区;空闲i节点总数;空闲i节点数组指针;修改,互斥标志等,Unix文件系统,磁盘结构,引导块超级块i节点区数据块,目录文件放在哪儿?
Unix文件系统,内存文件数据结构
(1),每个进程user中:
u_ofileN;用户打开文件表u_cdir;当前目录u_base;内存地址u_count;存取字节数系统调用u_offset;文件指针,Unix文件系统,内存文件数据结构
(2),一个系统打开文件表filestructfilef_flag;读写标志f_count;共享该读写指针的进程数f_inode;活动i节点号f_offset;读写指针,Unix文件系统,内存文件数据结构(3),每个打开文件一个活动i节点structinodedinode;磁盘i节点拷贝,去掉时间信息i_dev;i节点所在设备号i_number;磁盘i节点编号i_count;file中共享i节点的个数i_flag;i节点在内存是否被修改i_lastr;最后一次读的磁盘块号,Unix文件系统,内存文件数据结构的关系,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修改目录文件打开文件,例:
intfd;fd=creat(“file1”,0740);,Unix文件系统,打开文件open,fd=open(filename,mode)=,-1失败u_ofile下标,mode=,0-读1-写2-读写,进行权限检查若活动i节点存在:
i_count+;否则:
找到磁盘i节点,拷贝到内存,设i_dev,i_number,i_count=1file中申请一项,f_flage=mode,f_count=1,f_inode=活动inode地址在进程u_ofile中找一个空元素(从下标0开始找),填写file项地址返回u_ofile下标例:
intfd;fd=open(“file1”,2);,Unix文件系统,open示意图,file1,u_ofile,file,i_node,u_ofilei,i_node,fd=?
f_flag=?
f_inode=?
f_count=?
f_offset=?
i_count=?
j,Unix文件系统,读文件read,read(fd,buf,count)=,-1失败0文件尾实际读字节数,例:
chars50;intfd;fd=open(“file1”,0);read(fd,s,20);,read(fd,buf,count)fp=fdf_flag与本次操作相符?
yu_base=buf;u_count=count,u_offset=f_offsetdevicefile?
nlbn=u_offset/512;on=u_offset%512;n=min(512-on,u_count)dn=i_devbn=lbn-pbn,lbn=i_lastr+1?
nyreadbnreadbn,bn+1i_last=lbn,i_flag=1buffer(on,n)bufu_offset+=nu_base+=nu_count-=nfreebufferu_count=0?
ysetf_offsetreturn(readbytes),n,n,i_addr0devicedriver,y,ER,buffer?
Unix文件系统,写文件write,write(fd,buf,count)=,-1失败实际写字节数,例:
chars50;intfd;fd=open(“file1”,0);scanf(“%s”,s);write(fd,s,20);,write(fd,buf,count)fp=fdf_flag与本次操作相符?
yu_base=buf,u_count=count,u_offset=f_offsetdevicefile?
nlbn=u_offset/512;on=u_offset%512;n=min(512-on,u_count)dn=i_devbn=lbn-pbn,n=512?
nyreadbnallocbufferbufbufferu_offset+=nu_base+=nu_count-=nbufferfull?
diskwritei_size+=n,i_flag=1u_count=0?
ysetf_offsetreturn(writebytes),n,n,i_addr0devicedriver,y,ER,y,n,buffer,Unix文件系统,关闭文件close,close(fd)main()fd=open(file1,0);read();close(fd);,close(fd)f_count-,freeu_ofileentryf_count=0?
returnyi_count-,freefileentryi_count=0?
returnyi_flag=1?
yi_node=diskfreeactivei_nodereturn,n,n,n,Unix文件系统,文件定位lseek,lseek(fd,offset,where)0fileheadwhere=1current2filetail,lseek(fd,9,0),lseek(fd,5,1),f_offset=“where”+offset,offsetvalue=?
Unix文件系统,建立文件链结link,link(oldname,newname);例:
link(fileo,filen);,目录文件,i_node,i_link,Unix文件系统,删除文件unlink,unlink(filename);,i_link-i_link=0?
yfreefiledatablockfreei_nodedeletedirectoryentryreturn,n,Unix文件系统,修改文件权限chmod,chmod(file,mode)例:
chmod(file1,0742);,i_mode=mode;i_flag=1;,Unix文件系统,建立无名管道文件pipe,Pipe(intfd2)=,fd0=readu_ofile下标fd1=writeu_ofile下标,u_ofile,file,i_node,fd0,fd1,i_count=2;使用i_addr09,Unix文件系统,关于pipe的要点,lseek()?
f_offset?
读、写指针放在i_node中共享管道文件?
同一进程对同一管道文件的读写问题管道的同步与互斥问题,ABCDEFG,pipe(),创建新进程时会引起管道文件的那些变化?
一个管道文件可以有几个读指针?
几个写指针?
管道例,子1,子2,管道,父,main()chars20;inti,fd2;pipe(fd);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大吗?
Unix文件系统,文件重定向
(2),当进程创建时:
系统自动打开三个文件,u_ofile,u_ofile0u_ofile1u_ofile2u_ofilei,stdin:
keyboardstdout:
screenstderr:
screen,$lsabcfd=open(“abc”,1);close(stdout);dup(fd);close(fd);,abc,$sortfeli1?
X,Unix文件系统,shell程序的实现,接受输入,进行语法比较处理后台运行符处理管道,重定向建立进程,执行相应程序。
main().while
(1)putchar$);read(stdin,buffer,number);语法检查,分出commandandparameters;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(非后台运行/*whileend,Unix文件系统,小结,UNIX文件分类(3类)UNIX文件目录结构UNIX文件逻辑结构(stream)UNIX文件物理结构(多重索引)UNIX文件存储器管理(空白块成组链结)UNIX文件系统调用(creat,open,read,write,lseek,chmod,close,pipe,dup,link,unlink.重要数据表,表项,作用(目录文件,i_node,filsys,file,u_ofile,etc),Unix文件系统,期末考试复习,考试时间:
1.18考试地点9901-9902:
电2519903-9904:
电2529905-9906:
电152考试要求成绩评定作业:
上机作业,linux代码分析答疑,Unix文件系统,全书复习,OS的定义,位置,类型及特点,功能,目的,硬件支持用户接口处理机管理(进程概念,PCB,状态,同步,通信,死锁等)存储器管理文件管理设备管理UNIXLINUX,