每日一题(67) - 操作系统面试题

1、进程和线程的区别

进程的定义:进程是一段程序作用于某个数据集上的一次运行。

引入进程的目的:为了使多个程序能够并发执行,以提高资源利用率和系统吞吐量。

线程的定义:线程是一段程序片段作用于某个数据集上的一次运行。

引入线程的目的:减少进程在并发时付出的时空开销,进一步提高OS的并发性,从而提高资源利用率和系统吞吐量

注意:

(1)在没有引入线程的操作系统中,进程是资源分配、独立调度和分配的基本单位。

(2)在引入线程的操作系统中,进程是资源分配的基本单位,线程是调度和分派的基本单位。

进程和线程的区别:

(1)从属关系:

一个线程只属于一个进程,但是进程可以拥有多个线程,且至少拥有一个线程

(2)从资源上看:

<1> 无论是传统的还是现在的OS系统中,进程拥有资源,都是资源分配的基本单位。

<2> 线程不拥有系统资源,而仅仅包含一点能够支撑自己运行的资源,使得线程能够轻装上阵,从而显著提高系统的并发性。

注意,线程虽不包含系统资源,但是它可以访问它所隶属进程的资源。

(3)并发性:

<1> 在传统的OS中,仅仅是进程之间可以并发。

<2> 在引入线程后,不仅进程之间可以并发,属于一个进程的多个线程也可以并发,使得OS有较好的并发性,从而提高资源利用率和系统吞吐量。

(4)系统开销:进程在创建、销毁、切换、通信、同步代价都比较大。

<1> 在创建和撤销进程时,OS需要创建和回收进程控制块,分配和回收资源,OS付出的代价比较大。线程仅仅需要创建和回收线程控制块。

<2> 在进程进行切换时,OS需要保存当前环境以及新被调度进程的环境,而线程仅仅需要保存和设置少量寄存器即可。除此之外属于同一个进程的线程相互切换时不会引起线程的切换,但是属于不同进程的线程相互切换时,会引起进程切换。

<3> 在线程进行通信和同步时,属于同一个进程的多个线程具有相同的地址,所以通信和同步代价会容易点。

2、资源调度算法:

(1)实质是资源分配(分配CPU)的方式。

(2)分类

<1> 先来先服务算法

思想:总是选择一个最先进入队列的进程,为之分配处理器,一直到进程执行结束或者阻塞而放弃处理机。

特点:属于非抢占式调度。

缺点:

<1> 仅考虑进程的等待时间,有利于长进程,不利于短进程。

<2> 实时性不好,未考虑进程的紧迫程度。

影响:会导致短进程(执行时间短)等待时间太长,使得短进程的周转时间太长(执行时间 - 到达时间)。

评价:先来先服务算法有利于CPU繁忙型(执行时间长)的进程,而不利于IO繁忙型(执行时间短)的进程。

<2> 短作业优先算法

思想:总是先执行运行时间短的进程。

特点:可以是抢占式调度,也可以是非抢占式调度。

缺点:

<1> 进考虑进程的运行时间,对长进程不利,会出现长进程饿死现象。

<2> 实时性不好,未考虑进程的紧迫程度。

<3> 进程的运行时间是估计值,不能准确衡量短进程。

优点:能有效地降低所有进程的平均等待时间,提高系统的吞吐量。

(体现在数据上,其实就是降低短进程的等待时间,使得进程的平均周转时间和平均等待时间都降低)。

<3> 高优先权优先调度算法

思想:总是先执行优先级高的进程。

特点:可以是抢占式调度,也可以是非抢占式调度。

分类:根据获得优先权时间可以分为两类:

(1)静态优先权

特点:创建进程时分配。

优点:简单易行,系统开销小。

缺点:不够精确,而且很可能出现优先权低的进程得不到调度的情况(饿死)

(2)动态优先权

特点:进程的优先权能够随着进程的推进和等待时间而改变。

典型代表:高响应比优先调度算法。

进程优先级 = 1 + (等待时间 / 要求服务时间)。

优点:折中了短作业优先 + 先来先服务。即照顾短进程,又考虑进程到达的先后顺序,不会使得作业长期得不到服务。

<4> 基于时间片的轮转算法

思想:先来先服务 + 时间片轮转。

特点:抢占式调度(执行不完,也得闪人)。

<5> 多级反馈队列调度算法

思想:

(1)在多个队列间,属于高优先级优先调度。

(2)在队列内,属于先来先服务 + 时间片轮转。

