Java程序员面试分类真题11_第1页
Java程序员面试分类真题11_第2页
Java程序员面试分类真题11_第3页
Java程序员面试分类真题11_第4页
Java程序员面试分类真题11_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

Java程序员面试分类真题11一、单项选择题1.

在Linux操作系统下,非超级用户要运行某个文件夹下的可执行脚本,对该文件夹至少要拥有______权限;如果要用1s命令查看该文件夹下有哪些文件,对该文件(江南博哥)夹至少要拥有______权限。A.前者是执行权限,后者是执行和读取权限B.前者是执行和读取权限,后者是执行和读取权限C.前者是执行权限,后者是读取权限D.前者是执行和读取权限、后者是读取权限正确答案:A[解析]Linux操作系统中的每个文件和目录都有存取许可权限,存取权限规定了三种访问文件或目录的方式:读(r)、写(w)、可执行或查找(x)。

对于文件的存取权限而言,读权限(r)表示只允许指定用户读取相应文件的内容,而禁止对它做任何的更改操作,将所访问的文件的内容作为输入的命令都需要有读的权限,例如cat(连接并显示指定的一个或者多个文件的有关信息)、more(类似cat,不过会一页页地显示,方便使用者一页页阅读)等。写权限(w)表示允许指定用户打开并修改文件,例如命令vi、cp等。执行权限(x)表示允许指定用户将该文件作为一个程序执行。

对于目录的存取权限而言,在ls命令后加上-d选项,可以了解目录文件的使用权限。其中,读权限(r)表示可以列出存储在该目录下的文件,即读目录内容列表,这一权限允许Shell使用文件扩展名列出相匹配的文件名。写权限(w)表示允许用户从目录中删除或添加新的文件,通常只有系统管理员才具有写权限。执行权限(x)表示允许用户在目录中查找,并能用cd命令将工作目录改到该目录。

本题中,要想进入目录,都需要具有x权限(执行权限),而查看目录下的文件需要r权限(读权限)和x权限,因为相当于进入了目录。执行目录下某个可执行文件,需要进入目录的x权限。所以,选项A正确。

2.

“死锁”是针对______的。A.某个进程申请资源数超过了系统拥有的最大资源数B.某个进程申请系统中不存在的资源C.硬件故障D.多个并发进程竞争独占型资源正确答案:D[解析]所谓死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。举一个简单的例子:在吃饭的时候,只有拿到一双筷子后才能开始吃饭,如果有两个人,每个人都只拿了一根筷子,而等待另一根筷子可用,此时,两个人都已经占用了部分资源(一根筷子),而等待另一个资源(另一根筷子),两个人永远都在等待对方释放资源,因此,发生了死锁。可以通过外力作用把一个人的筷子强制释放掉给另外一个人而解决死锁。很显然,选项D的描述符合死锁的定义。

3.

某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台,当N的取值不超过______时,系统不会发生死锁。A.3B.5C.8D.7正确答案:B[解析]本题中,不发生死锁的条件是至少能保证1个进程能获得3台打印机资源。最坏的情况是1个进程获取了3台打印机资源,另外N-1个进程获取到2台打印机,等待获取第3台。

本题可以构建如下等式关系:3+(N-1)*2=11,解算结果为N=5。所以,选项B正确。

4.

有一个变量inta=0,两个线程同时对其进行+1操作,每个线程加100次,不加锁,最后变量a的值是______。A.200B.<=200C.>=200D.都有可能正确答案:B[解析]多线程(Multithreading)技术指的是从软件或者硬件上实现多个线程并发执行的技术,本题中,+1操作的执行过程如下:取出变量a,对变量a执行+1操作,把计算结果放回去。如果两个线程中+1操作都没有被中断,所有的+1操作都生效了,那么此时相应地对a执行了200次+1操作,在这种情况下,a的值变为200。由于这两个线程在对a执行+1操作的时候,并没有加锁,因此,有可能会导致部分+1操作丢失,如下所示:

1)线程1读取变量a的值(读取到寄存器中)为0。

2)线程2读取变量a的值,此时读取到的值也为0。

3)线程1对a执行+1操作并放回去,此时a的值为1。

4)线程2也对a执行+1操作并放回去,由于此时线程2中寄存器中a的值为0,执行+1操作后变为1并放回去,此时a的值还为1。

在这种情况下,线程1对a执行+1的操作就会丢失。因此,执行结束后,a的最大值为200。所以,选项B正确。

5.

某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是______。A.9B.10C.11D.12正确答案:B[解析]系统不会发生死锁的最少资源数=每个进程拥有(4-1=3)个资源+多出1个资源=3*3+1=10。所以,选项B正确。

6.

以下关于计算机的描述中,不正确的是______。A.进程调度有“可抢占”和“非抢占”两种方式,后者引起系统的开销更大B.每个进程都有自己的文件描述符表,所有进程共享同一打开文件表和v-node表C.基本的存储技术包括RAM、ROM、磁盘以及SSD,其中访问速度最慢的是磁盘,CPU的高速缓存一般是由RAM组成的D.多个进程竞争资源出现了循环等待可能造成系统死锁正确答案:A[解析]对于选项A,可抢占式调度会导致系统的开销更大。可抢占式(Preemptive)调度严格保证在任何时刻具有最高优先级的进程占有处理机运行,因此,该方式增加了处理机调度的时间,同时需要为退出的进程保留现场,为获取到处理机的进程恢复现场等时间(和空间),因此,开销比较大。非抢占式(Nonpreemptive)调度是一种让进程运行直到结束或阻塞的调度方式(容易实现,适合专用系统,不适合通用系统)。所以,选项A不正确。

对于选项B,在内核中,对于每个进程都有一个文件描述符表,表示这个进程打开的所有文件。文件描述符表中每一项都是一个指针,指向一个用于描述打开的文件的数据块——file对象,file对象中描述了文件的打开模式、读写位置等重要信息,当进程打开一个文件时,内核就会创建一个新的file对象。需要注意的是,file对象不是专属于某个进程的,不同进程的文件描述符表中的指针可以指向相同的file对象,从而共享这个打开的文件。file对象有引用计数,记录了引用这个对象的文件描述符个数,只有当引用计数为0时,内核才销毁file对象,因此,某个进程关闭文件,不会影响与之共享同一个file对象的进程。所以,选项B正确。

对于选项C,ROM(ReadOnlyMemory,只读存储器)和RAM(RandomAccessMemory,随机存取存储器)指的都是半导体存储器,ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。磁盘是一种类似磁带的计算机的外部存储器,它将圆形的磁性盘片装在一个方的密封盒子里。SSD(SolidStateDrives,固态硬盘,简称固盘)是用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。ROM、RAM、磁盘和SSD都是存储设备,其中,访问速度最快的是RAM,访问速度最慢的是磁盘,CPU的高速缓存一般是由RAM组成的。所以,选项C正确。

对于选项D,如果系统中存在多个进程,它们中的每一个进程都占用了某种资源而又都在等待其中另一个进程所占用的资源,那么这种等待永远都不能结束,就称系统出现了“死锁”。所以,选项D正确。

所以,本题的答案为A。

7.

某进程在运行过程中需要等待从磁盘上读入数据,此时进程的状态将______。A.从就绪变为运行B.从运行变为就绪C.从运行变为阻塞D.从阻塞变为就绪正确答案:C[解析]在操作系统中,进程的基本状态有就绪状态、运行状态和阻塞状态三种。以下将分别对这三种状态进行分析。

(1)就绪(Ready)状态

进程已经具备运行条件,但是CPU还没有得到分配。也就是说,当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,此时进程的状态称为就绪状态。在一个系统中,处于就绪状态的进程可能有多个,通常将这些处于就绪状态的进程排成一个队列,称为就绪队列。

(2)运行状态

进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于运行状态,在多处理机系统中,则有多个进程处于运行状态。

(3)阻塞状态

当正在运行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,亦即程序的执行受到阻塞,把这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。

三种进程之间的转换图如图所示。

三种进程之间的转换图

以下将针对这个状态转换图的条件进行讨论与分析:

(1)就绪→运行

对于就绪状态的进程,当进程调度程序按一种选定的策略从中选中一个就绪进程,并为之分配了处理机后,该进程便由就绪状态变为运行状态。

(2)运行→阻塞

如果正在运行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,例如进程提出输入/输出请求而变成等待外部设备传输信息的状态,进程申请资源(主存空间或外部设备)得不到满足时变成等待资源状态,进程运行中出现了故障(程序出错或主存储器读写错等)变成等待干预状态等。

(3)阻塞→就绪

处于阻塞状态的进程,当其等待的事件已经发生,例如输入/输出完成,资源得到满足或错误处理完毕时,处于阻塞状态的进程并不会马上转入运行状态,而是先转入就绪状态,然后再由系统进程调度程序在适当的时候将该进程转为运行状态。

(4)运行→就绪

正在运行的进程,因为时间片用完而被暂停执行,或在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行而被迫让出处理机时,该进程便由运行状态转变为就绪状态。

以上4种情况可以相互正常转换,那么为什么阻塞状态无法直接转换为运行状态呢?为什么就绪状态无法直接转换为阻塞状态呢?其实,即使给阻塞进程分配CPU,也无法执行,因为操作系统在进行调度时,不会在阻塞队列中进行挑选,其调度的选择对象为就绪队列,而就绪状态根本就没有执行,是进入不了阻塞状态的。

本题中,进程在运行过程中,进入I/O操作,则处理阻塞。所以,此时进程的状态将从运行变为阻塞。所以,选项C正确。

8.

Linux系统下的进程有以下______三种状态。A.精确态、模糊态和随机态B.运行态、就绪态和等待态C.准备态、执行态和退出态D.手动态、自动态和自由态正确答案:B[解析]进程的状态有两种划分方式:三态模型与五态模型。

1)三态模型:运行态、就绪态和阻塞(等待)态。

2)五态模型:新建态、就绪态、运行态、阻塞态和终止态。

所以,本题的答案为B。

9.

下列的进程状态变化中,不可能发生的是______。A.运行→就绪B.运行→等待C.等待→运行D.等待→就绪正确答案:C[解析]状态不能直接从等待状态(也称为阻塞状态)跳转到运行状态,只能跳转到就绪状态。所以,选项C正确。

10.

进程进入等待状态的方式有______。A.CPU调度给优先级更高的线程B.阻塞的线程获得资源或者信号C.在时间片轮转的情况下,如果时间片到了D.获得spinlock(自旋锁)未果正确答案:D[解析]等待状态通常是我们说的阻塞态,因为一般阻塞态是在等待某一触发事件的发生,才能进入就绪状态。

对于选项A,进程是从运行状态进入就绪状态。所以,选项A错误。

对于选项B,进程是从阻塞状态进入就绪状态。所以,选项B错误。

对于选项C,进程是从运行状态进入就绪状态。所以,选项C错误。

对于选项D,获取锁失败后进入阻塞状态。所以,选项D正确。

11.

以下关于Linux下的进程的描述中,不正确的是______。A.僵尸进程会被init进程接管,而僵尸进程不会造成资源浪费B.孤儿进程的父进程在它之前退出,会被init进程接管,它不会造成资源浪费C.进程是资源管理的最小单位,而线程是程序执行的最小单位。Linux下的线程本质上用进程实现D.子进程如果对资源只是进行读操作,那么完全和父进程共享物理地址空间正确答案:A[解析]对于选项A,僵尸进程不会被init进程接管,会一直占用资源。所以,选项A错误。

