操作系统的原理与应用-22548第9章linux概述_第1页
操作系统的原理与应用-22548第9章linux概述_第2页
操作系统的原理与应用-22548第9章linux概述_第3页
操作系统的原理与应用-22548第9章linux概述_第4页
操作系统的原理与应用-22548第9章linux概述_第5页
已阅读5页,还剩37页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、操作系统原理Principles of Operating System 主讲:孔宪君第9章 Linux操作系统概述 9.1 Linux的概述9.2 Linux的体系结构 9.3 Linux中的进程管理 9.4 Linux的存储管理 9.5 Linux设备管理 9.6 Linux的文件系统 9.1 Linux的概述9.1.1 GNU、FSF、开放源码 1984年理查德斯塔尔曼(Richard M.Stallman)首先开创了自由软件体系(GNU),GNU旨在发展一个类UNIX的完整操作系统,各种使用Linux作为内核的GNU操作系统正被广泛地使用着,实际上它们更精确的称呼应该是GNU/Linu

2、x系统。 通用公共许可GPL(General Public License)是GNU工程所要遵循的规则,按照这一规则,自由软件允许用户自由拷贝、修改和销售,但是对其源代码的任何修改都必须向所有用户公开。所有人可以自由地占有自由软件,所有人为自由软件所做出的成果必须和其它人共享。9.1.2 Linux的产业格局 Linux的应用领域很广,如教育领域、网络服务器领域、企业Intranet、视频制作领域等,整个Linux的产业环境由三部分组成: 桌面Linux产业链 服务器Linux产业链 嵌入式Linux产业链9.2 Linux的体系结构9.2.1 Linux的特点 开放性多用户、多任务良好的用户

3、界面可靠的系统安全良好的可移植性Linux支持UNIX的全部功能 具有强大的网络功能 Linux可以支持各种类型的文件系统,支持广泛的硬件。9.2.2 Linux的体系结构 从程序角度看,将操作系统的代码分成两部分。内核是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。而内核以外的统称为外部管理程序,它们大部分是对外围设备的管理和界面操作。通常,一个程序会跨越这两个部分。当执行到内核部分时,称程序处于内核态,其它称程序处于用户态。 一个完整的操作系统主要由四部分组成:硬件、操作系统内核、函数库和用户应用程序。9.2.2 Linux的体系结构 9.2.3 Linux内核组成 内

4、核是操作系统的灵魂,内核负责维护操作系统的核心功能,包括进程调度、进程通信、虚拟内存、文件系统、网络支持等。所有的内核代码都在处理器的特许模式下运行,并能访问计算机的所有物理资源,Linux称这个特权模式为内核模式(kernel mode)。 9.2.3 Linux内核组成 Linux内核主要由以下几个子系统组成: 进程调度(SCHED) 进程调度模块控制着进程对CPU访问,Linux使用了比较简单的基于优先级的进程调度算法选择新的进程,保证各进程能够公平合理地访问CPU。 内存管理(MM) 内存管理子系统允许多个进程共享内存区域,Linux的内存管理支持请求分页存储管理,操作系统只将当前执行

5、的进程页保留在内存中,其余的进程页则保留在磁盘上。必要时,操作系统负责在磁盘和内存之间交换进程页。9.2.3 Linux内核组成 虚拟文件系统(VFS) Linux VFS隐藏了各种不同硬件的具体细节,为所有设备和文件各提供了统一的接口,Linux VFS支持多达数十种不同的文件系统。 输入/输出子系统 输入/输出子系统与硬件物理设备密切相关,主要包括了设备驱动程序和各种设备的中断服务程序。 进程通信(IPC)机制 IPC子系统支持在单个Linux系统中多种进程间通信机制,如信号、管道和共享内存等。 网络子系统 网络子系统提供了对各种网络标准协议和各种网络硬件的支持。9.3 Linux中的进程

