1 / 4
文档名称:

华南理工大学《高级操作系》复习资料2.pdf

格式:pdf   大小:380KB   页数:4页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

华南理工大学《高级操作系》复习资料2.pdf

上传人:青山代下 2024/5/20 文件大小:380 KB

下载得到文件列表

华南理工大学《高级操作系》复习资料2.pdf

相关文档

文档介绍

文档介绍:该【华南理工大学《高级操作系》复习资料2 】是由【青山代下】上传分享,文档一共【4】页,该文档可以免费在线阅读,需要了解更多关于【华南理工大学《高级操作系》复习资料2 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。华南理工大学《高级操作系》复****资料一、名词解释写时拷贝:写时拷贝是一种可以推迟甚至免除拷贝数据的技术,它让父子进程共享同一份拷贝,而不需要复制整个进程地址空间。只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。即,资源的复制只有在需要写入的时候才进行。内核抢占:在内核空间中,当重新调度安全时,内核可以抢占正在执行的内核级的任务的行为延迟写:在进程进行写数据的时候,内核并不直接把数据写入硬件设备里,而是先把数据写到缓冲区,使缓冲区变“脏”,此时内核认为数据已经写入设备但实际却还未写入,缓冲区等满或者定时器到时才将缓冲区的数据写入硬件设备。系统调用:是用户空间进程和硬件设备之间的一个中间层接口,是用户空间访问内核的唯一手段。内核模块:可以在内核运行时动态地向内核插入或者删除的代码,它是一组把相关子例程、数据、函数入口和函数出口一并组合在一起的单独的二进制镜像。二、在进程控制处理模块方面,linux和unix的实现区别是什么?为什么会产生这种区别?进程线程:从内核角度上说,Linux并没有线程的概念,Linux把所有线程都当作进程来实现,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程和进程都有属于自己的task_struct,在内核看来两者没什么区别。而对于Unix,从内核角度有线程的概念,在有些系统如Solaris10有LWP(轻量级进程),它使用户线程可以独立与同一进程中的其他线程而执行和进入内核。进程创建:Linux采用了写时拷贝(copy-on-write)技术。创建新进程时,不是复制父进程的整个地址空间,而是让父进程与子进程共享同一个拷贝。当其中一进程写数据时,数据才会被复制,从而使各个进程拥有各自的拷贝。当子进程需要执行另一段程序时,可以调用exec()一族的系统调用。在一般的情况下,进程创建后都会马上运行一个可执行文件,这种优化可以避免拷贝大量根本就不会被使用的数据。而在Unix中创建进程没有写时拷贝,直接复制父进程的整个地址空间。为什么产生这种区别:由于传统的Unix在某些方面,如fork等方面实现过于简单简单并且效率低下,linux在这方面做出改进,可以避免拷贝大量根本不会被使用的数据,增强系统的快速执行能力。三、为什么要分上下部?简述tasklet的思想?上下部:(甚至包括其他中断处理程序)的执行。因此,为了避免被打断的代码停止时间过长,中断处理程序应该执行得越快越好。,在最好的情况下与该中断同级的其他中断会被屏蔽,在最坏的情况下,当前处理器上所有其他中断都会被屏蔽。因此,仍应该它让们执行得越快越好。,所以它们通常有很高的时限要求。,所以它们不能阻塞。这限制了它们所做的事情。因此,我们必须有一个快速、异步、简单的处理程序负责对硬件做出迅速响应并完成那些时间要求很严格的操作。中断处理程序很适合于实现这些功能,可是,对于那些其他的、对时间要求相对宽松的任务,就应该推后到中断被激活以后再去运行。Tasklet思想:由于软中断必须使用可重入函数,这就导致设计上的复杂度变高,作为设备驱动程序的开发者来说,增加了负担。而如果某种应用并不需要在多个CPU上并行执行,那么软中断其实是没有必要的。因此诞生了弥补以上两个要求的tasklet。它具有以下特性:a)一种特定类型的tasklet只能运行在一个CPU上,不能并行,只能串行执行。b)多个不同类型的tasklet可以并行在多个CPU上。c)软中断是静态分配的,在内核编译好之后,就不能改变。但tasklet就灵活许多,可以在运行时改变(比如添加模块时)。tasklet是在两种软中断类型的基础上实现的,但是由于其特殊的实现机制(数据结构里引入了引用计数器,只有在计数器为0时才能被激活),所以具有了这样不同于软中断的特性。而由于这种特性,所以降低了设备驱动程序开发者的负担,因此如果不需要软中断的并行特性,tasklet就是最好的选择。四、进程和线程的区别是什么?Linux是如何实现线程的?区别:进程和线程的区别是有无独立的进程地址空间,进程有独立的地址空间,而线程没有。如何实现:从内核的角度看,linux并没有线程的概念。Linux把所有的线程都当做进程来实现。内核并有准备特别的调度算法或定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他共享某些资源的进程。每个线程都拥有唯一属于自己的task_struct,所以在内核中,线程看起来就像是一个普通的进程。五、进程的状态有哪些?画出状态转换图TASK_RUNNINGTASK_INTERRUPTIBLETASK_UNINTERRUPTIBLETASK_STOPPEDTASK_ZOMBIE六、内核的锁的实现方式有哪些?内核只要一个锁就能锁定数据结构,为什么还实现多种方式的锁?锁的实现:原子锁自旋锁信号量BKL为什么:各种锁的适用范围不一样,如,原子锁只能避免对原子类型的数据的并发访问,而无法对避免对一整块数据的并发访问。自旋锁会一直忙循环旋转,占用CPU的时间,同时禁止内核抢占,但是正因为这种锁不会睡眠的特性,使得在中断处理程序中只能使用这种锁避免并发,而其他的锁会因睡眠而禁止使用。信号量是一种睡眠锁,它使得进程睡眠,以实现更好的资源的利用,它允许内核抢占,但是信号量的开销很大,一般适用于长期加锁或者加锁睡眠的情况。七、举例说明内核的某一块设计是利用面向对象技术的内核的VFS采用的是面向对象的设计思路,使用一族数据结构来代表通用文件对象。VFS引入了一个通用的文件模型,这个模型能够表示所有支持的文件系统。在这里,通用的文件模型利用面向对象技术,使用多态等方式实现。通用文件模型由以下对象类型组成:超级块对象、索引节点对象、文件对象、目录项对象。每个主要对象都包含了一个操作对象,这些操作对象描述了内核针对主要对象可以使用的方法。最主要的几种操作对象如下:osuper_operations对象,其中包括内核针对特定文件系统所能调用的方法,比如read_inode()和sync_fs()方法oinode_operations对象,其中包括内核针对特定文件所能调用的方法,比如create()和link()等方法odenry_operations对象,其中包括内核针对特定目录所能调用的方法,比pare()和d_delete()方法ofile对象,其中包括进程针对已打开文件所能调用的方法,比如read()和write()方法操作对象作为一个指针结构体被实现,此结构体中包含指向操作其父对象的函数指针。对于其中许多方法来说,可以继承使用VFS提供的通用函数,如果通用函数提供的基本功能无法满足需要,那么就必须使用和实际文件系统的独有方法填充这些函数指针,使其指向文件系统实例。这些结构体索然不是像C++或Java那样真正的对象数据类型,但是这些结构体的确代表的是一个对象,它含有相关的数据和操作,所以说他们就是对象。