基于文件系统的概念,可以把数据组成分为数据项、记录和文件三级。
文件类型
按用途分类:
①系统文件:由系统软件构成。
②用户文件:用户的文件。
③库文件:标准子例程及常用的例程。
按文件中数据的形式分类: ①源文件:由源程序和数据构成的。
②目标文件:源程序经过编译,尚未链接的目标代码“.obj” ③可执行文件:目标代码经过链接后的文件“.exe”。
按存取控制属性分类:
①只执行文件 ②只读文件 ③读写文件
按组织形式和处理方式分类:
①普通文件:由ASCII码或二进制码组成的字符文件
②目录文件:由文件目录组成的文件(检索执行下属文件)
③特殊文件:系统中的各类I/O设备
最底层是对象及其属性;中间层是对对象进行操纵和管理的软件集合;最高层是文件系统提供给用户的接口。
①对象及其属性:文件、目录、磁盘存储空间。
②对对象操纵和管理的软件集合(核心)。
③文件系统的接口:命令接口、程序接口。
文件操作
①最基本的文件操作:创建、删除、读、写文件、截断文件、设置文件的读/写位置
②文件的“打开”和“关闭”操作
所谓“打开”,是指系统将指名文件的属性(包括该文件在外存上的物理位置)从外存拷贝到内存打开文件表的一个表目中,并将该表目的编号(或称为索引)返回给用户。以后,当用户再要求对该文件进行相应的操作时,便可利用系统所返回的索引号向系统提出操作请求。系统这时便可直接利用该索引号到打开文件表中去查找,从而避免了对该文件的再次检素。如果用户已不再需要对该文件实施相应的操作时,可利用“关闭”(close)系统调用来关闭此文件,OS 将会把该文件从打开文件表中的表目上删除掉。
③其他文件操作
允许用户直接设置和获得文件的属性、有关目录的操作、实现文件共享的系统调用和用于对文件系统进行操作的系统调用等。
文件的逻辑结构:从用户观点出发所观察到的文件组织形式。
文件的物理结构:又称为文件的存储结构,是指文件在外存上的存储组织形式。
有结构文件
组织方式:
①顺序文件:由一系列记录按某种顺序排列所形成的文件。可以按照不同的顺序进行排列:串结构、顺序结构。
最佳应用场合是在对诸记录进行批量存取。
②索引文件:建立一张索引表,并为每个记录设置一个表项。 可为变长记录文件建立一张索引表,对主文件中的每个记录,在索引表中设有一个相应的表项,用于记录该记录的长度L及指向该记录的指针。索引表本身是一个定长记录的顺序文件。
主要用于对信息处理的及时性要求较高的场合。
③索引顺序文件:为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的键值和指向该记录的指针。有效地克服了变长记录文件不便于直接存取的缺点,而且所付出的代价也不算太大。
无结构文件
即流式文件。其长度以字节为单位。对流式文件的访问,则是采用读/写指针来指出下一个要访问的字符。
直接文件和哈希文件
对于直接文件,则可根据给定的记录键值,直接获得指定记录的物理地址。换言之,记录键值本身就决定了记录的物理地址。
哈希文件是目前应用最为广泛的一种直接文件。它利用Hash 函数(或称散列函数),可将记录键值转换为相应记录的地址。但为了能实现文件存储空间的动态分配,通常由Hash 函数所 求得的并非是相应记录的地址,而是指向一目录表相应表目的指针,该表目的内容指向相应记录所在的物理块。
①连续分配
连续分配要求为每一个文件分配一组相邻接的盘块。一组盘块的地址定义了磁盘上的一段线性地址。在采用连续分配方式时,可把逻辑文件中的记录顺序地存储到邻接的各物理盘块中。此时的物理文件称为顺序文件。
利用紧凑的方法,将盘上所有的文件紧靠在一起,把所有的碎片拼接成一大片连续的存储空间。
优点:顺序访问容易,顺序访问速度快。
缺点:要求有连续的存储空间,必须事先知道文件的长度。
②链接分配
在采用链接分配方式时,可通过在每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,把这样形成的物理文件称为链接文件。
优点:离散分配,消除了外部碎片,提高了外存空间的利用率;当文件动态增长时,可动态地再为它分配盘块,故而无需事先知道文件的大小。此外,对文件的增、删、改也十分方便。
缺点:不能支持高效的直接存取,文件分配表(FAT)需占用较大的内存空间。
③索引分配
单级索引分配
为每个文件分配一个索引块(表),再把分配给该文件的所有盘块号都记录在该索引块中,因而该索引块就是一个含有许多盘块号的数组。
优点:支持直接访问,不会产生外部碎片。
缺点:花费较多的外存空间。对于小文件采用索引分配方式时,其索引块的利用率将是极低的。
多级索引分配
当文件太大,应为索引块再建立一级索引,称为第一级索引,即系统再分配一个索引块,作为第一级索引的索引块,将第一块、第二块……等索引块的盘块号填入到此索引表中,这样便形成了两级索引分配方式。如果文件非常大时,还可用三级、四级索引分配方式。
混合索引分配方式
将多种索引分配方式相结合,系统既采用了直接地址,又采用了一级索引分配方式,或两级索引分配方式,甚至还采用了三级索引分配方式。
文件目录也是一种数据结构,用于标识系统中的文件及其物理地址,供检索时使用。
文件控制块:基本信息、存取控制信息及使用信息。
索引结点
在有的系统中,如UNIX系统,便采用了把文件名与文 件描述信息分开的办法,亦即,使文件描述信息单独形成一个称为索引结点的数据结构, 简称为i结点。在文件目录中的每个目录项仅由文件名和指向该文件所对应的i结点的指针所构成。
磁盘索引结点
这是存放在磁盘上的索引结点。每个文件有惟一的一个磁盘索引结点。
内存索引结点
这是存放在内存中的索引结点。当文件被打开时,要将磁盘索引结点拷贝到内存的索引结点中,便于以后使用。
目录结构
单级目录结构
这是最简单的目录结构。在整个文件系统中只建立一张目录表,每个文件占一个目录项,目录项中含文件名、文件扩展名、文件长度、文件类型、文件物理地址以及其它文件属性。
优点
简单且能实现目录管理的基本功能——按名存取。
缺点
查找速度慢、不允许重名、不便于实现文件共享(只适用于单用户环境)。
两级目录
可以为每一个用户建立一个单独的用户文件目录UFD。这些文件目录具有相似的结构,它由用户所有文件的文件控制块组成。此外,在系统中再建立一个主文件目录MFD;在主文件目录中,每个用户目录文件都占有一个目录项,其目录项中包括用户名和指向该用户目录文件的指针。
优点:克服了单机目录的缺点,并且提高了检索目录的速度;在不同的用户目录中,可以使用相同的文件名;不同用户还可使用不同的文件名来访问系统中的同一个共享文件。
多级目录结构
多级目录结构又称为树型目录结构,主目录在这里被称为根目录,把数据文件称为树叶,其它的目录均作为树的结点。
路径名
在该路径上从树的根(即主目录)开始,把全部目录文件名与数据文件名依次地用“/”连接起来,构成该数据文件的唯一路径名。
当前目录:进程当前访问的工作目录
相对路径名:从当前目录开始直到数据文件为止所构成的路径名。
绝对路径名:从树根开始的路径名称为绝对路径名。
优点
查询速度更快,同时层次结构更加清晰,能够更加有效地进行文件的管理和保护。在多级目录中,不同性质、不同用户的文件可以构成不同的目录子树,不同层次、不同用户的文件分别呈现在系统目录树中的不同层次或不同子树中,可以容易地赋予不同的存取权限。
缺点
在多级目录中查找一个文件,需要按路径名逐级访问中间节点,这就增加了磁盘 访问次数,无疑将影响查询速度。
目录查询技术
线性检索法(顺序检索法)
Hash方法
系统利用用户提供的文件名并将它变换为文件目录的索引值,再利用该索引值到目录中去查找,这将显著地提高检索速度。对于使用了通配符的文件名,系统此时便无法利用Hash方法检索目录,因此,这时系统还是需要利用线性查找法查找目录。
①空闲表法
空闲表法属于连续分配方式,它与内存的动态分配方式雷同,它为每个文件分配一块连续的存储空间,即系统也为外存上的所有空闲区建立一张空闲表,每个空闲区对应于一个空闲表项。
空闲盘区的分配与内存的动态分配类似,同样是采用首次适应算法、循环首次适应算法等。系统在对用户所释放的存储空间进行回收时,也采取类似于内存回收的方法,即要考虑回收区是否与空闲表中插入点的前区和后区相邻接,对相邻接者应予以合并。
②空闲链表法
空闲盘块链
这是将磁盘上的所有空闲空间,以盘块为单位拉成一条链。当用户因创建文件而请求分配存储空间时,系统从链首开始,依次摘下适当数目的空闲盘块分配给用户。当用户因删除文件而释放存储空间时,系统将回收的盘块依次插入空闲盘块链的末尾。
空闲盘区链
这是将磁盘上的所有空闲盘区(每个盘区可包含若干个盘块)拉成一条链。在每个盘区上除含有用于指示下一个空闲盘区的指针外,还应有能指明本盘区大小(盘块数)的信息。分配盘区的方法与内存的动态分区分配类似,通常采用首次适应算法。在回收盘区时,同样也要将回收区与相邻接的空闲盘区相合并。在采用首次适应算法时,为了提高对空闲盘区的检索速度,可以采用显式链接方法,亦即,在内存中为空闲盘区建立一张链表。
③位示图法
位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况。当其值为“0”时,表示对应的盘块空闲;为“1”时,表示已分配。
优点
从位示图中很容易找到一个或一组相邻接的空闲盘块。位示图很小,占用空间少,因而可将它保存在内存中,从而节省了许多磁盘的启动操作。
④成组链接法
在UNIX系统中采用的是成组链接法,这是将上述两种方法相结合而形成的一种空闲盘块管理方法,它兼备了上述两种方法的优点而克服了两种方法均有的表太长的缺点。
空闲盘块的组织
空闲盘块号栈用来存放当前可用的一组空闲盘块的盘块号(最多含100个号),以及栈中尚有的空闲盘块号数N。
空闲盘块的分配
首先检查空闲盘块号栈是否上锁,如未上锁,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格。若该盘块号已是栈底,即 S.free(0),这是当前栈中最 后一个可分配的盘块号。由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此,须调用磁盘读过程,将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。然后,再分配一相应的缓冲区(作为该盘块的缓冲区)。最后,把栈中的空闲盘块数减1并返回。
空闲盘块的回收
将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加1操作。当栈中空闲盘块号数目已达100 时,表示栈已满,便将现有栈中的100个盘块号记入新回收的盘块中,再将其盘块号作为新栈底。
①基于索引结点的共享方式
文件的物理地址及其它的文件属性等信息放在索引结点中,在文件目录中只设置文件名及指向相应索引结点的指针。由任何用户对文件进行Append操作或修改, 所引起的相应结点内容的改变,都是其他用户可见的,从而也就能提供给其他用户来共享。
②利用符号链实现文件共享
在新文件中只包含被链接文件F的路径名。这样的链接方法被称为符号链接。新文件中的路径名则只被看作是符号链,当B要访问被链接的文件F且正要读LINK 类新文件时,此要求将被OS截获,OS根据新文件中的路径名去读该文件,于是就实现了用户B对文件F的共享。
磁盘容错技术
影响文件安全的因素:人为、系统、自然。
措施
①通过存取控制机制来防止由人为因素所造成的文件不安全性。
②通过磁盘容错技术来防止由磁盘部分的故障所造成的文件不安全性。
③通过“后备系统”来防止由自然因素所造成的不安全性。
第一级容错技术 SFT-Ⅰ
用于防止因磁盘表面缺陷所造成的数据丢失。它包含双份目录、双份文件分配表及热修复重定向和写后读校验等措施。
第二级容错技术 SFT-Ⅱ
用于防止由磁盘驱动器和磁盘控制器故障所导致的系统不能正常工作,它具体又可分为磁盘镜像和磁盘双工。
基于集群技术的容错功能
主要工作模式有三种:①热备份模式;②互为备份模式;③公用磁盘模式。
事务
事务是用于访问和修改各种数据项的一个程序单位。
事务记录
用来记录在事务运行时数据项修改的全部信息。
恢复算法可利用以下两个过程::
①undo〈Ti〉。该过程把所有被事务 Ti修改过的数据恢复为修改前的值。
②redo〈Ti〉。该过程把所有被事务 Ti修改过的数据设置为新值。
引入检查点的主要目的,是使对事务记录表中事务记录的清理工作经常化。在发生故障后,并不需要对事务记录表中的所有事务记录进行处理,而只需对最后一个检查点之后的事务记录进行处理。
并发控制
利用互斥锁、共享锁实现顺序性。
重复数据的数据一致性问题
第一种方法是当一个文件被修改后,可查找文件目录,以得到其它几个拷贝的索引结点号,再从这些索引结点中找 到各拷贝的物理位置,然后对这些拷贝做同样的修改;第二种方法是为新修改的文件建立几个拷贝,并用新拷贝去取代原来的文件拷贝。
盘块号一致性的检查
利用软件方法构成一个计数器表,每个盘块号占一个表项,可有0,…,N-1项,N为盘块总数。每一个表项中包含两个计数器,分别用作空闲盘块号计数器和数据盘块号计数器。如果情况正常,则两组计数器中对应的一对(计数器中的)数据应该互补。
链接数一致性检查
配置一张计数器表,此时应是为每个文建立一个表项,其中含有该索引结点号的计数值。在进行检查时,从根目录开始查找,每当在目录中遇到该索引结点号时,便在该计数器表中相应文件的表项上加1。当把所有目录都检查完后,便可将该计数器表中每个表项中的索引结点号计数值与该文件索引结点中的链接计数 count 值加以比较,如果两者一致,表示是正确的;否则,便是产生了链接数据不一致的错误。
操作系统是用户与计算机硬件系统之间的接口,两类接口:用户接口、程序接口。
用户接口分为两类:联机用户接口、脱机用户接口。
联机用户接口:字符显示式用户界面、图形化用户界面。
字符显示式用户界面:命令行方式、批命令方式(.BAT文件、Shell文件)。
联机命令的类型
①系统访问类;②磁盘操作类;③文件操作类;④目录操作类;⑤通信类;⑥其他命令。
键盘终端处理程序
①字符接收功能:面向字符方式、面向行方式。
②字符缓冲功能:专用缓冲区方式、公用缓冲池方式。
③回送显示。
④屏幕编辑。
⑤特殊字符处理。
命令解释程序
主要功能是先对用户输入的命令进行解释,然后转入相应命令的处理程序去执行。
命令解释程序的作用
在屏幕上给出提示符,请用户键入命令,然后读入该命令识别命令,再转到相应命令处理程序的入口地址,把控制权交给该处理程序去执行,并将处理结果送屏幕上显示。
MS-DOS命令解释程序的组成
常驻部分、初始化部分、暂存部分。
UNIX的Shell是作为操作系统的最外层,也称为外壳。它可以作为命令语言,为用户提供使用操作系统的接口,用户利用该接口与机器交互。
简单命令
所谓简单命令,实际上是一个能完成某种功能的目标程序的名字。命令可带有参数表,用于给出执行命令时的附加信息。命令名与参数表之间还可使用一种称为选项的自变量,用破折号开始,后跟一个或多个字母、数字。
①进入与退出系统
用户的进入与退出过程,实际上是由系统直接调用Login及Logout程序完成的。
②文件操作命令
显示文件内容命令cat,复制文件副本的命令cp,对已有文件改名的命令mv,撤消文件的命令rm,确定文件类型的命令file。
③目录操作命令
建立目录的命令mkdir,撤消目录的命令rmdir,改变工作目录的命令cd,改变对文件的存取方式的命令chmod。
④系统询问命令
访问当前日期和时间命令date,询问系统当前用户的命令who,显示当前目录路径名的命令pwd。
重定向与管道命令
重定向:用于改变输入、输出设备的手段。
用重定向符“<”和“>”分别表示输入转向与输出转向。
在做输出转向时,若上述的文件file2并不存在,则先创建它;若已存在,则认为它是空白的,执行上述输出转向命令时,是用命令的输出数据去重写该文件;如果文件file2事先已有内容,则命令执行结果将用文件file1的内容去更新文件 file2的原有内容。现在,如果又要求把file4的内容附加到现有的文件file2的末尾,则应使用另一个输出转向符“>>”。
管道命令:用符号“|”来连接两条命令,使其前一条命令的输出作为后一条命令的输入。
由UNIX系统来 “缓冲”第一条命令的输出,并作为第二条命令的输入。在用管道线所连接的命令之间,实现单向、同步运行。
通信命令
①信箱通信命令mail
mail命令被作为在UNIX的各用户之间进行非交互式通信的工具。
②对话通信命令write
用这条命令可以使用户与当前在系统中的其他用户直接进行联机通信。
③允许或拒绝接收消息命令mesg
选项n表示拒绝对方的写许可(即拒绝接收消息);选项y指示恢复对方的写许可,仅在此时,双方才可联机通信。
后台命令
用户可以在这种命令后面再加上“&”号,以告诉Shell将该命令放在后台执行,以便用户在前台继续键入其它命令。
为了保证系统程序不被应用程序有意或无意地破坏,为计算机设置了两种状态:系统态(也称为管态或核心态) 和用户态(也称为目态)。操作系统在系统态运行,而应用程序只能在用户态运行。在实际运行过程中,处理机会在系统态和用户态间切换。相应地,现代多数操作系统将CPU的指令集分为特权指令和非特权指令两类。
特权指令
在系统态时运行的指令,是关系到系统全局的指令。
非特权指令
在用户态时运行的指令。一般应用程序所使用的都是非特权指令。
系统调用
由操作系统捕获到该命令后,便将CPU的状态从用户态转换到系统态,然后执行操作系统中相应的子程序(例程),完成所需的功能。执行完成后,系统又将CPU 状态从系统态转换到用户态,再继续执行应用程序。
系统调用在本质上是应用程序请求OS内核完成某功能时的一种过程调用。但它 是一种特殊的过程调用,它与一般的过程调用有下述几方面的明显差别:
①运行在不同的系统状态。
②状态的转换通过软中断进入。
③返回问题。
④嵌套调用。
中断机制
系统调用是通过中断机制实现的,并且一个操作系统的所有系统调用都通过同一个中断入口来实现。
系统调用的类型
①进程控制类系统调用
创建和终止进程的系统调用、获得和设置进程属性的系统调用、等待某事件出现的系统调用。
②文件操纵类系统调用
创建和删除文件、打开和关闭文件、读和写文件。
③进程通信类系统调用
消息传递方式和共享存储区方式。
④设备管理类系统调用
主要用于实现申请设备、释放设备、设备I/O和重定向、获得和设置设备属性、逻辑上连接和释放设备等功能
⑤信息维护类系统调用
主要用来获得包括有关系统和文件的时间、日期信息、操作系统版本、当前用户以及有关空闲内存和磁盘空间大小等多方面的信息。
POSIX(基于UNIX的可移植操作系统接口)标准
POSIX定义了标准应用程序接口(API),用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。只有符合这一标准的应用程序,才有可能完全兼容多种操作系统,即在多种操作系统下都能够运行。
POSIX标准定义了一组过程,这组过程是构造系统调用所必须的。通过调用这些过程所提供的服务,确定了一系列系统调用的功能。
系统调用的实现
①中断和陷入硬件机构
把中断分为外中断和内中断。所谓外中断,是指由于外部设备事件所引起的中断,内中断则是指由于CPU内部事件所引起的中断。内中断(trap)也被译为“捕获”或“陷入”。通常,陷入是由于执行了现行指令所引起的;而中断则是由于系统中某事件引起的,该事件与现行指令无关。由于系统调用引起的中断属于内中断,因此把由于系统调用引起中断的指令称为陷入指令。
不同的系统调用对应不同的陷入向量,在进行陷入处理时,根据陷入指令中的陷入向量,转入实现相应的系统调用功能的子程序,即陷入处理程序。
系统调用号和参数的设置
如何将系统调用的参数传递给陷入处理机构和系统内部的子程序(过程),常用的实现方式有以下几种:
陷入指令自带方式
直接将参数送入相应的寄存器
参数表方式(当前大多数的 OS 中,如 UNIX 系统和 Linux 系统采用)
系统调用的处理步骤
①将处理机状态由用户态转为系统态;
②由硬件和内核程序进行系统调用的一般性处理;
③将用户定义的参数传送到指定的地址保存起来;
④分析系统调用类型,转入相应的系统调用处理子程序;
⑤恢复被中断的或设置新进程的CPU现场, 然后返回被中断进程或新进程,继续往下执行。
系统调用的功能主要是由系统调用子程序来完成的。
UNIX系统调用的类型
①进程控制
创建进程(fork)、终止进程(exit)、等待子进程结束(wait)、执行一个文件(exec)、获得进程ID、获得用户ID、进程暂停(pause)。
②文件操纵
创建文件(create)、打开文件(open)、关闭文件(close)、读和写文件read和write、连接和去连接(link和unlink)
③进程间的通信
在UNIX系统中提供了一个用于进程间通信的软件包,简称IPC。它由消息机制、共享存储器机制和信号量机制三部分组成。
④信息维护
设置和获取时间、获得进程和子进程时间(times)、设置文件访问和修改时间(utime)、获取当前UNIX系统的名称(uname)。
被中断进程的环境保护
在中断和陷入发生后,是先经硬件陷入机构予以处理,再进入 trap.S, 然后再调用 trap.C 继续处理。
在UNIX系统Ⅴ的内核程序中,有一个trap.S文件,它是中断和陷入总控程序。该程序用于中断和陷入的一般性处理。
系统调用陷入后需处理的公共问题
①确定系统调用号
②参数传送
③利用系统调用定义表转入相应的处理程序
④系统调用返回前的公共处理
Windows操作系统为例,在系统初始化后,操作系统为终端用户生成了一个运行explorer.exe的进程,它运行一个具有窗口界面的命令解释程序,该窗口为一个特殊的窗口,即桌面。采用的是事件驱动控制方式,用户通过动作来产生事件以驱动程序工作。事件实质就是发送给应用程序的一个消息,用户按键或点击鼠标等动作都会产生一个事件,通过中断系统引出事件驱动控制程序工作,对事件进行接收、分析、处理和清除。
计算机网络的拓扑结构
①星形和树形网络拓扑结构
②公用总线形和环形网络拓扑结构
③网状形网络拓扑结构
在广域网中最广泛采用的是网状形网络拓扑结构。它是通过点—点的连接方式,将分布在不同地点的、用于实现数据通信的分组交换设备PSE(Packet Switch Equipment)连接在一起,形成一个不规则的网状形网络。在逻辑上可分为通信子网和资源子网两部分。
网络拓扑结构的主要特点是它具有分布性。减少了网络中的信息流量,提高了可靠性,改善了网络的可扩充性。
(1)公用交换电话网
交换是指在两个或多个结点之间建立暂时通信线路(或链路)的操作。建立链路的操作是由交换中心完成的。两个结点在通信之前,须先建立链接,然后源结点把信息通过该链路发送给交换中心,再由交换中心把信息转发到目标结点,通信结束后便拆除该链接。
(2)分组交换网
报文交换方式
基于“存储—转发”方式进行报文交换的,即数字式报文交换中心先将各用户发来的电报接收下来,存储在报文缓冲区中,经过适当的处理(如判别目标地址、报文优先级等)后,为该报文选择一条转发路由,并将它送至该路由的输出队列中排队,再依次将该队列中各报文转发出去。
分组交换方式
分组交换方式对报文交换方式的一种改进,它同样是基于“存储—转发”方式来传 输信息的。为了提高传输效率而将不定长的报分解成定长的(报文)分组(packet),然后以分组为单位进行传输。这种方式的好处是:简化了对缓冲区的管理,加速了对信息的传输,减少了传输出错率以及重发信息量。
分组交换网
以分组作为传输的基本单位。一个分组由分组头和正文两部分组成。正文是用户要传送的信息,而分组头则是用于控制该分组在网络中传输所必需的(控制)信息。
(3)帧中继网
①帧交换方式的帧中继网
帧交换方式中传输的基本单位是帧,其长度是可变的,它们同样都采用“存储—转发”方式。
信元交换方式的帧中继网
网络中所传输和交换的基本单位是具有固定长度的“信元” 。当源帧交换器收到用户设备发来的帧后,便将之分割为多个定长的信元,在整个帧中继网络中传输和交换时,都是以信元为基本单位,直至它们到达目标帧交换器后,才被重新组装成帧。
(4)异步传输模式(ATM)
ATM 是以信元(Cell)为基本传输单位的,在每个时间片中传输一个信元。由于信元的发送无固定的周期,因而将这种传输方式称为异步传输方式。
在 ATM 交换方式中,主要提供的是面向连接的方式。特点:按时间片交换,定长交换,硬件实现(这无疑是ATM能获得极高传输速率的重要原因)。
(1)基本型局域网
①以太网
采用的是公用总线型网络拓扑结构,采用了带有冲突检测的载波侦听多重访问控制规程,亦即 CSMA/CD 规程。
②令牌环网
采用的是环形网络拓扑结构。
可通过两种途径来扩展LAN站点的平均带宽。其一是提高LAN的传输速率; 另一途径是减少每个网段上的站点数目。
(2)快速局域网
快速LAN是试图通过提高LAN的传输速率来增加每个站点的带宽的。
FDDI光纤环网、快速以太网 100 BASE-T。
(3)交换式LAN
交换式LAN是通过减少每个局域网段上的站点数目的方法,来增加站点的平均带宽。构建交换式局域网要比构建快速局域网更方便、经济。
(4)千兆以太网
千兆位以太网仍采用CSMA/CD规程。在传输介质上,主要利用光纤系统。
(5)10 Gb/s以太网
10 Gb/s以太网仍采用CSMA/CD规程,只能工作在全双工方式,因而不存在争用总线问题。
网络互连
(1)网桥
网桥是用于连接同构LAN的网络互连设备。同构LAN是指从应用层到逻辑链路控制子层这几个层次中,相对应的层次采用相同的协议。
网桥所实现的功能应属于MAC子层和物理层。从网桥的工作原理中不难得知网桥应具有以下功能:
①帧的发送和接收;②缓冲管理;③协议转换。
(2)路由器
路由器是在网络层上实现的互连,它能识别不同的网络层协议,如IP、IPX协议等,因而具有更强的互连能力。路由器的功能涉及到物理层、数据链路层和网络层,其主要功能如下:
①拆包和打包功能;②路由选择功能;③进行协议转换;④分段和重新组装。
(3)网关
网关用于互连异构型网络。所谓互连异构型网络,一般是指不同类型的网络。在网关中至少要进行网络层、数据链路层及物理层的协议转换,目前对异构型网络的互连,通常是在网络层或传输层上实现的。
异构型网络的互连:异构型LAN互连、LAN与WAN互连、WAN与WAN互连、LAN与主机互连。
网络体系结构的基本概念
所谓网络体系结构,就是计算机网络的层次及其协议的集合。具体地说,网络体系结构是关于计算机网络应设置哪几层,每个层次又应提供哪些协议的精确定义。至于这些功能应如何实现,则不属于网络体系结构部分。
开放系统互连参考模型OSI/RM
开放系统(OSI)的内容
①开放系统之间的信息交换,这是每一个单独的开放系统的内部行为;
②开放系统之间相互合作去完成一项共同任务。
OSI/RM的组成
①开放系统;②应用实体;③连接;④物理介质。
分层
每个系统可被看成是由有序的一组子系统所组成。一个系统被分成若干个层次,其中第N层是由若干个处于第N层的子系统所组成。(N)子系统又包括了若干个(N)实体。在同一层中的实体为对等实体。除最高层外,分布在(N)层中的(N)实体相互合作,向(N+1)层的实体提供(N)服务。
网络协议
(N)实体之间的合作,是受一个或几个(N)协议支配的。(N)协议精确地规定了(N)实体如 何利用(N-1)服务协同工作去实现(N)功能。
数据单元
OSI把对等实体之间所传送的信息称为(N)协议数据单元(N)-PDU,由两部分组成:
①(N)协议控制信息(N)-PCI,用它来协调两个实体之间的连接操作;
②(N)服务数据单元(N)-SDU,其中存放由(N+1)实体提供的数据。
OSI七层模型
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
其中低三层即物理层、数据链路层和网络层用于实现通信子网中的信息传输,或者说,它们是面向通信的(一般称之为通信子网);最高三层即会话层、表示层和应用层向应用进程提供资源子网功能的服务,因此它是面向应用的;中间层即传输层,它是在高三层和低三层之间起桥梁作用。
它建立在通信介质(它不在OSI七层之内)的基础上实现系统和通信介质的接口功能,为数据链路实体之间透明的传输比特流提供服务。
功能:物理链接的建立与拆除;物理服务数据单元传输;物理层管理。
在相邻两系统的网络实体之间建立、维持和释放数据链路连接,以及正确无误地传输数据链路服务数据单元。功能:数据链路连接的建立和释放;数据链路协议数据单元的形成;定界和同步;顺序和流量控制;差错的检测和恢复。
主要涉及通信子网及与主机的接口。网络层提供建立、维持和释放网络连接的手段,以实现两个端系统中传输实体间的通信。功能:
网络连接服务;路径选择;网络连接多路复用;分组与组段;有序传送和流量控制;差错的检测和恢复。
网络层提供的数据传输服务:无连接服务和面向连接的服务,亦把它们称为数据报服务和虚电路服务。
传输层在低三层和高三层间起桥梁作用。该层消除了OSI高层所要求的服务与各类网络层所提供的服务之间的差异。具体表现在以下三方面:传输出错率和建立连接的失败率;数据传输速率、吞吐量和传输时延;分段和组段功能。
对基本的传输连接服务进行“增值”,以提供一个能满足多方面要求的会晤连接服务。会话层的“增值”是基于下述几种应用要求的:半双工通信、更有效的差错纠正机制、允许暂停发送消息。
对不同系统的表示方法进行转换,消除网内各应用实体之间的语言差异,以实现不同系统之间的数据交换。
为应用进程访问OSI环境提供了手段,并直接为应用进程服务,其它各层也都通过应用层向应用进程提供服务。应用层所提供的服务可分为两类:公共应用服务元素(CASE)、特定应用服务元素(SAEA)
TCP/IP网络体系结构
TCP/IP模型
TCP/IP是一个协议族,其中包含了多种协议,由这些协议构成了TCP/IP的网络体系结构。
主要关注的是两个端系统之间的数据通信,以及两个端系统借以通信的网络类型。所使用的网络可能是电路交换网、分组交换网、ATM网或者以太网等。
TCP/IP模型中最重要的层次,其中的IP协议主要用于异构型网络之间的相互连接和路由选择。IP所提供的是面向无连接的、不可靠的传输服务。
最主要的协议是传输控制协议TCP,它所提供的是面向连接的、可靠的端到端通信机制。
提供了许多用于支持各种应用程序的网络服务,相应地,在应用层就有许多应用层协议。
互联网协议IP V4和IP V6
IP V4协议
IP V4 协议主要应解决三个问题,即寻址、数据报的分段和重新组装、路由选择。
IP V6协议
修改:扩大了地址空间、增设了安全机制、提高了路由的转发效率、增强了协议的可扩充性。
传输层协议TCP和UDP
传输控制协议TCP
TCP提供了面向连接的、可靠的端到端通信机制。所谓面向连接,是指在端系统要传送数据前,应先进行端到端之间的连接;在数据传送完后,应拆除连接。而所谓可靠是指,即使网络层(通信子网)出现了差错,TCP协议采用了确认和重发措施,仍能正确地控制连接的建立、数据的传输和连接的释放。
用户数据报协议UDP
UDP协议是一种无连接的、不可靠的协议。它不要求网络中的端系统在数据传送之前先建立端到端之间的连接;同样,在数据传送结束后,也不要拆除连接。在数据传送过程中,无需对传送的数据进行差错检测,也不必对丢失的数据进行重发等。
LAN网络体系结构
局域网参考模型LAN/RM
将数据链路层分为两个子层:逻辑链路控制子层LLC和介质(媒体)访问控制子层 MAC。
LLC子层是数据链路层的顶部子层,其主要功能是在任何一个源LLC实体和目标实体之间进行信息传输。在LLC子层中提供了两种类型的链路操作,其中类型1操作提供的是无连接服务,类型2操作提供的是面向连接的服务。
介质访问控制MAC子层
推荐标准:CSMA/CD、令牌传送。
Internet的特征:广域性、广泛性、高速性和综合性。
IP地址
IP地址是在Internet中主机的地址标识。IP地址共有32位二进制数,可以表示为4个十进制数,在各十进制数之间均用小数点隔开。每个主机的IP地址都是由网络标识和主机标识两部分组成,可分为A、B、C三类。
域名
如果说,IP地址是面向网络的主机标识符,域名则是面向用户的主机标识符。每个域名通常由几个部分(段)组成,我们把域名中的每个段称为一个子域,各子域之间用小数点分隔开。
Internet提供的传统信息服务
电子邮件(E-mail)服务、文件传输服务(FTP)、远程登录服务TELNET、电子公告板系统BBS。
Web服务
WWW的基本概念
WWW(Word Wide Web)称为环球网或Web。它是当前最为流行的信息服务类型。Web是一种信息检索工具。
超文本标识语言HTML
HTML是用于创建超文本文件的编程语言。可用该语言向普通文件中添加一些特殊的标识符,使在所生成的文件中,含有其它多种类型的文件,如声音,图像等,我们把这种文件称为超文本文件。特点:通用性、简易性、可扩充性、平台无关性。
超文本传输协议HTTP
HTTP是一个通用的、面向对象的客户(Web浏览器)/服务器(Web服务器)协议。该协议属于TCP/IP协议族中的应用层通信协议, 是建立在TCP协议基础上的,依赖于TCP协议来确保传输的正确性。
WWW的基本特征
对信息资源访问的分布性、信息形式的多样性、用户界面的统一性、Web服务应用的广泛性。
两层结构客户/服务器模式的局限性
不能适应应用不断增多的情况;需要在客户机与服务器上安装特定的高层(表示层和应用层)网络软件。
只适用于较小规模的信息系统和网络中。
三层结构的客户/服务器模式
在客户机与服务器之间,增设一中间实体,用该实体把客户机与服务器隔开。通常把这个中间实体称为应用服务器或中间层服务。把两层客户/服务器模式客户机中的大部分应用软件和接口移到应用服务器上,从而简化客户机。
应用服务器的组成:与客户机交互的接口、与数据(库)服务器交互的接口和事务逻辑。
事物逻辑的主要功能有两个:功能一是将用户的请求包转换为对数据(库)服务器访问的请求包,功能二是将数据(库)服务器返回的响应包转换为对客户机的响应包。
优点:①增加了系统的灵活性和可扩充性;②简化了客户机,降低了整个系统的费用;③使客户机的安装、配置和维护更为方便。
缺点:①开发难度大,开发周期长;②访问效率低。
当信息系统的规模较小时,最好采用两层客户/服务器模式;对于大型信息系统,通常都采用三层客户/服务器模式。
浏览器/服务器模式
在基于Internet的Internet内部网络中,在Internet中再增加一个Web服务器,它相当于前面所介绍的应用服务器,此时的客户机不是直接去访问Internet中的(数据库)服务器,而是访问Web服务器,再由Web服务器代理客户机去访问某个(些)(数据库)服务器。
Web浏览器、Web服务器和数据库服务器三层的客户/服务器模式。通常把这种三层结构的模式称为浏览器/服务器模式。
①连接的建立和拆除;②报文的分解与组装;③传输控制:发送——等待方式、连续发送方式;④流量控制;⑤差错的检错与纠正
①硬盘共享:以虚拟软盘方式实现硬盘共享、以文件服务方式实现硬盘共享。
②网络打印
在LAN中以假脱机方式实现共享打印的原理。
共享打印模式:客户/服务器模式、对等模式。
先利用DFS工具来建立一个共享目录,称之为DFS根目录; 再在此根目录下建立若干个子目录,这些子目录既可以是常规的本地子目录,也可以是一个个连接点。令这些连接点指向一些其它计算机系统上的共享目录和文件,这样,就把人们感兴趣的所有有关的共享目录和文件与DFS根目录下的分布式文件系统建立了连接。
应用互操作功能
①信息的“互通性”
所谓信息的“互通性”,是指在不同网络的结点之间能实现通信。而妨碍信息“互通性”的主要因素,是各个网络使用了各不相同的传输协议。
在完成了网络之间物理上的连接之后,应再采取措施实现信息的互通。实现信 息的互通的一种有效方法是为互连网络中的所有各网站,都配置同一类型的传输协议。目前主要是利用TCP/IP来实现信息的“互通性”。
②信息的“互用性”
所谓信息的“互用性”是指,在不同的网络中的站点之间能实现信息的互用,亦即一个网络中的用户能够去访问另一个网络文件系统(或数据库系 统)中的文件(数据)。
网络文件系统协议NFS
NFS(Network File System)是一种用于TCP/IP网络上的客户/服务器协议。在NFS 协议中包括一系列的命令和服务,这些命令和服务涉及到客户访问文件服务器上的文件系统、共享打印机,以及文件传输等,客户还可利用NFS命令去控制和访问远程文件系统;服务器则是根据请求者的请求做相应的处理,并将结果返回给请求者。NFS在提供这些服务时,要利用外部数据表示协议XDR(和远程过程调用 RPC。
外部数据表示协议XDR
XDR是处于OSI/RM中的表示层,主要用于处理在不同体系结构中的计算机之间的数据表示不一致时所出现的问题。
远程过程调用 RPC
远程过程调用是将单机环境下的过程调用延伸到分布式系统环境。
网络管理
网络管理的目标:①增强网络的可用性;②提高网络的运行质量;③提高网络的资源利用率;④保障网络数据的安全性;⑤提高网络的社会和经济效益。
网络管理的功能:①配置管理;②故障管理;③性能管理;④安全管理;⑤计费管理。
网络管理模型
在现代网络中,普遍采用管理者/代理者模型。管理者是指驻留在管理系统中的,用于发出管理命令和接收代理者发来的通知的软件;代理者是指驻留在受管对象系统中,用于接收并执行管理者发来的命令,提供受管对象的视图并发出用于反映受管对象行为的通知的软件。
域名系统(DNS)
域名系统同样也采用倒树形结构,它对应于域名的层次。在DNS的顶部是根服务器,下面是若干个顶级域名服务器,再下面是二级域名服务器……。由上级域名服务器管理属于它的下一级域名服务器。
域名解析
在域名系统中的每台本地域名服务器,都配置了一个域名解析器软件。所谓域名解析,是指将主机域名转换为对应的IP地址。
DNS是基于客户/服务器模式的系统,因此在查询IP时,通常需要经过多次客户和服务器之间的交互。
提升解析效率:在每个域名服务器中配置一个高速缓存,服务器应定期更新缓存中的数据。
域名解析过程中客户与服务器的交互过程。
目录服务
目录服务管理的对象:
①物理设备。通常为物理设备建立一张目录表,表中的每个目录项中可以包括物 理设备的标识符、设备类型。
②网络服务。
③用户。
目录服务的功能:
①用户管理。保证核准用户能够方便地访问各种网络服务,禁止非核准用户的访问。
②分区和复制功能。将一个庞大的目录库分成若干个分区,再将这些分区的目录 库分别复制到多台服务器中,且使每个分区被复制的位置尽量靠近最常使用这些对象的用户,在有的目录服务中还允许在一台服务器上存放多个不同分区的拷贝。
③创建、扩充和继承功能。一些目录服务采用了面向对象的结构。
④多平台支持功能。对于一个大型企业网络,通常可能包含多种类型的网络工作站和网络服务器,因而其目录服务也存在着在管理对象上的差异。这就要求目录服务具有跨越平台的能力。
目录服务带来的好处:
①简化了网络管理。只需为新服务器在网络的目录树上建立一个新的目录结点(项),这样,网络上的所有用户便都可以访问该新服务器。
②方便用户入网和访问。实现一个用户一个账户的单一登录性,也允许用户从网络中的任一结点对网络中的各个服务器进行访问。
③提高了网络的可用性。在目录中都有所有重要设备和所提供的服务的目录项;当网络中有某个(些)服务器发生故障时,目录服务可以及时发现,并可将用户对该服务器的访问请求转送到其它服务器上。
支持Internet 提供的服务
所谓支持Internet的功能是指,用户能从客户机上到Internet网上去浏览,并能取得Internet所提供的多种服务。
必须在客户机和服务器上都配置相应的软件:
①Web浏览器软件和Web服务器软件。
浏览器的基本功能是向 Web 服务器提出服务请求,并显示由 Web 服务器制作的显示信息。服务器软件向Web浏览器提供Web服务的,由此形成了浏览器/服务器模式。
②安装E-mail、FTP等多种服务软件
近几年来所推出的新的浏览器软件,已不是单纯地实现浏览器功能,还包括许多其它的服务功能,如 E-mail服务、FTP服务、Telnet服务等。通常把这样的浏览器软件称为浏览器套件。在近几年所推出的Web服务器软件中,除了能提供Web 服务,同样也包括了许多其它的服务功能。
③在客户机上配置TCP/IP协议软件。原因是实现信息互通,建立在TCP/IP基础上的Internet。
系统安全性的内容:物理安全、逻辑安全和安全管理。
逻辑安全是指系统中信息资源的安全:数据机密性、数据完整性和系统可用性。
系统安全的性质:多面性、动态性、层次性、适度性。
系统安全威胁的类型:假冒用户身份、数据截取、拒绝服务、修改信息、伪造信息、否认操作、中断传输、通信量分析。
信息技术安全评价公共准则(CC)
CC 的组成:信息技术产品的安全功能需求定义,这是面向用户的;安全保证需求定义,这是面向厂商的。
数据加密技术
数据加密技术是对系统中所有存储和传输的数据进行加密,使之成为密文。
数据加密技术包括这样几方面的内容:数据加密、数据解密、数字签名、签名识别以及数字证明等。
数字加密模型
组成:明文、密文、加密(解密)算法E(D)、密钥K。
类型:
①按其对称性分类:
对称加密算法。
在这种方式中,在加密算法和解密算法之间存在着一定的相依关系,即加密和解密算法往往使用相同的密钥;或者在知道了加密密钥Ke后,就很容易推导出解 密密钥Kd。
非对称加密算法。
这种方式的加密密钥Ke和解密密钥Kd不同,而且难以从Ke推导出Kd来。可以将其中的一个密钥公开而成为公开密钥,因而把该算法称为公开密钥算法。用公开密钥加密后,能用另一把专用密钥解密;反之亦然。
②按所变换明文的单位分类
序列机密算法、分组加密算法。
基本加密方法
①易位法:按照一定的规则,重新安排明文中的比特或字符的顺序来形成密文,而字符本身保持不变。
比特易位、字符易位。
②置换法:按照一定的规则,用一个字符去置换(替代)另一个字符来形成密文。比较好的置换算法是进行映像。
对称加密算法和非对称加密算法
最有代表性的对称加密算法是数据加密标准DES。
在DES中所使用的密钥长度为64位,它由两部分组成,一部分是实际密钥,占56位;另一部分是8位奇偶校验码。DES属于分组加密算法,它将明文按64位一组分成若干个明文组,每次利用56位密钥对64位的二进制明文数据进行加密,产生64位密文数据。
DES加密算法属于对称加密算法。加密和解密所使用的密钥是相同的。DES的保密性 主要取决于对密钥的保密程度。加密者必须用非常安全的方法(如通过个人信使)将密钥送给接收者(解密者)。如果通过计算机网络传送密钥,则必须先对密钥本身予以加密后再传送,通常把这种算法称为对称保密密钥算法。
在对数据进行加密和解密时,使用不同的密钥。每个用户都保存着一对密钥,每个人的公开密钥都对外公开。假如某用户要与另一用户通信,他可用公开密钥对数据进行加密,而 收信者则用自己的私用密钥进行解密。这样就可以保证信息不会外泄。
由于对称加密算法和非对称加密算法各有优缺点,即非对称加密算法要比对称加密算法处理速度慢,但密钥管理简单,因而在当前新推出的许多新的安全协议中,都同时应用了这两种加密技术。
一种常用的方法是利用公开密钥技术传递对称密码,而用对称密钥技术来对实际传输的数据进行加密和解密。例如,由发送者先产生一个随机数,此即对称密钥,用它来对欲传送的数据进行加密;然后再由接收者的公开密钥对对称密钥进行加密。接收者收到数据后,先用私用密钥对对称密钥进行解密,然后再用对称密钥对所收到的数据进行解密。
数字签名
在利用计算机网络传送报文时,可将公开密钥法用于电子(数字)签名来代替传统的签名。
数字证明书
由一个大家都信得过的认证机构CA为公开密钥发放一份公开密钥证明书,又把该公开密钥证明书称为数字证明书,用于证明通信请求者的身份。
网络加密技术
①链路加密
链路加密,是对在网络相邻结点之间通信线路上传输的数据进行加密。链路加密常采用序列加密算法,它能有效地防止由搭线窃听所造成的威胁。两个数据加密设备分别置于通信线路的两端,它们使用相同的数据加密密钥。
在链路加密方式中,不仅对正文做了加密,而且对所有各层的控制信息也进行了加密。
在链路加密方式中,在相邻结点间的物理信道上传输的报文是密文,而在所有中间结点中的报文则是明文,这给攻击者造成了可乘之机,使其可从中间结点上对传输中的信息进行攻击。这就要求能对所有各中间结点进行有效的保护。
②端到端加密
端到端加密方式是在源主机或前端机FEP中的高层(从传输层到应用层)对所传输的数据进行加密。在整个网络的传输过程中,不论是在物理信道上,还是在中间结点中,报文的正文始终是密文,直至信息到达目标主机后才被译成明文,因而这样可以保证在中间结点不会出现明文。在这种加密方式中,不能对报头中的控制信息(如目标地址、路由信息等)进行加密。
上述两种加密方式各有优缺点。一种比较好的网络加密方式是,同时采用链路加密和端到端加密,以取长补短。如利用端到端加密方式来使用户数据以密文形式穿越各个中间结点,以保障用户数据的安全;而利用链路加密方式则可使报头中的控制信息以密文形式在通信信道中传输,使之不易受到攻击。
认证又称为鉴别或验证。它是指证被认证的对象(包括人和事)是否名符其实或者是否有效的一种过程。
身份认证目前主要依据下述三个方面的信息来确定:所知、所有、个人特征。
①基于口令的身份认证
利用口令确认用户的身份是当前最常用的认证技术。
对口令机制的基本要求:口令长度适中、自动断开连接、隐蔽回送显示、记录和报告。
一次性口令
口令被使用一次后,就换另一个口令。在采用该机制时,用户必须提供记录有一系列口令的一张表,并将该表保存在系统中。系统为该表设置一指针用于指示下次用户登录时所应使用的口令。
口令文件
口令文件用于保存合法用户的口令和与口令相联系的特权。
保证口令文件安全性的最有效的方法是,利用加密技术。选择一个函数来对口令进行加密,该函数f(x)具有这样的特性:在给定了x值后,很容易算出f(x);然而,如果给定了f(x)的值,却不能算出x的值。利用f(x)函数去编码(即加密)所有 的口令,再将加密后的口令存入口令文件中。当某用户输入一个口令时,系统利用函数f(x)对该口令进行编码,然后将编码(加密)后的口令与存储在口令文件中的已编码的口令进行比较,如果两者相匹配,便认为是合法用户。
挑战——响应验证
②基于物理标志的认证技术
基于磁卡的认证技术
磁卡是基于磁性原理来记录数据的,在磁卡上所存储的信息,可利用磁卡读写器将之读出。
基于IC卡的认证技术
在IC卡中可装入CPU和存储器芯片,使该卡具有一定的智能。CPU用于对内部数据的访问和与外部数据进行交换,还可利用加密算法对数据处理。
根据在磁卡中所装入芯片的不同可把IC卡分为以下三种类型:
存储器卡:
只有一个E2PROM(可电擦、可编程只读存储器)芯片,不具有安全功能,只能作为储值卡。
微处理器卡:
它除具有E2PROM 外,还增加了一个微处理器。已具有一定的加密设施,被广泛用作信用卡。
密码卡:
又增加了加密运算协处理器和RAM。能支持非对称加密体质RSA,专门用于确保安全的智能卡,在卡中存储了一个很长的用户专门密钥和数字证明书。
将IC卡用于身份识别的方法明显地优于磁卡,是因为:IC 卡具有更好的安全性、防伪性、保密性,且存储容量大得多。
③基于生物标志的认证技术
常用于身份识别的生理标志:指纹、视网膜、声音、手指长度。
生物识别系统的要求:识别系统的性能必须满足要求;能被用户接受;系统成本适当。
生物识别系统的组成:注册部分、识别部分。
④基于公开密钥的认证技术
保护域:进程对一组对象访问权的集合。它规定了进程所能访问的对象和能执行的操作。
进程和域间的静态联系方式
在进程和域之间,可以一一对应,即一个进程只联系着一个域。在进程的整个生命期中,其可用资源是固定的,我们把这种域称为“静态域”。
进程和域间的动态联系方式
在进程和域之间,也可以是一对多的关系,即一个进程可以联系着多个域。在此情况下,可将进程的运行分为若干个阶段,其每个阶段联系着一个域,这样便可根据运行的实际需要,来规定在进程运行的每个阶段中所能访问的对象。
访问矩阵
利用一个矩阵来描述系统的访问控制。访问矩阵中的行代表域,列代表对象,矩阵中的每一项是由一组访问权组成的。
具有域切换权的访问矩阵
为了能对进程进行控制,同样应将切换作为一种权力,仅当进程有切换权时,才能进行这种切换。
访问矩阵的修改:拷贝权、所有权、控制权。
拷贝权和所有权都是用于改变矩阵内同一列的各项访问权的,或者说,是用于改变在不同域中运行的进程对同一对象的访问权。控制权则可用于改变矩阵内同一行中(域中)的各项访问权,亦即,用于改变在某个域中运行进程对不同对象的访问权。
访问控制矩阵的实现
访问控制表
对访问矩阵按列(对象)划分,为每一列建立一张访问控制表ACL。在该表中, 已把矩阵中属于该列的所有空项删除,此时的访问控制表是由一有序对(域,权集)所组成的。
域是一个抽象的概念,每个用户是一个域,也可以每个进程是一个域。
访问控制表也可用于定义缺省的访问权集。
访问权限表
把访问矩阵按行(即域)划分,便可由每一行构成一张访问权限表。换言之,这是由一个域对每一个对象可以执行的一组操作所构成的表。
访问权限表不能允许直接被用户(进程)所访问。
大多数系统都同时采用访问控制表和访问权限表,在系统中为每个对象配置一 张访问控制表。当一个进程第一次试图去访问一个对象时,必须先检查访问控制表,检查进程是否具有对该对象的访问权。如果无权访问,便由系统来拒绝进程的访问,并构成一例外(异常)事件;否则(有权访问),便允许进程对该对象进行访问,并为该进程建立一访问权限,将之连接到该进程。以后,该进程便可直接利用这一返回的权限去访问该对象,这样,便可快速地验证其访问的合法性。当进程不再需要对该对象进行访问时,便可撤消该访问权限。
计算机病毒的基本概念
计算机病毒是一段程序,它能不断地进行复制和感染其它程序,无需人为介入便能由被感染的程序和系统传播出去。
计算机病毒的危害:
占用系统空间、占用处理机时间、对文件造成破坏、使机器运行异常。
计算机病毒的特征:
寄生性、传染性、隐蔽性、破坏性
计算机病毒的类型
①文件型病毒
现在大多数病毒都采用寄生的方法,把自己附着在正常程序上。
大多数病毒是被从程序的后面装入的,并把文件头中起始地址指向病毒的始端。病毒也可以被放在文件的中间,即充斥在程序里的空闲空间中。当受感染的程序执行时,病毒将寻找其它可执行文件继续散播。
②内存驻留病毒
该病毒一旦执行,自己便占据内存驻留区,通常选择占据在内存的上端或下端的中断变量中(通常不会使用的数百个字节的内存区域)。为了能使自己频繁地执行,通常内存驻留病毒会把陷阱或中断向量的内容复制到其它地方去,而把自己的地址放入其中,使中断或陷阱指向病毒程序的入口。
③引导扇区病毒
病毒也会寄生于磁盘上用于引导系统的引导区。这样,当系统开机时,病毒便借助于 引导过程进入系统。
④宏病毒
宏病毒可利用软件提供的宏功能将病毒插入到带宏的doc文件或dot文件中。
⑤电子邮件病毒
电子邮件病毒嵌入到电子邮件中,只要接收者打开含有该病毒的电子邮件,病毒就会被激活。由于电子邮件病毒是通过Internet传播的,因此使病毒的传播速度显著加快。
病毒的隐藏方式
①伪装:通过压缩伪装;通过修改日期或时间来伪装。
②隐藏:隐藏于目录和注册表空间;隐藏于程序的页内零头。
③更改用于磁盘分配的数据结构。
④更改坏扇区列表。
常用的产生多态病毒的方法如下:插入多余的指令;对病毒程序进行加密。
基于病毒数据库的病毒检测方法
①建立病毒数据库
首先应当采集病毒的样本。
②扫描硬盘上的可执行文件
采取将硬盘上的可执行文件与病毒数据库中的病毒样本严格匹配的方式,可能会漏掉许多多形态病毒。 解决这一问题的方法是采用模糊查询软件。
基于文件改变的病毒检测方法:通过被感染文件的长度或者日期和时间的改变来发泄病毒。
完整性检测方法:首先扫描硬盘,检查是否有病毒,当确信硬盘是干净的后,它才正式工作。它首先计算每个文件的检查和(或称校验和),然后再计算目录中所有相关文件的检查和,将所有这些检查和都写入一个检查和文件中,利用它们来对文件是否被病毒感染进行检查。等到下一次检测病毒时,完整性检测程序将重新计算所有文件的检查和,并分别与原来文件的检查和进行比较,若不匹配,就表明该文件已发生改变,由此可以认定该文件已被感染上病毒。
更好的方法是对检查和文件进行加密,而且可以采用智能卡技术,将加密密钥直接做在芯片上。
UNIX系统的特征
①开放性
②多用户、多任务环境
③功能强大且高效
④丰富的网络功能
⑤支持多处理器功能
UNIX系统的内核结构
UNIX核心的框图。
OS核心分成两大部分:进程控制子系统、文件子系统。
进程控制子系统:负责对四大资源中的两大资源——处理机和存储器进行管理。
功能:
①进程控制。
②进程通信。
③存储器管理。用于为进程分配物理存储空间。
③进程调度。采用的是动态优先数轮转调度算法。
在UNIX系统Ⅴ中,采用了段页式存储管理方式。在该系统中把段称为区——Region。
进程控制块
在 UNIX 系统Ⅴ中,把进程控制块(PCB)分为四部分:
①进程表项
其中包括最常用的核心数据。为了提高对这些信息访问的效率,系统设计者将常被访问的信息放在进程表项中,又称之为Proc表或Proc结构,使之常驻内存。
②U区
用于存放用户进程表项的一些扩充数据。这部分数据并非常驻内存。
③系统区表
存放各个区在物理存储器中的地址信息等。
④进程区表
用于存放各区的起始虚地址及指向系统区表中对应区表项的指针。
核心可通过查找进程区表和系统区表,将区的逻辑地址变换为物理地址。
进程状态
进程的状态转换图。
(1)执行状态。
处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所占有的处理机是可被抢占的;而处于核心态执行中的进程,则能访问所有的内存空间和对象,且所占用的处理机是不允许被抢占的。
(2)就绪状态。
这是指进程处于一种只需再获得处理机便可执行的状态。由于UNIX内核提供了对换功能,因而又可把就绪状态分为“内存中就绪”和“就绪且换出”两种状态。
(3)睡眠状态。
由于对换功能的原因又可将睡眠状态分为“内存睡眠”状态和“睡眠且换出”状态。当内存紧张时,在内存中睡眠的进程可被内核换出到外存上,相应地,此时进程的状态便由“内存睡眠”状态转换为“睡眠且换出”状态。
(4)“创建”与“僵死”状态。
创建状态是指利用fork系统调用来创建子进程时,被创建的新进程所处的状态;僵死状态是在进程执行了exit系统调用后所处的状态,此时该进程实际上已不存在,但还留下一些信息供父进程搜集。
(5)被抢占状态。
当正在核心态执行的进程要从核心态返回到用户态执行时,如果此时已有一优先级更高的进程在等待处理机,则此时内核可以抢占(剥夺)已分配给正在执行进程的处理机,去调度该优先级更高的进程执行。
进程映像
进程是进程映像(Process Image)的执行过程;或者说,进程映像也就 是正在运行进程的实体,它由三部分组成:
①用户级上下文
用户级上下文的主要成分是用户程序。它在系统中可分为正文区和数据区两部分。
②寄存器上下文
寄存器上下文主要是由CPU中的一些寄存器的内容所组成的。主要的寄存器有:程序寄存器、处理机状态寄存器(PSR)、栈指针、通用寄存器。
③系统级上下文
系统级上下文包括OS为管理该进程所用的信息,可分为静态和动态两部分。
进程控制
①fork系统调用
在UNIX的内核中设置了一个0进程,它是惟一一个在系统引导时被创建的进程。系统中除0进程外的所有进程都是用fork创建的。
核心需为 fork 完成下列操作:为新进程分配一个进程表项和进程标识符;检查同时运行的进程数目;拷贝进程表项中的数据;子进程继承父进程的所有文件;为子进程创建进程上下文;子进程执行。
②exec系统调用
用于将一个可执行的二进制文件覆盖在新进程的用户级上下文的存储空间上,以更新新进程的用户级上下文。
execⅤ系统调用所要完成的操作:对可执行文件进行检查;回收内存空间;分配存储空间;采纳数拷贝。
③exit系统调用
UNIX内核利用exit来实现进程的自我终止。
内核需为exit完成以下操作:关闭软中断;回收资源;写记账信息;置进程为“僵死”状态。
④wait系统调用
wait系统调用用于将调用进程挂起,直至其子进程因暂停或终止而发来软中断信号为止。
进程调度与切换
UNIX系统是单纯的分时系统,未设置高级调度——作业调度,只设置了中级调度——进程对换和低级调度——进程调度。
引起进程调度的原因
①UNIX系统是分时系统,因而其时钟中断处理程序须每隔一定时间便对要求进程调度程序进行调度的标志runrun予以置位,以引起调度程序重新调度。
②当进程执行了wait、exit及sleep等系统调用后要放弃处理机时,也会引起调度程序重新进行调度。
③当进程执行完系统调用功能而从核心态返回到用户态时,如果系统中又出现了 更高优先级的进程在等待处理机时,内核应抢占当前进程的处理机,这也会引起调度。
调度算法
采用动态优先数轮转调度算法进行进程调度。
进程优先级的分类
核心优先级。又可进一步把它分为可中断和不可中断两种。
用户优先级。又被分成n+1级,其中第0级为最高优先级,第n级的优先级最低。
进程优先数的计算
优先数 = 最近使用CPU的时间 / 2 + 基本用户优先数
进程切换
在进程调度之后,内核所应执行的是进程上下文的切换,即内核是把当前进程的上下文保存起来,而所恢复的则是进程调度程序所选中的进程的上下文,以使该进程能恢复执行。
①sleep与wakeu同步机制
sleep过程
进入sleep过程后,核心首先保存进入睡眠时的处理机运行级,再提高处理机的运行优先级来屏蔽所有的中断,接着将该进程置为“睡眠”状态,将睡眠地址(对应着某个睡眠事件)保存在进程表项中,并将该进程放入睡眠队列中。如果进程的睡眠是不可中断的,做了进程上下文的切换后,进程便可安稳地睡眠。当进程被唤醒并被调度执行时,将恢复处理 机的运行级为进入睡眠时的值,此时允许中断处理机。
wakeup过程
主要功能是唤醒在指定事件队列上睡眠的所有进程,并将它们放入可被调度的进程队列中。
②信号机制
信号机制主要是作为在同一用户的诸进程之间通信的简单工具,是对硬中断的一种模拟。
信号机制与中断机制之间的相似之处表现为:
信号和中断都同样采用异步通信方式,在检测出有信号或有中断请求时,两者都是暂停正在执行的程序而转去执行相应的处理程序,处理完后都再返回到原来的断点;再有就是两者对信号或中断都可加以屏蔽。
信号与中断两机制之间的差异是:
中断有优先级,而信号机制则没有,即所有的信号都是平等的;再者是信号处理程序是在用户态下运行的,而中断处理程序则是在核心态下运行;还有,中断响应是及时的,而对信号的响应通常都有较长的时间延迟。
信号机制的功能:
发送信号;设制对信号的处理方式(可利用系统调用signal(sig, func)来预置对信号的处理方式);对信号的处理。
管道机制
所谓管道,是指能够连接一个写进程和一个读进程、并允许它们以生产者——消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的入端将数据写入管道,而读进程则从管道的出端读出数据。
管道的类型:
无名管道:这是个临时文件,当这些进程不再需要此管道时,由核心收回其索引结点。
有名管道:利用mknod系统调用建立的、可以在文件 统中长期存在的、具有路径名的文件,因而其它进程可以感知它的存在,并能利用该路径名来访问该文件。
对无名管道的读写:
①对pipe文件大小的限制。
核心将索引结点中的直接地址项作为一个循环队列来管理,为它设置一个读指针和一个写指针,按先进先出顺序读写。
②进程互斥。
③进程写管道。
如果管道中有足够的空间能存放要写的数据,在每写完一(盘)块后,核心便自动增加地址项的大小。当写完i-addr(9)地址项中所指示的盘块时,便又向i-addr(0)地址项所指示的盘块中写数据,全部写完后,核心修改索引结点中的写指针,并唤醒因该管道空而睡眠等待的进程。如果管道中无足够的空间来存放要写入的数据,核心将对该索引结点做出标志,然后让写进程睡眠等待,直到读进程将数据从管道中读出后,才唤醒等待写进程。
④进程读管道。
当进程从管道中读数据时,也同样会有两种可能:如果管道中已有足够的数据供进程读,读进程便根据读指针的初始值去读数据。每读出一块后,便增加地址项的大小。读完时,核心修改索引结点中的读指针,并唤醒所有等待的写进程。如果进程所要读的数据比管道中的数据多,则可令读进程把管道中已有数据读完后,暂时进入睡眠状态等待,直至写进程又将数据写入管道后,再将读进程唤醒。
消息机制
消息
消息是一个格式化的、可变长度的信息单元。为便于管理而把消息分为消息首部和消息数据区两部分。
消息队列
每个消息队列有一个称为关键字key的名称,它是由用户指定的。每个消息队列还有一个消息队列描述符。
消息队列的建立
利用系统调用msgget( )先建立一个指名的消息队列。
消息队列的操纵
利用msgctl( )系统调用对指定的消息队列进行操纵:用于查询有关消息队列的情况的命令;用于设置和改变有关消息队列的属性的命令;消除消息队列的标识符。
消息的发送
可利用msgsnd( )系统调用来发送消息。
消息的接收
可利用msgrcv( )系统调用,从指定消息队列中读一个消息。
共享存储区机制
共享存储区机制是UNIX系统中通信速度最高的一种通信机制。
当进程间欲利用共享存储区进行通信时,须首先在主存中建立一个共享存储区,然后将该区附接到自己的虚地址空间上。此后,进程之间便可通过对共享存储区中数据的读和写来实现直接通信。
共享存储区的建立
利用系统调用shmget( )建立一块共享存储区,并提供该共享存储区的名字key和共享存储区以字节为单位的长度size等参数。
共享存储区的操纵
用 shmctl( )系统调用对共享存储区的状态信息进行查询;对共享存储区加锁或解锁;修改共享存储区标识符等。
共享存储区的附接与断开
利用系统调用shmat( )将该共享存储区附接到用户给定的某个进程的虚地址 shmaddr上,并指定该存储区的访问属性。
当进程不再需要该共享存储区时,再利用系统调用shmdt( )把该区与进程断开。
信号量集机制
信号量
在UNIX系统中规定,每个信号量有一个可用来表示某类资源数目的信号量值和一个操作值,该操作值可为正整数、零或负整数三种情况之一。
信号量集
在一个信号量集中,通常都包含有若干个信号量。对这组信号量的操作方式应当是原子操作方式。
信号量集的数据结构
信号量表:是信号量的结构数组。
信号量集表:是信号量集的索引结构数组,其中的每一个元素都对应于一个信号量集。
系统调用
semget( )系统调用:用户可利用该系统调用来建立信号量集。
semop( )系统调用:该系统调用可用来对信号量集进行操作。
请求调页管理的数据结构
①页表和磁盘描述表
页表
UNIX系统Ⅴ将进程的每个区分为若干个虚页,可把这些虚页分配到不相邻接的页框中,为此而设置了一张页表。在其每个表项中,记录了每个虚页和页框间的对照关系。
磁盘块描述表
在请求调页机制中,若发现缺页,系统应将所缺页调入内存。
引入了磁盘块描述表,用它来记录进程在不同 时候的每个虚页在硬盘中的盘块号。这样,当进程在运行中发现缺页时,可通过查找该页表的方法来找到所需调入页面的位置。
一个进程的每一页对应一个磁盘描述表项,它描述了每一个虚页的磁盘拷贝。
②页框数据表和对换使用表
页框数据表
每个页框数据表项描述了内存的一个物理页。
对换使用表
对换设备上的每一页都占有对换使用表的一个表项,表项中含有一个引用计数,其数值表示有多少页表项指向该页。
换页进程
在UNIX系统的核心中,专门设置了一个换页进程,即0进程。其主要任务是:每隔一定时间,对内存中的所有有效页的年龄加1,以及当有效页的年龄达到规定值后,便将它换出。
①增加有效页的年龄
每当内存中的空闲页面数低于某规定的低限时,核心便唤醒换页进程,由换页进程去检查内存中的每一个活动的、非上锁的区, 对所有有效页的年龄字段加 1。对于那些其年龄已增至最大的页,将它们换出。如果这种页已被进程访问过,便将其年龄域中的年龄降为 0。
②对换出页的几种处理方式
(1)若在对换设备上已有被换出页的拷贝,且该页的内容未被修改,此时,核心只需将该页页表项中的有效位清零,并将页框数据表项中的引用计数减1,最后将该页框数据表项放入空闲页链表中。
(2)若在对换设备上没有被换出页的拷贝,则换出进程应将该页写到对换设备上。但为了提高对换效率,对换进程并不是随有随换,而是先将所有要换出的页链入到一个要换出的页面链上。当换出页面链上的页面数达到某一规定值时,比如64个页,核心才真正将这些页面写到对换区中。
(3)虽然在对换设备上已有换出页的副本,但该页的内容已被修改过,此时核心应将该页在对换设备上原来占有的空间释放,再重新将该页拷贝到对换设备上,使在对换设备上的拷贝内容总是最新的。
③将换出页面写到对换设备上
当在换出页面链表中的页面数已达到规定值时,核心应将它们换出。为此,应首先为它们分配一个连续的对换空间,以便一起将它们换出;但如果在对换设备上没有足够大的连续空间,而其空闲存储空间的总和又大于 64KB 时,核心可采取每次换出一页的方式将它们换出。
请求调页
如何将所缺之页调入内存,这将与所缺页面应从何处调入有关,这又可分成以下三种情况:
①缺页在可执行文件上
根据该文件所对应的系统区表项中的索引结点指针,找到该文件的索引结点,即可把从磁盘块描述表项中得到的该页的逻辑块号作为偏移量,查找索引结点中的磁盘块号表,便可找到该页的磁盘块号,再将该页调入内存。
②缺页在对换设备上
核心先为该缺页分配一个内存页,修改该页页表,使之指向内存页,并将页框数据表项放入相应的散列队列中,然后把该页从对换设备上调入内存。
③缺页在内存页面缓冲区中
只需适当地修改页面表项等数据结构中的信息。
①空闲字符缓冲区队列
所有的空闲字符缓冲区都通过各自的链接指针C-next链接成一个空闲字符缓冲区队列,由队列头标中的队首指针cfreelist指向其第一个缓冲区。
空闲缓冲区队列实际上是一个栈。
②空闲字符缓冲区的分配与回收
内核可利用getcf过程从空闲字符缓冲区队列中取得一个空闲缓冲区。
空闲缓冲区队列属于临界资源。
调用 putcf 过程释放缓冲区。
③设备的字符缓冲区队列
当字符设备工作时,通常都拥有一个至几个不同的字符缓冲区队列,所有的队列都由一个称为clist结构的信息块加以控制。
getc过程:从一个clist结构的队首指针所指示的字符缓冲队列中取出为首的字符,然后修改该队列的可用字符计数和队首指针。
putc过程:将一个字符C放入设备的指定字符缓冲区队列的末尾。
getcb过程:从指定的设备字符缓冲区队列中取出第一个缓冲区,并将该队列的可用字符计数减去第一个缓冲区中的字符数,然后返回指向该缓冲区的指针bp。
putcb过程:将由bp所指向的缓冲区放入指定的设备字符缓冲区队列的末尾。
盘块缓冲区及其首部
每一个盘块缓冲区均由两部分组成:一部分用于存放数据本身,即数据缓冲区;另一部分是缓冲控制块,也称缓冲首部,用于存放对应缓冲区的管理信息。
盘块缓冲池结构
①空闲链表。
为了对缓冲区进行管理,在核心中设置了一个双向链接的空闲链表。
②散列队列。
为了加速对缓冲区的查找,系统把所有的缓冲区逐个设备地、按其块号所计算的散列值的不同,组织成多个队列,每个散列队列仍是一个双向链,其中缓冲区的 数目不断地变化,各块的散列值用散列函数计算。
盘块缓冲区的分配
①getblk( )过程。该过程用于从空闲缓冲区队列中获得任一空闲缓冲区。
②getblk(dev, blkno)过程。该过程用于为指定设备dev和盘块号为blkno的盘块申请一个缓冲区。
盘块缓冲区的回收
调用brelse过程将之收回。释放者进程唤醒等待进程,若在所释放的缓冲区中数据是有效的,可将该缓冲区链入空闲链表的末尾;否则(缓冲区中数据无效),应将它链入空闲队列的头部。空闲链表属于临界资源,UNIX系统通过提高处理机的运行级对中断加以屏蔽的方法来实现。
内核与驱动程序接口
在UNIX系统中,每类设备都有一个驱动程序,用来控制该类设备。
设备开关表的作用:
系统为每类设备提供了一个设备开关,其中含有各函数的入口地址。设备开关表是核心与驱动程序间的接口,系统调用通过设备开关表转向相应驱动程序的函数。
块设备开关表
打开函数的入口地址、关闭函数的入口地址、策略函数的入口地址。
字符设备开关表
打开特定字符设备的函数入口地址、关闭特定字符设备的函数入口地址、读特定字符设备的函数入口地址、写特定字符设备的函数入口地址、预置该设备参数的函数及读取该设备预置参数的函数等的入口地址。
磁盘驱动程序
①打开磁盘驱动器的过程gdopen
再调用gdtimer过程启动对应的控制器和设备短期时钟闹钟,用于控制磁盘驱动器的执行时间。
②启动磁盘控制器的过程gdstart
在进行磁盘的读、写之前,应首先装配磁盘控制器中的各个寄存器,然后再启动磁盘控制器。
gdstartegy过程的主要功能则是把指定的缓冲首部排在磁盘控制器I/O队列的末尾,并启动磁盘控制器。
③磁盘中断处理过程gdintr
先检查磁盘是否已经启动,若尚未启动,程序便不予理睬即返回;若已启动,则还须先通过对状态寄存器的检查,来了解本次传送是否出错。若已出错,做好重新执行的准备,然后再传送。仅当重试多次都失败且超过规定的执行时间时,才设置出错标志。如未出错,则继续传送下一个缓冲区中的数据。
磁盘的读/写程序
①读方式
一般读方式:只把盘块中的信息读入缓冲区,由bread过程完成。
提前读方式:当一个进程要顺序地读一个文件所在的各个盘块时,可要求提前将下一个盘块(提前块)中的信息读入缓冲区。可缩短读这块数据的时间,从而改善了系统性能。提前读功能由breada过程完成。
②写方式
一般写方式:这种方式是真正地把缓冲区中的数据写到磁盘上,且进程须等待写操作完成,由bwrite过程完成。
异步写方式: 进程无需等待写操作完成便可返回,异步写过程是bawrite。
延迟写方式: 该方式并不真正启动磁盘,而只是在缓冲首部设置延迟写标志,然后便释放该缓冲区,并将之链入空闲链表的末尾。以后,当有进程申请到该缓冲区时,才将其内容写入磁盘。引入延迟写的目的是为了减少不必要的磁盘I/O。延迟写方式由过程bdwrite完成。
UNIX文件系统的特点
①文件系统的组织是分级树形结构形式。
②文件的物理结构为混合索引式文件结构。
③采用了成组链接法管理空闲盘块。
④引入了索引结点的概念。
文件系统结构
文件名和文件属性(说明)分开存放,由文件属性构成文件的索引结点。
UNIX文件系统结构图。
文件系统的资源管理
当文件处于“未打开”状态时,文件需占用三种资源:
(1)一个目录项,用以记录文件的名称和对应索引结点的编号。
(2)一个磁盘索引结点项,用以记录文件的属性和说明信息,这些都驻留在磁盘上。
(3)若干个盘块,用以保存文件本身。
当文件被引用或“打开”时,须再增加三种资源:
(1)一个内存索引结点项,该项驻留在内存中。
(2)文件表中的一个登记项。
(3)用户文件描述符表中的一个登记项。
文件的物理结构
采用一种混合索引文件结构,这是将文件所占用盘块的盘块号直接或间接地存放在该文件索引结点的13个地址项之一项中。在查找文件时,只须找到文件的索引结点,便可用直接或间接的寻址方式获得指定文件的盘块。
寻址方式
①直接寻址
在索引结点中建立了10个地址项i-addr(0)~i-addr(9),在每个地址项中直接置入该文件占用盘块的编号。这相当于单级索引文件的寻址方式。
②一次间接寻址
在i-addr(10)地址项中,存放的不再是存放文件的一个物理盘块号,而是将存放了直接地址的1~256个物理盘块号的盘块的编号放于其中,这相当于两级索引文件中的寻址方式。
③多次间接寻址
使用的地址项分别为索引结点中的i-addr(11)和i-addr(12)。二次间址相当于三级索引文件中的寻址方式。
地址转换
①将字节偏移量转换为文件逻辑块号。
在每次读、写时,都要先把字节偏移量转换为文件的逻辑块号和块内位移量。
②把文件逻辑块号转换为物理盘块号。
直接寻址:
首先,将文件的逻辑块号转换为索引结点中地址项的下标;其次,从该下标所指的地址项中,即可获得物理盘块号。
一次间址:
第一步,由于一次间址的地址项下标为10,所以可以从i-addr(10)中得到一次间址盘块号,由bread过程读间址块。
第二步,计算一次间址中文件的逻辑块号,即将文件的逻辑块号减10,根据一次间址中的逻辑块号得到间址块号中地址项的下标,再从相应下标的地址项中得到物理盘块号。
③多次间址。
索引结点的管理
超级块:专门用于记录文件系统中盘块和磁盘索引结点使用情况的一个盘块。
磁盘索引结点的分配与回收
①分配过程ialloc
每当核心创建一个新文件。都要为之分配一个空闲磁盘i结点。若分配成功,便再分配一内存i结点。
②回收过程ifree
当一个文件已不再被任何进程需要时,应将该文件从磁盘上删除,回收其所占用的盘块及相应的磁盘i结点。
内存索引结点的分配与回收
①分配过程iget
在打开文件时,为之分配内存i结点。由于允许文件被共享,因此 ,如 果一文 件早已被其他用户打开并有了内存i结点,此时便只需将该i结点中的引用计数加1;如果文件尚未被其他用户打开,则由iget过程为该文件分配一个内存i结点,并调用bread 过程将其磁盘i结点的内容拷贝到内存i结点中,同时进行初始化。
②回收过程iput
每当进程要关闭某文件时,须调用iput过程先对该文件的内存i结点中的引用计数做减1操作。若结果为0,便回收该内存i结点,再判断其磁盘的i结点的联接计数,若其结果也为 0,便删除此文件,并回收分配给该文件的盘块和磁盘 i 结点。
空闲磁盘空间的管理
①文件卷的组织
0#块一般用于系统引导或空闲;1#块为超级块,用于存放文件卷的资源管理信息;从2#块起存放磁盘索引结点,直到K#块。
②空闲盘块的组织
采用了成组链接法。将若干个空闲盘块划归为一个组,将每一组中的所有盘块号存放在前一组的第一个空闲盘块中,而仅把第一组中的所有空闲盘块号放入超级块的空闲盘块号栈中。
③空闲盘块的分配与回收
空闲盘块的分配
空闲盘块的分配是由alloc过程完成的,该过程的主要功能是从空闲盘块号栈中获得一空闲盘块号。
空闲盘块的回收
空闲盘块的回收是由free过程完成的。
用户文件描述符表的管理
①用户文件描述符表
在UNIX系统Ⅴ中,在每个进程的U区中都设置了一张用户文件描述符表。核心先对其打开请求做仔细检查后,便在该进程的用户文件描述符表中分配一个空项,取其在该表中的位移量作为文件描述符fd返回给用户。以后,当用户再访问该文件时,只需提供该文件描述符fd,系统根据fd便可找到相应文件的内存索引结点。
②ufalloc过程
首先是从用户文件描述符表中查找一个空项,若找到,便将该表项的序号fd作为文件描述符写入进程的U区,然 后返回;否则,置出错标志后返回“NULL”。
文件表的管理
文件表
系统为了对文件进行读/写,设置了一个确定读/写位置偏移量的读/写指针。
除了读/写偏移量f-offset外,还设置了文件引用计数f-count,用于指示正在利用 该文件表项的进程数目,以及用于指向对应内存索引结点的指针f-inode和读/写标志f-flag。
falloc过程
该过程的功能是分配文件表项。调用 ufalloc 过程分配用户文件描述符表项,若找到空闲文件表项,便将该项的始址置入用户文件描述符表项中。在设置完文件描述符表项的初始值后便返回(fp)。若未找到空闲文件表表项,则返回 NULL。
目录管理
①构造目录项
构造目录的任务是由过程makenode完成的。在创建一个新文件时,由系统调用creat过程来为文件构造一个目录项,makenode 过程首先调用ialloc过程为新文 件分配一个磁盘i结点及内存i结点。当分配成功时,须先设内存i结点的初值(含拷贝),然后又调写目录过程wdir,将用户提供的文件名与分配给该文件的磁盘i结点号一起,构成一个新目录项,再将它记入其父目录文件中。
②删除目录项
对于一个只由某用户独享的文件,在该用户不再需要它时,应将它从文件系统中删除,以便及时腾出存储空间。
对于一个可供若干个用户(进程)共享的文件,内核将利用link系统调用为各用户分别建立一个与该文件的联接,并设置联接计数nlink,使之等于要共享该文件的进程数目。仅当所有联接到该文件上的用户都不再需要该文件时,其nlink值必为0,系统才执行删除此共享文件的操作。相应地,将此文件的最后一个目录项从其文件目录中删除。
③检索目录
用户在第一次访问某文件时,系统按路径名去检索文件目录,得到该文件的磁盘索引结点,且返回给用户一个文件描述符。以后,用户便利用该文件描述符来访问该文件,这时系统不再去检索文件目录。
检索目录的过程namei是根据用户给出的文件路径名,从高层到低层顺序地查找各级文件目录,寻找指定文件的索引结点号。
链接
以下是一个 hello.c 程序:
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
在 Unix 系统上,由编译器把源文件转换为目标文件。
gcc -o hello hello.c
这个过程大致如下:
静态链接器以一组可重定向目标文件为输入,生成一个完全链接的可执行目标文件作为输出。链接器主要完成以下两个任务:
可执行目标文件:可以直接在内存中执行;
可重定向目标文件:可与其它可重定向目标文件在链接阶段合并,创建一个可执行目标文件;
共享目标文件:这是一种特殊的可重定向目标文件,可以在运行时被动态加载进内存并链接。
静态库有以下两个问题: