计算机操作系统第九章_第1页
计算机操作系统第九章_第2页
计算机操作系统第九章_第3页
计算机操作系统第九章_第4页
计算机操作系统第九章_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、第9章 Linux系统概述,Linux系统的发展和特性 Linux系统的用户接口 Linux系统的进程管理 Linux进程的同步与通信 Linux存储器管理 Linux设备管理 Linux文件管理 Linux系统安全性,9.1 Linux系统的发展和特性,Linux诞生的故事 Linux与UNIX之间的渊源 什么是GUN,什么是GPL 什么是自由软件 Linux的发展历程 Linux目前的应用情况 Linux在我们国内发展和应用的情况,到底什么是 Linux,Linux是类UNIX的操作系统,诞生于1990年。它可运行于多种硬件平台、支持多种系统软件和应用软件,支持所有标准因特网协议,网络功能

2、相当强。Linux继承了UNIX的许多优点,且在许多方面进行了改进,适合应用在中低档服务器领域,是目前因特网服务商(ISP,Internet Service Provider)所推荐的最流行的网络操作系统。 Linux功能强大,且源代码开放,免去了使用者对系统是否存在后门的担心,另外它还属于自由软件,可以从某些网站或者其它途径免费获得,Linux的版本,Linux系统有内核版和发行版两种版本。 内核版本是指在Linus领导下的开发小组开发出的系统内核的版本号,最近有Linux-2.3.28和Linux-2.4。 发行版本可以理解为以Linux为核心的操作系统软件包。一些组织机构或系统软件开发公

3、司将Linux内核同应用软件和相关文档包装起来,并提供一些安装界面和系统设置管理工具,从而构成了一个Linux发行版本。如:Red Hat Linux、Mandrake Linux、Xteam Linux、中软Linux、红旗Linux等,Linux系统的功能特性,1)开放性 (2)多用户多任务 (3)良好的用户界面 (4)设备独立性 (5)提供了丰富的网络功能 (6)良好的可移植性 (7)可靠的系统安全性,9.2 Linux系统的用户接口,Linux系统给用户提供了方便的使用界面,它的用户接口形式有: (1)命令用户接口 (2)图形用户接口 (3)系统调用接口,9.3 Linux系统的 进程

4、管理,Linux系统的PCB包括很多参数,每个PCB约占1KB多的内存空间。用于表示PCB的task_struct结构简要描述如下,struct task_struct unsigned short uid; int pid; int processor; volatile long state; long priority; unsigned long rt_priority; long counter; unsigned long flags; unsigned long policy; struct task_struct *next_task, *prev_task ; struct