6、管理9.3.1 Linux的进程 Linux是一个多任务的操作系统,每一个进程都有一定功能和权限,运行在自己的虚拟地址空间中。Linux通过进程调度程序在多个进程之间实现合理的调度,在Linux系统中,进程与任务是相同的概念。9.3.2 Linux的进程运行状态 Linux的进程共有五种调度状态 运行状态。进程已经占有CPU,正在执行,或者正处于执行队列中,等待着系统的进程调度程序schedule()将CPU分配给它。 进程可中断的等待态。这是进程因等待某一个事件或某种资源,而加入等待队列(wait_queue),等待资源有效时被唤醒。 进程不可中断的等待态。进程此时正因为硬件环境不能满足而等

7、待,处于等待队列中。进程被暂停运行状态。此时,进程暂时停止运行来接受某种处理,通过其它进程的信号才能唤醒。 进程僵死状态,即进程的终结态。 9.3.3 Linux的进程控制块 进程控制块(PCB)是进程抽象化的数据表示。操作系统根据PCB而感知一个进程的存在并对进程进行控制和管理。 Linux中,进程控制块由数据结构task-struct描述。所有进程控制块都存储在任务向量task中。 进程控制块(PCB)主要包括进程当前运行的状态信息、信号、进程号、父进程号、运行时间累计值、正在使用的文件和本任务的局部描述符以及任务状态段信息。 9.3.4 Linux的进程调度 调度是操作系统通过分配CPU

8、时间给并发进程的一项工作。通常,认为调度就是执行新进程或中断老进程,但是对于Linux来说调度还有另一方面的任务,那就是运行多种内核任务。内核任务包含运行进程所要求的任务和代表设备驱动器在内部执行的任务。Linux系统中,引起进程调度的事件有: 当进程状态转换时。 当前进程的时间片用完时,要重新选择一个进程。 当设备驱动程序执行长而重复的任务时,直接调用scheduler()。 进程从中断、异常及系统调用处理后返回到用户态时。9.3.5 Linux中的进程控制 进程控制,是研究如何建立、撤消、阻塞或唤醒一个 进程,以确定进程的状态变化。Linux中使用系统调用来实现这些功能。 1 进程的建立和

9、fork()系统调用 2 程序执行和系统调用exec() 3 等待子进程结束系统调用wait() 4 结束子进程系统调用exit() 9.3.5 Linux中的进程控制 9.3.6 Linux进程通信 负责进程之间及进程与内核之间需要通信,协调它们的工作。 1.信号 信号是UNIX系统最早使用的进程间通信机制之一,Linux的大多数信号与UNIX信号相同。除了使一个进程暂停执行的SINSTOP信号和使进程退出执行的SIGKILL信号外,进程可以有选择地忽略大多数的信号。 2.管道 管道原来是UNIX中的通信机制,是用于进程通信的一种共享文件。传统的管道实现方法是建立在文件系统基础上的,有两种类

10、型的管道。一种是有名管道,是一个按名存取的文件,可在文件中长期存在,任一进程都可按通常的文件存取方法存取有名管道。另一种是无名管道 。 9.3.6 Linux进程通信 3.System V的进程通信机制 为了与其它系统兼容,Linux也支持UNIX system V中的三种进程间通信机制:消息队列、信号灯和共享内存。这里只介绍信号灯。 信号灯是内存中的一个单元,其值可以被一个或多个进程测试和设置。根据设置或测试值,一个进程可能会进入睡眠,直到信号灯的值被其它进程改变。9.3.7 Linux的进程与线程 进程表现为单一程序的执行过程,而线程表现为在运行某一进程内一个独立调度的实体(程序段)。进程

