进程与线程

一、同步与互斥

【2016统考】进程P1和P2均包含并发执行的线程,部分伪代码描述如下。


下列选项中,需要互斥执行的操作是()

A、a = 1 与 a = 2        B、a = x 与 b = x         C、x+=1 与 x+=2        D、x += 1 与 x += 3

解析:

D、P1和P2中的x属于不同范围的x,互不影响;

C、同一进程内的x会相互影响,所以x+=1、x+=2的不互斥执行会导致x有不同的值;

B、a = x,b = x即使不互斥也不会影响最后的结果,一个改变a,一个改变b

A、a = 1,a = 2,赋值不影响结果

【2009统考】三个进程P1,P2,P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲去某一个空单元;P2每次用getodd()从该缓冲区取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区取出一个偶数并用counteven()统计偶数个数。

用信号量机制实现这三个进程的同步者互斥活动,并说明所定义的信号量的含义

多消费者模型,消费者和生产者对临界区的访问是互斥的,但取奇数、取偶数与P1是同步的,P1生产了P2、P3才能取。

同步:奇数、偶数的同步信号量odd、even

互斥:缓冲区空位的个数N,互斥信号量mutex

semaphore mutex = 1;
semaphore odd = 0,even = 0;
semaphore empty = N;
cobegin{
P1()while(true){x = produce();
P(empty);
P(mutex);
Put();
V(mutex);
if(x%2)V(even);
elseV(odd);}
P2()while(true){
P(odd);
P(mutex);getodd();
V(mutex);
V(empty);countodd();}
P3()while(true){
P(even);
P(mutex);geteven();
V(mutex);
V(empty);    counteven();}
}

【2011统考】某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:

