HNU操作系统2023期中考试试卷及参考答案

本试题参考 @甘晴void 的CSDN博客【2.2】操作系统OS_甘晴void的博客-CSDN博客,本意为期中复习自用,答案在其基础上进行进一步完善,若有错误还请指正!

第一题:基础题(20分)

1.1(4分)

进程状态一共有多少个,是哪些?哪些状态只出现一次,哪些出现多次?

答:

(1)进程状态一共有5种,分别为运行态、就绪态、阻塞态、创建态、终止态。

(2)其中,创建态、终止态只出现一次;

         运行态、就绪态、阻塞态出现多次。

1.2(4分)

请结合进程状态转移图来说明,

答:

(1)进程状态转移图如下图所示(参考王道操作系统P37):

(2)其中,

         抢占式:运行态→阻塞态

         非抢占式:就绪态→运行态、阻塞态→就绪态

参考来源:

1.3(4分)

fork()与exec()调用的区别?

答:

(1)系统调用fork()用于创建子进程,得到两个返回值。新创建的子进程直接从fork()系统调用返回。父进程和子进程代码和数据段相同,但pid和内存空间不同。

(2)系统调用exec()并没有创建新进程,而是直接将当前运行的程序替换为不同的程序。并且,对exec()的成功调用永远不会返回。

1.4(8分)

基于抢占式的调度,优先权值越小表示越优先,运行调度程序进程切换用时1μs。从0开始调度程序,问平均周转时间为多少?

到达时间CPU耗时优先权值
P12μs12μs10
P21μs24μs30
P30μs36μs20

答:

P3的周转时间 = 完成时间 - 到达时间 = 36μs + 12μs + 3μs(切换) - 0μs = 51μs

P2的周转时间 = 完成时间 - 到达时间 = (36μs + 24μs + 12μs + 4μs) - 1μs = 75μs

P1的周转时间 = 完成时间 - 到达时间 = (2μs + 1μs + 12μs) - 2μs = 13μs

平均周转时间 = (P3的周转时间 + P2的周转时间 + P1的周转时间) / 进程数量

= (51μs + 75μs + 13μs) / 3

= 139μs / 3

≈ 46.33μs

所以,平均周转时间约为46.33μs。

(注意,刚开始运行时和进行进程切换时都要加上1μs)

第二题:MLFQ多级反馈队列(10分)

五条规则及其相应作用?

答:

五条规则:

规则1.如果A的优先级 > B的优先级,运行A(不运行B)

规则2.如果A的优先级 = B的优先级,轮转运行A和B

规则3.工作进入系统时,放在最高优先级(最上层队列)

规则4.一旦工作用完了其在某一层中的时间配额(无论中间主动放弃了多少次CPU),就降低其优先级(移入低一级队列)

规则5.经过一段时间S,就将系统中所有工作重新加入最高优先级队列

(见《操作系统导论》P63)

第三题:彩票调度与步长调度(20分)

3.1

写出彩票的意义,问彩票数与步长的关系

答:

(1)彩票数代表进程占有某个资源的份额

(2)步长与彩票数成反比

3.2

若ABC彩票数分别是200,300,500。给定整数60000,求出各自的票数

答:

A的彩票数为12000

B的彩票数为18000

C的彩票数为30000

3.3

模拟一遍,直至各自里程再次相同

答:

假设选择A先运行,

行程值(A)步长=300行程值(B)步长=200行程值(C)步长=120谁运行
000A
30000B
3002000C
300200120C
300200240

B

300400240C
300400360A
600400360C
600400480B
600600480C
600600600……

3.4

求出各自的CPU占比

答:

CPU占比2:3:5

第四题:僵尸进程(20分)

4.1

运行以下代码,写出输出结果(pid整数可以自定,但前后要自洽)

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
 
int main()
{
    printf("hello world (pid:%d)\n", (int)getpid());
    pid_t pid;
    int count = 0;
    pid = fork();
    if (pid < 0)
    {
	printf("error occurred!\n");
    }
    else if (pid == 0)
    {
        printf("%d son %4d\n", getppid(), getpid());
	count++;
        exit(0);
    }
    else
    {
        sleep(5);
        wait(NULL);
        printf("%d father %4d\n", getppid(), getpid());
	count++;
    }
	printf("count = %d\n",count);
	return 0;
}

答:

原因:

在子进程中,count被设置为1,但子进程随后退出,这个值不会被父进程看到。

在父进程中,count也被设置为1(因为父进程有自己的count副本)。

因此,当父进程打印count的值时,它显示的是1,而不是2(即使子进程也增加过count)。这是因为两个进程对count的修改是隔离的,父进程无法看到子进程对count的修改。

4.2