11、与线程都可以并发地执行。任何两个单独的进程都拥有它们自己的独立地址空间,尽管有时候它们利用共享内存来共用虚拟内存中的某些(但不是全部)内容。相反,同一进程的两个线程将共享相同的地址空间。因为线程都在同一地址空间运行,所以一旦某一线程对虚拟空间做任何改变,其它的线程就会马上发现。 线程可通过几种方法来实现。在操作系统内核里,线程可以作为进程的对象来实现,或者它可以作为一个完全独立的实体。不能在内核中实现的线程只有在内核提供的时钟中断帮助下,通过应用程序或者程序库才能实现。 9.3.8对称多处理技术 Linux 2.0内核是第一个支持对称多处理机(symmetric multiprocessor,

12、SMP)硬件的内核。进程与线程可以在各个处理器上并行运行。然而为保护内核的非抢占式同步要求,必须在内核中对SMP的实现加以限制,同一时间只允许一个处理器执行内核模式的代码。SMP使用了一个简单的自旋锁就实现了上述限制。自旋锁不会引起计算限制任务之类的问题,但是频繁使用内核的任务将严重地成为系统瓶颈。9.4 Linux的存储管理9.4.1物理内存管理 Linux内核中基本的物理内存管理器是页面分配程序,页面分配程序负责分配和回收所有的物理页面,并且它能根据要求分配连续的物理页面,分配程序运用伙伴堆算法(buddy-heap algorithm)跟踪可用的物理页面, Linux内核的内存分配以静态

13、分配和动态分配并存,静态分配指的是驱动程序在系统启动时获得的内存连续空间,动态分配是指进程通过页面分配程序获得的内存空间。 9.4.1物理内存管理 物理页面管理程序与其它三个子系统紧密相关,它们是内存缓冲高速缓存(buffer cache)、页面高速缓存(page cache)和虚拟内存系统。具体如下: 内存缓冲高速缓存是内核的主要cache,它用于面向块的设备,同时也是实现与这些设备进行I/O操作的主要机制。 Linux本地基于磁盘文件系统和NFS网络文件系统都使用页面cache。页面cache缓冲了所有文件内容的页面,甚至是块设备。它也能缓冲网络数据。 虚拟内存系统管理着每个进程虚拟地址空

14、间的内容。9.4.2虚拟内存 Linux中的虚拟内存采用了分页机制。分页机制将虚拟地址空间划分为大小相同的页面,称为虚拟页面。将物理地址空间也按同样长度分为块,称为页帧。Linux虚拟内存系统根据需要创建虚拟内存的页面,并管理从磁盘装入页面,或者是按照要求将页面交换到磁盘上。 地址空间的第一种是逻辑视图,地址空间由一组不重叠的区域组成,每个区域都是连续的、页面对齐的地址空间子集。每个区域内部使用vm_area_struct结构来定义区域的属性,包括了进程的读、写和执行许可以及任何与区域相关的文件信息。每一个地址空间的区域都被连接到平衡二叉树,这样就可以快速查找任何与虚拟地址相关的区域。9.4.

15、2虚拟内存 1. 创建虚拟地址空间 内核需要在下述两种情况下创建新的虚拟地址空间: 第一种情况比较简单,进程通过系统调用exec运行新的程序,当新的程序被执行时,系统就给予进程一个新的、完全空闲的虚拟地址空间。它取决于用虚拟内存区域把程序装载到地址空间的子程序。 第二种情况,由fork系统调用创建新的进程,用fork创建新进程将创建一个完全的现存进程虚拟地址空间的备份。内核复制父进程的vm_area_struct描述符,然后为子进程创建一组新的页表。父进程页表直接拷贝到子进程中,每个页面的引用计数也随之递增。在派生(fork)后,子进程共享父进程的地址空间内存。9.4.2虚拟内存 2.交换空间

16、与分页 虚拟内存系统的一项重要任务是在需要时将内存页面从物理内存重定位到磁盘。早期的UNIX系统是通过立即交换整个进程内容的方式来实现重定位的,但是现代版本的UNIX更依赖于内存分页技术,虚拟内存的单个页面在物理内存与磁盘之间的移动,Linux并不实现进程整体交换技术,它使用的是较新的内存分页机制。 Linux的交换空间(Swap space)在物理内存被充满时使用。如果系统需要更多的内存资源,而物理内存已经充满,内存中不活跃的页就会被移到交换空间去。 9.4.2虚拟内存 3.虚拟内存的缺页中断处理 Linux采用请求分页策略。当进程申请一个在虚存中的页面时,发生缺页中断,并启动I/O,装入需