cobegin{
process 顾客i
{从取号机获取一个号码;等待叫号;获取服务;
}
process 营业员
{while(TRUE){叫号;为客户服务;}
}
coend

请添加必要的信号量和P,V[或wait(),signal()]操作,实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。

解析:

同步:空闲座位数N = 10,人数初值full = 0(空闲的座位数控制人能不能进,人数多少控制了窗口要不要开始)

互斥:取号机的使用mutex,营业员的服务service

semaphore N = 10;
semaphore mutex = 1;
semaphore full = 0;
semaphore service = 0;
cobegin{
process 顾客i
{   P(N);    P(mutex);从取号机获取一个号码;V(mutex);V(full);P(service);获取服务;
}
process 营业员
{while(TRUE){P(full);//没有顾客则休息V(N);//离开座位V(service);//叫号为顾客服务;}
}
coend

【2013统考】某博物馆最多可容纳500人同时参观,有一个出入口,该出入口一次仅允许一人通过。参观者的活动描述如下:

cobegin{
参观者进程i{
……
进门。
……
参观:
……
出门:
……
}
}coend

互斥:出入口的使用mutex = 1

同步:馆内的空位empty = 500

cobegin{

semaphore mutex = 1;

semaphore full = 0;

semaphore empty = 500;

参观者进程i{

P(empty);

P(mutex);

进门;

V(mutex);

参观;

P(mutex);

出门;

V(mutex);

V(empty);

……

}coend


【2014统考】系统中有多个生产者进程和多个消费者进程,共享一个能存放1000件产品的环形缓冲区。缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;缓冲区未空时,消费者进程可从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出10件产品后,其他消费者进程才可以取产品。请使用信号量P,V操作实现进程间的互斥与同步。

互斥:缓冲区的访问需要互斥锁mutex=1

同步:产品的数量full = 0,还能放多少产品empty = 1000

cobegin{

semaphore mutex1 = 1,mutex2 = 1;

//mutex1用来控制消费者能连续取10个,不会被别的消费者进程破坏

semaphore full = 0;

semaphore empty = 1000;

Producer i{

        P(empty);

        P(mutex2);

放入缓冲区;

        V(mutex2);

        V(full);

}

Consumer i{

int x = 10;

        P(mutex1);

while(x--){

        P(full);

        P(mutex2);

从缓冲区中取出一件产品;

        V(mutex2);

        V(empty);

        }

        V(mutex1);

}

}coend


【2015统考】有A,B两人通过信箱进行辩论,每个人都从自己的信箱中取得对方的问题。将答案和向对方提出的新问题组成一个邮件放入对方的邮箱中。假设A的信箱最多放M个邮件,B的信箱最多放N个邮件。初始时A的信箱中有x个邮件(0<x<M),B的信箱中有y个邮件(0<y<N)。辩论者每取出一个邮件,邮件数减1.A和B两人的操作过程如下:

当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。

信箱A的邮件数fullA = x ,信箱B的邮件数fullB = y;信箱A还能存的邮件数emptyA = M,信箱BemptyB = N;对信箱A的访问互斥mutex1 = 1,对信箱B的访问互斥mutex2 = 1.

semaphore fullA = x, fullB = y;

semaphore emptyA = M, emptyB = N;

semaphore mutex1 = 1 , mutex2 = 1;

cobegin{

A{

        P(fullA);

        P(mutex1);

回答问题;

        V(mutex1);

       V(emptyA);

        P(emptyB);

        P(mutex2);

放入邮件;

        V(mutex2);

        V(fullB);

}

B{

        P(fullB);

        P(mutex2);

回答问题;

        V(mutex2);

       V(emptyB);

        P(emptyA);

        P(mutex1);

放入邮件;

        V(mutex1);

        V(fullA);

}

}coend


【2017统考】某进程中有3个并发执行的线程thread1,thread2和thread3,其伪代码如下

解析:

互斥:y,z的互斥使用, mutex_y1 = 1, mutex_y2 = 1 , mutex_z = 1.

semaphore mutex_y1 = 1, mutex_y2 = 1 , mutex_z = 1;//y1用于thread1和thread3互斥,y2用于thread2和thread3互斥,thread1和thread2之间不存在互斥,若用一个互斥量则效率变慢

thread1{

        cnum w;

P(mutex_y1);

        w = add(x,y);

V(mutex_y1);  

}

thread2{

cnum w;

P(mutex_y2);

P(mutex_z);

        w = add(y,z);

V(mutex_z);

V(mutex_y2);  

}

thread3{

cnum w;

w.a = 1;

w.b = 1;

P(mutex_z);

        z = add(z,w);

V(mutex_z);

P(mutex_y1);

P(mutex_y2);

        y = add(y,w);

V(mutex_y1)

V(mutex_y2);

}

【2021统考】下表给出了整型信号量S的wait()和signal()操作的功能描述,以及采用开/关中断指令实现信号量操作互斥的两种方法。

1)s是多个进程共享的变量,多个进程都可以通过wait,signal进行读写操作。

2)方法1 不正确,方法2正确,若进入wait之后s如果小于等于0,则无法跳出循环,陷入死锁。

3)不能,开关中断指令属于特权指令,只能在内核区执行。

semaphore A = B = C = D = E = F = 0;

//线程之间的并发进行,不是要线程内的操作进行互斥同步

T1{

A;

signal(A);

wait(C);

E;

F;

}

T2{

B;

wait(A);

C;

signal(C);

D;

}


二、死锁

 1、安全性算法

解析:

A、Avail = Avail +  P1.Alloc = (2,2,1)  Avail < P2.Need 不合法

B、Avail = Avail + P1.Alloc = (2,2,1) Avail < P3.Need 不合法

……最后得到结论,安全序列不存在

tips:

计算安全序列:

1、先求need矩阵(尚需要分配)

2、将可用资源与need做比较,得到第一个need < avail (需要的 < 可用的)的进程 ,若不存在则不安全

3、将已分配的资源加到可用矩阵之中

4、重复步骤2

【2020统考】​​​​​​​某系统中有A、B两类资源各6个,t时刻的资源分配及需求情况如下表所示。

进程A已分配数量B已分配数量A需求总量B需求总量
P12344
P2

2

131
P31234

t时刻安全性检测结果(B)

A、存在安全性序列P1、P2、P3        B、存在安全性序列P2、P1、P3

C、存在安全性序列P2、P3、P1        D、不存在安全序列

解析:

Max - Allocation = \begin{bmatrix}4 & 4 \\ 3 & 1 \\3 & 4\end{bmatrix} - \begin{bmatrix}2 & 3 \\ 2 & 1 \\ 1 & 2 \end{bmatrix} = \begin{bmatrix} 2& 1\\1 & 0\\ 2& 2\end{bmatrix}

Available = [1,0],比较可用矩阵和需求矩阵,最接近的是P2,所以先选择P2 ,此时Available = [3,1],选择P1,最后选择P3

2、死锁条件

【2014统考】某系统有n台互斥使用的同类设备,三个并发进程分别需要3、4、5台设备,可确保系统不发生死锁的设备数n最小为(B)

A、9 B、10 C、11 D、12

解析:

四个死锁条件缺一不可(循环等待,互斥使用,不剥夺,请求并保持)

现在缺少一个循环等待的条件:需要三者都同时等待对方释放设备。所以,只要满足一个进程的条件就不会发生死锁。所以,3 + 3 + 4 = 10台就不会发生死锁。

tips:想不发生死锁,只需破坏死锁条件

【2015统考】若系统S1采用死锁避免方法,S2采用死锁检测方法。下列叙述中,正确的是(B)

        1、S1会限制用户申请资源的顺序,而S2不会

        2、S1需要进程运行所需的资源总量信息,而S2不需要

        3、S1不会给可能导致死锁的进程分配资源,而S2会

A、仅1、2        B、仅2、3         C、仅1、3        D、1、2、3 

解析:

死锁避免:在分配资源时的保护措施,不分配给会导致死锁的进程

死锁检测:不采取任何操作,边分配边检测,发生死锁则立马采取措施解除死锁。S2中记录的是当前状态的资源,而非运行所需的资源总量信息

三、处理机调度

【2009】下列进程调度算法中,综合考虑进程等待时间和执行时间的是(D)

A、时间片轮转调度算法        B、短进程优先调度算法

C、先来先服务调度算法        D、高响应比优先调度算法

解析:

时间片轮转调度算法:给定时间片,在时间片内执行,时间片结束后立马结束

高响应比优先调度算法:响应比=(等待时间 + 要求服务时间)/ 要求服务时间,克服饥饿现象,满足短作业优先

【2012】一个多道批处理系统中仅有P1和P2两个作业,P2比P1晚5ms到达,它的计算和I/O操作顺序如下:

P1:    计算60ms,I/O 80ms,计算20ms

P2:    计算120ms,I/O 40ms,计算40ms

若不考虑调度和切换时间,则完成两个作业需要的时间最少是(B)

A、240ms       B、260ms        C、340ms        D、360ms

画甘特图

P1:        |——60——|——80——|              |—20—|

P2:        |-5-|          |————120————|——40——|——40——| 

所以需要260ms

【2016】某单cpu系统中有输入和输出设备各1台,现有3个并发执行的作业,每个作业的输入,计算和输出分别为2ms,3ms和4ms,且都按输入、计算和输出的顺序执行,则执行完3个作业需要的时间最少是(B)

A、15ms       B、17ms        C、22ms        D、27ms

|-2-|--3--|---4---|

           |-2-||--3--| |---4---|

                      |-2-|     |--3--|      |---4---|

|—2—3——4——————4—————4———|=17ms

【2018】某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为1us,在T时刻就绪对列中有三个进程P1,P2和P3,其在就绪对列中的等待时间,需要的CPU时间和优先权如下表所示。

进程等待时间需要的CPU时间优先权
P130us12us10

P2

15us24us30
P318us36us20

若优先权值大的进程优先获得CPU,从T时刻系统开始进程调度,则系统的平均周转时间为(D)

A、54us        B、73us        C、74us        D、75us

|1|——24——|1|​​​​​​​————36————|1|——12——

t1 =  15 + 24 + 1= 40ms 

t2 = 36 + 24 + 2 + 18 = 80ms

t3 = 12 + 24 + 36 + 3 + 30 = 105ms

平均:(41 + 81 + 106 )/ 3 =75us

【2020】下列与进程调度有关的因素中,在设计多级反馈对列调度算法时需要考虑的是(D)

1、就绪队列的数量                      2、就绪队列的优先级        

3、各就绪队列的调度算法        4、进程在就绪队列间的迁移条件

A、仅1、2        B、仅3、4        C、仅2、3、4        D、1、2、3和4

解析:就绪队列的数量会影响长进程的最终完成时间

【2016】某进程调度程序采用基于优先数的调度策略,即选择优先数最小的进程运行,进程创建时由用户指定一个nice作为静态优先数。为了动态调整的优先数,引入运行时间cpuTime和等待时间waitTime,初值均为0.进程处于执行态时,cpuTime定时加1,且waitTime置0;进程处于就绪态时,cpuTime置0,waitTime定时加1.

1)若调度程序只将nice的值作为进程的优先数,即priority = nice,则可能会出现饥饿现像,为什么?