对于选项B,孤儿进程在产生的时候就会被init进程所接管,会直接回收资源,也就不会占用资源。所以,选项B正确。

对于选项C与选项D,描述正确。

所以,本题的答案为A。

12.

下列关于进程的描述中,不正确的是______。A.进程在退出时会自动关闭自己打开的所有文件B.进程在退出时会自动关闭自己打开的网络链接C.进程在退出时会自动销毁自己创建的所有线程D.进程在退出时会自动销毁自己打开的共享内存正确答案:D[解析]进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程开启的线程都仅仅属于本进程,所以,进程在退出时,会自动关闭进程打开的文件、自己打开的网络,同时销毁自己创建的所有线程。但是,由于共享内存是公用的,一旦被销毁了,会对其他正在使用这段内存的进程造成破坏,所以,进程在退出时不会自动销毁自己打开的共享内存。所以,选项D错误,而选项A、选项B、选项C都是正确的。

13.

一种既有利于短作业又兼顾长作业的调度方式是______。A.先来先服务B.均衡调度C.最短作业优先D.最高响应比优先正确答案:D[解析]本题中,选项A、选项B和选项C的调度方法都不满足题目要求,所以,选项A、选项B和选项C错误。

对于选项D,最高响应比优先法(HighestResponse_ratioNext,HRN)是对FCFS(FirstComeFirstServed,先来先服务)方式和SJF(ShortestJobFirst,最短作业优先)方式的一种综合平衡。FCFS方式只考虑每个作业的请求时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。响应比R定义如下:R=(W+T)/T=1+W/T,其中,T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,当采用HRN方式时,其吞吐量将小于采用SJF法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。等待时问一定,要求服务的时间越短,先运行;要求服务的时间一定,等待时间越长,先运行。所以,最高响应比优先调度是一种既有利于短作业又兼顾长作业的调度方式。所以,选项D正确。

14.

进程调度是从______选择一个进程投入运行。A.就绪队列B.作业后备队列C.等待队列D.提交队列正确答案:A[解析]进程的基本调度状态有运行、就绪和阻塞。进程调度程序从处于就绪状态的进程中选择一个投入运行。运行进程因等待某一事件而进入阻塞状态,因时间片到达而回到就绪状态。处于阻塞状态的进程当所等待的事件发生时,便进入就绪状态。

本题中,就绪队列是等待CPU时间的队列,其中存放着等待执行的任务。进程调度是从就绪队列中选择一个进程投入运行。所以,选项A正确。

15.

在进程调度算法中,下面算法中,适用于运行时间可以预知的批处理调度算法是______。A.最短作业优先B.先来先服务C.优先级调度D.时间片轮转调度正确答案:A[解析]对于选项A,最短作业优先(ShortestJobFirst,SJF)是对FCFS算法的改进,其目标是减少平均周转时间。其优点是相比FCFS(FirstComeFirstServed,先来先服务)改善了平均周转时间和平均带权周转时间,缩短了作业的等待时间,同时,提高了系统的吞吐量。但缺点就是对长作业非常不利,可能长时间得不到执行;未能依据作业的紧迫程度来划分执行的优先级;难以准确估计作业(进程)的执行时间,从而影响调度性能。最短作业优先是一种适用于运行时间可以预知的非抢占式的批处理调度算法。所以,选项A正确。

对于选项B,先来先服务(FirstComeFirstSerred,FCFS)是最简单的调度算法,按先后顺序进行调度;适用于长作业,而不利于短作业;有利于CPU繁忙的作业,而不利于I/O繁忙的作业。所以,选项B错误。

对于选项C,优先级算法(PriorityScheduling)是多级队列算法的改进,平衡了各进程对响应时间的要求。适用于作业调度和进程调度,可分成抢先式和非抢先式。所以,选项C错误。

对于选项D,轮转法(RoundRobin)是让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。所以,选项D错误。

所以,本题的答案为A。

16.

在进程间通信的方式中,访问速度最快的是______。A.管道B.消息队列C.共享内存D.套接字正确答案:C[解析]共享内存就是映射一段能被其他进程所访问的内存,这段内存由一个进程创建,但多个进程都可以访问。共享内存是最快的进程间通信的方式,它是针对其他进程间通信方式运行效率低而专门设计的。所以,选项C正确。

17.

同一进程下的多个线程可以共享的资源是______。A.栈B.数据区C.寄存器D.线程ID正确答案:B

18.

系统中的“颠簸”是由______引起的。A.内存容量不足B.缺页率高C.交换信息量大D.缺页率反馈模型不正确正确答案:B[解析]如果分配给进程的存储块数量小于进程所需要的最小值,进程的运行将很频繁地产生缺页中断,这种频率非常高的页面置换现象称为抖动,也称为“颠簸”。在请求分页存储管理中,可能出现这种情况,即对刚被替换出去的页,立即又要被访问。需要将它调入,因为没有空闲内存又要替换另一页,而后者又是即将被访问的页,于是造成了系统需花费大量的时间忙于进行这种频繁的页面交换,致使系统的实际效率很低,严重导致系统瘫痪。

通过上面的分析可知,“颠簸”是由缺页率高引起的。所以,选项B正确。

19.

下面不是进程和程序的区别的是______。A.程序是一组有序的静态指令,进程是一次程序的执行过程B.程序只能在前台运行,而进程可以在前台或后台运行C.程序可以长期保存,进程是暂时的D.程序没有状态,而进程是有状态的正确答案:B[解析]下表是程序、进程、线程的定义与关联关系。程序、进程、线程的定义与关联关系术语定义与描述程序一组指令的有序结合,是一个静态没状态的文本进程具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元线程进程的一个实体,是CPU调度和分派的基本单元,是比进程更小的能独立运行的基本单元。本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(例如程序计数器、一组寄存器和栈)一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行

