文件系统设计中,使用了denty,inode,fs,file等关键性的数据结构其中_第1页
文件系统设计中,使用了denty,inode,fs,file等关键性的数据结构其中_第2页
文件系统设计中,使用了denty,inode,fs,file等关键性的数据结构其中_第3页
文件系统设计中,使用了denty,inode,fs,file等关键性的数据结构其中_第4页
文件系统设计中,使用了denty,inode,fs,file等关键性的数据结构其中_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、linux的vfs文件系统设汁中,使用了 denty,inode,fs,file等关键性的数据结构.其中dentry 和inode川来记载相关的单个文件的管理信息,例如文件名字,创建者,创建口期,文件人小,文 件物理存储地址等等.那么,为什么要用两个数据结构,而不是合并成一个数据结构來记载这些信息?(问题1),tile数据结构记载了某个进程使用文件的现场情况,例如文件访问指针等,当用八进程打开文 件准备操作时,内核必然要为这个进程创建file数据结构,然后才能依赖此结构分数次访问文 件那么有没有不需要打开操作就可以使用的文件?如果没有这样的经丿力,那么设想一下,内核 有没有必要提供一些默认

2、的不需要用户打开就可以操作的文件,为什么?(问题2),linux的文件系统中有三种类型文件:磁盘文件,设备文件,特殊文件.请从文件的数据和管理 信这两方血来分析一下这三类文件的区别(问题3),文件的权限与系统的数据安全息息相关,请说明linux操作系统管理文件权限的方法(问题4)第1小问答案:川一个数据结构的话,在存储数据,会造成数据的兀余性,使得存储量过人, 浪费不必要的空i'可。第2小问答案:有没有不需要打开操作就可以使用的文件:答,有这样的文件。内核有没有必要提供一些默认的不需要用户打开就可以操作的文件:答:有 必要。因为提供这样的文件可以较为方便的操作一些操作系统级别的问题。笫

3、3小问答案:磁盘文件设备文件特殊文件來口与日常数据,比如各种应用的录入等;来自各硕件的基本信息,比如各种駛件的驳动等;可能是来白用户的录入信息文件,或者文木文件等,可以归属于磁盘文件。第4小问答案:linux屮,每一个文件都具有特定的属性。主要包括文件类型和文件权限两 个方血。可以分为5种不同的类型:普通文件、目录文件、链接文件、设备文件和管道文件。所谓的文件权限,是指对文件的访问权限,包括对文件的读、写、删除、执行。linux是 一个多用户操作系统,它允许多个川户同时登录和工作。因此linux将一个文件或口录与 一个用八或纽.联系起來。访问控制列表(acl: access control l

4、ist)为计算机捉供更好的访问 控制,它的作用是限制包括root用户在内的所有用户对文件、资源或者套接字的访问。下 而就來说说设置方法。步骤1检查系统核心首先检查你的linux系统的核心是否有支持acl的功能。因为linux系统并不是每一 个版本的核心都有支持acl的功能,而最简单的方法就是检查系统目前的核心能否支持:root mail /# cat /boot/config-kernel-versiongrep -i ext3config_ext3_fs=mconfig_ext3_idex=yconfig ext3 fs xattr sharing=yconfig ext3 fs xattr

5、 user=yconfig ext3 fs xattr trusted=yconfig_ext3_fs_acl=y此时如果能看到上血的几项则表示已经编译到核心中,ex文件系统已支持acl功能, 这些功能在编译核心选项中都对以找到。如果编译时找不到,对以到acl的官方网站来安 装 kernel(acl.bestbits.at/)o步骤2挂载分区你可以用下列的方式挂载分区并启用acl:#mount -t ext3 -o acl /dev/sdal /fsl你也可以玄接写在/etc/fstab文件中,这样就可以在开机后支持acl功能:#vi /etc/fstab步骤3设置acl权限acl常常针对个别

6、川户来进行设置,下面是多个不同的例子:例如需要创建testk test2> test3三个用户,可以先用root身份登录系统,然后执行以 下命令分别创建三个川户名和密码:root mail root#adduser test 1root mail rootl#adduser test2rootmail root#adduser test3rootmail root#passwd testlrootmciil root#passwd test2root©mail rootl#passwd test3然后mount 一个ext3文件到目录/fsl :rootmail root#mo

