Linux操作系统简介

上传人:小*** 文档编号:118749349 上传时间:2022-07-12 格式:PPT 页数:112 大小:746.50KB
收藏 版权申诉 举报 下载
Linux操作系统简介_第1页
第1页 / 共112页
Linux操作系统简介_第2页
第2页 / 共112页
Linux操作系统简介_第3页
第3页 / 共112页
资源描述:

《Linux操作系统简介》由会员分享,可在线阅读,更多相关《Linux操作系统简介(112页珍藏版)》请在装配图网上搜索。

1、第七章 Linux操作系统简介 第七章 Linux操作系统简介 7.1 Linux简介简介 7.2 Linux进程管理进程管理 7.3 进程间的通讯机制进程间的通讯机制 7.4 Linux存储管理存储管理 7.5 Linux文件系统文件系统 7.6 Linux设备管理设备管理 第七章 Linux操作系统简介 7.1 Linux 简简 介介 7.1.1 Linux的发展过程的发展过程 1.UNIX的简明历史的简明历史2.Linux的发展的发展 3.Linux开发过程开发过程(1)它是基于天才的思想开发而成的。它是基于天才的思想开发而成的。(2)它的开发是基于一组优秀的概念。它的开发是基于一组优秀

2、的概念。(3)它的开发过程是公开的。它的开发过程是公开的。第七章 Linux操作系统简介 7.1.2 Linux内核结构内核结构 1.内核设计的目标内核设计的目标(1)清晰性(Clarity)。(2)兼容性(Compatibility)。兼容异种文件系统。提供对网络的兼容。提供对硬件的兼容。(3)可移植性(Portability)。(4)健壮性和安全性(Robustness and Security)。(5)速度(Speed)。第七章 Linux操作系统简介 2.内核体系结构的设计方法内核体系结构的设计方法 图7.1 内核体系结构基本结构图 用户应用程序系统库(libc)内核与结构无关部分内核

3、与结构有关部分硬件内核部分第七章 Linux操作系统简介 图7.1是一种类UNIX操作系统的标准视图,它表明所有期望具有平台无关特性的操作系统其内核应有下面两个特性:(1)内核将应用程序和硬件分离开来;(2)部分内核是体系结构和硬件特有的,而部分内核则是可移植的。第七章 Linux操作系统简介 图7.2 详细的内核体系结构图 系统库(libc)内核部分用户应用程序系统调用接口I/O进程控制进程调度进程间通讯内存管理硬件第七章 Linux操作系统简介 图7.2显示了内核概念化的一种可能方式。这里进程和内核的交互通常需要通过如下步骤:用户应用程序调用系统调用,通常是使用libc。该调用被内核的sy

4、stem-call函数截获,此后该函数将调用请求转发给另外的执行请求的内核函数。该函数随即和相关内部代码模块建立通讯,而这些模块还可能需要和其它的代码模块或者底层硬件通讯。结果按照同样的路径依次返回。第七章 Linux操作系统简介 3.Linux系统内核设计方法系统内核设计方法(1)微内核(Microkernel Kernel)。一般微内核只提供4种最小的服务:进程间通讯机制;某些内存管理功能;少量的低层进程管理和调度;低层输入/输出服务。第七章 Linux操作系统简介 (2)单内核(Monolithic Kernel)。单内核基本上是目前的集中式操作系统,它是一个很大的进程。它的内部又可以被

5、分为若干模块(或者是层次或其它)。但是在运行的时候,它是一个独立的二进制大映像。用户是通过系统调用,而不是通过消息传递到达内核的。在内核中完成所需要的工作,然后内核再将所要求的结果返回给用户进程。内核中模块间的通讯是通过直接调用其它模块中的函数实现的。Linux内核基本上是使用单内核,但是它并不是一个纯粹的集成内核。它将微内核的许多优点引入到Linux的单内核设计中。第七章 Linux操作系统简介 4.内核源程序目录结构内核源程序目录结构 内核源程序代码一般安装在/usr/src/linux目录下。在该目录下还有几个其它目录,每一个都代表一个特定的内核功能性子集。(1)documentatio

6、n:该目录下没有内核代码,只有一套有用的文档。(2)arch:该目录下的所有子目录中都是与体系结构相关的代码。每种体系结构特有的子目录下又至少都包含三个子目录;kernel:存放支持体系结构特有的诸如信号量处理和SMP之类特征的实现;lib:存放高速的体系结构特有的一些通用函数的实现;mm:存放体系结构特有的内存管理程序的实现。第七章 Linux操作系统简介 (3)drivers:该目录是内核中非常大的一块。它包括显卡、网卡、SCSI适配器、软盘驱动器、PCI设备和其它Linux支持的外围设备的驱动程序。(4)fs:Linux支持的所有文件系统在fs目录下都有一个对应的子目录。(5)inclu

7、de:该目录包含了Linux源程序树中大部分的包含(.h)文件,它可分为:include/asm*/:arch的子目录,每个目录下的文件中包含了支持给定体系结构所必需的预处理器宏和短小的内联函数;include/linux/:包含内核和用户应用程序请求特定内核服务所使用的常量和数据结构,它在头文件中定义;第七章 Linux操作系统简介 include/net/:供与网络子系统有关的头文件使用;include/scsi/:供与SCSI控制器和SCSI设备有关的头文件使用;include/video/:供与显卡和帧显示缓存有关的头文件使用。(6)init:其较重要的一个文件是main.c,它包含了