所以,本题的答案为B。

20.

程序和进程的本质区别是______。A.独占使用和分时使用计算机资源B.非顺序和顺序执行机器指令C.在外存和内存存储D.静态和动态特征正确答案:D

21.

文件长度是一个大于0的整数,用变量unsignedfilelength来表示,把文件分成块,每块的长度也是一个大于0的整数,用变量unsignedblocklength来表示,则文件被分成的块数为______。A.file_length/block_lengthB.file_length/block_length+1C.(file_length+block_length_1)/block_lengthD.((file_length_1)/block_length+1正确答案:D[解析]本题可以采用排除法解答。

假设file_length=5,block_length=2,则可以分成3块,排除选项A。

假设file_length=6,block_length=2,也可以分成3块,排除选项B。

对于选项C,两个unsigned类型的值相加可能会溢出,所以,可以排除选项C。

对于选项D,对于上述两种情况都能得到正确的结果。因此,选项D正确。

22.

X86体系结构在保护模式下中有三种地址,以下对于这三种地址的描述中,正确的是______。A.虚拟地址先经过分段机制映射到线性地址,然后线性地址通过分页机制映射到物理地址B.线性地址先经过分段机制映射到虚拟地址,然后虚拟地址通过分页机制映射到物理地址C.虚拟地址先经过分页机制映射到线性地址,然后线性地址通过分段机制映射到物理地址D.线性地址先经过分页机制映射到虚拟地址,然后线性地址通过分段机制映射到物理地址正确答案:A[解析]要想弄明白各类地址的映射,首先需要弄懂各地址的概念。

虚拟地址指的是由程序产生的由段选择符和段内偏移地址两个部分组成的地址。这两部分组成的地址并没有直接访问物理内存,而是要通过分段地址的变换机构处理或映射后才会对应到相应的物理内存地址。

逻辑地址指的是用户程序经编译之后的每个目标模块都以0为基地址顺序编址,在程序中使用的地址都是逻辑地址。

线性地址指的是虚拟地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换产生物理地址。如果没有采用分页机制,那么线性地址就是物理地址。

物理地址指的是现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果,是实际数据存放的地址。

虚拟地址到物理地址的转化方法是与体系结构相关的。一般来说,有分段和分页两种方式。以X86CPU为例,分段、分页两种方式都是支持的。MemoryManagementUnit(内存管理单元,简称为MMU)负责从虚拟地址到物理地址的转化。逻辑地址是段标识+段内偏移量的形式,MMU通过查询段表,可以把逻辑地址转化为线性地址。如果CPU没有开启分页功能,那么线性地址就是物理地址;如果CPU开启了分页功能,MMU还需要查询页表来将线性地址转化为物理地址:逻辑地址→(段表)→线性地址-(页表)→物理地址。

不同的逻辑地址可以映射到同一个线性地址上;不同的线性地址也可以映射到同一个物理地址上;所以,这是一种多对一的关系。另外,同一个线性地址,在发生换页以后,也可能被重新装载到另外一个物理地址上。所以,这种多对一的映射关系也会随时间发生变化。

分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元。分页机制把线性地址空间和物理地址空间分别划分为大小相同的块,这样的块称为页。通过在线性地址空间的页与物理地址空间的页之间建立的映射,分页机制实现线性地址到物理地址的转换。

通过以上的分析可知,选项A是正确的。

23.

在段页式存储管理系统中其虚拟地址空间是______的。A.一维B.二维C.三维D.四维正确答案:C

24.

在虚拟存储系统中,若进程在内存中占3块(开始时为空),采用先进先出页面淘汰算法,当执行访问页号序列为1、2、3、4、1、2、5、1、2、3、4、5、6时,将产生缺页中断的次数是______。A.10B.9C.8D.7正确答案:A[解析]在地址映射过程中,如果在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,操作系统必须在内存中选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫作页面置换算法,也称为页面淘汰算法。

先进先出页面淘汰算法简称FIFO(FirstInFirstOut)算法,该算法实现时,置换出最早进入内存的页面,即在内存中驻留时间最久的页面。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。

本题中,置换过程如下:

1)访问1,缺页,调入1,内存中为1。

2)访问2,缺页,调入2,内存中为1,2。

3)访问3,缺页,调入3,内存中为1,2,3。

4)访问4,缺页,调入4,淘汰1,内存中为2,3,4。

5)访问1,缺页,调入1,淘汰2,内存中为3,4,1。

6)访问2,缺页,调入2,淘汰3,内存中为4,1,2。

7)访问5,缺页,调入5,淘汰4,内存中为1,2,5。

8)访问1,不缺页,内存中为1,2,5。

9)访问2,不缺页,内存中为1,2,5。

10)访问3,缺页,调入3,淘汰1,内存中为2,5,3。

11)访问4,缺页,调入4,淘汰2,内存中为5,3,4。

12)访问5,不缺页,内存中为5,3,4。

13)访问6,缺页,调入6,淘汰3,内存中为3,4,6。

所以,一共产生了10次缺页。因此,选项A正确。

25.

函数的局部变量所需存储空间是在______分配的。A.进程的数据段B.进程的栈上C.进程的堆上D.以上都可以正确答案:B[解析]一个C/C++编译的程序所占用的系统内存一般分为代码段、数据段、BBS段、堆和栈。

1)代码段(CodeSegment/TextSegment):代码段有时候也叫文本段,通常是指用来存放程序执行代码(包括类成员函数和全局函数以及其他函数代码)的一块内存区域,这部分区域的大小在程序运行前就已经确定,并且内存区域通常是只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量。这个段一般是可以被共享的,比如在Linux操作系统中打开了2个Vi来编辑文本,那么一般来说,这两个Vi是共享一个代码段的。

