操作系统之进程管理习题[通俗易懂]

操作系统之进程管理习题[通俗易懂]1.操作系统对进程管理的程序叫进程调度。进程调度就是按照某种算法从就绪队列中选取进程,让该进程获得cpu。多个进程竞争一个CPU,获得CPU的次序是由调度算法决定的。考虑5个进程见下表,1的优先级最高,给出在采用下述几种调度算法下的调度次序(1).非剥夺优先级(2).剥夺优先级(3).时间片轮转(时间片为2) 进程 创建时间 ……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.操作系统对进程管理的程序叫进程调度。进程调度就是按照某种算法从就绪队列中选取进程,让该进程获得cpu。多个进程竞争一个CPU,获得CPU的次序是由调度算法决定的。考虑5个进程见下表,1的优先级最高,给出在采用下述几种调度算法下的调度次序

(1).非剥夺优先级

(2).剥夺优先级

(3).时间片轮转(时间片为2)

进程

创建时间

运行时间

优先数

P1

0

4

3

P2

3

8

2

P3

4

6

2

P4

6

4

1

p5

7

2

1


答:

1).1->2->4->5->3

2).1->2->4->5->3->2->1 (这里为什么3在2的前面 因为优先级相同的时候 3比2先就绪)

3).1->1->2->3->4->2->5->3->4->2->3->2(先就绪先放在队首 按照顺序执行)

for more specific:

sugar

2.画出计算(x*x+1)/(y*y+1)的进程流图,其中每个操作看成一个进程,并写出同步算法(提示:参考书后的模拟试题)

答:怎么画进程流图,(1).一分支一信号 (2).···不能省 

操作系统之进程管理习题[通俗易懂]

其中:P1:x*x、P2:y*y、P3:x*x+1、P4:y*y+1、P5:(x*x+1)/(y*y+1)

设s1=0(P3是否能开始)、s2=0(P4是否能开始)、s3=0(表示P5是否可以开始) 3个变量可以

但是加一个s4=0(由s3和s4共同表示P3P4是否完成,P5是否可以进行)

main(){
	int s1=0, s2=0, s3=0, s4=0;
	cobegin
		P1();P2();P3();P4();P5();
	coend
} 
P1(){
	··· 
	计算P1 
	V(s1);
	···
}
P2(){
	···
	计算P2 
	V(s2);
	···
}
P3(){
	···
	P(s1);
	计算P3 
	V(s3);
	···
}
P4(){
	···
	P(s2);
	计算P4
	V(s4); 
	···
} 
P6(){
	···
	P(s3);
	P(s4);
	计算P4 
	···
} 

3.桌子上有一只盘子,每次只能放入一只水果,爸爸专门往盘子里放苹果,妈妈专门往盘子里放橘子,一个儿子专门吃盘子里的橘子,一个女儿专门等吃盘子里的苹果,用信号量以及P、V实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系(提示:参考生产者—消费者问题)

解题思路:单缓冲区的生产者消费者模型

(1).模型(同步、互斥、混合)

(2).信号灯(同步、互斥、初值、几个)

同步(empty:代表缓冲区是否有位置、full:代表缓冲区是否有产品)

互斥(mutex:缓冲区的互斥信号、初值为n代表有n个缓冲区可以使用) ps:互斥信号灯紧贴临界区

解题

empty=1(代表盘子中有1个空位)、apple=0(full信号灯、表示有没有苹果)、orange(full信号灯、表示有没有橘子)

这道题里没有考虑互斥问题 但设一个互斥变量也可以mutex=1(表示该缓冲区是否被占用 1表示没有被占用 可以使用)

main(){
	int empty=1, apple=0, orange=0, mutex=1;
	cobegin
		father(); mother(); son(); daughter();
	coend 
}
father(){
	while(true){
		P(empty);//看看盘子是否有位置
		P(mutex);//占用盘子
		放苹果 
		V(mutex);//归还盘子 
		V(apple);
	}
}
mother(){
	while(true){
		P(empty);//看看盘子是否有位置
		P(mutex);//占用盘子
		放橘子 
		V(mutex);//归还盘子 
		V(orange);
	}
}
son(){
	while(true){
		P(orange);//看看有没有橘子
		P(mutex);//占用盘子
		吃橘子 
		V(mutex);//归还盘子 
		P(empty) 
	}
}
daughter(){
	while(true){
		P(apple);//看看有没有橘子
		P(mutex);//占用盘子
		吃苹果 
		V(mutex);//归还盘子 
		P(empty) 
	}
}

