资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,8,章 操作系统实例二:,Linux,教学目标,:本章的重点:了解,Linux,操作系统的特点、进程通信和调度、三级页式虚拟存储器管理、,VFS,和,ext2,文件系统以及,Linux,的安全机制等内容,。,教学提示:,Linux,是可免费获得的多用户、多任务操作系统,是可以自由使用的,UNIX,兼容产品,这就是学习,Linux,的主要原因。了解,Linux,操作系统的特点、核心技术和实现方法有助于该系统进一步的开发和应用。,1,8.1 Linux,概述,8.1.1,学习,Linux,操作系统的意义,8.1.2 Linux,系统的特点,8.1.3 Linux,系统的发展,2,8.1.4 Linux,体系结构,3,8.1.5 Linux,的用户界面,4,8.2 Linux,的进程管理,8.2.1 Linux,进程的组成,Linux,系统中的进程都具有以下,4,个要素。,(1),有一个程序正文段供其执行。,(2),有进程专用的系统堆栈空间。,(3),有一个进程描述符,即在内核中的一个,task_struct,数据结构。有了这个数据结构,进程才能成为内核调度的一个基本单位,接受内核的调度。同时,该结构还记录着进程所占用的各项资源。,(4),有一个独立的地址空间,即拥有专有的用户空间和专用的用户空间堆栈。,5,8.2.2 Linux,进程的状态,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.4 Linux,的进程控制,进程的创建,Linux,操作系统中,除初始化进程外,其他进程都是用系统调用,fork(),和,clone(),创建的,调用,fork(),和,clone(),的进程是父进程,被生成的进程是子进程。,9,2.,进程的等待,父进程可用系统调用,wait3(),等待它的任何一个子进程终止,也可以用系统调用,wait4(),等待某个特定的子进程终止。,10,3.,进程的终止,当命令执行完,希望终止自己时,可在其程序末尾使用系统调用,exit(),。,11,4.,进程上下文切换,改变进程上下文的工作很复杂,是由系统调用,execve(),实现的。它用一个可执行文件的副本覆盖该进程的内存空间。,12,8.2.5 Linux,线程,Linux,并不确切区分进程与线程,或者说没有真正意义上的线程概念,但通过,clone(),系统调用,可以支持轻量级进程,(Lightweight Process),。,13,8.2.6 PCB,(,进程控制块),Linux,内核利用一个数据结构,(task_struct),标志一个进程的存在。,task_struct,也就是,Linux,进程控制块,PCB,14,8.2.7,进程的调度,Linux,中实现了,3,种进程调度策略。,SCHED_FIFO,:先进先出,(First In First Out),策略。,SCHED_RR,:轮转调度,(RoundRobin),策略。,SCHED_OTHER,:其他策略。,15,8.8.2.8 Linux,进程通信,信号是,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.1 Linux,的虚拟内存管理,Linux,的虚拟内存管理功能可以概括为以下几点。,(1),地址空间扩充。,(2),进程保护。,(3),内存映射。,(4),物理内存分配。,8.3 Linux,存储器管理,21,8.3.2 Linux,系统采用三级页表,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.4 Linux,文件管理,8.4.1 Linux,文件系统的目录结构,Linux,采用的是树型目录结构管理文件。最上层是根目录,其他的所有目录都是从根目录出发而生成的。,27,8.4.2 Linux,文件系统的实现,Linux,支持多种不同类型的文件系统,包括,EXT,、,EXT2,、,MINIX,、,UMSDOS,、,NCP,、,IS09660,、,HPFS,、,MSDOS,、,NTFS,、,XIA,、,VFAT,、,PROC,、,NFS,、,SMB,、,SYSV,、,AFFS,以及,UFS,等。由于每一种文件系统都有自己的组织结构和文件操作函数,并且相互之间的差别很大,,Linux,文件系统的实现有一定的难度。为支持上述的各种文件系统,,Linux,在实现文件系统时采用了两层结构。第一层是虚拟文件系统,(Virtual File System,,,VFS),,它把各种实际文件系统的公共结构抽象出来,建立统一的以,i_node,为中心的组织结构,为实际文件系统提供兼容性。它的作用是屏蔽各类文件系统的差异,给用户、应用程序和,Linux,的其他管理模块提供统一的接口。第二层是,Linux,支持的各种实际文件系统。,28,8.4.3,虚拟文件系统,虚拟文件系统,(VFS),是物理文件系统与服务之间的一个接口层,它对每一个具体的文件系统的所有细节进行抽象,使得,Linux,用户能够用同一个接口使用不同的文件系统。,29,8.4.4 EXT2,文件系统,扩展文件系统,EXT,和第二代扩展文件系统,EXT2,是专门为,Linux,设计可扩展的文件系统。,30,8.4.5 Linux,的文件操作系统调用,1.,文件的打开,主要函数有,sys_open(),和,sys_creat(),。,2.,文件的关闭,3.,文件指针移动,4.,读写文件操作,5.,文件属性控制,6.,文件上锁,7.,文件的,I/O,控制,8.,各种其他文件操作,31,8.5 Linux,设备管理,8.5.1 Linux,设备驱动程序,Linux,核心具体负责,I/O,设备的操作,这些管理和控制硬件设备控制器的程序代码称为设备驱动程序,它们是常驻内存的底层硬件处理子程序,具有控制和管理,I/O,设备的作用。,32,8.5.2,设备的管理,在,Linux,操作系统中,输入输出设备可以分为字符设备、块设备和网络设备。,33,8.6 Linux,安全机制,8.6.1 Linux,自身的安全机制,Linux,自身的安全机制主要包括以下几方面。,(1),身份识别和认证。,(2),安全的审计。,(3),访问控制。,(4),入侵防御。,(5),提供安全的服务和应用。,34,
展开阅读全文