2)使用nice,cpuTime和waitTime设计一种动态优先数计算方法,以避免产生饥饿现象,并说明waitTime的作用

1)就绪队列中,一直有优先级数小的进程,导致优先级大的进程一直无法进入执行态,从而产生饥饿现象。

2)priority = nice + cpuTime * k1 - waitTime * k2 + k3

waitTime越大代表在就绪队列中等待的时间越长,所以优先级会越高,从而避免饥饿现象

四、进程与线程

【2010】下列选项中,导致创建新进程的操作是(C)

1、用户登录        2、设备分配        3、启动程序执行

A、仅1、2        B、仅2、3        C、仅1、3        D、1、2、3

设备分配时通过在系统中设置对应的数据结构(DCT,COCT,CHCT,SDT)实现的,不需要创建进程,是操作系统I/O核心子系统的内容。

【2010】下列选项中,降低进程优先级的合理时机是(A)

A、进程时间片用完                     B、进程刚完成I/O操作,进入就绪队列

C、进程长期处于就绪队列        D、进程从就绪态转为运行态

应该在时间片用完时才降低优先级

刚完成I/O、长期处于就绪队列应该提高优先级

【2011】在支持多线程的系统中,进程P创建的若干线程不能共享的是(D)

A、进程P的代码段               B、进程P中打开的文件        

