os实训课程模拟考试(1~7)

2024-06-16 16:36
文章标签 os 实训 模拟考试 课程

本文主要是介绍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、

    下面程序的输出是什么()

     
    1. #include <stdio.h>
    2. #include <unistd.h>
    3. int main(int argc, char** argv){
    4. if(fork() == 0){
    5. printf("hello");
    6. }else{
    7. printf("world");
    8. }
    9. return 0;
    10. }
    A、

    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关:获取进程常见属性

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全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

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全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

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全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关:进程终止

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下:

  • 补全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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066962

相关文章

可视化实训复习篇章

前言: 今天,我们来学习seaborn库可视化,当然,这个建立在Matplotlib的基础上,话不多说,进入今天的正题吧!当然,这个是《python数据分析与应用》书中,大家有需求的可以参考这本书。 知识点: Matplotlib中有两套接口分别是pyplot和pyylab,即绘图时候主要导入的是Matplotlib库下的两个子模块(两个py文件)matplotlib.pyplot和matp

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

如何在OS中获得SSD的寿命耐久度

这里还是以DELL的机器为例,通常DELL的服务器带有的磁盘会有显示SSD耐久度,当然也不排除SSD更新太快,有部分SSD无法在戴尔的服务器上查看到SSD的耐久度,但实际上本身只要是SSD肯定还是可以有方法查看SSD的耐久度,可以通过OS的方式进行查看,以RHEL7.9为例 首先我们需要下载安装DELL的PERCCLI的阵列卡工具,该工具可以很好的查看DELL服务器上的阵列卡对应的信息,如阵列卡

交通大数据分析与挖掘实训【对提供的CSV格式数据使用pandas库分析-Matplotlib库绘图】

背景: 《交通大数据分析与挖掘》实训 指    导   书  编著 二○二四年五月 一、实训目的 1、掌握python开发环境(如Anaconda)及Numpy等常见第三方库的使用; 2、熟悉Anaconda在线编程平台,学会基本的python程序编写、编译与运行程序的方法及函数语句; 3、学会导入不同格式数据文件,掌握不同类型数据的基本处理和分析思路; 4、熟练运用所学第三方库,结合相

java实训 | 低配版模拟火车订票系统

代码:  import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.util.ArrayList;import java.util.List;public class TrainBookingSystem {private JFrame frame;private JPanel

我的OS X系统使用小结

最近硬盘出现了故障,为了恢复确认问题,我的Windows电脑就一直运行坏道检测程序,暂时将工作迁移到我的MacBook Pro(后面简称为MBP)上进行。这里简单总结下自己是如何使用MBP进行做的。 原本计划是用我的小米游戏笔记本,但是不知为何,即便是非游戏模式,风扇偶尔也会狂转,产生很大的噪音。相反,MBP非常安静,就是有点烫手。 我的MBP是17年款,13寸屏幕,蝶式键盘。为了不烫手

QNX OS微内核系统

微内核架构 微内核(Microkernel)架构是一种操作系统架构模式,其核心思想是尽量将操作系统的基本功能压缩在最小的核心中,而将其他服务(如设备驱动、文件系统、网络协议等)放在用户空间中运行,从而增加系统的灵活性和安全性,这种架构有几个主要特点和优势: 最小化核心:微内核仅包括最基本的系统管理功能和最少的抽象层,如进程通信、基本的调度和内存管理。模块化:系统服务和驱动程序作为独立的模块运行

查询课程编号以'c05'开头,被3名及以上学生选修且期末成绩的平均分高于75分的课程号、选修人数和期末成绩平均分,并按平均分降序排序

--查询课程编号以'c05'开头,被3名及以上学生选修--且期末成绩的平均分高于75分的课程号、选修人数--和期末成绩平均分,并按平均分降序排序use teachinggoselect courseno,count(studentno)as '选修人数',avg(final) as '期末平均分'from scorewhere courseno like 'c05%' and fi

查询每名学生的学号、选修课程数目、总成绩、并将查询结果存放到生成的’学生选课统计表‘中

--查询每名学生的学号、选修课程数目、总成绩、并将查询结果存放到生成的’学生选课统计表‘中use teachinggoif exists (select * from sys.objects where name='学生选课统计表')drop table 学生选课统计表select studentno,COUNT(*) as '选修课程数目',sum(final) as '总成绩' i

在Mac OS上使用Visual Studio Code创建C++ Qt的Hello World应用

引言 Qt是一个跨平台的应用程序和用户界面框架,而Visual Studio Code是一个功能强大的编辑器,两者结合可以极大地提升开发效率。本文将指导你在Mac OS上使用Visual Studio Code创建一个简单的Qt 'Hello World'窗口应用。 环境准备 确保你的MacBook OS运行最新的操作系统。安装Homebrew,Mac OS的包管理器。通过Homebrew安装