7、unt -t ext3 -o acl /dev/sdal /fsl再将tcstl建立的文件设置读写的权限给test2 :rootmail rootj#chmod -r 7力 /fsl止所有的用户都能增加文件到目录的权限:先用testl登录系统,执行命令:test 1 mail test 1# cd /fs 1test 1 mail fs 1j# echo create by test 1 ” > testl.txttest 1mail fsl# chmod go-r testl.txttest 1mail fsl# 11 test 1 .txtrw1 testl testl 17 jul

8、 14 22:11 testl.txt而如下操作则可以让除了 testl有读写的权限外其他人没有读写testl.txt的权限(root除外),先用test2登录系统后执行以下命令:test2mail test2# cd /fsltest2mail fs 1 # cat testl.txtcat : test 1 .txt permission denied接着用testl登录系统,执行如下命令:test 1mail fsl# setfacl -m u:test2:rw testl.txt这样就修改权限允许test2有这个文件的读写权限。再看一下它的文件属性的变化:testlmail fsl#

9、11-rw-rw-r+ 1 testl test 1 10 feb 16 13:52 testl.txt会看到后而多了一个“+”,表示这个文件使川acl的属性设置,再川命令getfacl来看acl的文件属性设置:testl mail fs 1 # getfacl testl.txt# file: testl.txt# owner: test 1# group: test 1 user:rw- user:test2:rw- group:rw- mask:rw- other:r 可以看到test2有权限读写这个文件。 我们再用test2登录系统执行以f命令,看看发生了什么? test2mail t

10、est2# cd /fsltest2mail fsl# cat testl.txtcreate by testl原来test2 xt以读取testl.txt文件了。test2mail fsl# echo "modify by test2h »testl.txttest2mail fsl# cat testl.txtcreate by testlmodify by test2现在test2也可以修改testl .txt文件了。接着用test3登录系统:test3mail test3# cd /fsltest3mail fsl# cat testl.txtcat: testl.

11、txt permission denied嗯嘿,除了 test 1 tcsi2外没有其他川户有读写testl.txt的权限(root除外)。看着虽然有点晕,其实命令就是这么-两条,主要是把各种情况给大家讲清楚,这样, 大家在使用linux中才会发现,比起脆弱的windows的权限防护,linux实在是做得相当不 错!二、要求写出编译和安装2.6.10内核的步骤,以及编译linux内核的体会假设以rootjij户登录系统,并已经下载了编译2.6.10内核所需的工具,它们是: modu le-i ni t-tool s- 3.1.tar.bz2,lvm2-2.00.25-l .01.i386.rp

12、m,device-mapper-1 .()0 192i386.rpm,mkinitrd-4.1.18.1-1 .i386rpm,linux-2.6.10.ta 匚 gz1、安装 module-init-tools-3.1 .tar.bz2.tar -zxvf module-init-tools-3.1 .tar.bz2cd module-init-tools-3.0./configure prefix=/sbinmakemake install./gene rate - modprobe .conf /etc/modprobe.conf2、解压缩内核源代码把下载的源代码包放到h录/usr/sr

13、c下,然后cd /usr/srctar xvlj linux-2.6 10.tn匚gzcd linux-2.6.103、#tar xvf device-mapper-1.00.19-2.i386.rpmmakemake install编译linux内核的体会:俗话说:”功夫不负有心人",通过编译linux内核时才能真止体 会到.曾经也失败过无数次,放弃过一段吋间编译.最后通过自己不断的实践和在网上收集 这方而资料,终于在编译成功了.题h三:请简述linux系统启动的一般过程linux内核的主要组成部分令哪些请简要说明linux的内存管理方案,分析其特点,并用图示说明这种方案中逻辑地址

14、转换为物 理地址的过程1、linux系统启动的般过程:当用户打开pc的电源,bios开机自检,按bios中设置 的启动设备(通常是硬盘)启动,接着启动设备上安装的引导程序lilo或grub开始引导linux, linux首先进行内核的引导,接下来执行init程序,init程序调用了 rc.sysinit和rc等程序, rc.sysinit和rc当完成系统初始化和运行服务的任务后,返回init; init启动了 mingetty后, 打开了终端供用户登录系统,用户登录成功后进入了 shell,这样就完成了从开机到登录的 整个启动过程。2、linux内核的主要组成部分有哪些linux内核主要由五个