结合僵尸进程与孤儿进程的概念。这段代码会产生僵尸进程还是孤儿进程?如果是孤儿进程,请修改代码使其产生僵尸进程;如果是僵尸进程,请修改代码使其产生孤儿进程

答:

(1)这段代码会产生僵尸进程

原因:子进程结束时,父进程还处于sleep(5)状态,还在睡觉,暂时没有把子进程收回,导致僵尸进程的产生。但是,父进程睡了5ms,睡醒之后立刻把子进程收回了,所以僵尸进程只产生了5ms。我感觉吧,这题的意思是,只要产生过,就是有,这个程序就有问题,所以是僵尸进程。

(2)要将僵尸进程改成孤儿进程,就要让父进程先于子进程结束。可以将sleep(5)改为放在子进程那边,exit也换个位置。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
 
int main()
{
    printf("hello world (pid:%d)\n", (int)getpid());
    pid_t pid;
    int count = 0;
    pid = fork();
    if (pid < 0)
    {
	printf("error occurred!\n");
    }
    else if (pid == 0)
    {
        sleep(5);
        printf("%d son %4d\n", getppid(), getpid());
	    count++;
    }
    else
    {
        printf("%d father %4d\n", getppid(), getpid());
	    count++;
        exit(0);
    }
	printf("count = %d\n",count);
	return 0;
}

第五题:作业题(10分) 

题目提供了./process-run -l 4:100 -s 3 -c和./process-run -l 4:0 -s 3 -c的运行截图

要求我们写出./process-run -l 4:50  -s 3 -c的运行截图

答:

因为占用cpu运行的指令数为4,使用cpu概率为50%,所以就是cpu→io→cpu→io(其他情况也行,均分即可),如下图所示:

第六题:实验题

实验自2024年已改版,所以2023年实验题没有参考价值,不再赘述。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows反截屏开发实现

文章目录 Windows反截屏开发实现1. SetWindowDisplayAffinity2. 反截屏系统3. 总结 Windows反截屏开发实现 最近在我们云桌面中需要做到反截屏能力&#xff0c;所谓反截屏就是我们无法通过截图软件&#xff08;微信&#xff0c;QQ&#xff0c;截图等程序&#xff09;截取桌面的…

lock-锁的概念

锁的简介 锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff08;避免发生资源争抢&#xff09; 在并发环境下&#xff0c;多个线程会对同一个资源进行争抢&#xff0c;可能会导致数据不一致的问题。为了解决这一问题&#xff0c;需要通过一种抽象的锁来对资源进行…

springboot + Vue前后端项目(第十八记)

项目实战第十八记 写在前面1. 前台页面搭建&#xff08;Front.vue&#xff09;2. 路由3.改动登录页面Login.vue4. 前台主页面搭建Home.vue总结写在最后 写在前面 本篇主要讲解系统前台搭建&#xff0c;通常较大的项目都会搭建前台 1. 普通用户登录成功后前台页面效果&#xf…

RestTemple请求GET接口403

问题描述 使用oss接口获取资源的时候&#xff0c;通过浏览器可以直接下载&#xff0c;在代码中使用RestTemplate的get方式访问的时候&#xff0c;出现403错误 问题排查 因为返回状态码是403&#xff0c;就想着是不是授权问题&#xff0c;因为有的接口是有防抓取规则的&…

Java实现自动定时任务配置并判断当天是否需要执行示例

最近接到一个需求&#xff0c;用户要能配置一个定时循环的任务&#xff0c;就是和手机闹钟循环差不多&#xff0c;设置好比如周一、周二、周三&#xff0c;那么在这几天内这个任务就需要自动执行 需求不复杂&#xff0c;首先我需要判断当前是周几&#xff0c;当然用户说了让我…

【廉颇老矣,尚能饭否】传统的数据仓库是否还能发挥作用?

引言&#xff1a;随着数字化转型的深入和大数据技术的发展&#xff0c;大数据平台、数据中台和和数据湖技术不断涌现&#xff0c;给人感觉传统的数据仓库技术已经过时&#xff0c;廉颇老矣&#xff0c;不能应对新的挑战&#xff0c;在数字化转型中&#xff0c;不能发挥重要作用…

第4章 工程经济评价指标 作业

第4章 工程经济评价指标 作业 一单选题&#xff08;共27题&#xff0c;100分&#xff09; (单选题)利息备付率是指( )与应付利息费用的比值。 A. 息税前利润 B. 利润总额 C. 净利润 D. 营业收入 正确答案: A:息税前利润; (单选题)当净现值( )0时,该项目不可行。 A. < B. …

界面构件开发之RC文件

代码; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);gtk_rc_parse("./mainrc");GtkWidget *winN…