C、进程P的全局变量           D、进程P中某线程的栈指针

线程间:

独有:标识符,寄存器,栈,信号屏蔽字,errno,优先级
共享:虚拟地址空间(代码段和数据段),文件描述符表,信号的处理回调函数,用户ID/组ID/工作路径;

【2014】下列关于管道(Pipe)通信的叙述中,正确的是(C)

A、一个管道可实现双向数据传输

B、管道的容量仅受磁盘容量大小限制

C、进程对管道进行读操作和写操作都可能被阻塞

D、一个管道只能有一个读进程或一个写进程对其操作

管道的容量是固定的

当管道为空的时候,读进程就会被阻塞

实现双向数据传输必须要两个管道

可以两个进程操作(并非双向),只要不同时操作就不会出错。

【2018】下列选项中,可能导致当前进程P阻塞的事件是(C)

1、进程P申请临界资源        2、进程P从磁盘读数据        

3、系统将CPU分配给高优先权的进程

A、1        B、2        C、1,2        D、1,2

临界资源正在被他人使用、磁盘数据缺失

只要请求资源就有可能导致阻塞

【2019】下列关于线程的描述中,错误的是(B)

A、内核级线程的调度由操作系统完成

B、操作系统为每个用户级线程建立一个线程控制块

C、用户级线程间的切换比内核级线程间的切换效率高

D、用户级线程可以在不支持内核级线程的操作系统上实现

用户级线程与操作系统无关​​​​​​​

操作系统用户级线程建立的线程控制块与多线程模型有关,一对一模型中,每个用户级线程建立一个线程控制块

内核级线程需要从用户态切换到核心态,开销大

【2020】下列关于父进程与子进程的叙述中,错误的是(B)

A、父进程与子进程可以并发执行

B、父进程与子进程共享虚拟地址空间

C、父进程与子进程有不同的进程控制块

D、父进程与子进程不能同时使用同一临界资源

子进程复制父进程的数据段、BSS段、代码段、堆空间、栈空间和文件描述符

子进程复制了父进程虚拟地址空间,而不是共享,共享是时时刻刻都一样,复制只是fork之后短时间内相同。

【2022】下列事件或操作中,可能导致进程P由执行态变为阻塞态的是(D)

1、进程P读文件        2、进程P的时间片用完

3、进程P申请外设        4、进程P执行信号量的wait()操作

A、仅1、4        B、仅2、3        C、仅3、4        D、仅1、3、4

进入阻塞态:请求资源(3)、等待I/O(1)、wait操作(4)

时间片结束时会进入就绪态

​​​​​​​唤醒:从阻塞态离开变成就绪态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108463.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云征文|华为云云耀云服务器L实例使用教学