4.现有3个并发进程P1、P2和P3,如图所示。3个并发进程共享两个单缓冲区B1和B2.进程P1负责不断从输入设备读数据,若读入的数据为正数,则直接送入B2,否则应先将数据送入B1,经P2取出加工后再送入B2、P3从B2中取信息输出。请使用信号灯P、V操作描述进程P1、P2和P3实现同步的算法。

解题:

empty1=1, empty2=1:表示缓冲区B1,缓冲区B2都有位置

full1=0, full2=0:表示缓冲区B1,缓冲区B2都有产品

mutex1=1, mutext2=1:表示缓冲区B1,B2均可占用 这里没有出现互斥现象(比如说同时对一个缓冲区进行操作) 所以可省略掉互斥信号灯

main(){
	int empty1=1, empty2=1, full1=0, full2=0;
	int mutex1=1, mutex2=1;
	cobegin
		P1();P2();P3(); 
	coend
}
P1(){
	while(true){
		if(x>=0){
			P(empty2);//看看B2是否有位置//P1->B2 
			P(mutex2);//占用缓冲区B1
			向B2放入数据 
			V(mutex2);//归还缓冲区B1 
			V(full2);//B2中有一个产品 	
		}
		else{
			P(empty1);//同上 
			P(mutex1);
			向B1放入数据
			V(mutex1);
			P(full1);
		}
	} 
}
P2(){
	while(true){
		P(full1); //看看B1是否有产品
		P(mutex1);//占用缓冲区
		取数 
		V(mutex1);//归还缓冲区 
		V(empty1);//B1中没有产品了 
		P2加工
		P(empty2);//看看B2是否有位置
		P(mutex2);
		放数 
		V(mutex2);
		V(full2);//产生产品 
	}
}
P3(){
	P(full2);//看看B2是否有产品
	P(mutex2);//占用缓冲区
	取数 
	V(mutex2);//归还缓冲区 
	P3加工 
	V(empty2); 
}

5. 某系统采用双缓冲区技术来管理对设备D的输出,如图8.21所示。在运行过程时,某进程P将其计算结果输出到设备D的步骤是:先将结果输出到buf1,若buf1满,则将结果输出到buf2.如果缓冲区全满,则等待。设备D输出的步骤是:先将结果输出到buf1是否有数据,若有,则将buf1的内容输出;接下来判断buf2中是否有数据,若有,则将buf2中的数据输出。以上进程P和设备D的动作循环进行,直到进程P的计算结束。

(1).现假设buf1和buf2都只有1个记录数据的空间,试用信号量P,V操作描述进程P和设备D的同步过程。

(2).假设进程P计算结果的速度是x,设备D输出结果的速度是y,试计算此双缓冲系统输出结果的速度,并将其与采用单缓冲(去掉图中的一个buf,且图中的输出设备与进程无任何形式的本地缓存)的系统的输出结果进行对比。

操作系统之进程管理习题[通俗易懂]

画太丑了 不想花时间画画了QAQ

(1).问题一根据前面类似的思路。

	int empty1=1, empty2=1, full1=0, full2=0;
	//其中empty1=1表示buf1有位置, full1=0表示buf1没有数据, 2同理
	int mutex1=1, mutex2=1;	
	//mutex=1, mutex2=1表示每个缓冲区只有一个资源可使用,并且现在均处于未使用的状态 

 将所有的变量考虑清楚之后:

int main(){
	int empty1=1, empty2=1, full1=0, full2=0;
	int mutex1=1, mutex2=1;	
	cobegin
		P();D(); 
	coend
	return 0;
} 
P(){
	while(true){
		if(empty1 >= 1) 
		{	
			...
			P(empty1);//buf1是否有位置
			P(mutex1);
			向buf1放入数据
			V(mutex1);//结束放置
			V(full1);//buf1现有数据 
			...
		}
		else if(empty2 >= 1) 
		{
			...
			P(empty2);//buf2是否有位置 
			P(mutex2);
			向buf2放入数据
			V(mutex2);
			V(full2);//buf2现有数据 
			... 	
		}		 
	}
}
D(){
	while(true){
		if(full1 >= 1)
		{
			...
			P(empty1);//判断buf1是否有数据
			P(mutex1);
			取出buf1数据
			V(mutex1);
			P(full1);
			...
		}
		else
		{
			...
			P(empty2);
			P(mutex2);
			取出buf2数据 
			V(mutex2);
			P(full2;)	
			...
		}
	} 
}

(2).

操作系统之进程管理习题[通俗易懂]

某文件占10个磁盘块,现将该文件磁盘块一一读入内存,并送用户区分析。设一个缓冲区大小和磁盘块一样大,从磁盘读入到缓冲区的时间为100us,从缓冲区读入用户区域要50uscpu对数据分析需要50us分别计算在单缓冲区和双缓冲区的情况下,读入并分析该文件的时间。