8、大部分协调内核初始化的代码。(7)ipc:该目录下的文件实现了System V的进程间通讯(IPC)程序。(8)kernel:这个目录中包含了Linux中最重要的部分:实现平台无关的基本功能。其中包括进程调度(kernel/sched.c)、进程创建和进程撤销的代码(kernel/fork.c和kernel/exit.c)。第七章 Linux操作系统简介 (9)lib:该目录包含lib/inflate.c中的函数,它能够在系统启动时展开经过压缩的内核。lib目录下剩余的其它文件实现一个标准C库的有用子集。(10)mm:该目录包含了体系结构无关的内存管理代码,为每个平台实现最低层的原语与体系结构

9、特有的内存管理程序,它存储在arch/platform/mm中。(11)net:该目录包含了Linux应用的网络协议代码,例如AppleTalk,TCP/IP等。(12)scripts:该目录下没有内核代码,它包含了用来配置内核的脚本。当运行make menuconfig或者make xconfig之类的命令配置内核时,用户就是和位于该目录下的脚本进行交互的。第七章 Linux操作系统简介 7.1.3 Linux 运行模式、运行模式、地址空间与上下文地址空间与上下文 运行Linux系统的计算机硬件至少需要提供两种运行模式:高优先级的核心模式(特权模式)与低优先级的用户模式。核心运行在高优先级,

10、称之为核心态,其它外围软件包括Shell、编辑程序、X-Windows等都运行在低优先级,称之为用户态。采用不同的执行模式是为了系统保护。当用户进程需要完成特权模式下才能完成的某些功能时,必须严格按照系统调用提供的接口才能进入特权模式,然后执行调用所提供的有限的功能。每一种运行态都有自己的堆栈,Linux中分为用户栈和核心栈。第七章 Linux操作系统简介 采用特权模式进行保护的根本目的是对地址空间的保护,用户进程不能访问所有的地址空间,只有通过系统调用才能进入内核,访问受保护的那些地址空间的数据。另外,进程与进程之间的地址空间也不能随便互访。Linux通过虚存管理机制很好地实现了这种保护。在

11、虚存系统中,进程所使用的地址不直接对应物理的存储单元,每个进程都有自己的虚拟地址空间,对虚拟地址空间的引用通过地址变换机制转换成物理地址的引用。虚拟地址空间分为两部分:用户空间和系统空间。在用户模式下只能访问用户空间,而在核心模式下可以访问用户空间和系统空间。第七章 Linux操作系统简介 一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。用户级上下文有:正文、数据、用户栈及共享存储区。寄存器上下文有:程序计数器(PC),即CPU将执行的下条指令地址,处理机状态寄存器,栈指针,通用寄存器。系统级上下文有:进程表结构task-struct、存储表及页表和核心栈等。全部

12、的上下文信息组成了一个进程的运行环境。当发生进程调度时,必须对全部上下文信息进行切换,新调度的进程才能运行。进程就是上下文集合的一个抽象概念。第七章 Linux操作系统简介 7.2 Linux进进 程程 管管 理理 7.2.1 Linux进程控制块结构进程控制块结构(1)状态信息(State)运行(Running)等待(Waiting)停止(Stopped)死亡(Zombie)第七章 Linux操作系统简介 图7.3 进程之间状态转换图 Running拥有CPUwait_uninterruptibleschedule()时间片到所申请的资源有效wake_up()申请资源未成功sleep_on(

13、)schedule()wait_interruptible所申请的资源有效或收到信号后wake_up()或wack_up_interruptible申请资源未成功interruptible_sleep_on()schedule()跟踪系统调用 执行syscall_trace()sys_exit()schedule()StoppedZombiedo_exit()第七章 Linux操作系统简介(2)调度信息(Scheduling Information)除上述State信息外,主要包括policy(策略)、priority(优先级)、rt-priority(实时优先级)和counter(计数)。调

14、度程序利用这些信息完成进程之间的切换。第七章 Linux操作系统简介 (3)进程标识符(Identifiers)。系统中每个进程都有惟一的进程标识符。标识符是个数字,用来控制进程对系统中文件和设备的存取权限。Linux系统中所有的文件都有所有者和允许的权限,这些权限描述了系统使用者对文件或者目录的使用权。基本的权限是读、写和可执行,这些权限被分配给三类用户:文件的所有者,属于相同组的进程以及系统中的其它进程。每类用户具有不同的权限,例如一个文件允许其拥有者读写,但是同组的只能读而其它进程不允许访问。第七章 Linux操作系统简介 task-struct结构中有4对进程和组标识符:uid,gid

15、:表示运行进程的用户标识符和组标识符。有效 uid 和有效 gid:一般情况下它与进程的uid和gid相同,但在其它用户允许的情况下,可用系统调用setuid(setgid)将它改变为其它用户的uid(gid),以获得对该用户的文件进行操作的权限。文件系统uid 和 gid:用于文件系统操作的合法性访问权限。保留 uid 和 gid:根据POSIX标准引入这两个标识符。第七章 Linux操作系统简介 (4)进程间通讯信息(InterProcess Communication)。Linux支持经典的UNIX IPC机制,如信号、管道和SYSTEM V中IPC机制,包括共享内存、信号量和消息队列。

16、系统利用这些信息实现进程间的通讯。(5)进程链信息(Links)。Linux系统中除了初始化进程外,任一进程都有一个父进程。每个新进程都是从父进程中复制过来,或者从父进程克隆而来的。每个进程对应的task-struct结构中包含有指向其父进程和兄弟进程(具有相同父进程的进程)以及子进程的指针。另外,系统中所有进程都用一个双向链表链接起来,而它们的根是init进程的task-struct数据结构。这个链表被Linux内核用来寻找系统中的所有进程。第七章 Linux操作系统简介 (6)时间和定时器(Times and Timers)。系统在这些字段中保存进程的建立时间以及在其生命期中所花费的CPU