2)数据段(DataSegment):数据段通常是指用来存放程序中己初始化的全局变量的一块内存区域。数据段也属于静态内存分配。因此,BBS段与数据段都属于静态区(全局区)。

3)符号起始的区块(BlockStartedbySymbol,BSS)段:BSS段通常是指用来存放程序中未初始化的全局数据和静态数据的一块内存区域。BSS段属于静态内存分配,程序结束后静态变量资源由系统自动释放。

4)堆(Heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc或new等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张),当利用free或delete等函数释放内存时,被释放的内存从堆中被删除(堆被缩减)。堆一般由程序员分配释放,如果程序员自己不释放,在程序结束时,该块内存空间可能会由操作系统回收。需要注意的是,它与数据结构中的堆是两回事,分配方式类似于链表。

5)栈(Stack):栈上存放的是用户临时创建的局部变量,一般包括函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此之外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且等到调用结束后,函数的返回值也会被存放回栈中。栈由编译器自动分配释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。栈内存分配运算内置于处理器的指令集中,一般使用寄存器来存取,效率很高,但是分配的内存容量有限。

通过上述描述可知,选项B正确。

26.

静态局部变量存储在进程的______。A.栈区B.寄存器区C.代码区D.全局区正确答案:D

27.

当在CPU内存之间进行地址转换时,______将地址从虚拟(逻辑)地址空间映射到物理地址空间。A.TCBB.MMUC.CACHED.DMA正确答案:B[解析]本题中,对于选项A,TCB是TIaastedComputingBase的简称,指的是计算机内保护装置的总体,包括硬件、固件、软件和负责执行安全策略的组合体。它建立了一个基本的保护环境并提供一个可信计算机系统所要求的附加用户服务。所以,选项A错误。

对于选项B,MMU是MemoryManagementUnit的缩写,即内存管理单元,它用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。所以,选项B正确。

对于选项C,CACHE是指介于中央处理器和主存储器之间的高速小容量存储器。所以,选项C错误。

对于选项D,DMA(DirectMemoryAccess,直接内存存取)指的是一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。所以,选项D错误。

通过上面的分析可知,MMU可以将地址从虚拟(逻辑)地址空间映射到物理地址空间。所以,选项B正确。

28.

以下不是内核对象的是______。A.进程B.线程C.互斥器D.临界区正确答案:D[解析]一个内核对象就是在系统堆中占据一块空间的结构体。不同种类的内核对象用来管理操作系统中不同的资源,例如进程、线程和文件等。所有内核对象都会保存该对象的引用计数,进程对象会保存进程ID,文件对象会保存当前字节偏移量、共享模式和打开模式等。操作系统中所有内核对象都是保存在一块内存空间中的,系统上所有的进程都共享这一块内存空间。

每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只允许一个进程进入临界区,进入后不允许其他进程进入。

互斥对象是一种最简单的内核对象,用它可以方便地实现对某一资源的互斥访问。而临界区并不是内核对象,而是系统提供的一种数据结构,程序中可以声明一个该类型变量,之后用它来实现对资源的互斥访问。当希望访问某一临界资源时,先将该临界区加锁(如果临界区不空闲,则等待),用完该资源后,将临界区释放。

29.

在一个请求页式存储管理中,一个程序的页面走向为3、4、2、1、4、5、3、4、5、1、2,并采用LRU算法。设分配给该程序的存储块数S分别为______和______,在该访问中发生的缺页次数F是______。A.S=3,F=6;S=4,F=5B.S=3,F=7;S=4,F=6C.S=3,F=8;S=4,F=5D.S=3,F=8;S=4,F=7正确答案:D[解析]LRU计算的缺页情况见表1和表2。表1LRU计算的缺页情况133342l45345

4421453451

214534512缺页缺页缺页缺页

缺页缺页

缺页缺页缺页次数8次。表2LRU计算的缺页情况233333211134

4442145345

221453451

14534512缺页缺页缺页缺页

缺页缺页

缺页

缺页次数7次。所以,选项D正确。

30.

操作系统采用分页式存储管理中,要求______。A.每个进程拥有一张页表,且进程的页表驻留在内存中B.每个进程拥有一张页表,但只要执行进程的页表驻留在内存中,其他进程的页表不必驻留在内存中C.所有进程共享一张页表,以节约有限的内存空间,但页表必须驻留在内存中D.所有进程共享一张页表,只有页表中当前使用的页面必须驻留在内存中,以最大限度地节约有限的内存空间正确答案:A[解析]页式存储管理的特征是等分内存,它解决了外碎片(大量信息由于先后写入、置换、删除而形成的空间碎片)问题。段式存储管理的特征是逻辑分段,便于实现共享和保护。为了保持页式和段式上的优点,结合两种存储管理方案,形成了段页式存储管理。本题中,在分页系统中,为每个进程都配置一张页表,进程逻辑地址空间中的每一页在页表中都有一个页表项。所以,选项A正确。

31.

在虚拟分页存储管理系统中,若进程访问的页面不在主存,且主存中没有可用的空闲块时,系统正确的处理顺序是______。A.决定淘汰页—>页面调出—>缺页中断—>页面调入B.决定淘汰页—>页面调入—>缺页中断—>页面调出C.缺页中断—>决定淘汰页—>页面调出—>页面调入D.缺页中断—>决定淘汰页—>页面调入—>页面调出正确答案:C[解析]虚拟分页存储管理的步骤如下:

1)首先,在程序运行中发现所需要的页不在物理内存时,此时会发出缺页中断,并根据算法决定淘汰哪些页。

2)然后,把物理内存中的淘汰页存储到外存,此过程被称为页面调出。

3)最后,把需要的内容从外存调入物理内存指定页,此过程被称为页面调入。

