操作系统复试问答题整理

简单介绍进程和线程以及它们的区别

1、进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位。

2、线程是进程的实体,是CPU调度和分派的基本单位它是比进程更小的能独立运行的基本单位。

3、一个进程可以有多个线程,多个线程也可以并发执行

解析:

定义

进程是具有一定功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源调度和分配的一个独立单位。(关键词:资源调度分配的独立单位)

线程是进程的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。(关键词:CPU调度分派的基本单位)

一个进程可以有多个线程(至少一个),多个线程也可以并发执行。

进程作为资源(如内存)分配的基本单位,作为其下属的线程都是可以享用其被分配到的资源的,而且线程可以共享同一块被分配的资源。而进程之间是一般不能分享彼此的资源的,进程想要互相通信,必须通过进程间通信(Inter-process communication,IPC)的机制来完成,主要包括以下几种:  

(1)管道(pipe,半双工),流管道(s_pipe,全双工),有名管道(FIFO,全双工)
(2)信号量(sophomore/mutex)
(3)信号(signal)
(4)消息队列
(5)共享内容
(6)套接字(socket)


线程可以再分为两类:
    一类是用户级线程(user level thread)。对于这类线程,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。在应用程序启动后,操作系统分配给该程序一个进程号,以及其对应的内存空间等资源。应用程序通常先在一个线程中运行,该线程被成为主线“程。在其运行的某个时刻,可以通过调用线程库中的函数创建一个在相同进程中运行的新线程。 用户级线程的好处是非常高效,不需要进入内核空间,但并发效率不高。
    另一类是内核级线程(kernel level thread)。对于这类线程,有关线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只能调用内核线程的接口。内核维护进程及其内部的每个线程,调度也由内核基于线程架构完成。内核级线程的好处是,内核可以将不同线程更好地分配到不同的CPU,以实现真正的并行计算。
事实上,在现代操作系统中,往往使用组合方式实现多线程,即线程创建完全在用户空间中完成,并且一个应用程序中的多个用户级线程被映射到一些内核级线程上,相当于是一种折中方案。
进程和线程的区别包括:
1. 一个程序至少有一个进程,一个进程至少有一个线程
2. 线程的划分尺度小于进程,使得多线程程序的并发性高
3. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
4. 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
5. 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配 

 

 

 

进程有哪几种状态?

1、就绪状态:进程已获得除处理机以外的所需资源,等待分配处理机资源

2、运行状态:占用处理机资源运行,处于此状态的进程数小于等于CPU数

3、阻塞状态: 进程等待某种条件,在条件满足之前无法执行

 

 

进程的通信方式有哪些?

主要分为:管道、系统IPC(包括消息队列、信号量、共享存储)、SOCKET

 

管道主要分为:普通管道PIPE 、流管道(s_pipe)、命名管道(name_pipe)

 

1、管道是一种半双工的通信方式,数据只能单项流动,并且只能在具有亲缘关系的进程间流动,进程的亲缘关系通常是父子进程

2、命名管道也是半双工的通信方式,它允许无亲缘关系的进程间进行通信

3、信号量是一个计数器,用来控制多个进程对资源的访问,它通常作为一种锁机制。

4、消息队列是消息的链表,存放在内核中并由消息队列标识符标识。

5、信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

6、共享内存就是映射一段能被其它进程访问的内存,这段共享内存由一个进程创建,但是多个进程可以访问。

 

 

 

 

 

 

 

 

 

线程同步的方式有哪些?

1、互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。

2、信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。

3、事件(信号):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

 

这里再引入一个临界资源与临界区的概念:
临界资源是指一次仅允许一个线程使用的资源,许多物理设备,如打印机都有这种性质。除了物理设备外,还有一些软件资源,若被多线程所共享也具有这一特点,如变量、数据、表格、队列等。它们虽可以为若干线程所共享,但一次只能为一个线程所利用。
临界区指的是一个访问共用资源(被多个线程共享的临界资源)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待(例如:bounded waiting 等待法),有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用,例如:semaphore。只能被单一线程访问的设备,例如:打印机。

 

 

 

 

同步有以下这样些个方式/机制:
(1)互斥量(mutex):互斥量是一种公共资源,在指定时刻,它只能被一个线程占有(也就是所有权特性),而且占有它的线程可以反复申请这个互斥量。只有拥有互斥量的线程才有访问公共资源的权限。因为互斥量只有一个,所以可以保证公共资源不会被多个线程同时访问。(比如Java中的synchronized代码块,需要你提供一个类的对象或Class类作为锁,这个锁就可以理解为互斥量)
(2)信号量(semaphore):每个信号量都是公共资源,其值是一个32位计数。信号量的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。
实现的P,V操作算法描述:
P操作:while s>0
s=s-1,
V操作:s=s+1。
P表示申请一个资源,如果条件满足(即右可以分配的资源),则把资源分配给提出申请的进程,并且时资源数目s减1。V表示资源使用哪完毕之后,要把占有的资源释放,并且资源数目s加1 。
(3)事件(信号 signal):通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。(比如Java中的notify()唤醒wait()状态的阻塞线程)

 

 

 