17、时间。这一时间记录进程在系统和用户两种模式下所花费的时间。Linux也支持与进程相关的interval定时器,当定时器到,操作系统会向该进程发送信号。(7)文件系统信息(File System)。进程可以自由地打开或关闭文件,进程的task-struct结构中包含指向每个打开文件描述符的指针*file以及指向两个VFS inode的指针*fs。每个VFS Inode惟一地标记文件中的一个目录或者文件,同时还对底层文件系统提供统一的接口。这两个指针分指向进程的根目录和进程的当前目录。这两个VFS inode包含同一个count域,当有多个进程引用时,它的值将增加。第七章 Linux操作系统简介

18、(8)虚拟内存(Virtual Memory)。多数进程都有一些虚拟内存(内核线程和后台进程没有),task-struct的数据成员mm指向关于存储管理的mm-struc结构,其中包含了一个虚存队列mmap指向由若干vm-area-struc描述的虚存段。第七章 Linux操作系统简介 7.2.2 进程调度算法和调度策略进程调度算法和调度策略 内核调度管理程序可以在几种情况下发生。如当前进程被放入等待队列时发生,系统调用结束时发生,从系统模式返回用户模式时发生。每次调度管理程序运行时将执行以下工作:(1)处理内核中的工作 (2)处理当前进程 (3)选择进程 (4)进程交换 第七章 Linux操

19、作系统简介 7.2.3 进程使用的文件进程使用的文件 图7.4 文件系统的数据成员 countumask*roop*pwdfs_struct数据结构task_struct指针数组countclose_on_execopen_fsfd0fd1fd255files_struct数据结构VFS InodeVFS Inode文件结构fsfilesf_modef_posf_flagsf_countf_ownerf_inodef_opf_versionVFS Inode文件操作子过程第七章 Linux操作系统简介 7.2.4 进程使用的虚拟内存进程使用的虚拟内存 图7.5 进程的虚拟内存 mmtask_s

20、truct指针数组mm_struct数据结构countpgdmmapmmap_avlmmap_semvm_endvm_startvm_nextvm_flagsvm_inodevm_opsvm_area_struct数据结构vm_endvm_startvm_nextvm_flagsvm_inodevm_opsvm_atea_struct数据结构Proocsscs Virtual Memory虚拟内存DataCode0 x8059BB80 x80480000 x0000000第七章 Linux操作系统简介 7.2.5 系统调用系统调用 系统调用负责保护对内核所管理的资源的访问,系统调用中主要有如下

21、几个大类:处理I/O请求(open,close,read,write,poll等),进程操作(fork,execve,kill等),时间管理(time,settimeofday等)以及内存管理(mmap,brk等)。几乎所有的系统调用都可以归入这几类中。第七章 Linux操作系统简介 init程序以/etc/inittab为脚本文件来创建系统中的新进程。新进程还可以创建新进程。创建新进程是通过克隆老进程或当前进程来创建的。新进程的创建使用系统调用sys-fork()或sys-clone(),并且是在内核模式下完成。在系统调用结束时,系统从物理内存中分配一个新的task-struct数据结构和进

22、程堆栈,同时获得一个惟一标识此新进程的标识符(pid)。7.2.6 进程的创建与终止进程的创建与终止 第七章 Linux操作系统简介 如果进程是根据sys-clone()产生的,那么它的进程标识号就是当前进程的标识号,并且对它的task-struct中的fs、files、mm等指针并不进行拷贝,而仅将当前的count值加1,这样只有当父进程中相关数据结构成员的count值为0时,Linux才会释放这些数据结构成员所占用的内存空间。当父子进程共享虚拟内存时,Linux使用“copy on write”技术,只有当父进程或子进程对虚存进行写操作时,才给子进程的mm指针所指向的数据结构分配内存,并将

23、父进程的mm指针所指向的数据结构内容拷贝到子进程的mm指针上。第七章 Linux操作系统简介 7.3 进程间的通讯机制进程间的通讯机制 7.3.1 信号信号(signal)Linux系统中定义一组信号类型,这些信号可以由内核或者系统中其它具有适当权限的进程产生。对于收到信号的进程,其task-struct中的signal属性的某一位置位。使用kill命令(kill-l)可以列出系统中所有已经定义的信号,如:第七章 Linux操作系统简介 1)SIGHUP 2)SIGINT 3)SIGQUIT 4)SIGILL 5)SIGTRAP 6)SIGIOT 7)SIGBUS 8)SIGFPE 9)SIG