其实,操作系统就像一辆公交车,只有旧乘客先下来,新乘客才能上去,所以,页面调出为先,页面调入在后。而在页面调出前,必须要存在着缺页中断,而且已经决定了哪些页面需要调出才行。

所以,完整的过程应该是缺页中断—>决定淘汰页—>页面调出—>页面调入,选项C正确。

二、多项选择题1.

下面函数调用必须进入内核才能完成的是______。A.fopenB.exitC.memcpyD.strlen正确答案:AB[解析]对于选项A,fopen是打开文件的函数,文件也可以看成是一个设备,打开一个设备将导致给设备所属的驱动程序发送一个IRP(I/ORequestPacket,输入/输出请求包),而与真实硬件相关的驱动程序都运行于内核。所以,选项A正确。

对于选项B,exit函数是结束进程的函数,结束进程需要访问PCB(ProcessControlBlock,进程控制块)和TCB(ThreadControlBlock,线程控制块)等一些数据结构,而这些数据都存在于内核中。所以,选项B正确。

对于选项C,memcpy是C/C++语言中的内存复制函数,功能是从源src所指的内存地址的起始位置开始复制n个字节到目标dest所指的内存地址的起始位置中。它不必进入内核就可以完成。所以,选项C错误。

对于选项D,strlen函数的功能是求字符串的实际长度,即从内存的某个位置(可以是字符串开头、中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到遇到第一个字符串结束符“\0”为止,然后返回计数器值(长度不包含“\0”)。它不必进入内核就可以完成。所以,选项D错误。

所以,本题的答案为AB。

2.

下列中断属于强迫性中断的是______。A.掉电B.设备出错C.时间片到时D.执行print语句正确答案:ABD[解析]中断源一般可分为两类:强迫性中断和自愿性中断。强迫性中断由随机事件引起而非程序员事先安排,包括输入/输出中断、硬件故障中断、时钟中断、控制台中断和程序性中断。设备出错、执行print语句属于其中的输入/输出中断;断电属于硬件故障中断。时间片到时属于自愿性中断。

所以,选项A、选项B、选项D正确。

3.

在竞态条件(Racecondition)的情况下,两个线程执行如下代码段,其中count为共享变量,线程1执行代码段A,线程2指向代码段B,那么变量count的值可能为______。

intcount=10;

代码段A:

Thread_1()

{

//dosomething

count++;

}

代码段B:

Thread_2()

{

//dosomething

count--;

}A.9B.10C.11D.12正确答案:ABC[解析]如果两个或两个以上的线程同时访问相同的对象,或者访问不同步的共享状态,就会出现竞态条件。竞态条件是一个在设备或者系统试图同时执行两个操作的时候出现的不希望的状况,但是由于设备和系统的自然特性,为了正确地执行,操作必须按照合适顺序进行。

本题中,线程Thread_1读取count(10),进行递增操作,还未写回新值1(11)时,线程Thread_2读取count旧值(10),进行递减操作得到新值2(9),当写回时,若新值1覆盖新值2,则得到count=11,若新值2覆盖新值1,则得到count=9。若count++和count--顺序执行,则得到正常值10。

需要注意的是,竞态条件的出错概率非常小,只有非常快速或者非常运气不好时才会出现,在几百万次运行中也很少遇到一次,所以,很难调试出来。

所以,本题的答案为ABC。

4.

选择排队作业中等待时间最长的作业优先调度,该调度算法可能不是______。A.先来先服务调度算法B.高响应比优先调度算法C.优先权调度算法D.短作业优先调度算法正确答案:AD

5.

在Unix操作系统中,可以用于进程间通信的是______。A.SocketB.共享内存C.消息队列D.信号量正确答案:ABCD[解析]进程间的通信方式主要有如下几种:管道、信号、消息队列、共享内存、内存映射、信号量和套接字(Socket)。所以,本题的答案为ABCD。

6.

下面描述中,属于Linux系统进程间通信机制的有______。A.管道B.信号量C.信号D.套接字正确答案:ABCD

7.

进程内的线程可以共享以下哪些资源______。A.stackB.datasectionC.registersetD.filefd正确答案:BD[解析]线程是指程序在执行过程中,能够执行程序代码的一个执行单元。

进程是指一段正在执行的程序。而线程有时候也被称为轻量级进程,是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段、数据段和堆空间)及一些进程级的资源(例如打开的文件),但是各个线程拥有自己的栈空间,进程与线程的关系如图所示。

进程与线程的关系

具体而言,线程共享的内容包括代码段、数据段、堆空间、进程打开的文件描述符、进程的当前目录以及进程的用户ID和组ID。

线程独占的资源包括栈、线程ID、寄存器的值、错误返回码以及线程的信号屏蔽码。具体内容如下:

(1)线程ID

每个线程都有自己的线程ID,这个ID在本进程中是唯一的。进程用此来标识线程。

(2)线程的栈

栈是保证线程独立运行所必需的。线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以,线程必须拥有自己的函数栈,使得函数调用可以正常执行,不受其他线程的影响。

(3)错误返回码

不同的线程应该拥有自己的错误返回码变量。

(4)线程的信号屏蔽码

由于每个线程所感兴趣的信号不同,所以,线程的信号屏蔽码应该由线程自己管理,但所有的线程都共享同样的信号处理器。

(5)线程的优先级

由于线程需要像进程那样能够被调度,那么就必须要有可供调度使用的参数,这个参数就是线程。

所以,选项B与选项D正确,选项A与选项C错误。

8.

两个线程运行在双核机器上,每个线程主线程如下,线程1:x=1;r1=y;,线程2:y=1;r2=x;,x和y是全局变量,初始都为0。r1和r2的可能值是______。A.r1=1,r2=1B.r1=1,r2=0C.r1=0,r2=0D.r1=0,r2=1正确答案:ABD[解析]本题中,两个线程运行在双核机器上,没有设置临界区,所以,无法保证执行的正确性,而线程1与线程2在执行的过程中,先后顺序是不可控的,可能存在着以下三种情况:

