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

news2024/10/23 2:44:02

本试题参考 @甘晴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年实验题没有参考价值,不再赘述。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧物流:实现供应链的技术升级

智慧物流不仅是物流管理系统的智能化升级&#xff0c;更是以物联网、大数据分析等技术手段为基础的一种高效、智能的供应链解决方案。通过实时监控、数据分析和智能优化&#xff0c;智慧物流将传统物流的各个环节有效连接起来&#xff0c;实现信息流、资金流和物流的无缝对接。…

全网最全postman接口测试教程和项目实战~从入门到精通

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

GPT-4o与GPT-4的价格对比

截图来源于微软Azure的OpenAI服务。 GPT-4o比GPT-4的价格降低是肉眼可见&#xff0c;可惜计价是美元单位&#xff0c;较国内的价格而言还是比较贵&#xff0c;拿来做Demo演示可以&#xff0c;商用的话&#xff0c;还要仔细考量考量。 国内的地板价已经来到了0.5元/百万Token的…

python使用pyautogui自动化模拟鼠标、键盘操作、截屏、识别图片位置

&#x1f308;所属专栏&#xff1a;【python】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的…

进入全球市场的游戏本地化策略

开发商在开发游戏时已经很久没有针对单一国家了。对于目前正在开发的许多游戏来说&#xff0c;它们都致力于进入全球市场并吸引各种客户。然而&#xff0c;必须考虑一些游戏是否适合某些市场&#xff0c;以及某些国家是否具有足够的市场潜力。此外&#xff0c;在进入海外市场时…

实现一个简易动态线程池

项目完整代码&#xff1a;https://github.com/YYYUUU42/Yu-dynamic-thread-pool 如果该项目对你有帮助&#xff0c;可以在 github 上点个 ⭐ 喔 &#x1f970;&#x1f970; 1. 线程池概念 2. ThreadPoolExecutor 介绍 2.1. ThreadPoolExecutor是如何运行&#xff0c;如何同时…

自定义平台后台登录地址前缀的教程

修改平台后台地址默认的 admin 前缀 修改后端 config/admin.php 配置文件,为自定义的后缀 修改 平台后台前端源码中 src/settings.js 文件,修改为和上面一样的配置 修改后重新打包前端代码,并且覆盖到后端的 public 目录下 重启 swoole 服务即可

通过git命令查询某个用户提交信息

要查询某个用户通过 Git 提交了多少行代码&#xff0c;可以使用以下步骤和命令来实现。这些命令将统计该用户的添加和删除的代码行数。 1、切换到你的 Git 仓库&#xff1a; cd /path/to/your/repositorygit命令结果&#xff1a; 2、查询所有用户&#xff1a; git log --pr…

springboot3多模块实践

先帖下目录结构&#xff0c;直接在idea里面新建就行&#xff0c;删掉多余的文件 子模块的新建 根目录pom文件&#xff0c;注意modules、packaging&#xff0c;dependencyManagement统一管理依赖&#xff0c;子模块添加依赖的时候就不用加版本号 <?xml version"1.0…

【TIM输出比较】

TIM输出比较 1.简介1.1.输出比较功能1.2.PWM 2.输出比较通道2.1.结构原理图2.2.模式分类 3.输出PWM波形及参数计算4.案例所需外设4.1.案例4.2.舵机4.3.直流单机 链接: 15-TIM输出比较 1.简介 1.1.输出比较功能 输出比较&#xff0c;英文全称Output Compare&#xff0c;简称O…

微观时空结构和虚数单位的关系

回顾虚数单位的定义&#xff0c; 其中我们把称为周期&#xff08;的绝大部分&#xff09;&#xff0c;称为微分&#xff0c;0称为原点或者起点&#xff08;意味着新周期的开始&#xff09;&#xff0c;由此我们用序数的概念反过来构建了基数的概念。 周期和单位显然具有倍数关…

ACS自助借还服务端模拟工具(3M SIP2协议)

点击下载《ACS自助借还服务端模拟工具&#xff08;源代码&#xff09;》 1. 前言 在当今科技迅猛发展的时代&#xff0c;自助服务系统已成为提升用户体验和运营效率的关键。为了满足自助借还软件辅助开发的需求&#xff0c;我们精心打造了一款功能强大的ACS服务端模拟软件。这…

AI音乐大模型:是创意的助力还是产业的挑战?

近期音乐界迎来了一场前所未有的革命。随着多家科技公司纷纷推出音乐大模型&#xff0c;素人生产音乐的门槛被前所未有地拉低&#xff0c;一个崭新的“全民音乐时代”似乎已近在眼前。然而&#xff0c;在这场技术革新的浪潮中&#xff0c;关于AI产品版权归属、创意产业如何在AI…

审稿人:拜托,请把模型时间序列去趋势!!

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 时间序列分析是数据科学中一个重要的领域。通过对时间序列数据的分析&#xff0c;我们可以从数据中发现规律、预测未来趋势以及做出决策…

体育时间:“中国第一”的出海代表们,一致瞄准了这一赛道?

2024年无疑又是一个体育赛事超级大年。 从1月的亚洲杯&#xff0c;2月的世乒团体锦标赛、第14届冬运会、到6月欧洲杯与美洲杯隔空对决&#xff0c;巴黎奥运会也将在7月盛大开赛&#xff0c;随后则还有8月的巴黎残奥会&#xff0c;对于期待万分的体育粉丝们&#xff0c;这将是极…

RapidLayout:中英文版面分析推理库

引言 继上一篇文章之后&#xff0c;我这里想着将360发布的版面分析模型整合到现有的rapid_layout仓库中&#xff0c;便于大家快速使用。 不曾想到&#xff0c;我这整理工作越做越多了&#xff0c;好在整体都是往更好方向走。 起初&#xff0c;rapid_layout项目是在RapidStru…

代码随想录训练营Day 64|卡码网98. 所有可达路径(深搜)

1.所有可达路径 98. 所有可达路径 | 代码随想录 代码&#xff1a; &#xff08;深搜&#xff09;邻接矩阵表示 #include <iostream> #include <vector> using namespace std; vector<int> path; vector<vector<int>> result; void dfs(const ve…

2024年史上最难就业季,该如何逆风翻盘?

前言 【2024年被称为最难就业年&#xff0c;1158万大学生面临难题】 IT互联网依然是大学生最向往行业&#xff0c;制造业受欢迎度升高智联招聘调研数据显示&#xff0c;2024届求职毕业生期望行业中&#xff0c;IT/通信/电子/互联网、政府/非盈利机构、文化/传媒/娱乐/体育行业…

urfread刷算法题day1|LeetCode2748.美丽下标的数目

题目 题目链接 LeetCode2748.美丽下标对的数目 题目描述 给你一个下标从 0 开始的整数数组 nums 。 如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c; 如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c; 则认为 nums[i] 和 nums…

大模型应用开发实践:RAG与Agent

RAG planning是任务拆解的一些方法。 Agent RAG现在基本上推荐LangChain开发框架。而Agent目前没有一个通用的好的开发框架/范式。 学习路径