这题有疑惑的原因:

(1).在缓冲区已满的情况下,不能再往缓冲区写数据。

(2).将数据从磁盘读入到缓冲区的操作是串行的。

操作系统之进程管理习题[通俗易懂]1

7-32.某页式存储管理系统实现时,结合简化的段式管理,虚拟地址长度为24位,其中23-22两位表示段类型:01、10、11分别代表代码段、数据段、栈段,00非法;主存块和页面大小为2K。现有一进程P,代码段分别占用4个主存块0xA, 0x8, 0x5, 0xF, 数据段分别占用3个主存块0xB, 0x7, 0xD, 栈段分别占用两个主存块0x1, 0x6,回答以下问题:

(1). 该页式存储管理系统中,进程的代码段空间以及整个虚拟地址空间最大是多少?

(2).画出进程P主存中段表、页表结构,其中段表包含段的起始虚拟地址,页表指针。

(3).计算出进程P中逻辑地址8006ADH的物理地址,给出计算过程。

危险⚠️:有人说我这题的答案全是错的,但是我也不知道怎么写,请各位看官自主鉴别真假。

(1).代码段空间:2^{22},整个虚拟地址空间2^{^{24}}

(2).

操作系统之进程管理习题[通俗易懂]

(3).

8006ADH

(1000 0000 0000 0110 1010 1101)

从23 22 …                             …1 0位

其中23,22代表段类别,10即数据段

其中21-11位代表页号(2K=2^{10} 共10位) 页号为0 即页框为0xB

10-0位代表页内偏移 6AD代表页内偏移

故表示的物理地址为:页框号(0xB)*页面大小(2K=1000 0000 0000=800H)+页内偏移=13*800H+6ADH=110ADH

使用公式

段号=8006ADH/段长

物理地址=页框号*页长+页内偏移

                                  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196613.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • leetcode 通配符匹配_部分匹配查询中有关通配符

    leetcode 通配符匹配_部分匹配查询中有关通配符给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”p = “*

    2022年8月8日
    3
  • 如何打开sln文件并显示窗口_在本机打开别人的sln文件[通俗易懂]

    如何打开sln文件并显示窗口_在本机打开别人的sln文件[通俗易懂]sln:在开发环境中使用的解决方案文件。它将一个或多个项目的所有元素组织到单个的解决方案中。此文件存储在父项目目录中.解决方案文件,他是一个或多个.proj(项目)的集合呵呵,今天没带书,就去网上找了个ASP.NET的源代码,叫简单实用的BLOG,一开始在web.config里捣鼓了半天,终于能把程序运行起来了,一看是MVP刘巍~真是意外啊。去看了看他的博客,言及两年来如何如何,及参加会议云云,想…

    2022年6月12日
    50
  • vdbench的使用教程——裸盘测试和文件系统测试

    一、vdbench简介  vdbench是一个I/O工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。可以使用vdbench测试磁盘和文件系统的读写性能。vdbench中常用的一些名词解释:HD  主机定义 SD  存储定义  WD 工作负载定义 RD  运行定义 FSD…

    2022年4月3日
    1.1K
  • 数据库函数的用法「建议收藏」

    数据库函数的用法「建议收藏」dgkhjbxx–客户表   列(khmc)客户名称     列(khbh)客户编号apply_main_crdt–申请表  列(cust_no)客户编号 createorreplacefunctioncmis_getkhmc(idvarchar2)returnvarchar2iskhmc_mingchengdgkhjbxx.khmc%type;be…

    2022年6月16日
    29
  • Spring整合mybatis完整示例

    Spring整合mybatis完整示例Spring整合mybatis完整示例  实现功能:根据id查找用户信息。 1、首先创建一个与表中数据相对应的实体类,User.javapackagebean;publicclassUser{intid;Stringname;intage;Stringsex;Stringschool;pu…

    2022年4月29日
    30
  • 域名绕过备案使用国内服务器_如何查看服务器的端口

    域名绕过备案使用国内服务器_如何查看服务器的端口现今,互联正成为企业的竞争优势。然而,受限于跨运营商集成挑战、品质参差不齐,以及冗长的网络供应时间等,使得企业无法在数字经济中,实现强而有力的竞争。天下数据免备案CDN平台,为企业提供灵活的“一站式海外免备案CDN解决方案”。让企业提高全球用户的访问体验、创造新的价值。免备案CDN的原理免备案CDN加速原理是将源站内容分发至海外多个高防服务器节点,通过智能管理系统对网络流量分配控制,使用户从…

    2025年9月7日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号