1)首先执行x=1,然后执行y=1,接着执行r1=y,即r1=1,最后执行r2=x,即r2=1。所以,r1=1,r2=1。因此,选项A正确。

2)首先执行y=1,然后执行r2=x,此时x的值为初始值0,所以,r2=0,接着执行x=1,最后执行r1=y,而y的值为1,所以,r1=1。因此,选项B正确。

3)首先执行x=1,然后执行r1=y,此时y的值为初始值0,所以,r1=0,接着执行y=1,最后执行r2=x,而x的值为1,所以,r2=1。因此,选项D正确。

所以,本题的答案为ABD。

9.

以下关于减少换页的方法描述中,错误的有______。A.进程倾向于占用CPUB.访问局部性(LocalityofReference)满足进程要求C.进程倾向于占用I/OD.使用基于最短剩余时间(ShottestRemainingTime)的调度机制正确答案:AC[解析]换页错误又叫作缺页中断。在操作系统上的每个进程都有一段自己的独立虚拟内存空间,但这些虚拟内存并不是完全映射到物理内存上的。当一个程序试图访问没有映射到物理内存的地方时,就会出现缺页中断,这时操作系统要做的是将这段虚拟内存映射到物理内存上,使其真正“可用”。

减少换页错误的方法,即降低缺页中断率,通常可以在以下几个方面做工作:

1)页面大小。页面划分的越大,中断率就会越低。

2)内存页框数。增加作业可用的内存块数可以减少换页。

3)替换算法的好坏也会影响缺页中断的次数。

4)程序局部性,有良好局部性的程序也会有较少的换页次数。

本题中,强调的是减少换页错误,而非消除换页错误,所以,选项A与选项C的描述不正确,选项B的描述正确。

对于选项D,由于剩余时间短的任务执行时间短,需要换页的概率也低,所以选项D的描述正确。

所以,本题的答案为AC。

10.

以下关于Linux操作系统内存的描述中,正确的有______。A.32位机器,单个进程能使用的最大用户态地址空间理论上不大于3GBB.若一台机器的物理内存为2GB,则在该机器上同时运行的进程A和进程B所占物理内存之和有可能大于2GBC.进程A是在Linux系统运行的一个用C语言编写的程序,如果在A中用malloc函数成功申请了1GB内存,则此时该进程必定至少占用了1GB的物理内存D.32位机器,Linux操作系统内存管理以“页”为基本单位,每页的大小固定为4KB正确答案:ABD[解析]对于选项A,在32位机器上,32位意味着4GB的寻址空间(备注:计算机的地址总线是32位,可以支持的内存地址代码是2^32=4*2^10*2^10*2^10B=4GB),Linux操作系统把它分为两部分:最高的1GB(虚拟地址从0xC0000000到0xffffffff)用作内核本身,称为“系统空间”,而较低的3GB字节(从0x00000000到0xbffffff)用作各进程的“用户空间”。这样,理论上每个进程可以使用的用户空间都是3GB。当然,实际的空间大小受物理存储器大小的限制。虽然各个进程拥有其自己的3GB用户空间,系统空间却由所有的进程共享。从具体进程的角度看,每个进程都拥有4GB的虚拟空间,较低的3GB为自己的用户空间,最高的1GB为所有进程以及内核共享的系统空间。因此,选项A正确。

对于选项B,进程A和B都有自己的虚拟地址,程序在运行的一个特定的时候并不会把所有需要的数据都加载到内存中,当前不使用的数据会被置换到硬盘上,只有在使用的时候才会被置换到内存中。因此,两个进程所占的物理存储之和完全有可能大于2GB。例如当进程A和B同时运行的时候,都只有部分数据被加载到内存中,假设在某一时刻A和B进程占用内存之和为2GB,如果此时A所需的数据不在内存中,此时系统采用特定的算法把进程A与B当前可能不使用的数据置换到硬盘上。因此,选项B正确。

对于选项C,malloc申请的只是虚拟的内存空间,实际对应的数据有可能已经被加载到内存中,也有可能被置换到硬盘上了。因此,选项C错误。

对于选项D,Linux操作系统采用页作为内存管理的基本单位,其采用的标准的页面大小为4KB。为什么是4KB呢?因为4KB是大多数磁盘块大小的倍数,传输效率高,管理方便,无须考虑PAE(物理地址扩展)。因此,选项D正确。

所以,本题的答案为ABD。

三、论述题1.

轮询任务调度和可抢占式调度有什么区别?正确答案:在多任务系统中,在同一时刻通常会有多个任务处于活动状态,操作系统此时就需要对资源进行管理,在任务间实现资源(CPU、内存等)的共享。任务调度是指基于给定时间点、给定时间间隔或者给定执行次数自动执行任务。轮询任务调度与抢占式任务调度的区别在于抢占式调度中优先级高的任务可以抢占CPU,而轮询的不能。

具体而言,轮询调度的原理是每一次把来自用户的请求轮流分配给内部服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。只有在当前任务主动放弃CPU控制权的情况下(比如任务挂起),才允许其他任务(包括高优先级的任务)控制CPU。其优点是简洁性,它无须记录当前所有连接的状态,所以,它是一种无状态调度,但缺点是不利于后面的请求及时得到响应。抢占式调度允许高优先级的任务打断当前执行的任务,抢占CPU的控制权。这有利于后面的高优先级的任务也能及时得到响应。但实现相对较复杂,并且可能出现低优先级的任务长期得不到调度。

2.