24、KILL 10)SIGUSR1 11)SIGSEGV 12)SIGUSR2 13)SIGPIPE 14)SIGALRM 15)SIGTERM 17)SIGCHLD 18)SIGCONT 19)SIGSTOP 20)SIGTSTP 21)SIGTTIN 22)SIGTTOU 23)SIGURG 24)SIGXCPU 25)SIGXFSZ 26)SIGVTALRM 27)SIGPROF 28)SIGWINCH 29)SIGIO 30)SIGPWR 第七章 Linux操作系统简介 7.3.2 管道(管道(Pipe)图7.6 管道操作示意图 进程1文件结构f_modef_posf_flagsf_cou

25、ntf_ownerf_inodef_opf_version进程2文件结构f_modef_posf_flagsf_countf_ownerf_inodef_opf_versionInode管道的写操作数据页面管道的读操作第七章 Linux操作系统简介 表7-1 命名管道与管道的差别 命 名 管 道 管 道 是驻留物理设备中的特殊文件 是驻留内存的特殊文件 I/O完成后,不删除 I/O完成后,删除 父进程不同的进程可通过名称共享管道 父进程不同的进程难以共享管道 用Mkfifo创建 用Pipe创建 第七章 Linux操作系统简介 7.3.3 消息队列消息队列 图7.7 Linux消息队列 msgq

26、ue ipc_perm*msg_lasttimesmsgid_ds*msg_first*wwait*rwaitmsg_qnum*msg_nextmsgmsg_type*msg_spotmsg_stimemsg_tsmessagemsg_ts*msg_nextmsgmsg_type*msg_spotmsg_stimemsg_tsmessagemsg_tsmsg_qnum第七章 Linux操作系统简介 7.3.4 信号量信号量 图7.8 Linux 信号量数据结构 semarysemid_dssem_undo信号量数组nextprevsleeperundopidstatussmasopsnsops

27、ipc_permtimessem_basesem_pendingsem_pending_lastundosem_nsemsproc_nextid_nextsemidsemadjsem_queue第七章 Linux操作系统简介 7.3.5 共享内存共享内存 共享内存机制允许多个进程通过一块共享的内存来交换数据。因为进程直接用虚拟地址访问内存中的数据,其通讯效率通常比消息队列、管道等方法高。共享内存的虚拟内存页面出现在每个共享进程页表中,但此页面并不一定位于所有共享进程虚拟内存的相同位置。和其它System V IPC对象的使用方法一样,对共享内存区域的访问是通过关键字和访问权限检验来控制的。一旦

28、内存被共享后,则再不会检验进程对对象的使用方式。它依赖于其它机制,如使用System V信号量,来同步对共享内存的访问。第七章 Linux操作系统简介 7.4 Linux 存储管理存储管理 7.4.1 虚拟内存的实现机理虚拟内存的实现机理 为了将虚拟地址转换为物理地址,处理器首先必须得到虚拟地址页帧号及页内偏移。处理器使用虚拟页帧号为索引来访问处理器页表,检索页表表项。如果在此位置的页表表项有效,则处理器将从此表项中得到物理页帧号。如果此表项无效,则意味着处理器存取的是虚拟内存中一个不存在的区域。在这种情况下,处理器是不能进行地址转换的,它必须将控制传递给操作系统来完成这个工作。这时处理器产生

29、一个缺页中断而陷入操作系统内核,这样操作系统将得到有关无效虚拟地址的信息以及发生缺页中断的原因。第七章 Linux操作系统简介 7.4.2 80386体系结构的存储管理功能体系结构的存储管理功能 图 7.9 保护模式下的虚地址到物理地址的转换 段选择器015310段描述符表虚拟地址段偏移量页目录2231210页目录表线性地址页偏移量页号12 11页目录项段描述符页表项页表物理内存第七章 Linux操作系统简介 7.4.3 Linux分页管理机制分页管理机制 1 访问空间访问空间 在Linux中,每一个用户都可以访问4 GB线性虚拟内存空间。其中,03 GB是用户空间,用户可以直接对它进行访问;

30、34 GB是内核空间,存放内核访问的代码和数据,用户态的程序不能访问。所有进程的34 GB虚拟空间都是一样的,有同样的页目录项,同样的页表,对应到同样的物理内存段。第七章 Linux操作系统简介 2 Linux的页表设计的页表设计 在i386系统中,虚拟地址空间的大小是4GB,每个页表的大小为4 KB。因此,全部的虚拟内存空间划分为1 M页。如果用一个页表描述这种映射关系,那么一个映射表就要有1 M个表项,占用4 MB内存,这将会造成大量内存资源的浪费。Linux为了避免硬件的不同细节影响内核的实施,设置有三级页表,而在i386系列CPU采用两级页表,将PGD和PMD两个合为一个,如下表所示。

31、页目录中间页目录页表页偏移量PGDPMDPTE第七章 Linux操作系统简介 3.存储管理数据结构存储管理数据结构mm-struct 新启动一进程,Linux为其分配task-struct结构,其中内含mm-struct结构,此结构包含了以下用户进程中与存储有关的信息:进程页目录的起始地址(pgd),进程代码段的起始与结束,进程数据段的起始与结束,调用参数区的起始地址/结束地址,进程环境区的起始/结束地址,指向虚拟段的双向链表,指向AVL树指针,互斥信号量等。第七章 Linux操作系统简介 7.4.4 空闲物理内存空间管理空闲物理内存空间管理 1 空闲块的组织空闲块的组织 图7.10 free

32、-area数据结构 每一位对应1页每一位对应2页每一位对应4页bitmaplistmaplistmaplistmapfree_area1页2页4页1页2页4页第七章 Linux操作系统简介 2.空闲块的分配空闲块的分配 Linux使用buddy算法来有效地分配与释放物理页块。按照上述的数据结构,Linux可以分配的内存大小只能是1个页的块,2个页的块或4个页的块等等。在物理分配页块时,Linux首先在free-area数组中寻找一个与请求大小相同的空闲页块。如果没有所请求大小的空闲页块,则继续搜索两倍于请求大小的内存块。这个过程一直将持续到free-area 被搜索完或找到满足要求的最小页块为

33、止。如果找到的空闲页块正好等于请求的块长时,将它从中删除。如果找到的页面块大于请求的页块时,将空闲块一分为二,前半部分插入free-area中前一条list链表中,取后半部分。若还大,则继续对半分,留一半取一半,直至相等。在分配过程中要相应调整bitmap表,将相应位置“0”或置“1”。第七章 Linux操作系统简介 3.空闲块的回收空闲块的回收 页块的分配会导致内存碎片化,页面回收则可将这些页块重新组合成单一大页块。当页块被释放时,将检查是否有相同大小的相邻内存块存在。如果有,则将它们组合起来,形成一个大小为原来两倍的新空闲块。合并时要修改bitmap表的对应位,从free-area的空闲链

34、表中取下该相邻的块。每次组合完后,还要检查是否可以继续合并成更大的页面,直至找不到空闲邻居为止。最佳情况是系统的空闲页块的大小和允许分配的最大内存一样。第七章 Linux操作系统简介 7.4.5 虚拟段的组织虚拟段的组织 mm_struct*vm_end vm_start vm_next vm_flags vm_inode vm_opsvm_area_struct虚拟段进程虚拟内存虚拟存储操作open()close()unmap()protect()sync()advise()nopage()wppage()swapout()swapin()图7.11 虚拟内存段数据结构 第七章 Linux操

35、作系统简介 7.4.6 共享内存共享内存 ipc_perm shm_segsz times shm_npages shm_pages attachesshmid_ds pte pte ptevm_area_structvm_next_sharedvm_next_sharedvm_area_struct图7.12 共享内存结构示意图 第七章 Linux操作系统简介 7.4.7 请求换页与页面换入请求换页与页面换入 对vm-area-struct数据结构的搜寻速度决定了处理缺页中断的效率,而所有vm-area-struct结构是通过一种AVL(Adelson-Velskii and Landis)

36、树结构连在一起的。如果无法找到vm-area-struct与此失效虚拟地址的对应关系,则系统认为此进程访问了非法虚拟地址。这时Linux将向进程发送SIGSEGV信号,如果进程没有此信号的处理过程则终止运行。如果找到此对应关系,Linux接下来检查引起该缺页中断的访存类型。如果进程以非法方式访问内存,系统将产生内存错误的信号。第七章 Linux操作系统简介 如果Linux认为缺页中断是合法的,那么它需要对这种情况进行处理。首先Linux必须通过页面对应的页表项判断该页是在交换空间中还是在可执行映像中。页面项是无效的但非空的,则缺页是在交换空间中,否则页面是一可执行文件映像的一部分。一般Linu

37、x nopage函数被用来处理内存映射可执行映像,同时它使用页面cache将请求的页面调入到物理内存中去。当请求的页面调入物理内存时,必须更新处理器页表。更新这些表项必须进行相关的硬件操作,特别是处理器使用TLB时。这样当处理完页面失效后,进程将从发生失效虚拟内存访问的位置重新开始运行。第七章 Linux操作系统简介 7.4.8 交换空间交换空间 Linux采用两种方式保存换出的页面,一种用整个块设备,如硬盘的一个分区,称为交换设备。另一种用文件系统中固定长度的文件,称为交换文件。它们统称为交换空间。不管是交换设备还是交换文件,其内容格式都是一致的。前4096字节是一个以字符串“swap-sp

38、ace”结尾的位图,位图的每一位对应一个交换空间的页面,该位置位表示对应的页面可用于换页操作。第4096字节之后是真正存放换出页面空间。这样每个交换空间最多可容纳32-697个页面。一个交换空间可能不够用,Linux允许并行管理多个交换空间,缺省值是8个空间。第七章 Linux操作系统简介 7.4.9 换出与丢弃页面换出与丢弃页面 当系统中物理内存减少时,Linux内存管理子系统必须释放物理页面。这个任务由内核交换守护进程(kswapd)来完成的。内核交换守护进程是一种特殊的内核线程。它是没有虚拟内存的进程,直接使用物理地址空间,运行在内核态下。该进程的任务是将页面交换到系统的交换空间(交换区

39、或交换文件),保证系统中有足够的空闲页面来维持内存管理系统高效运行。第七章 Linux操作系统简介 在系统启动时,此进程由内核的init进程创建,然后每隔10 ms周期性激活它。当定时器到时后,内核交换守护进程将检查系统中的空闲页面数是否太少。它使用两个变量:free-pages-high 和free-page-low,来判断是否该释放一些页面。只要系统中的空闲页面数大于free-pages-high,内核交换守护进程不做任何工作,它将睡眠到下一次定时器到时。在检查中,内核交换守护进程将当前写到交换文件中的页面数也计算在内。第七章 Linux操作系统简介 如果系统中的空闲页面数在free-pa

40、ges-high甚至free-pages-low以下时,内核交换守护进程将通过三个途径来减少系统中使用的物理页面的个数:减少缓冲区(Buffer Cache)与页面Cache(Page Cache)的大小。将System V的共享内存页面交换出去。换出或者丢弃进程占用的页面。第七章 Linux操作系统简介 7.4.10 存储管理系统的高速缓冲机制存储管理系统的高速缓冲机制 (1)Buffer Cache:Buffer Cache中包含了由块设备驱动程序使用的数据缓冲。这些缓冲的单元其大小一般是固定的(如512字节),并且包含从块设备读出或者写入的信息块。块设备是仅能够以固定大小块进行读写操作的

41、设备。所有的硬盘都是块设备。利用设备标识符和所需块号作索引可以在Buffer Cache中迅速地找到所需的数据。块设备只能够通过Buffer Cache来存取。如果数据在Buffer Cache中可以找到则无需从物理块设备(如硬盘)中读取,这样可以加速访问。第七章 Linux操作系统简介 (2)Page Cache:用来加速硬盘上可执行映像文件与数据文件的存取。它每次缓冲一个页面的文件内容。页面从磁盘上读入内存后缓存在Page Cache中。每当需要读取文件的一页时,总是首先通过Page Cache读取。若读取的页在Page Cache中,就返回指向表示该页面的mem-map-t的指针。否则必

42、须从文件系统中调入,接着Linux申请一物理页,将该页从磁盘文件中调入内存。第七章 Linux操作系统简介 (3)Swap Cache:只有修改过的页面存储在交换文件中。只要这些页面在写入到交换空间后没有被修改,下次此页面被交换出内存时,就不必再进行更新写操作,这些页面都可以简单地丢弃。在交换频繁发生的系统中,Swap Cache可以节省很多不必要且耗时的磁盘操作。(4)Hardware Caches:一个常见的Hardware Cache是页表表项Cache,这种Cache又叫做Translation Look-aside Buffers(TLB),它包含系统中一个或多个处理器的页表表项的缓

43、冲拷贝。第七章 Linux操作系统简介 7.5 Linux 文件系统文件系统 7.5.1 Linux文件系统的特点文件系统的特点 1.支持多种不同文件系统支持多种不同文件系统 2.向系统内核注册文件系统向系统内核注册文件系统 3.提供虚拟文件系统(提供虚拟文件系统(VFS)第七章 Linux操作系统简介 7.5.2 EXT2文件系统物理结构文件系统物理结构 块组0块组N-1块组N超块组描述符块位图索引节点位图索引节点表数据块图 7.13 EXT2 文件系统的物理布局 第七章 Linux操作系统简介 7.5.3 EXT2 索引节点索引节点 Mode Owner Info Size Timesta

44、mps Direct Blocks Indirect Blocks Double IndirectTriple Indirect数据结构exr2_inode数据数据数据数据数据数据数据图 7.14 EXT2 索引节点 第七章 Linux操作系统简介 7.5.4 EXT2 超级块超级块 超级块中包含的主要信息有:(1)魔数:标识超级块的文件类型。(2)修订级别:版本标志。(3)挂接数和最大挂接数:(4)块组号:包含此超级块的数据块块组号。(5)块大小:文件系统中数据块的长度,例如 1024 字节。(6)每组块数:在一个组中数据块的数目。(7)空闲块:在当前文件系统中的空闲的数据块数。(8)空闲索

45、引节点:在当前文件系统中的空闲的索引节点数。(9)第一个索引节点:文件系统中的第一个索引节点号。第七章 Linux操作系统简介 7.5.5 EXT2 组描述符组描述符 每个块组描述符主要包含如下信息:(1)数据块位图:该块组中块位图的位置。(2)索引节点位图:该块组中索引节点位图的位置。(3)索引节点表:该块组的索引节点表的位置。第七章 Linux操作系统简介 7.5.6 EXT2 目录目录 图7.15 EXT2目录项的布局 i1i55filesi24014 very_long_name015索引节点表55第七章 Linux操作系统简介 7.5.7 EXT2 文件查找文件查找 如要查找文件/h

46、ome/prog/file,在EXT2中,该文件的定位过程如下:(1)文件系统根据超级块中根目录的索引节点以及索引节点中的数据块编号信息,可找到根目录的目录项列表。(2)在目录项列表中查找名为home的目录项,得到对应的节点编号1。(3)根据索引节点编号1中的数据块编号,可找到/home目录的目录项。(4)在/home目录的目录项列表中找出目录项prog,得到对应索引节点编号2。(5)按照索引节点编号2中的数据块编号,可以找到/home/prog目录的目录项。(6)从/home/prog目录的目录项列表中可以获得文件file的索引节点。第七章 Linux操作系统简介 7.5.8 EXT2文件扩

47、展策略文件扩展策略 当进程启动一个文件的写操作后,文件系统管理模块检查该文件的长度是否扩展了。若扩展了,就要申请分配新数据块。EXT2文件系统为文件的扩展部分分配新的数据时,先从紧跟该文件后面的那个数据块寻找,然后查找相邻的64个数据块(属于同一块组),尽量使它们在同一块组。实在找不到,才从另一块组寻找。如果只能从其它块组查找空闲数据块,那么首先考虑8个一簇连续的块。分配新数据块过程中,该进程必须等待。EXT2分配数据块时锁定文件系统的超级块,不允许两个以上的进程同时更改超级块。对超级块的分配采用先进先出的策略。第七章 Linux操作系统简介 7.5.9 虚拟文件系统虚拟文件系统(VFS)概述

48、概述 图 7.16 虚拟的文件系统的逻辑关系 VFSVFS Inode CacheVFS Directory Cacheext2 FSMINIX FSMSDOS FSI/O设备驱动Buffer Cache第七章 Linux操作系统简介 7.5.10 VFS 超级块超级块 VFS超级块中包含的信息有:(1)设备(2)索引节点指针(3)数据块大小(4)超级块操作(5)文件系统类型(6)文件系统的特殊信息 第七章 Linux操作系统简介 7.5.11 VFS 索引节点索引节点(1)设备(2)索引节点号(3)模式(4)用户标识符(5)时间(6)数据块大小(7)索引节点操作(8)计数器(9)锁定(10)

49、脏(dirty)(11)文件系统特定的信息 第七章 Linux操作系统简介 7.5.12 文件系统的注册文件系统的注册*read_super()namerequires_devnextfile_systemsfile_system_typeext2*read_super()namerequires_devnextfile_system_typeproc*read_super()namerequires_devnextfile_system_typeiso9660图 7.17 文件系统结构示意图 第七章 Linux操作系统简介 每个 file-system-type 数据结构包含如下信息:(1)

50、超级块读取程序:当一个文件系统挂接时,VFS使用此程序读取文件系统的超级块。(2)文件系统名:文件系统名,如EXT2。(3)需要的设备:指出文件系统是否需要设备的支持。并不是所有的文件系统都需要设备的支持。如/proc文件系统就不需要设备的支持。你可以通过查阅/proc/filesystems找出系统中已注册的文件系统,如:ext2,iso9660等。第七章 Linux操作系统简介 7.5.13 文件系统的挂接与卸装文件系统的挂接与卸装 当超级用户试图挂接一个文件系统时,Linux 内核必须首先验证在系统调用中所传递的参数(文件系统名称、包含文件系统的物理块设备和文件系统在已有文件系统的挂接点

51、)。例如:$mount-t iso9660 /dev/cdrom /mnt/cdrom 第七章 Linux操作系统简介 虚拟文件系统对上述命令的执行过程如下:(1)查找该文件系统的信息。VFS通过file-systems在file-system-type组成的链表中根据指定的文件系统名搜索文件系统类型信息。(2)如果找到匹配的文件系统,表明内核具有对该文件系统的内建支持。否则说明该文件系统可能由可装载模块支持,会请求内核装入相应的文件系统模块,此时,该文件系统在VFS中注册并初始化。(3)不管是哪种情况,如果VFS无法找到指定的文件系统,则返回错误。(4)VFS检查指定的物理块设备是否已挂接,

52、若已挂接,则返回错误。第七章 Linux操作系统简介 (5)VFS检查作为新文件系统的挂接点的VFS索引节点。(6)如果该挂接点已经挂接有其它文件系统,则返回错误。(7)VFS挂接程序为新的文件系统分配VFS超级块,并将挂接信息递给该文件系统的超级块读取例程。系统中所有的VFS超级块保存在由super-blocks指向的super-block数据结构指针数组中。(8)文件系统的超级块读取例程将对应文件系统的信息映射到VFS超级块中。(9)如果挂接成功,则所有已挂接的文件系统形成如图7.18所示的数据结构。第七章 Linux操作系统简介 图 7.18 一个安装的文件系统 第七章 Linux操作系

53、统简介 7.5.14 文件系统管理的缓存机制文件系统管理的缓存机制 表7-2 Linux设计的各类Cache Cache名 称 作 用 Inode Cache(VFS 索引节点缓存)node的申请、释放、访问 Inode Directory Cache(目录缓存)根据目录名查找该目录文件的Inode Buffer Cache(缓冲区缓存)I/O设备读写 第七章 Linux操作系统简介 1.VFS 索引节点缓存索引节点缓存 VFS索引节点是一哈希表,它不断地被读取。VFS提供的索引节点缓存可以加快对文件系统的存取。当VFS访问索引节点时,它首先查找VFS索引节点缓存。为了在VFS索引节点缓冲中查

54、找一个索引节点,系统首先计算它对应的哈希值,然后将其作为索引值进入索引节点哈希表。其后再通过读取这个拥有相同哈希值的索引节点链表逐个匹配索引节点,直到找到具有指定设备号和inode号的索引节点。如果从缓存中找到了索引节点,该索引节点的计数(count)值加1。否则申请一空闲的索引节点。第七章 Linux操作系统简介 2.目录缓存目录缓存 为了加快对常用的目录的存取,由于是根据路径访问文件的,Linux维护了表达路径与索引节点对应关系的目录缓存,被文件系统使用过的目录将会存入到该目录缓存中。这样,同一目录被再次访问时,可直接从缓冲区中得到,不必重复访问存储文件系统的设备。当真实的文件系统读取一个

55、目录时,目录的详细信息被添加到目录缓冲中。当下一次查找同一目录时,系统就可以在目录缓存中找到此目录的有关信息。只有短于15个字符的目录才能保存在目录缓存中。第七章 Linux操作系统简介 3.缓冲区缓存缓冲区缓存(Buffer Cache)图 7.19 缓冲区缓存 第七章 Linux操作系统简介 7.5.15 bdflush 内核守护程序内核守护程序 bdflush 内核守护进程的任务是当系统缓冲区缓存中被改动的缓存区数量太多时,提供一个管理功能。它在系统启动时作为一个内核线程运行,此线程的名字为“kflushd”进程。在大多数情况下,这个守护进程处于睡眠状态,直到系统中被改动的缓冲区的数目大

56、到一定的值。每次当缓冲区缓存中的数据块被分配和丢弃时,文件系统都要检查缓存中被改动的数据块缓冲区的数目。当此数量达到了一定的百分比时,bdflush 将被唤醒。缺省阈值是 60%。如果系统急需缓冲区,则bdflush 也将被无条件唤醒。第七章 Linux操作系统简介 7.6 Linux 设备管理设备管理 图7.20 一个基于PCI的系统示意图 7.6.1 设备驱动程序环境设备驱动程序环境 1.基于基于PCI总线总线 第七章 Linux操作系统简介 2.PCI I/O地址空间地址空间 Linux 系统所使用的I/O地址空间的地址分配如下:0000001f dma1 0020003f pci1 0

57、040005f timer 0060006f keybord 0070007f rtc 0080008f dma page reg 00a000bf pci2 00c000df dma2 00f000ff fpu 01700177 ide1 01f001f7 ide0 03f803ff serial(auto)d800d811 eth0 ffa0ffa8 ide0 ffa8ffaf ide1 第七章 Linux操作系统简介 3.PCI 配置头配置头 图7.21 PCI配置头 第七章 Linux操作系统简介(1)厂商标识(Vendor Identification):用来惟一标识PCI设备生产厂

58、家的数值。(2)设备标识(Device Identification):用来惟一标识设备的数值。(3)状态(Status):此字段是设备的状态信息。(4)命令(Command):通过向此字段写入命令,系统可以控制设备。(5)分类代码(Class Code):此字段代表设备的类型。(6)基地址寄存器(Base Address Registers):这些寄存器用来决定和分配设备可以使用的PCI I/O与PCI内存空间的类型、数量及位置。(7)中断引脚(Interrupt Pin):PCI卡上的四个物理引脚可以将中断信号从插卡上带到PCI总线上。第七章 Linux操作系统简介 4.PCI 桥接器桥接

59、器 (1)PCI-ISA 桥接器。这种桥接器通过将PCI I/O和PCI内存空间的存取转换成对ISA I/O和ISA内存的存取来支持ISA设备。PCI标准将PCI I/O和PCI内存的低端部分保留给系统中的ISA外设,另外还使用PCI-ISA桥接器实现从PCI内存访问到ISA内存访问的转换。第七章 Linux操作系统简介 (2)PCI-PCI 桥接器。这是一种将系统中所有PCI总线连接起来的特殊PCI设备。在简单系统中只存在一条PCI总线,由于受电气特性的限制,它所连接的PCI设备个数有限。引入PCICD*2PCI桥接器后系统可以使用更多的PCI设备。对于高性能服务器这是非常重要的。Linux

60、提供了对PCI-PCI桥接器的全面支持。第七章 Linux操作系统简介 5.Linux 内核内核PCI数据结构数据结构(1)PCI设备驱动程序(2)PCI BIOS 函数(3)PCI 补丁代码 为每个设备分配PCI I/O及PCI内存空间。为系统中每个PCI-PCI桥接器配置PCI I/O和PCI内存地址窗口。为这些设备产生中断连线值,用来控制设备的中断处理。第七章 Linux操作系统简介 图7.22 Linux内核PCI数据结构 第七章 Linux操作系统简介 6.中断及中断处理中断及中断处理 图7.23 中断路由的逻辑图(1)中断。第七章 Linux操作系统简介 (2)可编程中断控制器。一

61、般IBM PC使用Intel 8259A-2 CMOS可编程中断控制器。这种控制器的寄存器在ISA系统内存空间中非常实用。目前常用如图7.23所示的两个级连的8位控制器PIC1和PIC2,每个控制器都有一个屏蔽寄存器与中断状态寄存器。其屏蔽寄存器的地址为0 x21和0 xA1,状态寄存器的地址为0 x20和0 xA0。对此屏蔽寄存器某个特定位写入1,将使能某一中断,写入0则屏蔽它。但中断屏蔽寄存器只能写、不能读出写入的值。当有中断信号时,中断处理程序将读取这两个中断状态寄存器(ISR)。它将0 x20中的ISR看成一个16位中断寄存器的低8位,而将0 xA0中的ISR看成其高8位。第七章 Li

62、nux操作系统简介 (3)中断处理的数据结构。设备驱动程序使用一组Linux内核请求、允许和屏蔽中断的服务函数。每个设备驱动程序都将调用这些子程序来注册其中断处理程序的地址。PC中有些中断被固定,所以驱动仅需在其初始化时请求它的中断,如软盘设备驱动程序其中断号总为6。有些设备驱动程序不知道其使用的中断号,Linux通过让设备驱动程序检测它们的中断号来解决这个问题。第七章 Linux操作系统简介(4)中断处理。图7.24 Linux中断处理数据结构 第七章 Linux操作系统简介 7.6.2 设备文件设备文件 1.设备类型设备类型 Linux支持三类硬件设备:字符、块及网络设备。字符设备通常是指

63、只允许按顺序访问,无需缓存直接读写的设备,如系统的串口设备/dev/cua0和/dev/cua1。块设备则仅能以块为单位读写,典型的块大小为512或1024字节。块设备的存取是通过buffer cache来进行的,并且可以进行随机访问,即不管块位于设备中何处,都可以对其进行读写。块设备可以通过其设备相关文件进行访问,但更为平常的访问方法则是通过文件系统。只有块设备才能支持可安装文件系统。网络设备可以通过BSD套接口访问,关于Linux所用的设备可查看文件/proc/devices。第七章 Linux操作系统简介 字符设备有:men;pty;ttyp;ttys;cua;vcs;misc;fb;n

64、etlink;ptm;pts 块设备有:ramdisk;fd;ide0;md;ide1 第七章 Linux操作系统简介 2.主设备号与次设备号主设备号与次设备号 所有硬件设备都被看成普通文件,可以通过和普通文件相同的标准系统调用来打开、关闭、读取和写入设备。系统中每个设备都用一种特殊的设备相关文件来表示,例如系统中第一个IDE硬盘被表示成/dev/hda。Linux系统中除了设备类型外,内核还需要一对称为主设备号与次设备号的参数,才能惟一标识设备,于是块(磁盘)设备和字符设备的设备相关文件可以通过mknod命令来创建,并要使用主、次设备号来标识此设备。网络设备也用设备相关文件来表示,但Linu

65、x寻找和初始化网络设备时才建立这种文件。主设备号相同的设备使用相同的驱动程序,而次设备号则用来区分具体设备的实例。第七章 Linux操作系统简介 3.设备文件设备文件 Linux将设备文件放在目录/dev或其子目录下。设备文件通常由两部分组成:第一部分由2个或3个字母组成,用来表示设备大类。如IDE接口的普通硬盘为“hd”,SCSI硬盘为“sd”,软盘为“fd”,并口为“lp”。第二部分为数值或字母,用来区别设备实例。如:/dev/hda、/dev/hdb、/dev/hdc表示第一、第二、第三块硬盘,而/dev/hda1、/dev/hda2、/dev/hda3则表示第一个硬盘的第一、第二、第三

66、分区。在Linux内核中,设备文件是通过如下的file结构来表示的:第七章 Linux操作系统简介 struct file mode-t f-mode;loff-t f-pos;unsigned shortf-flags;unsigned shortf-count;unsigned longf-reada,f-ramax,f-raend,f-rawin;struct file*f-next,*f-prev;struce fown-structf-owner;struct inode*f-inode;struct file-operations*f-op;unsigned longf-version;void*private-data;第七章 Linux操作系统简介 7.6.3 设备驱动程序概述设备驱动程序概述 1.驱动程序驱动程序 CPU并不是系统中惟一的智能设备,在计算机系统中,每个物理设备都拥有自己的控制器。键盘、鼠标和串行口由一个高级I/O芯片统一管理,IDE控制器控制IDE硬盘而SCSI控制器控制SCSI硬盘,等等。每个硬件控制器都有各自的控制和状态寄存器(CSR),并且各不相

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!