os实训课程模拟考试(1~7)
操作系统的基本功能和设计目标
1、
操作系统是一组 ____(单选)
A、文件管理程序
B、资源管理程序
C、中断处理程序
D、设备管理程序
2、
以下哪项不是操作系统关心的主要问题?(单选)
A、管理计算机裸机
B、设计、提供用户程序与计算机硬件系统的界面
C、管理计算机系统资源
D、高级程序设计语言的编译器
3、
下列关于操作系统的叙述正确的是?(单选)
A、操作系统是硬件和软件之间的接口
B、操作系统是主机与外设之间的接口
C、操作系统是用户与计算机之间的接口
D、操作系统是源程序与目标程序之间的接口
4、
内存管理的主要任务有?(多选)
A、物理内存的分配和回收
B、虚拟地址到物理地址的映射
C、地址转换的加速
D、突破物理内存限制
5、
除了易用性、高效性、可靠性和可扩展性这四个设计目标,现代操作系统还应考虑能效性。以下哪项不属于操作系统改善计算机能耗的途径?(单选)
A、根据工作负载调整CPU频率
B、采用模块化的结构设计
C、采用动态电压和频率缩放技术
D、休眠或关闭部分空闲设备(如磁盘)
系统函数调用基础
1、
以下不是用来分配内存的函数的是?(单选)
A、realloc()
B、malloc()
C、free()
D、calloc()
2、
lseek()中第三个参数的值为0表示?(单选)
A、文件读写指针当前位置
B、文件开始位置
C、文件结束位置
D、都不是
3、
下面更改文件命令只能更改符号连接的目标文件的权限的命令是?(单选)
A、chgrp
B、chown
C、chmod
D、以上都不对
4、
下面关于ftell()函数成功调用说法不正确的是?(单选)
A、返回读写指针当前相对文件起始位置的位移量
B、返回读写指针当前相对文件结束位置的位移量
C、会清除流结束标志
D、会撤销已调用ungetc()对流的影响
5、
以下函数中表示从某流中读取一个字符但该函数不带参数,表示从标准输入流中读字符的函数是?(单选)
A、getc
B、gets
C、fgec
D、getchar
6、
在函数fopen()中文件打开模式中不是可读写的方式打开文件模式是?(单选)
A、r
B、r+
C、a+
D、w+
7、
格式化输出可把格式化数据输出到标准输出、指定文件及字符缓冲区。其中( )函数是将格式化数据输出到指定大小的字符缓冲区?(单选)
A、sprintf
B、snprintf
C、fprintf
D、printf
文件系统基础
1、
比较文件的差异要用到的命令是以下哪一种?(单选)
A、diff
B、cat
C、wc
D、head
2、
存放设备文件的相关文件目录是?(单选)
A、/dev
B、/etc
C、/lib
D、/bin
3、
rm命令表示什么?(单选)
A、文件复制命令
B、移动文件命令
C、文件内容统计命令
D、文件删除命令
4、
在openEuler系统中,用户文件描述符0表示?(单选)
A、标准输出设备文件描述符
B、标准输入设备文件描述符
C、管道文件描述符
D、标准错误输出设备文件描述符
5、
在使用 mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是?(单选)
A、-d
B、-m
C、-p
D、-f
6、
执行命令“chmod o+rw myfile”后,myfile文件的权限变化为?(单选)
A、所有用户都可读写myfile文件
B、其他用户可读写myfile文件
C、同组用户可读写myfile文件
D、文件所有者读写myfile文件
进程基础知识
1、
临界区是指并发进程中涉及共享变量的()。
A、程序段
B、管理信息区
C、公共数据区
D、信息存储区
2、
下列有关fork()函数返回值说法错误的是()
A、函数成功返回时,一次返回两个值,错误返回时为-1
B、返回值等于0表示子进程
C、返回值大于0表示父进程
D、大于0返回值为父进程的PID号
3、
下面程序的输出是什么()
A、
#include <stdio.h>#include <unistd.h>int main(int argc, char** argv){if(fork() == 0){printf("hello");}else{printf("world");}return 0;}helloworld
B、wordhello
C、hello
D、不确定
4、
下面说法不正确的是( )
A、管道和命名管道是最早进程间通信机制之一
B、消息队列是将消息按队列的方式组织成的链表,每个消息都是其中的一个节点
C、进程创建一般由create函数完成
D、共享内存和消息都是由Linux内核来管理和分配资源
5、
关于SIGCHLD信号说法错误的是()
A、在子进程退出时,会向父进程发送该信号
B、需要及时处理SIGCHLD防止僵尸进程
C、SIGCHLD信号的默认处理方式是忽略
D、由于SIGCHLD信号默认方式是忽略,所以在代码中不需要手动设置SIGCHLD信息的处理方式,也不会产生僵尸进程
6、
下列哪种通信方式只能用于具有亲缘关系进程之间的通信()
A、匿名管道
B、消息队列
C、共享内存
D、命名管道
Linux操作系统
第1关:Linux初体验
编程要求
根据右侧窗口命令行内的提示,在
Begin - End区域内进行命令行语句补充,具体任务如下:
切换当前目录到根目录;
列出根目录下所有文件和文件夹(包括隐藏文件/文件夹)。
#!/bin/bash
#在以下部分写出完成任务的命令
#*********begin*********#
cd
cd ..
ls -a
#********* end *********#
第2关:Linux常用命令
编程要求
根据右侧窗口命令行内的提示,在
Begin - End区域内进行代码补充,具体任务如下:
- 在当前目录下新建一个新的文件(名称为
newfile);- 在当前目录下新建一个新的文件夹(名称为
newdir);- 将
newfile文件复制一份到newdir目录下并命名为newfileCpy。
#!/bin/bash
#在以下部分写出完成任务的命令
#*********begin*********#
touch newfile
mkdir newdir
cp newfile newdir/newfileCpy
#********* end *********#
第3关:Linux 查询命令帮助语句
编程要求
根据右侧窗口命令行内的提示,在
Begin - End区域内进行代码补充,具体任务如下:
- 使用man查询
C库中的fopen函数使用方法。
#!/bin/bash
#在以下部分写出完成任务的命令
#*********begin*********#
man 3 fopen
#********* end *********#
Linux之进程管理一
第1关:获取进程常见属性
编程要求
本关的编程任务是补全右侧代码片段中
Begin至End中间的代码,具体要求如下:
- 补全
getProcInfo函数,用于获取当前进程ID和其父进程ID(提示:将结果存放在procIDInfo结构体中)。
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>/*********************** pid: 当前进程ID* ppid: 父进程ID
***********************/
struct procIDInfo
{pid_t pid;pid_t ppid;
};/************************* 返回值: 需要被打开的目录路径
*************************/
struct procIDInfo getProcInfo()
{struct procIDInfo ret; //存放进程ID信息,并返回/********** BEGIN **********/ret.pid = getpid();ret.ppid = getppid();/********** END **********/return ret;
}
第2关:进程创建操作-fork
编程要求
本关的编程任务是补全右侧代码片段中
Begin至End中间的代码,具体要求如下:
- 补全
createProcess函数,使用fork函数创建进程,并在子进程中输出"Children"字符串,在父进程中输出"Parent"字符串。(注意:不要在createProcess函数中使用exit函数或者return来退出程序)。
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>/************************* 提示: 不要在子进程或父进程中使用exit函数或者return来退出程序
*************************/
void createProcess()
{/********** BEGIN **********/pid_t pid;pid = fork();if (pid==0)printf("Children");else if(pid>0)printf("Parent");/********** END **********/
}
第3关:进程创建操作-vfork
编程要求
本关的编程任务是补全右侧代码片段中
Begin至End中间的代码,具体要求如下:
- 补全
createProcess函数,使用vfork函数创建进程,并在子进程中输出"Children"字符串(提示:需要换行),在父进程中输出"Parent"字符串(提示:需要换行)。
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>/************************* 提示: 不要在子进程中使用return来退出程序
*************************/
void createProcess()
{/********** BEGIN **********/pid_t pid;pid = vfork();if(pid==0){printf("Children\n");}else if(pid > 0){printf("Parent\n");}/********** END **********/exit(0);
}
第4关:进程终止
编程要求
本关的编程任务是补全右侧代码片段中
Begin至End中间的代码,具体要求如下:
- 补全
exitProcess函数,使用atexit函数注册一个函数,在注册函数中打印出当前进程的ID号。
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <stdio.h>/************************* 提示: 用户需要在exitProcess函数中使用atexit函数注册一个自定义函数,并在自定义函数中打印出当前进程ID号
*************************/
void exitProcess()
{/********** BEGIN **********/void exit(){printf("%d\n",getpid());}if(atexit(exit)!=0)printf("调用atexit函数错误\n");/********** END **********/
}
生产者消费者问题实践
第1关:生产者消费者问题实践
编程要求
请参考生产者线程的函数代码实现消费者线程的函数代码,将Consumer()函数补充完整。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>#define SIZE 10int in = 0;
int out = 0;
int buffer[SIZE];
sem_t empty;
sem_t full;
pthread_mutex_t mutex;void *Producer()
{int nextp = 0;int i = 0;for(; i < 10; ++i){ int time = rand() % 10 + 1;usleep(time*100000); sem_wait(&empty); pthread_mutex_lock(&mutex);nextp = nextp + 1;buffer[in] = nextp;printf("Produce one message:%d\n", nextp);fflush(stdout);//printf后请一定调用这句刷新输出缓存in = (in + 1) % SIZE;pthread_mutex_unlock(&mutex); //互斥锁解锁sem_post(&full);}
}void *Consumer()
{//请补充消费者线程函数代码int nextc=0;int i=0;for (;i<10;++i){sem_wait(&full); //等待缓冲区非空pthread_mutex_lock(&mutex); //加锁nextc = buffer[out];printf("Consume one message:%d\n",nextc);fflush(stdout);out=(out+1)%SIZE;pthread_mutex_unlock(&mutex); //解锁sem_post(&empty); //增加一个空缓冲区}
}int main()
{ sem_init(&empty, 0, 10); //信号量初始化(最多容纳10条消息,容纳了10条生产者将不会生产消息)sem_init(&full, 0, 0); pthread_mutex_init(&mutex, NULL); //互斥锁初始化 pthread_t producid; pthread_t consumid; pthread_create(&producid, NULL, Producer, NULL); //创建生产者线程 pthread_create(&consumid, NULL, Consumer, NULL); //创建消费者线程 pthread_join(producid, NULL); pthread_join(consumid, NULL); sem_destroy(&empty); //信号量的销毁sem_destroy(&full); pthread_mutex_destroy(&mutex); //互斥锁的销毁return 0;
}
第2关:进程互斥和同步
编程要求
请参考爸爸线程的函数代码实现儿子和女儿线程的函数代码,将Son()函数和Daughter()函数补充完整。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <semaphore.h>
#include <pthread.h>
sem_t apple;
sem_t orange;
sem_t empty;
pthread_mutex_t mutex;void *Dad()
{int nextp = 0;int i = 0;for(i = 0; i < 10; ++i){int time = rand() % 10 + 1; //随机使程序睡眠0点几秒usleep(time*100000); sem_wait(&empty); pthread_mutex_lock(&mutex);if(nextp == 0){printf("爸爸放入了一个苹果\n");}else{printf("爸爸放入了一个桔子\n");}fflush(stdout);pthread_mutex_unlock(&mutex); //互斥锁解锁if(nextp == 0){sem_post(&apple);}else{sem_post(&orange);} nextp = 1 - nextp; }
}void *Daughter()
{while(1){int time = rand() % 10 + 1; //随机使程序睡眠0点几秒usleep(time * 100000); sem_wait(&apple); pthread_mutex_lock(&mutex);printf("女儿取了一个苹果\n") ;fflush(stdout);pthread_mutex_unlock(&mutex); //互斥锁解锁sem_post(&empty);}
}
void *Son()
{//请添加儿子线程的函数代码while (1) {int time=rand()%10+1; //随机使程序睡眠0点几秒usleep(time*100000);sem_wait(&orange);pthread_mutex_lock(&mutex);printf("儿子取了一个桔子\n");fflush(stdout);pthread_mutex_unlock(&mutex); //互斥锁解锁sem_post(&empty);}
}
int main()
{ sem_init(&empty, 0, 5); //信号量初始化sem_init(&orange, 0, 0);sem_init(&apple, 0, 0); pthread_mutex_init(&mutex, NULL); //互斥锁初始化 pthread_t dadid; pthread_t daughterid;pthread_t sonid; pthread_create(&dadid, NULL, Dad, NULL); //创建爸爸线程 pthread_create(&daughterid, NULL, Daughter, NULL); //创建女儿线程pthread_create(&sonid, NULL, Son, NULL); //创建儿子线程 pthread_join(daughterid, NULL);pthread_join(sonid, NULL); sem_destroy(&empty); //信号量的销毁sem_destroy(&apple);sem_destroy(&orange); pthread_mutex_destroy(&mutex); //互斥锁的销毁return 0;
}
相关文章:
os实训课程模拟考试(1~7)
操作系统的基本功能和设计目标 1、 操作系统是一组 ____(单选) A、 文件管理程序 B、 资源管理程序 C、 中断处理程序 D、 设备管理程序 2、 以下哪项不是操作系统关心的主要问题?(单选) A、 管理计算机裸机 B、 设计…...
yolov10 学习笔记
目录 推理代码,source可以是文件名,路径, 预测可视化: 预测可视化加nms 训练自己的数据集, 训练一段时间报错:dill库 解决方法: 推理代码,source可以是文件名,路径…...
NAT概述
NAT概念 NAT(Network Address Translation,网络地址转换)是一种用于修改网络地址信息的技术,主要用于在路由器或防火墙上进行地址转换,以解决 IPv4 地址短缺问题、提高网络安全性以及实现私有网络与公有网络之间的通信…...
Ansys Mechanical|学习方法
Ansys Mechanical是Ansys的旗舰产品之一,涉及的学科体系全面丰富,包括的力学分支主要有理论力学,振动理论,连续介质力学,固态力学,物理力学,爆炸力学及应用力学等。 在自媒体及数字经济飞速发展…...
热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
环形链表2证明
解法 快慢指针相遇后,其中一个指回头部,然后同步前进 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNod…...
fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden的解决方案
零、实验报告地址 计算机视觉实验二:基于支持向量机和随机森林的分类(Part one: 编程实现基于支持向量机的人脸识别分类 )-CSDN博客 一、代码报错 fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden 二、报错原因 通常是由于访问权限不足导致的…...
Verilog-Behavior Level 和 RTL Level 和 GATE Level的区别
硬件设计中对硬件的描述可以具有不同的抽象级别,以Verilog为例: Behavior Level。描述的是硬件的行为,当我们在看到如下关键字时就是行为级别的代码:#,wait,while,force,release等&…...
华为OD机考题HJ1 字符串最后一个单词的长度
前言 描述 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾) 输入描述: 输入一行,代表要计算的字符串,非空,长度小…...
C语言---------深入理解指针
目录 一、字符指针 二、指针数组: 三、数组指针: 1、定义: 2、&数组名和数组名区别: 3、数组指针的使用: 四、数组参数,指针参数: 1、一维数组传参: 2、二维数组传参&am…...
C++ 算法教程
归并排序 #include<iostream> using namespace std; template <class T> void Merge(T data[],int start,int mid,int end) {int len1 mid - start 1, len2 end - mid;int i, j, k;T* left new int[len1];T* right new int[len2];for (i 0; i < len1; i)…...
【支持向量机】问题梳理
学完支持向量机后我有些地方不太清楚,故做如下梳理: 1.为什么支持向量机模型认为一个点划分正确的标志是y(wxb)>1呢,为什么不是y(wxb)>0,比如y为1,wxb为0.5,大于0,则预测正确。 2.所以意思…...
车载网络安全指南 网络安全框架(二)
返回总目录->返回总目录<- 目录 一、概述 二、网络安全组织管理 三、网络安全活动 四、支撑保障 一、概述 汽车电子系统网络安全活动框架包含汽车电子系统网络安全活动、组织管理以及支持保障。其中,网络安全管理活动是框架的核心,主要指汽车电子系统生命周期各阶段…...
元数据、数据元、数据字典、数据模型及元模型的区别详解
在数据管理和分析领域,有许多相似的概念,如元数据、数据元、数据字典、数据模型和元模型。这些概念的定义和应用往往容易混淆。 数据元 数据元是通过一系列属性描述的数据单元,包括定义、标识、表示以及允许值等。这些属性帮助我们理解和使用…...
【百度智能体】零代码创建职场高情商话术助手智能体
一、前言 作为一个程序猿,工科男思维,走上职场后,总会觉得自己不会处理人际关系,容易背锅说错话,这时候如果有个助手能够时时刻刻提醒自己该如何说话如何做事情就好了。 而我们现在可以通过百度文心智能体平台构建各…...
实战项目: 负载均衡
0. 前言 这个项目使用了前后端,实现一个丐版的LeetCode刷题网站,并根据每台主机的实际情况,选择对应的主机,负载均衡的调度 0.1 所用技术与开发环境 所用技术: C STL 标准库 Boost 准标准库 ( 字符串切割 ) cpp- httplib 第三方开源网络库 ctemplate 第三方开源前端网…...
运维监控系统
做监控系统集成,持续更新ing 1.Prometheus k8s安装prometheusdocker部署prometheusthanos实现prometheus高可用部署 2.Grafana docker安装grafanagrafana的admin密码忘记了grafana使用mysql远程存储 3.Alertmanager 4.Consul 5.夜莺系统 6.时序数据库 6.1 …...
第3章 Unity 3D着色器系统
3.1 从一个外观着色器程序谈起 新建名为basic_diffuse.shader的文件,被一个名为basic_diffuse.mat的材质文件所引用,而basic_diffuse.mat文件则被场景中名为Sphere的game object的MeshRenderer组件所使用。 basic_diffuse.shader代码文件的内容如下所示…...
Qt项目天气预报(1) - ui界面搭建
ui中部 效果演示 ui效果 显示效果 控件列表 配合右图查看 居中对齐-label 设置label居中对齐(别傻傻的空格对齐了) 间距配置 widget03 外围的widget对象: 包含label 和 widget0301,如下图 widget0301 内围的widget对象,如下图 样式表 widget03 …...
一、从C语言到C++(一)
一、从C语言到C(一) C介绍C语言和C的联系C介绍 头文件命名空间定义命名空间使用命名空间中的名称使用using声明或指令命名空间与C语言的对比给命名空间起别名注意事项std 标准输入输出std::endl使用std::cout进行输出使用std::cin进行输入格式化输出 C介…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
