,,,,,,第8章操作系统实例二:Linux,教学目标:本章的重点:了解Linux操作系统的特点、进程通信和调度、三级页式虚拟存储器管理、VFS和ext2文件系统以及Linux的安全机制等内容。,教学提示:Linux是可免费获得的多用户、多任务操作系统,是可以自由使用的UNIX兼容产品,这就是学习Linux的主要原因。了解Linux操作系统的特点、核心技术和实现方法有助于该系统进一步的开发和应用。,1,,,,,,,8.1Linux概述,8.1.1学习Linux操作系统的意义8.1.2Linux系统的特点8.1.3Linux系统的发展,2,,,,,,,8.1.4Linux体系结构,,3,,,,,,,8.1.5Linux的用户界面,,4,,,,,,,8.2Linux的进程管理,8.2.1Linux进程的组成Linux系统中的进程都具有以下4个要素。(1)有一个程序正文段供其执行。(2)有进程专用的系统堆栈空间。(3)有一个进程描述符,即在内核中的一个task_struct数据结构。有了这个数据结构,进程才能成为内核调度的一个基本单位,接受内核的调度。同时,该结构还记录着进程所占用的各项资源。(4)有一个独立的地址空间,即拥有专有的用户空间和专用的用户空间堆栈。,5,,,,,,,8.2.2Linux进程的状态,Linux的进程状态共有6种。(1)TASK_RUNNING:正在运行(己获得CPU)或准备运行(就绪态——等待获得CPU)的进程。(2)TASK_INTERRUPTIBLE:可中断等待状态。进程处于等待队列中,一旦资源可用时被唤醒,也可以由其他进程通过信号(SIGNAL)或中断唤醒。(3)TASK_UNINTERRUPTIBLE:不可中断等待状态。进程处于等待队列中,一旦资源可用时被唤醒,但不可以由其他进程通过信号(SIGNAL)或中断唤醒。(4)TASK_ZOMBIE:进程僵死状态。进程停止运行但是尚未释放PCB。(5)TASK_STOPPED:进程停止状态。可能被特定信号终止,也可能是受其他进程的跟踪调用而暂时将CPU出让给跟踪它的进程。(6)TASK_SWAPPING:页面被交换出内存的进程。,6,,,,,,,,7,,,,,,,8.2.3进程状态的切换时机第一类是隐式地主动放弃CPU。这往往是因为需要的资源目前不能获取,如执行read()、selec()等系统调用的过程中。第二类是进程显式地主动放弃CPU,如系统调用sched_yield()、sched_setscheduler()及pause()均会导致当前进程让出CPU。,8,,,,,,,8.2.4Linux的进程控制进程的创建Linux操作系统中,除初始化进程外,其他进程都是用系统调用fork()和clone()创建的,调用fork()和clone()的进程是父进程,被生成的进程是子进程。,9,,,,,,,2.进程的等待父进程可用系统调用wait3()等待它的任何一个子进程终止,也可以用系统调用wait4()等待某个特定的子进程终止。,10,,,,,,,3.进程的终止当命令执行完,希望终止自己时,可在其程序末尾使用系统调用exit()。,11,,,,,,,4.进程上下文切换改变进程上下文的工作很复杂,是由系统调用execve()实现的。它用一个可执行文件的副本覆盖该进程的内存空间。,12,,,,,,,8.2.5Linux线程Linux并不确切区分进程与线程,或者说没有真正意义上的线程概念,但通过clone()系统调用,可以支持轻量级进程(LightweightProcess)。,13,,,,,,,8.2.6PCB(进程控制块)Linux内核利用一个数据结构(task_struct)标志一个进程的存在。task_struct也就是Linux进程控制块PCB,14,,,,,,,8.2.7进程的调度Linux中实现了3种进程调度策略。SCHED_FIFO:先进先出(FirstInFirstOut)策略。SCHED_RR:轮转调度(RoundRobin)策略。SCHED_OTHER:其他策略。,15,,,,,,,8.8.2.8Linux进程通信信号是UNIX系统中最古老的进程间通信机制,它主要用来向进程发送异步的事件信号。Linux中,信号种类的数目和具体的平台有关,因为内核用一个字代表所有的信号,因此字的位数就是信号种类的最多数目。对32位的i386平台而言,一个字为32位,因此信号有32。,16,,,,,,,8.2.9信号量与PV操作信号量也用来保护关键代码或数据结构(即临界资源)。Linux利用信号量实现对关键代码和数据的互斥访问。Linux信号量数据结构中包含的信息主要有。count(计数)waking(等待唤醒计数)3)等待队列4)lock(锁),17,,,,,,,8.2.10管道管道是Linux中最常用的进程间通信IPC机制。利用管道时,一个进程的输出可成为另外一个进程的输入。当输入输出的数据量特别大时,这种IPC机制非常有用。,18,,,,,,,8.2.11共享存储区与消息队列通信机制1.Linux进程间的共享存储区通信,,19,,,,,,,2.Linux进程间的消息队列进行通信Linux进程间的通信也可以通过消息队列进行。消息队列可以是单消息队列,也可以是多消息队列(按消息类型);既可以单向,也可以双向通信;既可以仅和两个进程有关,也可以被多个进程使用。,20,,,,,,,8.3.1Linux的虚拟内存管理Linux的虚拟内存管理功能可以概括为以下几点。(1)地址空间扩充。(2)进程保护。(3)内存映射。(4)物理内存分配。,8.3Linux存储器管理,21,,,,,,,8.3.2Linux系统采用三级页表,,22,,,,,,,8.3.3内存页的分配与释放Linux系统的物理内存页分配采用链表和位图相结合的方法。,23,,,,,,,8.3.4内存交换当系统出现内存不足时,Linux内存管理子系统就要释放一些内存页,从而增加系统中空闲内存页的数量。此任务是由内核的交换守护进程kswapd完成的。,24,,,,,,,8.3.5内存的共享和保护Linux中内存共享是以页共享的方式实现的Linux可以对虚存段中的任一部分加锁或保护。,25,,,,,,,8.3.6缺页中断磁盘中的可执行文件映像一旦被映射到一个进程的虚拟空间,它就开始执行。由于一开始只有该映像区的开始部分被调入内存,因此,进程迟早会执行那些未被装入内存的部分。当一个进程访问了一个还没有有效页表项的虚拟地址时,处理器将产生缺页中断,通知操作系统,并把缺页的虚拟地址(保存在CR2寄存器中)和缺页时访问虚存的模式一并传给Linux的缺页中断处理程序。,26,,,,,,,8.4Linux文件管理,8.4.1Linux文件系统的目录结构Linux采用的是树型目录结构管理文件。最上层是根目录,其他的所有目录都是从根目录出发而生成的。,27,,,,,,,8.4.2Linux文件系统的实现Linux支持多种不同类型的文件系统,包括EXT、EXT2、MINIX、UMSDOS、NCP、IS09660、HPFS、MSDOS、NTFS、XIA、VFAT、PROC、NFS、SMB、SYSV、AFFS以及UFS等。由于每一种文件系统都有自己的组织结构和文件操作函数,并且相互之间的差别很大,Linux文件系统的实现有一定的难度。为支持上述的各种文件系统,Linux在实现文件系统时采用了两层结构。第一层是虚拟文件系统(VirtualFileSystem,VFS),它把各种实际文件系统的公共结构抽象出来,建立统一的以i_node为中心的组织结构,为实际文件系统提供兼容性。它的作用是屏蔽各类文件系统的差异,给用户、应用程序和Linux的其他管理模块提供统一的接口。第二层是Linux支持的各种实际文件系统。,28,,,,,,,8.4.3虚拟文件系统虚拟文件系统(VFS)是物理文件系统与服务之间的一个接口层,它对每一个具体的文件系统的所有细节进行抽象,使得Linux用户能够用同一个接口使用不同的文件系统。,29,,,,,,,8.4.4EXT2文件系统扩展文件系统EXT和第二代扩展文件系统EXT2是专门为Linux设计可扩展的文件系统。,30,,,,,,,8.4.5Linux的文件操作系统调用1.文件的打开主要函数有sys_open()和sys_creat()。2.文件的关闭3.文件指针移动4.读写文件操作5.文件属性控制6.文件上锁7.文件的I/O控制8.各种其他文件操作,31,,,,,,,8.5Linux设备管理,8.5.1Linux设备驱动程序Linux核心具体负责I/O设备的操作,这些管理和控制硬件设备控制器的程序代码称为设备驱动程序,它们是常驻内存的底层硬件处理子程序,具有控制和管理I/O设备的作用。,32,,,,,,,8.5.2设备的管理在Linux操作系统中,输入输出设备可以分为字符设备、块设备和网络设备。,33,,,,,,,8.6Linux安全机制,8.6.1Linux自身的安全机制Linux自身的安全机制主要包括以下几方面。(1)身份识别和认证。(2)安全的审计。(3)访问控制。(4)入侵防御。(5)提供安全的服务和应用。,34,
展开阅读全文