一、选择题:
1.操作系统的基本类型主要是 ()。
A.批处理系统、分时系统及多任务系统
B.实时操作系统、批处理系统及分时操作系统
C.单用户系统、多用户系统及批处理系统
D.实时系统、分时系统和多用户系统
2.进程的同步是指进程间在逻辑上的相互()关系。
A.联接
B.制约
C.继续
D.调用
3.Linux系统下生成静态库并使用静态库的操作正确的是()
hello.c生成a.out
–c hello.c生成hello.o文件
2.gcc –shared hello.o生成.so文件
–c hello.c生成hello.o文件
2.ar –r libmy.a hello.o
3.gcc –o main test.c libmy.a
–c hello.c生成hello.o文件
2.ar –r libmy.a hello.o
3.gcc –o main test.c libmy.so
4.gcc main
4.以下哪个不是终止信号 ( )。
A.HUP
B.INT
C.QUIT
D.SIGHUP
5.在进程管理中,当()时,进程从阻塞状态变为就绪状态。
A.进程被进程调度程序选中
B.等待某一事件
C.等待的事件发生
D.时间片用完
6.关于Linux系统中sbrk、brk说法正确的是()
A.void *sbrk(int size)
size=0 返回sbrk/brk上次的末尾地址
size>0 分配内存空间,返回上一次末尾地址
size<0 释放空间
B.void *sbrk(int size)
Size>0 返回sbrk/brk上次的末尾地址
Size<0 分配内存空间,返回上一次末尾地址
Size=0 释放空间
C.void *sbrk(int size)
Size<0 返回sbrk/brk上次的末尾地址
Size=0 分配内存空间,返回上一次末尾地址
Size>0 释放空间
D.void *sbrk(int size)
size>0 分配内存空间,返回上一次末尾地址
size<0 释放空间
7. 操作系统通过()对进程进行管理。
A.进程
B.进程控制块
C.进程启动程序
D.进程控制区
8.关于以下代码说法不正确的是()
代码:
int main( void )
{
pid_t childpid;
int status;
int retval;
childpid = fork();
fopen函数失败 if ( -1 == childpid )
{
perror( "fork()" );
exit( EXIT_FAILURE );
}
else if ( 0 == childpid )
{
puts( "In child process" );
sleep( 100 );//让子进程睡眠,看看父进程的行为
exit(EXIT_SUCCESS);
}
else
{
if ( 0 == (waitpid( childpid, &status, WNOHANG )))
{
retval = kill( childpid,SIGKILL );
if ( retval )
{
puts( "kill failed." );
perror( "kill" );
waitpid( childpid, &status, 0 );
}
else
{
printf( "%d killed\n", childpid );
}
}
}
exit(EXIT_SUCCESS);
}
A.在确信fork调用成功后,子进程睡眠100秒,然后退出,同时父进程在子进程上调用waitpid函数
B.KILL函数调用失败则返回-1,否则返回0。
C.如果kill执行失败,父进程第二次调用waitpid,保证他在子进程退出后再停止执行,否则父
进程显示一条成功消息后退出。
D.以上说法都是错的
9.关于fork函数以下代码运行结果正确的是( ) void main() { for( ; ; ) { fork(); } }
A.程序开始运行,运行正常无限创建fork进程
B.程序开始运行、有且只有一个进程在运行
C.程序开始运行、消耗大量的系统资源,资源耗尽的时候死机。
D.程序无法运行
10.关于Linux系统下写有名管道使用的方法正确的是( )
代码:
/* 进程一:读有名管道*/
#include <stdio.h>
#include <unistd.h>
void main() {
FILE * in_file;
int count = 1;
char buf[80];
in_file = fopen("mypipe", "r");
if (in_file == NULL) {
printf("Error in fdopen.\n");
exit(1);
}
while ((count = fread(buf, 1, 80, in_file)) > 0)
printf("received from pipe: %s\n", buf);
fclose(in_file);
}
A.void main() {
FILE * out_file;
int count = 1;
char buf[80];
out_file = fopen("mypipe", "w");
if (out_file == NULL) {
printf("Error opening pipe.");
exit(1);
}
sprintf(buf,"this is test data for the named pipe example\n");
fwrite(buf, 1, 80, out_file);
fclose(out_file);
}
B.void main() {
FILE * out_file;
int count = 1;
char buf[80];
out_file = fopen("mypipe", "w");
if (out_file == NULL) {
printf("Error opening pipe.");
exit(1);
}
sprintf(buf,"this is test data for the named pipe example\n");
fclose(out_file);
}
C.void main() {
FILE * out_file;
int count = 1;
char buf[80];
out_file = fopen("mypipe", "w");
if (out_file == NULL) {
printf("Error opening pipe.");
exit(1);
}
sprintf(buf,"this is test data for the named pipe example\n");
fwrite(buf, 1, 80, out_file);
}
D.以上说法都不正确
11.关于进程间通信中共享内存技术说法不正确的是( )
A.共享内存是运行在同一台机器上的进程间通信的最快的方式
B.在使用共享内存的时候要先创建一个存储的标识符号
C.当共享内存创建后,其余进程可以调用shmat()将其连接到自身的地址空间中。
D.以上说法不正确
12.以下代码注释中,解释正确的一组是( )
void main() {
key_t unique_key; /* */
int id;
struct sembuf lock_it;
union semun options;
int i;
unique_key = ftok(".", 'a'); /* */
/* */
id = semget(unique_key, 1, IPC_CREAT | IPC_EXCL | 0666);
printf("semaphore id=%d\n", id);
options.val = 1; /* */
semctl(id, 0, SETVAL, options); /* */
/* */
i = semctl(id, 0, GETVAL, 0);
printf("value of semaphore at index 0 is %d\n", i);
/* */
lock_it.sem_num = 0; /* */
lock_it.sem_op = -1; /* */
lock_it.sem_flg = IPC_NOWAIT; /* */
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论