目录 国内免费云服务器&#xff08;体验&#xff09; 认识国内免费云服务器 如何开通国内免费云服务器 云耀云服务器 HECS HECS适用于哪些场景&#xff1f; 网站搭建 电商建设 开发测试环境 云端学习环境 为什么选择华为云耀云服务器 HECS 国内免费云服务器&#xff…

选择适合您网站的SSL证书,保障安全与信任

在如今数字化的时代&#xff0c;拥有一个安全可靠的网站是至关重要的。而SSL证书作为保护网站和用户数据安全的关键工具&#xff0c;选择适合自己网站的SSL证书成为了每个网站管理员必须面对的重要任务。下面将为您分享几个关键因素&#xff0c;帮助您做出明智的选择。 1. 网站…

将钉钉机器人小程序从一个公司迁移至另一个公司的步骤

引言&#xff1a; 由于我们以前开发的钉钉小程序都在一个公司&#xff0c;想在想应用到另一个公司&#xff0c;这就牵扯出了关于钉钉小程序迁移方面的具体步骤。下面是具体步骤&#xff1a; 1、创建一个钉钉小程序 在这一步你需要有钉钉开放平台的开发者权限&#xff0c;具体…

到底适不适合报考浙大MPA项目?这个角度评估比较客观

现今的浙大mpa项目招生可以说是如日中天&#xff0c;2023年1900报考量创造历史最高&#xff0c;也把浙大mpa招生复试自划线顶的老高&#xff0c;200的分数只能碰得到复试资格&#xff0c;距离录取结果还有不少悬念&#xff0c;因此报考浙大mpa项目目前最好的办法是提面冲击A资格…

华为云云耀云服务器L实例评测|基于宝塔部署SpringBoot后端+前端工程

目录 前言 一、云耀云服务器L实例购买 1.远程登录并重置密码 2. 第三方登录 二、宝塔Linux面板初始化 1.开放宝塔8888端口 2.初始化宝塔 3.登录宝塔后台 三、宝塔软件安装 1.安装ftp 2.配置JDK 四、Springboot工程部署 1.创建JDK管理 2.上传springboot工程jar包 3.新建Java项目…

OmniShade - Mobile Optimized Shader

OmniShade Pro是一款专为移动设备设计的高性能着色器。它包含多种技术,使其几乎可以实现从现实到卡通到动漫的任何外观,但由于自适应系统仅计算任何功能集所需的内容,它的速度也非常快。 它旨在弥合Unity的标准着色器和移动着色器之间的差距,但由于其高级别的风格化、组合…

2023年09月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年09月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多&#xff0c;人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

JVM调优的GC日志观察解读

如果各项参数设置合理&#xff0c;系统没有超时日志出现&#xff0c;GC 频率不高&#xff0c;GC 耗时不高&#xff0c;那么没有必要进行 GC 优化 如果 GC 时间超过 1-3 秒&#xff0c;或者频繁 GC&#xff0c;则必须优化。 一、参数解读 Jvm 调优典型参数设置; -Xms: 堆内存的…

Timeline的使用心得

timeline使用教程 timeline使用主要分为一下几步&#xff1a; 1、新建表格&#xff1b; 2、设置数据 3、发布网址 4、修改表格样式&#xff1b; 5、快速预览 需要用到的几个网址&#xff1a; 1、timeline官网网址&#xff1a;timeline 2、本地图片转链接&#xff1a;图片转链…

【JAVA】异常

作者主页&#xff1a;paper jie 的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…

无涯教程-JavaScript - ISODD函数

描述 如果数字为奇数,则ISODD函数返回TRUE,如果数字为偶数,则返回FALSE。 语法 ISODD (number) 争论 Argument描述Required/OptionalNumber 要测试的值或表达式。 如果number不是整数,则将其截断。 Required Notes 您可以在执行计算之前使用此功能测试单元格的内容。 如果…

MySQL优化第二篇

MySQL优化第二篇 性能分析小表驱动大表慢查询日志日志分析工具mysqldumpslow Show Profile进行SQL分析&#xff08;重中之重&#xff09; 七种JOIN 1、inner join &#xff1a;可以简写为join&#xff0c;表示的是交集&#xff0c;也就是两张表的共同数据 sql语句&#xff1a…