17、要的页面。Linux系统中产生页故障一般有3种情况。 程序出现错误。 被访问的虚地址处于保护状态。该页故障属于页保护错误,操作系统将判断错误原因,若属于进程的错误读写,系统将终止进程的执行。 进程发生缺页中断。当发生缺页中断时,系统首先根据页表项中的信息,判断该页所在的位置。 9.4.3 Linux三级页表的地址变换过程 Linux采用三级页表描述虚拟地址空间。虚拟地址空间被分为4部分:页目录索引、页间目录索引、页表索引和偏移量。具体如下: 页目录(Page Directory):是一个指针数组,Linux系统中的每一个活动进程都有一个页目录,页目录的大小一般为一个页面大小。 页间目录(Pag

18、e Middle Directory):页间目录也是一个指针数组,页间目录中的每一项指向一个页表。一个页间目录可能跨越多个页面。 页表(Page Table):是一个指向页帧的指针数组,一个页表也可以跨越多个页面。 偏移量:虚拟地址的剩余部分即是偏移量,占12位。9.4.3 Linux三级页表的地址变换过程 9.4.3 Linux三级页表的地址变换过程 Linux三级页表的地址变换过程如下: 从页目录表入口开始,根据页目录索引从页目录表中找到一个页间目录的入口地址。 根据页间目录索引从页间目录表中找到一个页表的入口地址。 根据页表索引从页表中找到页帧号。 最后根据页帧号和偏移量确定目标数据在内

19、存的物理位置。9.4.4 Linux内存的分配与回收 1.页面的分配 内存分配时,首先搜索free-area数组中指定大小的物理块组队列。若该队列中存在一个需要大小的页帧组,则将其分配出去。否则,在更大页帧组队列中找到一个空闲页帧组,直到寻找完free-area数组中的所有空闲空间,或找到空闲页帧组。如果找到的空闲页帧组大于所需空间,则将其进行等分,直到合适为止。然后,将新分割出的空闲页帧组一部分分配给进程,另一部分插入到相应大小的空闲页帧队列中。9.4.4 Linux内存的分配与回收 2.页面的回收 页帧分配时容易将大块连续的内存空间划分成很多小块。页帧回收时需要尽可能地将小块的空闲存储空间

20、进行合并,构成更大的空闲页帧组。 Linux中内存页帧组的释放由调用free_pages()函数完成。回收空闲页帧组时,change_bit()函数根据map指针指向的位表,判断回收页帧组的伙伴页帧组是否存在,若为存在则合并,并修改位表中对应位,从free_area的空闲链中取下该伙伴页帧组。这个递归过程一直进行到找不到伙伴页帧组为止,最后将合并后最大物理块插入free_area的相应list链表中。9.5 Linux设备管理9.5.1 Linux设备管理概述 Linux系统的I/O系统与UNIX系统的I/O非常相似,所有的设备驱动器都以常规文件方式出现。用户可以向设备打开一个访问通道,就像打

21、开文件一样。在文件系统中,设备是作为对象出现的。 Linux把所有的设备分成三类:块设备、字符设备和网络设备。具体如下: 块设备 字符设备 网络设备9.5.2 块设备管理 块设备支持与文件相同的存取机制,为已打开的块设备文件提供文件操作和字符设备大致相同。块设备为系统的所有磁盘设备提供了一个主要接口。块设备系统必须提供确保尽可能快速的访问磁盘的功能。这种功能通过块缓冲 (block buffer cache)和请求管理程序(request manager)这两个系统部件实现。 1.块缓冲 Linux块缓冲既是运行中I/O的缓冲池,又是完成后I/O的cache。块缓冲由两部分组成。首先,缓冲区本

