信号量题目(1)
- 格式:pptx
- 大小:155.37 KB
- 文档页数:6
操作系统作业【注意】对于作业中的选择题,都要求抄写题目(题中若有插图可不画),并在题目上填写答案。
作业1——进程同步(1)1.设有n个进程使用同一个共享变量,如果最多允许m(m < n)个进程同时进入相关临界区,则信号量的变化范围是。
A. n,n-1,...,n-mB. m,m-1,...1,0,-1,...m-nC. m,m-1,...1,0,-1,...m-n-1D. m,m-1,...1,0,-1,...m-n+12.对于有两个并发进程的系统,设互斥信号量为mutex,若mutex=0,则。
A. 表示没有进程进入与mutex相关的临界区B. 表示有一个进程进入与mutex相关的临界区C. 表示有一个进程进入与mutex相关的临界区,另一个进程等待进入D.表示有两个进程进入与mutex相关的临界区3.S.queue,S.value是信号灯S的两个组成部分,当S.queue为空时,S.value的值是( ) A.S.value≤0 B.S.value=0 C.S.value=1 D.Svalue≥04.如果信号量的当前值为-3,则表示系统中在该信号量上有个等待进程。
5.下列选项中,操作系统提供给应用程序的接口是。
(2010全国试题)A.系统调用B.中断C.库函数D.原语6.下列选项中,导致创建新进程的操作是。
(2010全国试题)I.用户登录成功II.设备分配III.启动程序执行A.仅I和II B.仅II和III C.仅I和III D.I、II和III7.设与某资源关联的信号量初值为3,当前值为1。
若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是。
(2010全国试题)A.0、1 B.1、0 C.1、2 D.2、0作业2——进程同步(2)1.如何利用信号量机制来实现多个进程对临界资源的互斥访问?2.四个进程A、B、C、D都要读一个共享文件F,系统允许多个进程同时读文件F,但限制是进程A 和进程C不能同时读文件F,进程B和进程D也不能同时读文件F,为了使这四个进程并发执行时能按系统要求使用文件,现用PV操作进行管理,请回答下面的问题:(1)应定义的信号量及初值:。
计算题:一、 生产消费者问题为解决生产者消费者问题,应该设两个同步信号量,一个说明空缓冲区的数目,用S1 表示,初值为有界缓冲区的大小N ,另一个说明已用缓冲区的数目,用S2表示,初值 为0。
由于在此问题中有M 个生产者和N 个消费者,它们在执行生产活动和消费活动中要对有界缓冲区进行操作。
由于有界缓冲区是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量mutex ,其初值为1。
二、 地址转换例1:若在一分页存储管理系统中,某作业的页表如下所示。
已知页面大小为1024字节,试将逻辑地址1011,2148,3000,4000,5012转化为相应的物理地址。
页号 块号0 21 32 13 6解:本题中,为了描述方便,设页号为P ,页内位移为W ,逻辑地址为A ,页面大小为L ,则:p=int(A/L)w=A mod L对于逻辑地址1011p=int(1011/1024)=0w=1011 mod 1024=1011查页表第0页在第二块,所以物理地址为3059。
对于逻辑地址2148p=int(2148/1024)=2w=2148 mod 1024=100查页表第2页在第1块,所以物理地址为1124。
对于逻辑地址3000p=int(3000/1024)=2w=3000 mod 1024=928查页表第2页在第1块, 所以物理地址为1796。
对于逻辑地址4000p=int(4000/1024)=3w=4000mod 1024=928查页表第3页在第6块, 所以物理地址为7072。
对于逻辑地址5012p=int(5012/1024)=4w=5012mod1024=916因页号超过页表长度,该逻辑地址非法。
例2:在一分页存储管理系统中,逻辑地址长度为16位,页面大小为4096字节,现有一逻辑地址为2F6AH,且第0, 1, 2页依次存放在物理块5, 10 ,11中,问相应的物理地址为多少?解:由题目所给给条件可知,本页式系统的逻辑地址结构为:逻辑地址2F6AH的二进制表示如下:由此可知逻辑地址2F6AH的页号为2,该页存放在第11号物理块中,用十六进制表示志号为B,所以物理地址为BF6AH.三、求文件最大长度例:设文件索引节点中有7个地址项,其中4个地址项为直接地址索引,2个地址项是一级间接地址索引,1个地址项是二级间接地址索引,每个地址项大小为4字节,若磁盘索引块和盘块大小均为256字节,则可表示的单个文件的最大长度是多少?解答:本题的文件结构属混合索引分配方式。
系统架构设计师-试题1(总分:68.00,做题时间:90分钟)一、单项选择题(总题数:51,分数:68.00)在进行金融业务系统的网络设计时,应该优先考虑 (13) 原则。
在进行企业网络的需求分析时,应该首先进行 (14) 。
(分数:2.00)(1).A.先进性 B.开放性 C.经济性 D.高可用性(分数:1.00)A.B.C.D. √解析:(2).A.企业应用分析B.网络流量分析C.外部通信环境调研 D.数据流向图分析(分数:1.00)A. √B.C.D.解析:可用性、有效性和安全性是金融业务核心系统架构中被着重关注的三方面。
数据量大、数据类型多样、业务需求多样、业务需求变化快和子系统繁多是金融业务的特点,因此金融业务核心系统架构中,可用性、有效性和安全性尤为重要。
在复杂的金融业务环境中,只采用片面的策略来提高系统单方面的性能,会导致系统性能失衡,整体性能降低。
因此在金融业务核心系统架构中要采用一定的策略保持可用性、有效性和安全性的平衡,以提升系统整体性能。
而在进行网络设计时,其网络的高可用性是设计优先考虑。
企业内部网络的建设已经成为提升企业核心竞争力的关键因素。
企业网已经越来越多地被人们提到,利用网络技术,现代企业可以在供应商、客户、合作伙伴、员工之间实现优化的信息沟通。
这直接关系到企业能否获得关键的竞争优势。
企业网络要求具有资源共享功能、通信服务功能、多媒体功能、远程VPN拨入访问功能。
所以在进行企业网络的需求分析时,对企业的需求、应用范围、基于的技术等,要从企业应用来进行分析。
Employee(职工号,姓名,性别,年龄,通信地址,家庭成员),其中通信地址记录了邮编、省、市、街道信息;家庭成员记录了职工的亲属的姓名。
职工实体中的通信地址是一个(5) 属性;为了将数据库模式设计得更合理,对于家庭成员属性 (6) 。
(分数:2.00)(1).A.简单 B.复合 C.多值 D.派生(分数:1.00)A.B. √C.D.解析:(2).A.可以不作任何处理直接记录亲属的姓名B.只允许记录一个亲属的姓名C.需要对职工实体设置若干个亲属姓名字段D.应该将职工的亲属的姓名加上职工号设计成为一个独立的实体(分数:1.00)A.B.C.D. √解析:简单属性是原子的,不可再分的。
(一)图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。
要几个程序?有多少个进程?(答:一个程序;为每个读者设一个进程)(1)当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞)(2)当图书馆中没有座位时,后到的读者不等待,立即回家。
解(1 )设信号量:S=100; MUTEX=1P(S)P(MUTEX)登记V(MUTEX)阅读P(MUTEX)注销V(MUTEX)V(S)解(2)设整型变量COUNT=100; 信号量:MUTEX=1;P(MUTEX);IF (COUNT==0){ V(MUTEX);RETURN;}COUNT=COUNT-1;登记V(MUTEX);阅读P(MUTEX);COUNT=COUNT+1;V(MUTEX);RETURN;(二)有一座东西方向的独木桥;用P,V操作实现:(1)每次只允许一个人过桥;(2)当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待。
(3)当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥。
(此问题和读者与写者问题相同,东向西的为读者,西向东的为写者)。
(1)解设信号量MUTEX=1P (MUTEX)过桥V (MUTEX)(2)解设信号量:MUTEX=1 (东西方互斥)MD=1 (东向西使用计数变量互斥)设整型变量:CD=0 (东向西的已上桥人数) CX=0 (西向东的已上桥人数)从东向西:P (MD)IF (CD=0){P (MUTEX) }CD=CD+1V (MD)过桥P (MD)CD=CD-1IF (CD=0){V (MUTEX) }V (MD)从西向东:P (MX){P (MUTEX) }CX=CX+1V (MX)过桥P (MX)CX=CX-1IF (CX=0){V (MUTEX) }V (MX)(3) 解:从东向西的,和(2)相同;从西向东的和(1)相同。
计算题:一、 生产消费者问题为解决生产者消费者问题,应该设两个同步信号量,一个说明空缓冲区的数目,用S1 表示,初值为有界缓冲区的大小N,另一个说明已用缓冲区的数目,用S2表示,初值 为0。
由于在此问题中有M 个生产者与N 个消费者,它们在执行生产活动与消费活动中要对有界缓冲区进行操作。
由于有界缓冲区就是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量mutex,其初值为1。
二、 地址转换 例1:若在一分页存储管理系统中,某作业的页表如下所示。
已知页面大小为1024字节,试将逻辑地址1011,2148,3000,4000,5012转化为相应的物理地址。
页号 块号0 21 32 13 6解:本题中,为了描述方便,设页号为P,页内位移为W,逻辑地址为A,页面大小为L,则:p=int(A/L)w=A mod L对于逻辑地址1011p=int(1011/1024)=0w=1011 mod 1024=1011查页表第0页在第二块,所以物理地址为3059。
对于逻辑地址2148p=int(2148/1024)=2w=2148 mod 1024=100查页表第2页在第1块,所以物理地址为1124。
对于逻辑地址3000p=int(3000/1024)=2w=3000 mod 1024=928查页表第2页在第1块, 所以物理地址为1796。
对于逻辑地址4000p=int(4000/1024)=3w=4000mod 1024=928查页表第3页在第6块, 所以物理地址为7072。
对于逻辑地址5012p=int(5012/1024)=4w=5012mod1024=916因页号超过页表长度,该逻辑地址非法。
例2:在一分页存储管理系统中,逻辑地址长度为16位,页面大小为4096字节,现有一逻辑地址为2F6AH,且第0, 1, 2页依次存放在物理块5, 10 ,11中,问相应的物理地址为多少?解:由题目所给给条件可知,本页式系统的逻辑地址结构为:逻辑地址2F6AH的二进制表示如下:由此可知逻辑地址2F6AH的页号为2,该页存放在第11号物理块中,用十六进制表示志号为B,所以物理地址为BF6AH、三、求文件最大长度例:设文件索引节点中有7个地址项,其中4个地址项为直接地址索引,2个地址项就是一级间接地址索引,1个地址项就是二级间接地址索引,每个地址项大小为4字节,若磁盘索引块与盘块大小均为256字节,则可表示的单个文件的最大长度就是多少?解答:本题的文件结构属混合索引分配方式。
【转】进程同步之信号量机制(pv操作)及三个经典同步问题上篇博客中(),我们对临界区,临界资源,锁机制详细解读了下,留下了⼀个问题,就是锁机制只能判断临界资源是否被占⽤,所以他解决了互斥问题,但是他不能确定前⾯的进程是否完成,所以他不能⽤于同步问题中。
下⾯就为你讲解信号量机制是如何解决这⼀问题的。
1.信号量机制信号量机制即利⽤pv操作来对信号量进⾏处理。
什么是信号量?信号量(semaphore)的数据结构为⼀个值和⼀个指针,指针指向等待该信号量的下⼀个进程。
信号量的值与相应资源的使⽤情况有关。
当它的值⼤于0时,表⽰当前可⽤资源的数量;当它的值⼩于0时,其绝对值表⽰等待使⽤该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
⼀般来说,信号量S³0时,S表⽰可⽤资源的数量。
执⾏⼀次P操作意味着请求分配⼀个单位资源,因此S的值减1;当S<0时,表⽰已经没有可⽤资源,请求者必须等待别的进程释放该类资源,它才能运⾏下去。
⽽执⾏⼀个V操作意味着释放⼀个单位资源,因此S的值加1;若S£0,表⽰有某些进程正在等待该资源,因此要唤醒⼀个等待状态的进程,使之运⾏下去。
2.PV操作什么是PV操作?p操作(wait):申请⼀个单位资源,进程进⼊经典伪代码wait(S){while(s<=0)<span style="white-space:pre"> </span>//如果没有资源则会循环等待;;S-- ;}v操作(signal):释放⼀个单位资源,进程出来signal(S){S++ ;}p操作(wait):申请⼀个单位资源,进程进⼊v操作(signal):释放⼀个单位资源,进程出来PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进⾏操作,具体定义如下:P(S):①将信号量S的值减1,即S=S-1;②如果S<=0,则该进程继续执⾏;否则该进程置为等待状态,排⼊等待队列。
⏹理发师问题:一个理发店由一间等候室W和一间工作室B组成。
顾客可以从外面大街上进入W等候理发。
两个房间的入口是并排的,且共享一扇日本式可滑动的推拉门(门总是挡住一个入口)。
顾客在工作室内理完发,可由B 的旁门出去。
W中有N把椅子,顾客必须坐着等候。
理发师可由门上小窗查看W中无人就睡觉,否则开门,并叫一位顾客入内理发。
顾客每进入一位,都拉铃通知理发师。
若把顾客和理发师都视为进程,请用P、V操作写出进程的同步算法。
⏹要求打印:题目中要求描述理发师和顾客的行为,因此需要两类线程barber()和customer ()分别描述理发师和顾客的行为。
其中,理发师有活动有理发和睡觉两个事件;等待和理发二个事件。
店里有固定的椅子数,上面坐着等待的顾客,顾客在到来这个事件时,需判断有没有空闲的椅子,理发师决定要理发或睡觉时,也要判断椅子上有没有顾客。
所以,顾客和理发师之间的关系表现为:(1)理发师和顾客之间同步关系:当理发师睡觉时顾客近来需要唤醒理发师为其理发,当有顾客时理发师为其理发,没有的时候理发师睡觉。
(2)理发师和顾客之间互斥关系:由于每次理发师只能为一个人理发,且可供等侯的椅子有限只有n把,即理发师和椅子是临界资源,所以顾客之间是互斥的关系。
(3)故引入3个信号量和一个控制变量:ⅰ控制变量waiting用来记录等候理发的顾客数,初值为0;ⅱ信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0;ⅲ信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为1;ⅳ信号量mutex用于互斥,初值为1using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace理发师问题2{internal class Program{// Fieldsprivate static Semaphore barbers = new Semaphore(1, 10);private static int chairs;private static int count = 0;private static Semaphore customers = new Semaphore(0, 10);private static int finish = 0;private static Semaphore mtx = new Semaphore(1, 10);private static int waiting = 0;// Methodspublic static void barber(){while (true){customers.WaitOne();mtx.WaitOne();waiting--;barbers.Release();mtx.Release();cuthair();finish++;}}public static void customer(){mtx.WaitOne();count++;Console.WriteLine("叮咚!第{0}个顾客来了", count);if (waiting < chairs){if (waiting > 0){Console.WriteLine("此时有{0}个人在等待理发", waiting);}else{Console.WriteLine("没有人在等待");}waiting++;Console.WriteLine("还有{0}个座位,顾客留下", (chairs - waiting) + 1);mtx.Release();customers.Release();barbers.WaitOne();gethaircut();}else{Console.WriteLine("座位已满,第{0}个顾客离开", count); mtx.Release();}}public static void cuthair(){Console.WriteLine("开始理发!这是理发师的第{0}个顾客.", finish + 1);Thread.Sleep(0x2328);Console.WriteLine("理发完成 !");}public static void gethaircut(){Thread.Sleep(0x238c);Console.WriteLine("第{0}个顾客理发完毕,离开.", finish);}private static void Main(string[] args){string str = string.Empty;Console.WriteLine("请输入椅子的总数目:");chairs = Convert.ToInt32(Console.ReadLine());Console.WriteLine("理发店共有{0}把椅子", chairs);Console.WriteLine("开门接待顾客吗?Y/N");for(string str2 = Console.ReadLine(); (str2 != "Y") && (str2 != "y"); str2 = Console.ReadLine()){Console.WriteLine("********对不起,尚未开门!********");Console.WriteLine("开门接待顾客吗?Y/N");}Console.WriteLine("********营业中,欢迎光临!********");new Thread(new ThreadStart(Program.barber)).Start();while ((str != "y") && (str != "Y")){Random random = new Random(lisecond);Thread.Sleep(random.Next(1, 0x2710));Console.WriteLine("*******************************");new Thread(new ThreadStart(Program.customer)).Start();if ((finish >= 10) && (waiting == 0)){Console.WriteLine("已经为{0}个顾客理发了,要关门下班吗?(Y/N)", finish);str = Console.ReadLine();}if ((str == "Y") || (str == "y")){Console.WriteLine("************暂停营业!**********");break;}}}}}题目: 用多线程同步方法解决睡眠理发师问题(Sleeping-Barber Problem)理发店有一位理发师,一把理发椅和n把用来等候理发的椅子。
利用信号量机制解决哲学家进餐问题————————————————————————————————作者:————————————————————————————————日期:成绩:课程设计报告课程名称:课程设计(UNIX程序设计)设计题目:利用信号量机制解决哲学家进餐问题姓名:专业:网络工程班级:学号:计算机科学与技术学院网络系2013年12月28日设计项目:利用信号量机制解决哲学家进餐问题一、选题背景1965年,数学家迪杰斯特拉提出,并成为经典的IPC问题—哲学家进餐问题。
该问题的简单描述如下:五个哲学家围坐在一张圆桌周围,每个哲学家面前都一盘通心粉。
由于通心粉很滑,需要两把叉子才能夹住。
哲学家的生活中有两种交替活动时段,吃饭(EATING)和思考(THINKING)。
当一个哲学家觉得饿了时,他就试图分两次去取左手边和右手边的叉子,每次拿一把,但不分次序。
如果成功拿到两把叉子,就进入吃饭状态,吃完后放下叉子继续思考。
二、设计思路1.每个哲学家的行为活动状态为两种:进餐(EATING)和思考(THINKING)。
因此创建一个有5个元素的状态数组,每个数组元素的状态值为EATING或者THINKING。
2.五个哲学家围坐成一圈,每两个人中间有一个叉子,即每个哲学家的边和右边有一个叉子,但这个叉子需要和旁边的邻居竞争使用。
对于每一个哲学家来说,其只有成功获得两个叉子,才能进入进餐状态。
在进完餐后,需要成功放下手中的两个叉子,才能进入思考的状态。
换个角度的描述就是,每个哲学家查询左右边的邻居当前状态,如果左右的邻居当前状态都为THINKING,则该哲学家可以进餐;如果左右邻居当前状态不都是THINKING,则哲学家不能进餐。
因此可以为每一个哲学家设置一个信号量,来描述哲学家的活动状态。
3.因为五只叉子做多只能允许两个哲学家进餐,所以可以将桌子作为一个临界资源。
通过设置一个互斥信号量来限制对临界资源的访问数。
linux驱动⾯试题⽬汇总1、linux驱动分类2、信号量与⾃旋锁3、platform总线设备及总线设备如何编写4、kmalloc和vmalloc的区别5、module_init的级别6、添加驱动7、IIC原理,总线框架,设备编写⽅法,i2c_msg8、kernel panic9、USB总线,USB传输种类,urb等10、android boot 流程11、android init解析init.rc12、同步和互斥答案:Linux设备驱动的分类 (1)字符设备。
(2)块设备。
(3)⽹络设备。
字符设备指那些必须以串⾏顺序依次进⾏访问的设备,如触摸屏、磁带驱动器、⿏标等。
块设备可以⽤任意顺序进⾏访问,以块为单位进⾏操作,如硬盘、软驱等。
字符设备不经过系统的快速缓冲,⽽块设备经过系统的快速缓冲。
但是,字符设备和块设备并没有明显的界限,如对于Flash设备,符合块设备的特点,但是我们仍然可以把它作为⼀个字符设备来访问。
统⾥⽀持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的⽀持。
⾃旋锁 ⾃旋锁是专为防⽌多处理器并发⽽引⼊的⼀种锁,它应⽤于中断处理等部分。
对于单处理器来说,防⽌中断处理中的并发可简单采⽤关闭中断的⽅式,不需要⾃旋锁。
⾃旋锁最多只能被⼀个内核任务持有,如果⼀个内核任务试图请求⼀个已被争⽤(已经被持有)的⾃旋锁,那么这个任务就会⼀直进⾏忙循环——旋转——等待锁重新可⽤。
要是锁未被争⽤,请求它的内核任务便能⽴刻得到它并且继续进⾏。
⾃旋锁可以在任何时刻防⽌多于⼀个的内核任务同时进⼊临界区,因此这种锁可有效地避免多处理器上并发运⾏的内核任务竞争共享资源。
事实上,⾃旋锁的初衷就是:在短期间内进⾏轻量级的锁定。
⼀个被争⽤的⾃旋锁使得请求它的线程在等待锁重新可⽤的期间进⾏⾃旋(特别浪费处理器时间),所以⾃旋锁不应该被持有时间过长。
如果需要长时间锁定的话, 最好使⽤信号量。
但是⾃旋锁节省了上下⽂切换的开销。
2024年4月高等教育自学考试全国统一命题考试操作系统概论(课程代码02323)注意事项:1.本试卷分为两部分,第一部分为选择题,第二部分为非选择题。
2.应考者必须按试题顺序在答题卡(纸)指定位置上作答,答在试卷上无效。
3.涂写部分、画图部分必须使用2B 铅笔,书写部分必须使用黑色字迹签字笔第一部分选择题一、单项选择题:本大题共 20 小题,每小题1分,共20分。
在每小题列出的备选项中只有一项是最符合题目要求的,请将其选出。
1.下面不属于...微机操作系统的是A.LinuxB.VxWorkC.MacintoshD.Chrome OS2.一条指令处理的时间称为A.指令周期B.取址周期C.执行周期D.时钟周期3.条件跳转指令执行后,PC(程序计数器)寄存器的变化情况是A.PC值加1B.PC值减1C.PC 值不变D.PC值根据条件判断结果来变化4.下面不属于...进程控制块内容的是A.进程标识符信息B.处理机状态信息C.进程调度信息D.中断向量信息5.下面关于系统调用与函数调用的说法中,正确的是A.系统调用比函数调用多了一些系统开销B.系统调用和函数调用均通过中断指令来进行C.系统调用要通过CALL指令来进行,而函数调用通过中断指令来进行D.系统调用执行完会返回调用处,而函数调用执行完不会返回调用处6.在一个采用时间片轮转调度算法的系统中,以下不会..引起进程调度的情形是A.一个进程运行结束B.一个进程阻塞C.一个进程在执行时,另一个进程进入就绪队列D.当前运行进程的时间片用完7.有3个进程P1、P2、P3,其运行时间分别是2小时、5 小时和3小时,假定同时到达,并在相同的单道批处理系统中运行,则平均周转时间最短的执行序列是A.P1、P2、P3B.P3、P2、P1C.P2、P1、P3D.P1、P3、P28.多级反馈队列进程调度算法中,就绪队列编号越大优先级越低,在CPU上运行的i级就绪队列中的进程,使用CPU时间过多,则会被移到A.i级队列队尾B.i-1级队列队尾C.i+1级队列队尾D.i+1级队列队首9.以下进程调度算法中,不能..保证紧急任务优先执行的是A.优先权调度算法B.时间片轮转调度算法C.多级队列调度算法D.多级反馈队列调度算法10.对不同类型的资源排序,要求每个进程按规定的顺序申请资源,这种死锁预防策略摒弃了死锁必要条件中的A.互斥条件B.请求和保持条件C.不剥夺条件D.环路等待条件11.操作系统实现扩充主存空间是通过A.分段存储管理技术B.分页存储管理技术C.固定分区存储管理技术D.虚拟存储管理技术12.在虚拟存储管理系统中,系统先为每个进程分配一定数量的页框,当进程发生缺页时,由系统从空闲页框中取出一个进行分配,这一过程采用的策略是A.固定分配局部置换B.可变分配全局置换C.可变分配局部置换D.固定分配全局置换13.一个分段存储管理系统中,逻辑地址长度为32位,其中段号占8位,则最大段长是A.28字节B.216字节C.224字节D.232字节14.假定系统为某进程在内存中分配了1个页框用于存放数据,初始时程序在内存而数据均不在内存,每个页框可以存 100个整数,矩阵A按行存放,那么执行以下程序发生的缺页次数为for j=1 to 100for i=1 to 100A[i,j]=0A.1B.100C.1000D.1000015.某计算机系统按照字节编址,采用二级页表的分页存储管理方式,其中逻辑地址由10 位的页目录号、10位的页号以及12位的页内偏移组成,那么该系统中物理内存的页框大小为A.210字节B.212字节C.220字节D.232字节16.使用绝对路径名访问文件时,查找文件的开始点是A.当前目录B.用户主目录C.上级目录D.根目录17.以下能将数据加到文件末尾的文件操作是A.OPENB.APPENDC.READD.SEEK18.在文件系统中,i结点这种数据结构中存放的内容是A.文件的第一块数据所在簇的簇号B.文件属性和文件块的磁盘地址C.文件所有数据块所在簇的簇号D.文件所有数据块的大小19.下列设备中,属于块设备的是A.打印机B.显示器C.硬盘D.键盘20.磁盘设备工作时,为完成一个磁盘服务请求,需将指定扇区移动到磁头下面,该过程所经历的时间称为A.寻道时间B.传输时间C.访问时间D.旋转延迟时间第二部分非选择题二、填空题:本大题共 10 小题,每小题2分,共20分。
计算机专业基础综合历年真题试卷汇编5(总分58, 做题时间90分钟)1. 单项选择题单项选择题1-40小题。
下列每题给出的四个选项中,只有一个选项是最符合题目要求的。
1.设与某资源关联的信号量初值为3,当前值为1。
若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是_______。
SSS_SINGLE_SELA 0、1B 1、0C 1、2D 2、0分值: 2答案:B解析:信号量表示相关资源的当前可用数量。
当信号量K>0时,表示还有K个相关资源可用,所以该资源的可用个数是1。
而当信号量K<0时,表示有|K|个进程在等待该资源。
由于资源有剩余,可见没有其他进程等待使用该资源,故进程数为0。
2.某系统有n台互斥使用的同类设备,三个并发进程分别需要3、4、5台设备,可确保系统不发生死锁的设备数n最小为_______。
SSS_SINGLE_SELA 9B 10C 11D 12分值: 2答案:B解析:三个并发进程分别需要3、4、5台设备,当系统只有(3-1)+(4-1)+(5-1)=9台设备时,第一个进程分配2台,第二个进程分配3台,第三个进程分配4台。
这种情况下,三个进程均无法继续执行下去,发生死锁。
当系统中再增加1台设备,也就是总共10台设备时,这最后1台设备分配给任意一个进程都可以顺利执行完成,因此保证系统不发生死锁的最小设备数为10。
3.下列关于管道(Pipe)通信的叙述中,正确的是_______。
SSS_SINGLE_SELA 一个管道可实现双向数据传输B 管道的容量仅受磁盘容量大小限制C 进程对管道进行读操作和写操作都可能被阻塞D 一个管道只能有一个读进程或一个写进程对其操作分值: 2答案:C解析:管道实际上是一种固定大小的缓冲区,管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。
它类似于通信中半双工信道的进程通信机制,一个管道可以实现双向的数据传输,而同一个时刻只能最多有一个方向的传输,不能两个方向同时进行。
信号量(记录型,AND,信号量集)1.记录型信号量:为了解决整形信号量让权等待的问题,添加⼀个阻塞队列,记录型信号量完全符合进程同步准则(注意阻塞是进程主动的),当进程资源不够时,进程/线程进⼊阻塞队列程序计数器定位在wait之后:这句话的意思是,记录型信号量的p操作,总是先预先分配资源,当进程/线程资源满⾜时,从阻塞队列进⼊就绪队列调度执⾏时,不需要在重新分配资源了,因为提前预先分配了.当进程出来直接运⾏不⽤在分配资源了注意:这⾥wait和signal中参数不是int类型的,是semaphore类型的,我也不知道,为啥都写成int类型的,教科书上都这样写,具体编程时要注意.2.记录型信号量典型应⽤:注意,这⾥block,wake在linux中都没有,这⾥只是理论上的⼀个函数名字,下⾯我会讲linux 下的p,v操作函数3.Linux下的pv操作补充:sem_t 是⼀种数据类型,⽤来定义记录型信号量的,内部含有阻塞队列4.实例:这个策略,什么信号量都适合使⽤,包括后⾯的AND信号量和信号量集,都是基于这个原理题⽬说明:盘⼦中⼀直只能有⼀个⽔果,实现同步sem_init 函数是⽤来初始化记录型信号量的eg: sem_t a; sem_init(&a,0,1); //初始化⼀个只有⼀个资源的记录型信号量wait 相当于linux 下的sem_wait,signal 相当于linux 下的sem_post 信号量使⽤完,必须销毁,在主线程中使⽤sem_destroy 函数销毁eg: seg_destroy(&a);题⽬分析:我们采⽤记录型信号量解决这个问题 1.在问题域中找临界资源,发现爸爸,妈妈关注盘⼦资源是不是(为空)能放⽔果,所以盘⼦(plate)是临界资源 ⼥⼉只关⼼能不能吃到苹果(apple),所以对⼥⼉来说苹果是⼀个临界资源 ⼉⼦只关⼼能不能吃到橘⼦(orange),所以对于⼉⼦来说橘⼦就是⼀个临界资源 所以临界资源有:plate,apple,orange 2.为每⼀个临界资源定义⼀个信号量 plate:盘⼦,初始时,只有1个源代码: apple:苹果,初始时,有0个 orange:橘⼦,初始时,有0个 3,4步在具体编程中使⽤,切记切记,⼀定遵循这个原则分析,⽗亲母亲(wait 盘⼦,signal ⽔果),占⽤盘⼦资源放⽔果, 当⼉⼦或⼥⼉吃完⽔果时(wait ⽔果,signal 盘⼦),应该由⼉⼦或⼥⼉释放盘⼦资源综上,可是现题⽬中的同步//m4.cpp 创建⽅法:vim m4.cpp 编译⽅法:g++ m4.cpp -lpthread -o m4 执⾏⽅法: ./m4#include <stdio.h>#include <pthread.h>#include <semaphore.h>sem_t plate,orange,apple;//定义三个信号量//void* 表⽰返回值可以是任意类型的指针, 形参中的void *p 表⽰传⼊的形参可以是任意类型的指针,可⽤于传递多个参数void *father(void *p) //⽗亲函数,⽤于创建线程 { while (1) { sem_wait(&plate); //3,4原则,⽗亲线程先判断是不是有盘⼦资源 printf("the father put a apple\n"); sem_post(&apple); //⽗亲,放完苹果,盘⼦中苹果数⽬+1=1,如果你这⾥有疑问请看最上⾯signal 函数的伪代码逻辑 } return NULL;}void *mother(void *p) //同理{ while (1) { sem_wait(&plate); printf("the mother put a orange\n"); sem_post(&orange); } return NULL;}void *daughter(void *p) { while (1) { sem_wait(&apple); //⼥⼉判断盘⼦中是不是有苹果 printf("the daughter eats a apple\n"); sem_post(&plate); //⼥⼉,吃完苹果后,应该释放盘⼦资源,为了⽗亲,母亲能在放⽔果 }执⾏结果:死循环5.AND型信号量和信号量集AND 型信号量:可以避免死锁return NULL;}void *son(void *p){ while (1) { sem_wait(&orange); printf("the son eats a orange\n"); sem_post(&plate); } return NULL;}int main(){ sem_init(&plate,0,1);//初始化盘⼦临界资源,初始1个 sem_init(&orange,0,0);//初始化橘⼦临界资源,初始0个 sem_init(&apple,0,0);//初始化苹果临界资源,初始0个 pthread_t tid[4]; //创建四个进程 pthread_create(&tid[0],NULL,&father,NULL); pthread_create(&tid[1],NULL,&mother,NULL); pthread_create(&tid[2],NULL,&daughter,NULL); pthread_create(&tid[3],NULL,&son,NULL); pthread_join(tid[0],NULL); //主线程阻塞,等待⼦进程(线程执⾏),主线程不阻塞的话,会直接执⾏完 sem_destroy(&plate); //销毁信号量 sem_destroy(&apple); sem_destroy(&orange); return 0;}进程/线程同步准则:这⾥不区分进程/线程,因为,引⼊了线程后线程就是资源调度的基本单位了,所以同步也可以指进程的线程同步1.空闲让进:2.忙则等待:3.有限等待4.让权等待:优先权低的进程让优先权⾼的的进程先执⾏为了解决⼀次分配多中资源,每种资源每次分配⼀个,⼀次获得进程所需要的所有资源(每种个1个),否则进程阻塞,是记录型信号量上的进⼀步延伸AND 型信号量的阻塞队列机制,为每种资源设置⼀个阻塞队列,当最先出现资源不⾜的资源种类为Ri 时,那么进程就被阻塞在Ri资源对应的阻塞队列中信号量集:申请n类资源,每类资源最低ti个,每类申请di个资源AND的进⼀步延伸,设置⼀个最低资源数⽬>=1,和进程需要的资源数⽬>=06.记录型信号量和信号量集⽐较。
⏹理发师问题:一个理发店由一间等候室W和一间工作室B组成。
顾客可以从外面大街上进入W等候理发。
两个房间的入口是并排的,且共享一扇日本式可滑动的推拉门(门总是挡住一个入口)。
顾客在工作室内理完发,可由B 的旁门出去。
W中有N把椅子,顾客必须坐着等候。
理发师可由门上小窗查看W中无人就睡觉,否则开门,并叫一位顾客入内理发。
顾客每进入一位,都拉铃通知理发师。
若把顾客和理发师都视为进程,请用P、V操作写出进程的同步算法。
⏹要求打印:题目中要求描述理发师和顾客的行为,因此需要两类线程barber()和customer ()分别描述理发师和顾客的行为。
其中,理发师有活动有理发和睡觉两个事件;等待和理发二个事件。
店里有固定的椅子数,上面坐着等待的顾客,顾客在到来这个事件时,需判断有没有空闲的椅子,理发师决定要理发或睡觉时,也要判断椅子上有没有顾客。
所以,顾客和理发师之间的关系表现为:(1)理发师和顾客之间同步关系:当理发师睡觉时顾客近来需要唤醒理发师为其理发,当有顾客时理发师为其理发,没有的时候理发师睡觉。
(2)理发师和顾客之间互斥关系:由于每次理发师只能为一个人理发,且可供等侯的椅子有限只有n把,即理发师和椅子是临界资源,所以顾客之间是互斥的关系。
(3)故引入3个信号量和一个控制变量:ⅰ控制变量waiting用来记录等候理发的顾客数,初值为0;ⅱ信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0;ⅲ信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为1;ⅳ信号量mutex用于互斥,初值为1using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace理发师问题2{internal class Program{// Fieldsprivate static Semaphore barbers = new Semaphore(1, 10);private static int chairs;private static int count = 0;private static Semaphore customers = new Semaphore(0, 10);private static int finish = 0;private static Semaphore mtx = new Semaphore(1, 10);private static int waiting = 0;// Methodspublic static void barber(){while (true){customers.WaitOne();mtx.WaitOne();waiting--;barbers.Release();mtx.Release();cuthair();finish++;}}public static void customer(){mtx.WaitOne();count++;Console.WriteLine("叮咚!第{0}个顾客来了", count);if (waiting < chairs){if (waiting > 0){Console.WriteLine("此时有{0}个人在等待理发", waiting);}else{Console.WriteLine("没有人在等待");}waiting++;Console.WriteLine("还有{0}个座位,顾客留下", (chairs - waiting) + 1);mtx.Release();customers.Release();barbers.WaitOne();gethaircut();}else{Console.WriteLine("座位已满,第{0}个顾客离开", count); mtx.Release();}}public static void cuthair(){Console.WriteLine("开始理发!这是理发师的第{0}个顾客.", finish + 1);Thread.Sleep(0x2328);Console.WriteLine("理发完成 !");}public static void gethaircut(){Thread.Sleep(0x238c);Console.WriteLine("第{0}个顾客理发完毕,离开.", finish);}private static void Main(string[] args){string str = string.Empty;Console.WriteLine("请输入椅子的总数目:");chairs = Convert.ToInt32(Console.ReadLine());Console.WriteLine("理发店共有{0}把椅子", chairs);Console.WriteLine("开门接待顾客吗?Y/N");for(string str2 = Console.ReadLine(); (str2 != "Y") && (str2 != "y"); str2 = Console.ReadLine()){Console.WriteLine("********对不起,尚未开门!********");Console.WriteLine("开门接待顾客吗?Y/N");}Console.WriteLine("********营业中,欢迎光临!********");new Thread(new ThreadStart(Program.barber)).Start();while ((str != "y") && (str != "Y")){Random random = new Random(lisecond);Thread.Sleep(random.Next(1, 0x2710));Console.WriteLine("*******************************");new Thread(new ThreadStart(Program.customer)).Start();if ((finish >= 10) && (waiting == 0)){Console.WriteLine("已经为{0}个顾客理发了,要关门下班吗?(Y/N)", finish);str = Console.ReadLine();}if ((str == "Y") || (str == "y")){Console.WriteLine("************暂停营业!**********");break;}}}}}题目: 用多线程同步方法解决睡眠理发师问题(Sleeping-Barber Problem)理发店有一位理发师,一把理发椅和n把用来等候理发的椅子。
操作系统作业【注意】对于作业中的选择题,都要求抄写题目(题中若有插图可不画),并在题目上填写答案。
作业1——进程同步(1)1.设有n个进程使用同一个共享变量,如果最多允许m(m < n)个进程同时进入相关临界区,则信号量的变化范围是。
A. n,n-1,...,n-mB. m,m-1,...1,0,-1,...m-nC. m,m-1,...1,0,-1,...m-n-1D. m,m-1,...1,0,-1,...m-n+12.对于有两个并发进程的系统,设互斥信号量为mutex,若mutex=0,则。
A. 表示没有进程进入与mutex相关的临界区B. 表示有一个进程进入与mutex相关的临界区C. 表示有一个进程进入与mutex相关的临界区,另一个进程等待进入D.表示有两个进程进入与mutex相关的临界区3.,是信号灯S的两个组成部分,当为空时,的值是( )A.≤0 B.=0 C.=1 D.Svalue≥04.如果信号量的当前值为-3,则表示系统中在该信号量上有个等待进程。
5.下列选项中,操作系统提供给应用程序的接口是。
(2010全国试题)A.系统调用B.中断C.库函数D.原语6.下列选项中,导致创建新进程的操作是。
(2010全国试题)I.用户登录成功II.设备分配III.启动程序执行A.仅I和II B.仅II和III C.仅I和III D.I、II和III7.设与某资源关联的信号量初值为3,当前值为1。
若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是。
(2010全国试题)A.0、1 B.1、0 C.1、2 D.2、0作业2——进程同步(2)1.如何利用信号量机制来实现多个进程对临界资源的互斥访问2.四个进程A、B、C、D都要读一个共享文件F,系统允许多个进程同时读文件F,但限制是进程A和进程C不能同时读文件F,进程B和进程D也不能同时读文件F,为了使这四个进程并发执行时能按系统要求使用文件,现用PV操作进行管理,请回答下面的问题:(1)应定义的信号量及初值:。
第1篇1. 什么是多线程?多线程是一种程序执行方式,允许程序同时执行多个线程,每个线程可以执行不同的任务。
2. 多线程有哪些优点?(1)提高程序的执行效率,充分利用多核CPU资源;(2)防止程序阻塞,提高用户体验;(3)简化程序设计,使程序结构更清晰。
3. 什么是线程?线程是程序执行的最小单元,是进程的一部分。
每个线程都有自己的堆栈、寄存器和程序计数器。
4. 什么是线程池?线程池是一组预先创建的线程,用于执行多个任务。
线程池可以减少线程创建和销毁的开销,提高程序性能。
5. 什么是同步?同步是线程之间的一种协调机制,确保同一时间只有一个线程访问共享资源。
6. 什么是互斥锁?互斥锁是一种同步机制,用于保护共享资源,确保同一时间只有一个线程访问该资源。
7. 什么是条件变量?条件变量是一种线程间的通信机制,用于线程之间的同步。
二、多线程实现方式1. Java中的多线程实现方式(1)继承Thread类:通过继承Thread类,重写run()方法,创建线程对象。
(2)实现Runnable接口:通过实现Runnable接口,重写run()方法,创建线程对象。
(3)使用Callable和Future:Callable接口与Runnable接口类似,但返回值。
Future接口用于获取Callable接口的返回值。
2. C中的多线程实现方式(1)继承Thread类:与Java类似,通过继承Thread类,重写Run()方法,创建线程对象。
(2)实现Runnable接口:与Java类似,通过实现Runnable接口,重写Run()方法,创建线程对象。
(3)使用Task和TaskCompletionSource:Task是C中的异步编程模型,TaskCompletionSource用于获取异步操作的结果。
3. Python中的多线程实现方式(1)使用threading模块:Python中的threading模块提供了创建线程、同步机制等功能。
问答题1、试比较作业和进程的区别。
答:一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。
作业是用于需要计算机完成某项任务,而要求计算机所做工作的集合。
一个作业的完成要经过作业提交,作业收容、作业执行和作业完成4个阶段。
而进程是已提交完毕的程序所执行过程的描述,足资源分配的基本单位。
其主要区别关系如下:(1)作业是用户向计算机提交任务的任务实体。
在用户向计算机提交作业之后,系统将存储在外存中的作业等待队列中等待执行。
而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。
任一进程,只要它被创建,总有相应的部分存在于内存中。
(2)一个作业可由多个进程组成。
且必须至少由一个进程组成,但反过来不成立。
(3)作业的概念主要用在批处理系统中。
像Unix这样的分时系统中,则没有作业概念。
而进程的概念则用在几乎所有的多道程序系统中2.试比较进程和程序的区别。
答:(1)进程是一个动态概念,而程序是一个静态概念,程序是指令的有序集合,无执行含义,进程则强调执行的过程。
(2)进程具有并行特征(独立性,异步性),程序则没有。
(3)不同的进程可以包含同一个程序,同一程序在执行中也可以产生多个进程。
3.什么是线程?试述线程与进程的区别。
答;线程是在进程内用于调度和占有处理机的基本单位,它由线程控制表、存储线程上下文的用户栈以及核心栈组成。
线程可分为用户级线程、核心级线程以及用户/核心混合型线程等类型。
其中用户级线程在用户态下执行,CPU调度算法和各线程优先级都由用户设置,与操作系统内核无关。
核心级线程的调度算法及线程优先级的控制权在操作系统内核。
混合型线程的控制权则在用户和操作系统内核二者。
线程与进程的主要区别有:(1)进程是资源管理的基本单位,它拥有自己的地址空间和各种资源,例如内存空间、外部设备等;线程只是处理机调度的基本单位,它只和其他线程一起共享进程资源,但自己没有任何资源。
(2)以进程为单位进行处理机切换和调度时,由于涉及到资源转移以及现场保护等问题,将导致处理机切换时间变长,资源利用率降低。