在MMO游戏中,服务器采用Linux操作系统,网络通信与游戏逻辑处理进程一般是分离的。例如,GameSvr进程处理游戏逻辑,TCPSvr进程处理网络通信。Linux操作系统提供了很多机制可以实现GameSvr和TCPSvr进程之间的数据通信。请列出两种你认为最好的机制,并为主(最好)次(次佳)描述它们实现的框架、优缺点对比和应用中的注意事项。正确答案:系统进程之间通信的主要方法有信号、信号量、管道、消息和共享内存。信号量和信号主要用于触发,而不是用于传递数据。所以,数据通信的主要方法是管道、消息和共享内存,以下将分别对这些方式进行具体分析。

(1)管道

管道是由内核管理的一个环形缓冲区,类似于放入内存中的一个纸条,它允许两个进程以生产者/消费者的模型进行通信。如图所示,当两个进程利用管道文件进行通信时,一个进程为写进程,另一个进程为读进程,写进程通过写端(发送端)往管道文件中写入信息,读进程通过读端(接收端)从管道文件中读取信息,两个进程协调不断地进行写、读,便会构成双方通过管道传递信息的流水线。当管道中没有信息时,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息时,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。

管道通信

管道的优点是不需要加锁,缺点是默认缓冲区太小,只有4K大小,而且它只适合父子进程间通信。由于一个管道只适合单向通信,如果要双向通信,就需要建立两个管道,所以,它不适合多个子进程。除此以外,数据本身没有边界,需要应用程序自己解释,而一般消息大多是一个固定长的消息头,和一个变长的消息体,一个子进程从管道read到消息头后,消息体可能被其他子进程接收到。

(2)消息

消息是有类型的一段文本。为参与消息传递的进程提供msgsnd(用来向消息队列发送消息)和msgrcv(用来从消息队列中读取消息)系统调用。每个进程都有一个与之相关联的消息队列,其功能类似于信箱。消息发送者指定发送的每个消息的类型,类型可以被接收者用作选择的依据。接收者可以按先进先出的顺序接收信息,或者按类型接收。当进程试图给一个满队列发送信息时,它将被阻塞;当进程试图从一个空队列读取时也会被阻塞;如果一个进程试图读取某一特定类型的消息,但由于现在还没有这种类型的消息而失败时,则该进程不会阻塞。

消息队列能适合大部分场景,缺点是默认缓冲比较小,不过这个缓冲区可以调整,前提是具有管理员权限。

(3)共享内存

共享内存是分配一块能被其他进程访问的内存,实现是通过将内存映射到共享它的进程的地址空间,使这些进程间的数据传送不再涉及内核,即进程问通信不需要通过进入内核的系统调用来实现。进程读写共享内存所使用的机器指令与读写虚拟内存空间的其他部分所使用的指令相同。每个进程有一个只读或读写的权限。互斥约束不属于共享内存机制的一部分,但必须由使用共享内存的进程提供。共享内存几乎可以认为没有上限;它也是不局限于父子进程,采用与消息队列类似的定位方式;因为内存是共享的,不存在任何单向的限制;最大的问题就是需要应用程序自己实现互斥。

相比其他的进程间通信方式,共享内存的最大优点是:数据的赋值只有两次,一次是从输入文件到共享内存区,一次是从共享内存区到输出文件,而其他的则需要复制4次:服务器将输入文件读入自己的进程空间,再从自己的进程空间写入管道/消息队列等;客户进程从管道/消息队列中读出数据到自己的进程空间,最后输出到客户指定的文件中。因此,相比管道和消息队列,共享内存是最快的进程问的通信方式,因为它不涉及与内存的交互,所以,其效率更高。

3.

线程与进程的区别和联系分别是什么?线程是否具有相同的堆栈?DLL是否具有独立的堆栈?正确答案:进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统创建了一个主线程,每个线程有自己的堆栈。DLL(DynamicLinkLibrary,动态链接库)中是否具有独立的堆栈,这个问题不好回答,或者说这个问题本身就有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是由EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈呢?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈呢?以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以,如果是从DLL中动态分配的内存,最好是从DLL中删除;如果是从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃。

4.

程序什么时候应该使用线程?正确答案:程序在以下几种情况下使用线程:

1)耗时的操作使用线程,提高应用程序响应效率。

2)并行操作时使用线程,例如基于C/S架构的服务器端并发线程响应用户的请求。

3)在多CPU系统中,使用线程提高CPU利用率。

4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

5.

请回答以下关于进程、线程以及程序的有关问题。

1)进程和线程的区别是什么?

2)多线程程序有什么优点与缺点?

3)多进程程序有什么优点与缺点?与多线程相比,有什么区别?正确答案:1)进程和线程的关系如下:

①一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

②资源分配给进程,同一进程的所有线程共享该进程的资源。

③处理机分给线程,即真正在处理机上运行的是线程。

④线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程指的是进程内的一个执行单元,也是进程内的可调度实体。

进程和线程的相同点如下:

①二者都具有ID、一组寄存器、状态、优先级以及所要遵循的调度策略。

②每个进程都有一个进程控制块,线程也拥有一个线程控制块。

③线程和子进程共享父进程中的资源;线程和子进程独立于它们的父进程,竞争使用处理器资源;线程和子进程的创建者可以在线程和子进程上实行某些控制,例如创建者可以取消、挂起、继续和修改线程和子进程的优先级;线程和子进程可以改变其属性并创建新的资源。

进程和线程的不同点如下:

①线程是进程的一部分,一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个线程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。

②启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。

③系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),同一个进程内的线程可以共享进程的资源。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。而一个线程的数据可以直接为其他线程所用,这不仅快捷,而且方便。

④与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。

⑤进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。

2)多线程的优点如下:

无须跨进程边界;程序逻辑和控制方式简单;所有线程可以直接共享内存和变量等;线程方式消耗的总资源比进程方式少。

多线程的缺点如下:

温馨提示

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

评论

0/150

提交评论