特点:抢占式调度

优点:不必知道各个进程需要的执行时间,而且还可以满足各种类型的进程的需要。

硬件设置:

<1> 设置多个就绪队列,

<2> 在不同的队列间设置不同的优先级,且优先级下降(越下面的队列优先级越小)。

<3> 在不同的队列内设置不同的时间片,且时间片上升(越下面的队列中时间片越长)

工作方式:

<1> 新进程进入第一队列末尾,按先来先服务排队等待调度。

<2> 能在一个时间片内执行完,则可以直接离开os,不能在时间片执行完,在放入第二队列。...。

<3> 若到最后一个队列仍没有执行完,则放到本队列的队尾,继续循环执行。

注意:

<1> 当前i-1个队列为空时,才能调度第i个队列的进程。

<2> 若第i个队列中的进程A正在执行,但是有进程B进入第1个队列,此时进程A被强占了CPU,之后应该放到所在队列的队尾,等待执行。注意,不是放入下一队列。

3、进程通信

(1)定义:进程之间需要交换数据

(2)分类:

<1> 低级通信:

特点:效率低(传输数据少),通信过程对用户不透明(需要程序员操作太多)。

包括:信号量机制、共享存储结构

注意:为什么共享数据结构是低级通信而共享存储器系统是高级通信?

答:共享存储结构仅仅是共享数据结构,但数据结构的设置,数据的传输,进程的互斥和同步OS都不管,需要程序员自己处理)。但是共享存储器系统用户仅仅输入一些命令就好,其他的都有OS来处理。所以传输数据多,且用户处理很容易。

<2> 高级通信:

特点:用户利用OS提供的一些命令,就可以传送大量数据,且对用户来说,隐藏通信细节,通信过程对用户是透明的。

包括共享存储器系统、消息机制系统、管道通信系统

1)共享存储器系统:OS划出一块共享存储区,进程可以对其进行正常的读写来实现通信。

2)消息机制:OS提供一些通信命令,让程序传输大量数据。

3)管道通信:OS提供一个文件供其通信。

在高级通信中,共享存储器系统(共享存储区)速度最快。

4、内存分配算法

(1)分类:

<1> 为用户程序分配连续的内存空间   -> 连续分配方式

<2> 为用户程序分配不连续的内存空间 -> 页式存储管理方式 + 段式存储管理方式 + 段页式存储管理方式

具体解释。。。。

(1)连续分配方式

目的:把连续的内存空间给用户程序。

分类:先是实现固定大小(单一连续分配和固定分区分配)-后是按需分配(动态分区分配)

目的:提高内存利用率。

<1> 单一连续分配

思想:

1)把内存分成系统区和用户区

2)系统区仅供OS使用

3)用户区是除了系统区以外的全部内存空间,供用户程序使用。

特点:

1)适用于单用户和单任务的OS

2)无外碎片,但是有内碎片

优点:易管理,简单。

缺点:存在内存浪费。

<2> 固定分区分配

思想:

1)把内存分成系统区和用户区,

2)用户区还分成若干个大小固定的区域,但是注意,每一个用户区大小可以不同,也可以相同。

3)系统区仅供OS使用

4)用户区仅供用户程序使用,属于用户区的每一个区域都只装入一个作业

内存分配(每个用户分区大小不同的情况):

1)将分区按大小进行排序,并建立分区使用表(存放分区是否的状态,是否用过,大小等)

2)在程序装入时,检索内存分配表找出能够满足要求且未分配的分区,分给改程序。

特点:

1)最简单的多道程序的存储管理方式

2)无外碎片,但是有内碎片

优点:易管理,简单。

缺点:存在内存浪费。

<3> 动态分区分配

思想:事先不处理用户区内存,根据用户程序的需要,分配空闲的内存。

特点:存在外碎片,但是不存在内碎片。

需要的数据结构:在空闲分区表中记录着每个空闲分区的情况。

内存分配算法:

1)首次适应算法

要求:空闲分区按照地址递增排序

分配:依次遍历空闲区,有则占用,无则失败。

优点:优先利用内存中低地址的空闲分区,而保留高地址分区,无内碎片。

缺点:低地址留下许多外碎片。

2)循环首次适应算法

思想:

3)最佳适应算法

思想:

4)最坏适应算法

思想:

5)快速适应算法

思想:

注意:

1)

2)

<4> 伙伴系统

<5> 哈希算法

说明:

(2)





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值