




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle程序员面试分类模拟30简答题1.
进程与线程有什么区别?正确答案:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位。例如,用户运行(江南博哥)自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等,然后该进程被放入到进程的就绪队列,进程调度程序选中它,为它分配CPU及其他相关资源,该进程就被运行起来。
线程是进程的一个实体,是CPU调度和分配的基本单位,线程基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是它可以与同属一个进程的其他的线程共享进程所拥有的全部资源。
在没有实现线程的操作系统中,进程既是资源分配的基本单位,又是调度的基本单位,它是系统中并发执行的单元。而在实现了线程的操作系统中,进程是资源分配的基本单位,而线程是调度的基本单位,是系统中并发执行的单元。
需要注意的是,尽管线程与进程很相似,但两者也存在着很大的不同,区别如下:
1)一个线程必定属于也只能属于一个进程;而一个进程可以拥有多个线程并且至少拥有一个线程。
2)属于一个进程的所有线程共享该线程的所有资源,包括打开的文件、创建的Socket等。不同的进程互相独立。
3)线程又被称为轻量级进程。进程有进程控制块,线程也有线程控制块。但线程控制块比进程控制块小得多。线程之间切换代价小,进程之间切换代价大。
4)进程是程序的一次执行,线程可以理解为程序中一个程序片段的执行。
5)每个进程都有独立的内存空间,而线程共享其所属进程的内存空间。
程序、进程与线程的区别见下表。程序、进程与线程的区别名称描述程序一组指令的有序结合,是静态的指令,是永久存在的进程具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元。进程的存在是暂时的,是一个动态概念线程线程一个实体,是CPU调度和的基本单元,是比进程更小的能独立运行的基本单元。本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)。一个线程可以创建和撤销另-个线程,同一个进程中的多个线程之间可以并发执行
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
2.
内核线程和用户线程的区别?正确答案:根据操作系统内核是否对线程可感知,可以把线程分为内核线程和用户线程。
内核线程的建立和销毁都是由操作系统负责、通过系统调用完成的,操作系统在调度时,参考各进程内的线程运行情况做出调度决定。如果一个进程中没有就绪状态的线程,那么这个进程也不会被调度占用CPU资源。
和内核线程相对应的是用户线程,用户线程是指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,用户进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。用户线程多见于一些历史悠久的操作系统,如UNIX操作系统,不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位的,所以每个线程执行的时间相对减少。为了在操作系统中加入线程支持,采用了在用户空间增加运行库来实现线程,这些运行库被称为“线程包”,用户线程是不能被操作系统所感知的。
3.
内存管理有哪几种方式?正确答案:常见的内存管理方式有块式管理、页式管理、段式管理和段页式管理。最常用的是段页式管理。
(1)块式管理把主存分为一大块一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程序片段载入主存,就算所需的程序片段只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但优点是易于管理。
(2)页式管理用户程序的地址空间被划分成若干个固定大小的区域,这个区域被称为“页”,相应地,内存空间也被划分为若干个物理块,页和块的大小相等。可将用户程序的任一页放在内存的任一块中,从而实现了离散分配。这种方式的优点是页的大小是固定的,因此便于管理;缺点是页长与程序的逻辑大小没有任何关系。这就导致在某个时刻一个程序可能只有一部分在主存中,而另一部分则在辅存中。这不利于编程时的独立性,并给换入换出处理、存储保护和存储共享等操作造成麻烦。
(3)段式管理段是按照程序的自然分界划分的并且长度可以动态改变的区域。使用这种方式,程序员可以把子程序、操作数和不同类型的数据和函数划分到不同的段中。这种方式将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。
分页对程序员而言是不可见的,而分段通常对程序员而言是可见的,因而分段为组织程序和数据提供了方便,但是对程序员的要求也比较高。
分段存储主要有如下优点:
1)段的逻辑独立性不仅使其易于编译、管理、修改和保护,也便于多道程序共享。
2)段长可以根据需要动态改变,允许自由调度,以便有效利用主存空间。
3)方便分段共享,分段保护,动态链接,动态增长。
分段存储的缺点为:
1)由于段的大小不固定,因此存储管理比较麻烦。
2)会生成段内碎片,这会造成存储空间利用率降低。而且段式存储管理比页式存储管理方式需要更多的硬件支持。
正是由于页式管理和段式管理都有各种各样的缺点,因此,为了把这两种存储方式的优点结合起来,才引入了段页式管理。
(4)段页式管理段页式存储组织是分段式和分页式结合的存储组织方法,这样可充分利用分段管理和分页管理的优点。
1)用分段方法来分配和管理虚拟存储器。程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名,再把每段分成固定大小的若干页。
2)用分页方法来分配和管理内存。即把整个主存分成与上述页大小相等的存储块,可装入作业的任何一页。程序对内存的调入或调出是按页进行的,但它又可按段实现共享和保护。
4.
什么是虚拟内存?正确答案:虚拟内存简称虚存,是计算机系统内存管理的一种技术。它是相对于物理内存而言的,可以理解为“假的”内存。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),允许程序员编写并运行比实际系统拥有的内存大得多的程序,这使得许多大型软件项目能够在具有有限内存资源的系统上实现。而实际上,它通常被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。虚存比实存有以下好处:
1)扩大了地址空间。无论段式虚存,还是页式虚存,或是段页式虚存,寻址空间都比实存大。
2)内存保护。每个进程运行在各自的虚拟内存地址空间,互相不能干扰对方。另外,虚存还对特定的内存地址提供写保护,可以防止代码或数据被恶意篡改。
3)公平分配内存。采用了虚存之后,每个进程都相当于有同样大小的虚存空间。
4)当进程需要通信时,可采用虚存共享的方式实现。
不过,使用虚存也是有代价的,主要表现在以下几个方面的内容:
1)虚存的管理需要建立很多数据结构,这些数据结构要占用额外的内存。
2)虚拟地址到物理地址的转换,增加了指令的执行时间。
3)页面的换入换出需要磁盘I/O,这是很耗时间的。
4)如果一页中只有一部分数据,会浪费内存。
5.
什么是内存碎片?什么是内碎片?什么是外碎片?正确答案:内存碎片是由于多次进行内存分配造成的,当进行内存分配时,内存格式一般为:(用户使用段)(空白段)(用户使用段),当空白段很小的时候可能不能提供给用户足够多的空间,比如夹在中间的空白段的大小为5,而用户需要的内存大小6,这样会产生很多的间隙造成使用效率的下降,这些很小的空隙称为碎片。
内碎片:分配给程序的存储空间没有用完,有一部分是程序不使用,但其他程序也没法用的空间。内碎片是处于区域内部或页面内部的存储块,占有这些区域或页面的进程并不使用这个存储块,而在进程占有这块存储块时,系统无法利用它,直到进程释放它,或进程结束时,系统才有可能利用这个存储块。
外碎片:由于空间太小,小到无法给任何程序分配(不属于任何进程)的存储空间。外部碎片是出于任何已分配区域或页面外部的空闲存储块,这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。
内碎片和外碎片是一对矛盾体,一种特定的内存分配算法,很难同时解决好内碎片和外碎片的问题,只能根据应用特点进行取舍。
6.
虚拟地址、逻辑地址、线性地址、物理地址有什么区别?正确答案:虚拟地址是指由程序产生的由段选择符和段内偏移地址组成的地址。这两部分组成的地址并没有直接访问物理内存,而是要通过分段地址的变换处理后才会对应到相应的物理内存地址。
逻辑地址是指由程序产生的段内偏移地址。有时直接把逻辑地址当成虚拟地址,两者并没有明确的界限。
线性地址是指虚拟地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段基址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换产生物理地址。若是没有采用分页机制,那么线性地址就是物理地址。
物理地址是指现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。
虚拟地址到物理地址的转化方法是与体系结构相关的,一般有分段与分页两种方式。以x86CPU为例,分段、分页都是支持的。内存管理单元负责从虚拟地址到物理地址的转化。逻辑地址是段标识+段内偏移量的形式,MMU通过查询段表,可以把逻辑地址转化为线性地址。如果CPU没有开启分页功能,那么线性地址就是物理地址;如果CPU开启了分页功能,MMU还需要查询页表来将线性地址转化为物理地址:逻辑地址(段表)→线性地址(页表)→物理地址。
映射是一种多对一的关系,即不同的逻辑地址可以映射到同一个线性地址上;不同的线性地址也可以映射到同一个物理地址上。而且,同一个线性地址在发生换页以后,也可能被重新装载到另外一个物理地址上,所以这种多对一的映射关系也会随时间发生变化。
7.
Cache替换算法有哪些?正确答案:数据可以存放在CPU或者内存中。CPU处理快,但是容量少;内存容量大,但是转交给CPU处理的速度慢。为此,需要Cache(缓存)来做一个折中。将最有可能调用的数据先从内存调入Cache,CPU再从Cache读取数据,这样会快许多。然而,Cache中所存放的数据不是全部有用的。CPU从Cache中读取到有用数据称为“命中”。
由于主存中的块比Cache中的块多,所以当要从主存中调一个块到Cache中时,会出现该块所映射到的一组(或一个)Cache块已全部被占用的情况。此时,需要被迫腾出其中的某一块,以接纳新调入的块,这就是替换。
Cache替换算法有RAND算法、FIFO算法、LRU算法、OPT算法和LFU算法。
(1)随机(RAND)算法随机算法就是用随机数发生器产生一个要替换的块号,将该块替换出去,此算法简单、易于实现,而且它不考虑Cache块过去、现在及将来的使用情况。但是由于没有利用上层存储器使用的“历史信息”、没有根据访存的局部性原理,故不能提高Cache的命中率,命中率较低。
(2)先进先出(FIFO)算法先进先出(FirstInFirstOut,FIFO)算法是将最先进入Cache的信息块替换出去。FIFO算法按调入Cache的先后决定淘汰的顺序,选择最早调入Cache的字块进行替换,它不需要记录各字块的使用情况,比较容易实现,系统开销小,其缺点是可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉,而且没有根据访存的局部性原理,故不能提高Cache的命中率。因为最早调入的信息可能以后还要用到,或者经常要用到,如循环程序。此法简单、方便,利用了主存的“历史信息”,但并不能说最先进入的就不经常使用,其缺点是不能正确反映程序局部性原理,命中率不高,可能出现一种异常现象。例如,Solar—16/65机Cache采用组相连方式,每组4块,每块都设定一个两位的计数器,当某块被装入或被替换时该块的计数器清为0,而同组的其他各块的计数器均加1,当需要替换时就选择计数值最大的块被替换掉。
(3)近期最少使用(LRU)算法近期最少使用(LeastRecentlyUsed,LRU)算法是将近期最少使用的Cache中的信息块替换出去。
LRU算法是依据各块使用的情况,总是选择那个最近最少使用的块被替换。这种方法虽然比较好地反映了程序局部性规律,但是这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。LRU算法相对合理,但实现起来比较复杂,系统开销较大。通常需要对每一块设置一个称为计数器的硬件或软件模块,用以记录其被使用的情况。
实现LRU策略的方法有多种,例如计数器法、寄存器栈法及硬件逻辑比较法等,下面简单介绍计数器法的设计思路。
计数器方法:缓存的每一块都设置一个计数器。计数器的操作规则如下:
1)被调入或者被替换的块,其计数器清“0”,而其他的计数器则加“1”。
2)当访问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值,则该块的计数值加“1”;如果块的计数值大于命中块的计数值,则数值不变。最后将命中块的计数器清“0”。
3)需要替换时,则选择计数值最大的块被替换。
(4)最优替换(OPT)算法使用最优替换(OPTimalreplacement,OPT)算法时必须先执行一次程序,统计Cache的替换情况。有了这样的先验信息,在第二次执行该程序时便可以用最有效的方式来替换,以达到最优的目的。
前面介绍的几种页面替换算法主要是以主存储器中页面调度情况的历史信息为依据的,它假设将来主存储器中的页面调度情况与过去一段时间内主存储器中的页面调度情况是相同的,显然,这种假设不总是正确的。最好的算法应该是选择将来最久不被访问的页面作为被替换的页面,这种替换算法的命中率一定是最高的,它就是最优替换算法。
要实现OPT算法,唯一的办法是让程序先执行一遍,记录下实际的页地址的使用情况。根据这个页地址的使用情况才能找出当前要被替换的页面。显然,这样做是不现实的。因此,OPT算法只是一种理想化的算法,然而它也是一种很有用的算法。实际上,经常把这种算法用来作为评价其他页面替换算法好坏的标准。在其他条件相同的情况下,哪一种页面替换算法的命中率与OPT算法最接近,那么它就是一种比较好的页面替换算法。
(5)近期最少使用(LFU)算法近期最少使用(LeastFrequentlyUsed,LFU)算法选择近期最少访问的页面作为被替换的页面。显然,这是一种非常合理的算法,因为到目前为止最少使用的页面,很可能也是将来最少访问的页面。该算法既充分利用了主存中页面调度情况的历史信息,又正确反映了程序的局部特性。但是,这种算法实现起来非常困难,它要为每个页面设置一个很长的计数器,并且要选择一个固定的时钟为每个计数器定时计数。在选择被替换页面时,要从所有计数器中找出一个计数值最大的计数器。
8.
库函数调用与系统调用有什么不同?正确答案:库函数调用是语言或应用程序的一部分,它是高层的,完全运行在用户空间,为程序员提供调用真正的在幕后完成实际事务的系统调用接口。而系统函数是内核提供给应用程序的接口,属于系统的一部分。函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。
库函数调用与系统调用的区别见下表。库函数调用与系统调用的区别库函数调用系统调用在所有的ANSIC编译器版本中,C语言库函数是相同的各个操作系统的系统调用是不同的它调用函数库中的一段程序(或函数)它调用系统内核的服务与用户程序相联系是操作系统的一个入口点在用户地址空间执行在内核地址空间执行它的运行时间属于“用户时间”它的运行属于“系统时间”属于过程调用,调用开销较小需要在用户空间和内核上下文环境间切换,开销较大在C函数库libc中有大约300个函数在Unix中有大约90个系统调用典型的C函数库调用:system、fprintf和malloc等典型的系统调用:chdir、fork、write和brk等
库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的时间耗费。但系统调用比库函数调用还要慢很多,因为它需要把上下文环境切换到内核模式。
9.
静态链接与动态链接有什么区别?正确答案:静态链接是指把要调用的函数或者过程直接链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的.exe文件中,该文件包含了运行时所需的全部代码。静态链接的缺点是当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025混凝土分项班组合同
- 2025年成人高考《语文》文学常识必考知识点试题集
- 亲子乐园清包工装修协议
- 2025年音乐教师招聘考试音乐教育心理与行为分析评价案例分析试卷
- 新教材高中政治 8.2 用发展的观点看问题教学实录2 新人教版必修4
- 2024秋七年级数学上册 第4章 直线与角4.1 几何图形 1认识几何体教学实录(新版)沪科版
- 3迢迢牵牛星教学设计-2023-2024学年六年级下册语文统编版
- 新建中学家长学校工作计划
- 加拿大初中范文课件
- 第3课时 1米有多长(教学设计)-2024-2025学年二年级上册数学北师大版
- 单个军人队列动作教案
- 《第3单元 角的度量:角的度量》课件
- Y -S-T 581.8-2023 氟化铝化学分析方法和物理性能测定方法 第 8 部分:硫酸根含量的测定 硫酸钡重量法 (正式版)
- 大象出版社《科学》四年级下册 第三单元 太阳、地球和月亮 影子的形成课件
- 2023北京市-实验动物上岗证培训考试题库
- 吉林省地方教材家乡小学一年级下册家乡教案
- 实验经济学实验设计案例
- 国际经济法自考真题及答案
- 护理时间管理课件
- 《术前讨论制度》课件
- 商业综合体商业项目立项报告
评论
0/150
提交评论