珈和科技和比昂科技达成战略合作,共创智慧农业领域新篇章

6月14日&#xff0c;四川省水稻、茶叶病虫害监测预警与绿色防控培训班在成都蒲江举办。本次培训班由四川省农业农村厅植物保护站主办&#xff0c;蒲江县农业农村局、成都比昂科技筹办。四川省农业农村厅植物保护站及四川省14个市州36个县植保站负责人进行了观摩学习。 武汉珈…

轻松选购指南:如何挑选3D建模和3D渲染的高效计算机?

选择最适合 3D 建模和3D渲染的计算机可能是一项艰巨的任务&#xff0c;特别是对于初学者来说。有很多因素需要考虑&#xff0c;包括处理器、显卡、内存和存储容量。 如果你计划购买一台计算机或利用3D产品渲染服务&#xff0c;那么你必须了解需要考虑的特性。以下是选择3D建模…

数据结构(中)

完全二叉树的第6层有10个结点&#xff0c;那么有&#xff08;21&#xff09;个叶子结点。 10-52*2*2*2 设树中某结点不是根结点&#xff0c;则离它最近的祖先结点是双亲结点 一颗有5个结点的深度为3的二叉树采用顺序存储方式存储&#xff0c;存储数组的大小至少为7 看深度&…

python自动化系列:自动复制一个工作簿的所有工作表到其他工作簿

作品介绍 作品名称&#xff1a;自动复制一个工作簿的所有工作表到其他工作簿 开发环境&#xff1a;PyCharm 2023.3.4 python3.7 用到的库&#xff1a;os、xlwings 作品效果&#xff1a; 实现过程 一、代码设计 以下是代码的详细说明&#xff1a; 导入模块&#xff1a; …

数字乡村:绘就乡村振兴的智慧新画卷

在乡村振兴战略的宏伟蓝图下&#xff0c;“数字乡村”作为新时代农村现代化的重要抓手&#xff0c;正悄然改变着中国乡村的面貌。本文旨在深度剖析数字乡村建设的核心价值、关键技术、成功案例以及未来展望&#xff0c;为乡村振兴战略提供前瞻性的思考与启示。 数字乡村的核心价…

【Golang - 90天从新手到大师】Day09 - string

系列文章合集 Golang - 90天从新手到大师 String 一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据&#xff0c;但是通常是用来包含人类可读的文本。 len()返回字符串字节数目&#xff08;不是rune数&#xff09;。 通过索引可以访问某个字节值&#xff0c;0…

Vue3 头像是圆形,hover上去时头像出现黑色半透明样式,且中间显示修改两字的实现

实现效果 原头像 hover效果 实现方式 博主在实际开发过程中使用mouseover和mouseout会出现无法点击或hover频繁闪动的问题&#xff0c;故这里采用的是css中的hover&#xff0c;利用hover也能轻松实现上述效果&#xff0c;且完全不会影响点击事件的使用。 <template> &…

Walrus:去中心化存储和DA协议,可以基于Sui构建L2和大型存储

Walrus是为区块链应用和自主代理提供的创新去中心化存储网络。Walrus存储系统今天以开发者预览版的形式发布&#xff0c;面向Sui开发者征求反馈意见&#xff0c;并预计很快会向其他Web3社区广泛推广。 通过采用纠删编码创新技术&#xff0c;Walrus能够快速且稳健地将非结构化数…

实践分享|关于 nebula-stats-exporter 的使用

大家好&#xff0c;这里是玖叁叁&#xff0c;目前从事全栈工程师工作&#xff0c;刚刚接触 NebulaGraph 不久&#xff0c;还在努力学习当中。图数据库可以高效地表达、存储和分析复杂关系和网络&#xff0c;在特定场景下有着不错的性能。希望通过这篇 nebula-stats-exporter 的…

从0-1实现一个自己的脚手架

当我们在开发的时候&#xff0c;时常会在创建项目的时候重复很多操作&#xff0c;比如下载相同的依赖(锁定依赖版本)、封装网络请求、封装路由、配置代码提示/检查、配置vite/webpack打包、配置自动导入(auto-import)、配置项目基础结构、注册全局指令等&#xff0c;有非常多重…

连锁餐厅降低员工离职率:发誓!绝不是靠“舌尖上的诱惑”

员工社交与成长&#xff0c;企业福利与文化&#xff0c;沃可趣多维度优化员工体验。 连锁餐饮业在全球范围内迅速发展&#xff0c;要为消费者提供更多便利&#xff0c;2023年中国餐饮市场连锁化率达到21%。 然而&#xff0c;这些分散式门店为企业运营创造了挑战。Black Box I…

爬山算法优点

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…