5、task_struct *next_run, *prev_run ; struct task_struct *p_opptr, *p_pptr, *p_cptr, *p_ysptr, *p_ptr ;,Linux的进程共有六种状态,1)可运行状态(TASK_RUNNING) (2)可中断阻塞状态(TASK_INTERRUPTIBLE) (3)不可中断阻塞状态(TASK_UNINTERRUPTIBLE (4)僵死状态(TASK_ZOMBIE) (5)暂停状态(TASK_STOPPED) (6)交换状态(TASK_SWAPPING,Linux进程状态及状态转换,进程的创建,Linux启动时系统运行

6、于核心态,此时仅创建一个pid号为0的idle进程。该进程会创建一个内核线程,该线程进行一系列初始化动作后最终会执行/sbin/init文件。文件init运行的结果使系统的运行模式从核心态切换到了用户态,然后该线程演变为用户进程init,其pid为1。此init进程是一个非常重要的进程,以后系统中的一切进程都是它的后代进程。init进程启动后系统进人空闲等待状态。 init进程可以通过执行fork( )创建新进程。新进程的创建是通过复制老进程或当前进程来实现的。fork( )函数的代码在/kernel/fork.c中。如果fork( )执行成功,当前进程就拥有了一个子进程。创建进程的另一种方式

7、是通过系统调用。此类系统调用有三个:sys_clone( )、 sys_vfork( )和sys_fork( )。 进程的创建主要是完成进程基本情况的复制,生成子进程的task_struct结构,并且复制或共享父进程的其它资源,如内存、文件、信号等。进程实现结构复制后,若想执行与父进程不同的代码,如执行某一个可执行文件,那就要放弃父进程的正文代码段,形成自己的执行代码段,该工作由系统调用execve( )来完成,进程的撤销,当进程执行完毕即正常结束时,它调用exit( )终止自己。当进程受到某信号如SIGKILL的作用时,也是通过执行exit( )而撤销,exit( )代码在/kernel/e

8、xit. c中,其主要函数为do_exit( )。同样,终止进程的系统调用sys_exit( )也是通过调用函数do_exit( )来实现的。 进程撤销时,一方面要回收进程所占的资源,同时也要通知其父进程。do_exit( )先释放进程所占的大部分资源,然后进人TASK_ZOMBIE状态。进程自身只能释放那些外部资源,如内存、文件,无法释放其自身(即task_struct结构)的。task_struct结构是由该进程的父进程或内核初始进程调用exit_notify( )来完成的。exit_notify( )函数的工作主要是:将进程的状态改成僵死状态;通知父进程料理后事;将退出进程从目录树中删除

9、,Linux的线程机制,Linux是一种多线程、多任务操作系统,它符合IEEE POXIS标准。 其线程分为两种:用户线程和内核线程,在Linux中,这两种线程分别使用在usr/include/asm_i386/processor.h中所定义的结构struct thread_struct和在usr/include/pthread/init/pthread.h中所定义的结构struct pthread进行描述,Linux调度方式,Linux内核的调度方式基本上采用“抢占式优先级”方式,即当进程在用户态运行时,不管是否自愿,在一定条件下(如时间片用完或等待I/O),核心就可以暂时剥夺其运行而调 度

10、其它进程进入运行。但是,一旦进程切换到核心态运行,就不受以上限制而一直运行下 去,直至又回到用户态前才会发生进程调度。 Linux系统中的调度策略基本上是以优先级为基础的调度策略。就是说,核心为系统中每个进程计算出一个优先权,该优先权反映了一个进程获得CPU使用权的资格,即高优先权的进程优先得到运行,Linux调度时机,通常引起Linux系统中进程调度的原因有如下几种: (1)CPU执行的进程发生状态转换 (2)就绪队列中增加了新进程。 (3)正在执行的进程所分配的时间片用完。 (4)执行系统调用的进程返回到用户态。 (5)系统内核结束中断处理返回到用户态。 (6)直接执行调度程序,Linux

11、调度算法,Linux的进程控制块PCB(task_struct)中有四个成员:policy、priority、rt_priority和counter,其中unsigned long policy的值表示不同类型进程的调度策略,其取值范围为: l SCHED_OTHER(值为0):对应普通进程优先级轮转法(round robin); l SCHED_FIFO(值为1):对应实时进程先来先服务算法; l SCHED_RR(值为2):对应实时进程优先级轮转算法,Linux进程切换的方式,1)自动请愿方式。即通过系统调用,将自己转换成阻塞、僵死、暂停等状态。这样的系统调用有sys_wait4( )、s

12、ys_nanosleep( )、sys_pause( )和sys_exit( )等,它们都是通过直接调用schedule( )函数来进行进程切换的。这种切换方式是可以预见的。 (2)非主动方式。进程由系统空间返回到用户空间,即从中断、系统调用或异常返回到用户空间执行时,其可执行的时间片已经用完,系统将转入schedule( )函数重新调度,Linux进程的通信机制,管道 (pipe)及有名管道 (namedpipe) 信号(signal) 消息队列 (message) 信号量(semaphore) 共享内存 套接字(sockets,管道通信的实现方式是由内核通过共享数据页来完成的,无名管道的特

13、点是: (1)管道是半双工的,数据只能向一个方向流动。管道只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)的通信。 (2)单独构成一种独立的文件系统。对于管道两端的进程而言,管道就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并只存在于内存中。 (3)数据的读出和写入在管道的两端进行,一个进程向管道的一端写入的内容被管道另一端的进程读出。 有名管道的特点是: 不同于管道之处在于它提供一个路径名与之关联。这样,即使不存在亲缘关系的进程,也可以使用访问路径,通过有名管道相互通信,从信号发送到信号处理函数的执行完毕,一个完整的信号生命周期可由四个重要

14、事件来刻画: l 信号的诞生。指的是触发信号的事件发生,如检测到硬件异常、定时器超时及调用信号发送函数kill( )。 l 信号在目标进程中注册。指的是信号值加入到进程的等待处理信号集中,只要信号在进程的等待处理信号集中,表明进程已经知道这些信号的存在,但还没来得及处理,或者该信号被进程阻塞。 l 信号在进程中的注销。在目标进程执行过程中,会检测是否有信号等待处理。如果存在待处理信号且该信号没有被进程阻塞,则在运行相应的信号处理函数前,要把信号在进程中注销。 l 信号生命终止。进程注销信号后,立即执行相应的信号处理函数,执行完毕后,信号的本次发送对进程的影响彻底结束,Linux把信号量、消息和

15、共享内存定义为 System V的IPC对象。 struct ipc_perm key_t key; /*整型,为0时表示private,非0时表示public*/ ushort uid; /*资源拥有者的有效标识*/ ushort gid; /*资源拥有者所在组的有效标识*/ ushort cuid; /*资源创建者的有效标识*/ ushort cgid; /*资源创建者所在组的有效标识*/ ushort mode; /*访问模式,其含义同文件访问模式*/ ushort seq; /*序列号*/,Linux中表示消息的结构中含有指向下一条 消息的指针msg_next,每个消息队列均为一个 单

16、向链表。消息队列的组织形式如图,Linux信号量数据结构如图,Linux 共享内存结构,Linux物理内存地组织示意图,9.5 存储器管理,Linux虚拟内存,每个进程空间通过进程的页目录和页表实现与物理内存间的映射。进程需要空间时并不开始分配物理内存,而是分配一块虚拟空间,直到真正需要对物理内存进行操作时才通过请求调入页面机制分配物理内存。 虚拟内存以页为基本单位,大小与物理页帧相等,386下进程的线性地址为32位,分为图示的三个部分,线性地址到物理地址的转换,对进程虚拟空间的管理,Linux采用了请求页式技术。标准Linux的虚拟页表应为三级页表,依次为页目表(PGD,Page Direc

17、tory)、中间页表(PMD:Page Middle Directory)和页表(PTE:Page Table,Linux的三级页表结构,进程虚拟空间管理使用的数据结构 及其关系示意图,导致页面异常的原因主要有,1)编程错误:可分为内核程序错误和用户程序错误。 (2)操作系统故意引发的异常:操作系统合理利用硬件机制在适当时间触发异常,使得该异常的处理程序被调用以达到预期目的,Linux虚存的保护,1)多任务及保护 Linux允许每个用户最多可运行256个任务。Linux使用了四级保护机制:0级供操作系统内核使用;1级供系统调用使用;2级供共享库用;3级供应用程序使用。Linux内核由系统内的所