15、子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程 间通信。3、linux的内存管理方案,分析其特点,并川图示说明这种方案中逻辑地址转换为物理地址的 过程一、逻辑地址转线性地址机器语言指令中出现的内存地址,都是逻辑地址,船耍转换成线性地址,再经过miviu(cpu中的内存管理 单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gees编译,再反编译后会看到以下指令:mov 0x8049560, %eax这里的内存地址0x80495b0就是一个逻辑地址,必须加上隐含的ds数据段的基地址,才能构成线性地址。 也就是说0x80495b0是当前任务的ds数据段

16、内的偏移。在x86保护模式下,段的信息(段基线性地址、长度、权限等)即段描述符占8个字节,段信息无法直接存 放在段寄存器中(段寄存器只有2字节)o intel的设计是段描述符集中存放在gdt或ldt中,而段寄存器存 放的是段描述符在gdt或ldt内的索引值(index)olinux中逻辑地址等于线性地址。为什么这么说呢?因为linux所冇的段(用户代码段、用户数据段、内核 代码段、内核数据段)的线性地址都是从0x00000000开始,氏度4g,送爭 线性地址二逻辑地址+0x00000000, 也就是说逻辑地址等于线性地址了。这样的情况下linux只用到了 gdt,不论是用户任务还是内核任务,都

17、没有用到ldt。gdt的第12和13项段 描述符是_kernel_cs和_kernel_ds,第14和15项段描述符是_user_cs和_user_ds。内核任务使用 _kernel_cs fll_kernel_ds,所有的用户任务共用_user_cs和_user_ds,也就是说不需要给每个任务 再单独分配段描述符。内核段描述符和用户段描述符虽然起始线性地址和长度都一样,但dpl(描述符特权 级)是不一样的。_kernel_cs 和_kernel_ds 的 dpl 值为0 (最高特权),_user_cs 和user_ds 的 dpl 值为3。用gdb调试程序的时候,用info reg显示当前寄

18、存器的值:cs 0x73 115ss 0x7b 123ds 0x7b 123es 0x7b 123可以看到ds值为0x7b,转换成二进制为00000000 01111011, ti字段值为0,表示使用gdt, gdt索引值为 01111,即十进制15,对应的就是gdt内的_user_data用户数据段描述符。从上面可以看到,linux在x86的分段机制上运行,却通过一个巧妙的方式绕开了分段。linux主要以分页的方式实现内存管理。got二、线性地址转物理地址 前血说了 linux中逻辑地址等于线性地址,那么线性地址怎么对应到物理地址呢?这个大家 都知道,那就是通过分页机制,具体的说,就是通过页

19、表查找来对应物理地址。准确的说分页是cpu提供的一种机制,linux只是根据这种机制的规则,利用它实现了内 存管理。在保护模式下,控制寄存器cr0的最高位pg位控制着分页管理机制是否生效,如果pg=1, 分页机制生效,需通过页表查找才能把线性地址转换物理地址。如果pg=0,则分页机制无 效,线性地址就直接做为物理地址。分页的基本原理是把内存划分成大小固定的若干单元,每个单元称为一页(page),每页包 含4k字节的地址空间(为简化分析,我们不考虑扩展分页的情况)。这样每一页的起始地址 都是4k字节对齐的。为了能转换成物理地址,我们需要给cpu提供当前任务的线性地址转 物理地址的查找表,即页表(

20、page table)o注意,为了实现每个任务的平坦的虚拟内存,每个 任务都有自己的页目录表和页表。为了节约页表占用的内存空间,x86将线性地址通过页目录表和页表两级査找转换成物理地 址。32位的线性地址被分成3个部分: 最高10位directory页廿录表偏移量,中间10位tnblc是页表偏移量,最低12位oftset 是物理页内的字节偏移量。页目录表的大小为4k (刚好是一个页的大小),包含1024项,每个项4字节(32位),项1 里存储的内容就是页表的物理地址。如果页口录表屮的页表尚未分配,则物理地址填0。页表的大小也是4k,同样包含1024项,毎个项4字节,内容为最终物理页的物理内存起始 地址。每个活动的任务,必须要先分配给它一个页忖录表,并把页h录表的物理地址存入c3寄存 器。页表可以提前分配好,也可以在用到的吋候再分配。还是以mov 0x80495b0, %eax中的地址为例分析一下线性地址转物理地址的过程。前血说到linux中逻辑地址等于线性地址,那么我们耍转换

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论