操作系统中进程调度策略有哪几种?

FCFS(先来先服务),优先级,时间片轮转,多级反馈

 

先来先服务调度算法

先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。

2.短作业(进程)优先调度算法

短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。

 

时间片轮转法

1) 基本原理

在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几ms 到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。

 

 

 

 

说一说死锁的处理基本策略和常用方法。

解决死锁的方法有:

预防死锁、避免死锁、检测死锁、解除死锁

解决死锁的策略有:

鸵鸟策略、预防策略、避免策略、检测与解除死锁

 死锁:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再 向前推进。

产生死锁的原因:(1)竞争系统资源 (2)进程的推进顺序不当

 

安全状态与不安全状态:安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直 至最大需求,使每个进程都可顺利完成。若系统不存在这样一个序列, 则称系统处于不安全状态。

产生死锁的必要条件

互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。

请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。

不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。

环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。

 

预防死锁:

资源一次性分配:(破坏请求和保持条件)

可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)

资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

 

避免死锁:

预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。

 

检测死锁

首先为每个进程和每个资源指定一个唯一的号码;

 

解除死锁:

当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:

剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;

撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

 

 

什么是死锁:

在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。

死锁产生的四个必要条件:

(有一个条件不成立,则不会产生死锁)

1、互斥条件:一个资源一次只能被一个进程使用

2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放

3、不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺

4、循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系

 

 

 

 

分页和分段有什么区别?

1、段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的 ;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。

2、段的大小不固定,有它所完成的功能决定;页大大小固定,由系统决定

3、段向用户提供二维地址空间;页向用户提供的是一维地址空间

4、段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制。

 

 

 

 

什么是缓冲区溢出?有什么危害?

缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。

危害有以下两点:

(1)程序崩溃,导致拒绝额服务

(2)跳转并且执行一段恶意代码

造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。

 

 

1.数据 数据是描述客观事物的符号,是能够被计算机输入,识别,处理的各种符号,是计算机化的信息。

2.数据项   数据不可分割的最小单位,一个元素由若干个数据项构成。

3.数据元素 它是组成数据的基本单位,是数据集合中的个体,在计算机程序中,通常作为一个整体进行考虑和处理。

4.数据对象 是性质相同的数据元素的集合,是数据的一个子集。

5.数据处理 是指对数据进行查找,插入,删除,合并,排序,统计以及简单计算等的操作过程。

6.数据结构 是研究数据元素之间抽象化的相互关系和这种关系在计算机中的存储表示(即数据的逻辑结构和物理结构),并对这种结构定义相适应的运算,设计出相应的算法,且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 7.数据类型 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 8.抽象数据类型 是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。 9.算法 解决一个问题的方法和步骤

10.时间复杂度  T(N)=O(F(N)),它表示随问题规模N增大,算法执行时间增长率与F(N)的增长率相同,F(N)算法的时间复杂性。

11.原地工作 算法执行时,若额外空间相对于输入数据量来说是常数,则称此算法为原地工作。

12.线性表 一种数据结构,是N(N>=0)个同质元素的有限序列,除首尾元素外,每个元素有唯一的前驱和唯一的后继。

13.队列 是一种受限线性表,是先进先出的线性表

14.循环队列 在队列的顺序存储结构中,把存储空间的首尾逻辑上相连,构成一个环,使得存储空间上只要有空余的地址,就可以继续进行入队列操作,极大利用了物理空间。用头部和尾部两个指示器表示队列头和队列尾,插入在尾部进行,删除在头部进行。

15.单链表 每一个数据元素,都需用两部分来存储:一部分用于存放数据元素值,称为数据域;另一部分用于存放直接后继结点的地址(指针),称为指针域,元素的存储空间可以连续,也可以是不连续的。而数据元素之间的逻辑关系由指针域来确定

 

16.双向链表 线性表采用链式存储时,每个结点除一个数据域外,包含两个指针域,一个指向该结点的直接后继,一个指向该结点的直接前驱,这种方式构成的链表,即为双向链表。

17.希尔排序 是插入排序的一种,又叫缩小增量排序,先按增量进行分组,组内插入排序,然后每次缩短增量,再进行分组和组内插入排序, 直到增量为1时,进行最后一次排序止。

18.完全图 任何一个有N个结点的无向图,若其边数为N(N-1)/2,则这个无向图就是完全图

19.有向完全图 任何一个有N个结点的有向图,若其弧个数为N(N-1)个,则这个有向图就是有向完全图。

20.广度遍历 按层次编历方式,从某一点V0开始遍历它的所有邻接点V1,V2……,再依次访问V1,V2..的所有未被访问过的邻接点,直到所有的点均遍历完成

21.关键字 数据元素的某个数据项的值,用它可以标识列表的一个或一组元素。 22.串   串是字符线性的有限集合。

23.子串 串中任意个连续的字符组成的子序列称作该串的子串。

24.栈 是一种受限线性表,是插入和删除操作在同一端进行的,是后进先出的线性表。