18、有任务共享。每个任务有各自私有代码及数据区,存储在用户空间,因而对系统中的其他任务不可见。 (2) 同一任务内的保护 在一个任务之内,定义有四种执行特权级别,用来限制对任务中的段进行访问。这些任务按照包含在段中的数据的敏感性及任务中不同部分的程序,按可信任的程度进行分区。最敏感的数据分配最高的特权级别;特权级别用数字03表示,数字0表示最高特权级别,9.6 设备管理,1)Linux沿用了UNIX处理设备的做法,把设备作为文件来处理,用户使用设备如同使用文件一样。 (2)Linux系统将设备分为字符设备、块设备和网络设备。 (3)字符设备有终端、打印机、鼠标、声卡和内存等;块设备有软盘、硬盘、光

19、盘和其他可移动存储设备等。 (4)字符设备一般只允许顺序访问。而块设备可以随机访问,任何对块设备的读写都是通过系统内存的缓冲区进行,在Linux中,设备驱动程序是一组相关函数的集合,含设备服务子程序和中断处理程序。设备服务子程序包含了所有与设备相关的代码。设备驱动程序利用结构file_operations与文件系统联系,因为对设备的各种操作的入口参数都放在file_operations中。对于一些特定的设备,其入口为NULL。 Linux的设备驱动程序的主要功能有: 对设备进行初始化; 使设备投入运行和退出; 从设备接收数据并将其送入内核; 从内核将数据送到外设; 检测和处理设备完成任务和出错

20、情况,Linux的设备驱动程序与外设的接口与DDI/DKI规范相似,可分为如下三部分: (1)驱动程序与系统引导的接口。这是通过数据结构file_operations完成。 (2)驱动程序与设备引导的接口。这部分利用驱动程序对设备进行初始化。 (3)驱动程序与设备的接口。这部分描述了驱动程序如何与设备进行交互,这与具体设备相关,块设备驱动程序与缓冲区,内核中设置了一个结构数组blk_dev,该数组中的元素是blk_dev_struct数据结构。blk_dev_struct结构中含有一个设备驱动程序请求函数的地址和一个指向request数据结构的指针。每一个request数据结构代表一个数据块缓

21、冲区的读写请求,都含有一个指向一个或多个buffer_head的数据结构的指针。每一个buffer_head表示一个读写请求及相应的数据块缓冲区,其中包含了驱动程序读写所需要的所有信息,如图9-13所示。在等待数据时, buffer_head结构是被锁住的,直到设备驱动程序请求完成才解锁。因此,可能有进程等待这个数据块缓冲区操作的完成。如果有一个请求(request)被加在一个空的请求队列上,设备驱动程序的请求函数将立即被调用来处理这个请求队列。否则,驱动程序将顺序地处理请求队列中的所有请求,9.7 文件管理,Linux为了支持多种不同的文件系统,引人了纯软件中间层VFS,即虚拟文件系统(VF

22、S,Virtual File System),使文件子系统的可扩展性、可维护性变得更好。 Linux支持多种文件系统,如EXT2、VFAT、ISO9660等。VFS是内核软件层。它为用户空间的程序提供了诸如open( )、read( )之类的统一编程接口,同时屏蔽了不同文件系统之间的差别,如图所示,VFS中的主要数据结构,1)超级块(super_block):存储已安装文件系统的信息,通常对应磁盘文件系统的文件系统控制块。 struct super_block struct list_head s_list; /*将所有的超级块链接起来*/ kdev_t s_dev; /*所在设备的标识*/ unsigned long s_blocksize; /*该文件系统磁盘块的大小(字节数) */ unsigned char s_blocksize_bits;/*块大小的值log2(s_blocksize) */ struct file_s

温馨提示

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

评论

0/150

提交评论