22、身是一组由内核的内存池直接分配,大小动态变化的页面,每个页面被分割成了许多大小相等的缓冲区。其次,块缓冲中的每个缓冲区都包含一组相应的缓冲区描述符buffer_heads。每个缓冲区都通过以下三种情况进行识别:块设备属于哪个缓冲区,块设备数据的偏移量,缓冲区的大小。9.5.2 块设备管理 2.请求管理程序 请求管理程序属于软件层,它管理将缓冲区内容读写到设备驱动器。请求系统主要以ll_rw_block函数为中心,此函数能执行低层次的块设备读写。此函数以buffer_head缓冲区描述符表和一个读写标志作为它的变量,并为所有缓冲区设定I/O的进度。它不等待I/O的完成。典型的I/O请求在requ

23、est结构中被记录下来。一个request结构代表一个典型的I/O请求。在操作中可能不止一个缓冲区,所以request包含了一个指向列表第一项的buffer_head指针。9.5.3字符设备管理 字符设备是Linux中最简单的设备,可以作为文件访问,应用程序可用标准的系统对字符设备进行打开、关闭、读、写等操作。字符设备是任何不能对固定数据块进行随机访问的设备。任何字符设备驱动程序注册Linux内核的同时必须也要注册一组函数,这些函数执行驱动程序能处理的文件I/O操作。内核执行大多数没有经过预处理的对字符设备文件的读写请求,但是只简单地把有问题的请求传递给设备,并让设备来处理这个请求。9.5.4

24、网络设备管理 就Linux网络子系统而言,一个网络设备是一个发送和接收数据包的实体。网络设备通常是一个物理设备,如以太网卡等。每种网络设备都由一个数据结构表示,在内核自举和网络初始化时,网络设备向内核登记它们控制的设备。device数据结构包含设备的信息和允许支持的网络协议使用设备服务功能的地址。这些功能大多数与利用网络设备传输数据有关。设备利用标准的网络支持机制把接收到的数据传送到合适的协议层。所有的收发网络数据用sk_buff数据结构表示,这种数据结构很灵活,能使网络协议报头很容易地被增加和删除。9.6 Linux的文件系统9.6.1 虚拟文件系统 Linux系统内核包括一个虚拟文件系统层

25、,可以间接地控制文件系统调用,以达到控制物理I/O的目的。当一个进程调用文件系统例程时,内核调用VFS函数,并将该调用传递给物理文件系统中的相应函数。设备驱动程序将传递的数据保存在缓存中,其中最重要的是缓冲区缓存Buffer Cache。文件系统通过Buffer Cache函数对I/O设备进行存取。 Linux VFS是根据面向对象原则来设计的,VFS定义的三个主要的对象类型是inode-object和描述单个文件的file-object结构以及文件系统目标。9.6.2 Linux EXT2文件系统 Linux使用的标准磁盘文件系统称为EXT2 1. EXT2文件系统特性:EXT2文件系统支持

26、基本UNIX文件类型:一般文件、目录文件、设备特别文件和符号连接文件。EXT2能够处理大分区上建立的文件系统,早期版本的内核代码限制文件系统的最大容量为2GB,目前最大系统容量已达到4TB。 2. 磁盘分配策略:EXT2使用分配策略将文件的逻辑相邻块放置到磁盘的相邻块中。这样它仅用一次操作就可以为多个磁盘块提交I/O请求。群集物理相邻块I/O减少了由设备驱动器、磁盘和磁盘控制器硬件各自请求所引起的消耗。9.6.3 Linux文件系统的实现 1.EXT2物理结构 EXT2的物理结构受BSD文件系统的影响很大,文件系统由块组(block group)构成。块组类似BSD的柱面组。由于现代驱动程序能够优化顺序读取并对操作系统隐藏其物理结构。每个块组包括对重要文件系统控制信息的冗余拷贝(超级块和文件系统描述字)以

温馨提示

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

评论

0/150

提交评论