25.树 树是n(n>=0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个特殊的称为根的结点;(2)当n>1时,其余结点可分成m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每一个集合本身又是一棵树,并且称为根的子树。

26.二叉树 二叉树是每个结点至多有两个孩子结点的一种树。其中两个孩子结点分别被称为左孩子结点和右孩子结点。

27.子孙 子孙结点以某结点为根的子树中的任一结点都称为该结点的子孙。 28.孩子结点与双亲结点 树中某个结点的子树的根结点称为该结点的孩子结点。相反,称该结点为孩子结点的双亲结点

29.结点的度 树的某个结点的分支(子树)个数叫做该结点的度。

30.树的度 树的度是树中所有结点的最大度数。

31.平衡因子 结点的左子树深度与右子树深度之差

 

 

 

32.生成树 一个连通图的生成树是指一个极小连通子图,它含有图中的全部顶点,N-1条边。

33.满二叉树 深度为K,且有2K -1个结点的二叉树

34.物理结构(存储结构)  物理结构又称为数据的存储结构,是指数据的逻辑结构在计算机中的映像(表示),即数据结构在计算机中的存储方法。

35.线索 在二叉树中,利用空余的指针指向二叉树某种遍历方式的结点的前驱和后继,这种指向前驱和后继的指针,叫线索。

36.线索二叉树 对二叉树以某种次序进行遍历并加上线索的过程叫做线索化。线索化了的二叉树称为线索二叉树

37.广义表 广义表简称表,是零个或多个原子表所组成的有限序列。

38.强连通分量 有向图的极大强连通子图,称为有向图的强连通分量。

39.结点的带权路径长度 该结点到树根之间的路径长度与结点上权的乘积。 40.插入排序 在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序地插入到已排好序记录的子集上,直到将所有待排记录全部插入为止。 41.祖先 一个结点的祖先是指从根结点到该结点的路径上的所有结点。

42.数据结构 数据结构是数据元素的集合以及定义在该集合上的关系。

43.模式匹配  子串的定位操作称作串的模式匹配。

44.单循环链表 是单链表的另一种形式,它是一个首尾相接的链表,表中最后一个结点的指针域由null改为指向头结点或线性表的第一个结点,整个链表形成了一个环.

45.线索 在二叉树的存储结构中,必有N+1个空域,利用这些空域存放某种遍历的前驱和后继,其中指向前驱和后继的指针叫线索.

46.图 图是顶点与边的集合。一般表示为一个二元组,即,图G=(V,E),各个顶点之间是多对多的关系。

47.折半查找 对于顺序存储的有序表,先取中间位置的记录关键字与所给的关键字进行比较,若相等,则查找成功,否则,若给定的关键字比中间的关键字大,在原表的后半部分比较,反之,在原表的前半部分比较,如此反复,逐步缩小范围,直到找到为止,或找不到,最后查找范围为空.

48.最小生成树 在图G的所有生成树中,树权值最小的那棵生成树,称作最小生成树.

49.广度优先搜索(BFS)  首先访问出发点v,接着依次访问v的所有邻接点w1,w2,…,wt,然后再依次访问与wl,w2,…,wt邻接的所有未曾访问过的顶点。依此类推,直至图中所有和源点v有路径相通的顶点都已访问到为止。此时从v开始的搜索过程结束。 (若G是连通图,则遍历完成;否则,在图C中另选一个尚未访问的顶点作为新源点继续上述的搜索过程,直至G中所有顶点均已被访问为止。) 

50.完全二叉树 对满二叉树的结点从上到下,从左到右进行依次进行编号,若有一棵二叉树的每一个结点都与深度为K的满二叉树中编号都一一对应时,只是最后一层不满,称做完全二叉树. 

51.前缀编码 任何一个字符的编码都不是另一个字符编码的前缀,这种编码叫做前缀编码. 

52.广义表 是零个或多个原子表所构成的有序序列. 

53.线索二叉树 利用二叉树的一些空闲指针指向该结点的前驱或后继,这种指针叫线索,线索后了的二叉树,称为线索二叉树. 

54.树的高度 树中所有结点的层次的最大值. 

55.堂兄弟 同一层上不同双亲的结点,互称堂兄弟. 

56.叶子结点 度为 0 的结点,即没有后继的结点. 

57.森林  M棵互相不相交的树构成的集合,将一棵非空树的根结点删除,树就变成了森林. 

58.树的路径长度 树中每个结点到根结点的路径长度之和. 

59.树的带权路径长度(WPL)  树中所有叶子结点的带权路径长度之和. 

60.哈夫曼树 设有N个权值的结点构造一棵有N个叶子结点的二叉树,其中WPL最小的那棵树,为哈夫曼树. 

61.哈夫曼编码 一般以N种字符出现的频率做权值,构造哈付曼树,左孩子边做0,右孩子边做1,那么从根到叶子结点经过的0和1序列,构成了哈夫曼编码. 

62.图中顶点的度  顶点V的度是图中和顶点V相关联的边的数目。包括入度和出度两种。

63.子图 图G=(V,E)与图G1=(V1,E1),若V1包含于V,且E1包含于E,则G1是G的子图。

64.连通图 对于无向图,若V1到V2有路径,称V1V2是连通的,若图中任意两点都是连通的,则称该无向图是连通图。

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值