20155332 补交ch12课下作业
20155332 补交ch12课下作业
课下测试提交晚了,我课后补做了一遍,答对13题,答错3题。
试题内容如下所示:
课本内容
1.并发(Concurrency)
访问慢I/O设备:就像当应用程序等待I/O中的数据时内核会切换运行其他进程一样,我们的应用也可以用类似的方式,将I/O请求与其他工作重叠从而挖掘并发的潜能。
推迟工作而减少延迟:我们可以推迟一些耗时工作稍后执行,例如内存分配器不在free时整理碎片,而是将这些琐屑的工作推迟到一个稍后执行的独立“逻辑流”(logical flow)中。
服务多个网络客户端:如果没有并发,一个慢客户端将会阻塞整个Web服务器,这是不现实的!所以我们需要为每个客户端都创建独立的逻辑流,避免某个客户端独占整个服务器。
多核上并行计算:将程序切分成多个逻辑流并发执行,在多核环境中可能被分配到不同的核心上执行,从而实现了并行。
现代操作系统提供三种基本方法构建上述这些并发程序:
- 进程(Process):进程由操作系统维护和调度,每个进程都有独立的虚拟地址空间,进程间交互要靠IPC机制。
- I/O多路复用(I/O multiplexing):在进程的上下文中,应用程序“显式地”调度自己的逻辑流。逻辑流被构建为状态机,当文件描述符上有数据到达时,main程序显式地将它从一种状态转移到另一种状态。
- 线程(Thread):线程运行在进程的上下文中,由操作系统调度。可以将线程看做是进程和I/O多路复用技术的混合,它既像进程一样被操作系统调度,又能像I/O多路复用一样共享虚拟地址空间。
2.基于进程的并发
构建并发程序的最简单方式就是使用进程。每接收到一个连接,父进程都会fork出一个子进程。因为子进程拷贝了父进程的文件描述符表,所以使用进程构建并发时一定要避免资源泄露,尤其是父进程。子进程一定要关闭监听描述符listenfd,这个描述符在子进程中是没有任何用处的。而同样的,父进程要负责关闭连接描述符connfd,同理,这个描述符在父进程中也是一点用处都没有。
3.基于I/O多路复用的并发
现在对我们的Web服务器进行升级,让它不仅能够处理远程客户端的连接请求,写回helloworld欢迎语。同时它还能响应当前命令行中的用户输入。那么,我们应该先等待哪种事件?实际上先等待谁都不是最理想的,因为阻塞地等待一个必然导致无法响应另一个。解决这种困境的技术就是I/O多路复用。
测试题目
1.( 多选题 | 1 分)
有关线程图,下面说法正确的是()
A .图的原点表示没有任何线程完成一条指令的初始状态
B .向右向上是合法的转换
C .向左向下是合法的转换
D .对角线是合法的转换
E .一个程序执行的历史被模型化成状态空间中的一条轨迹线
F .进度图中,两个临界区的交集形成不安全区
2.(单选题|1分)
下面代码对于并发程序来说逻辑上是()条指令?
for(i=0;i<1000; i++)cnt++;
A .2
B .3
C .4
D .5
E .6
F .1
( 多选题 | 1 分)
3.有关多线程的说法,正确的是()
A .竞争和死锁是并发程序中出现的难题
B .程序员错误的假设逻辑流该如何调度时就会发生竞争
C .当一个逻辑流等待一个永远不会发生的事件时就会产生死锁
D .程序使用PV的顺序不当,可能引发死锁
E .利用互斥锁加锁顺序规则可以避免互斥死锁
4.( 多选题 | 1 分)
下面Linux函数()是线程安全的?
A .rand()
B .ctime()
D .localtime_r()
E .scanf()
5.( 多选题 | 1 分)
线程不安全函数类包括()
A .不保护共享变量的函数
B .保持跨越多个调用的状态的函数
C .返回指向静态变量指针的函数
D .调用线程不安全函数的函数
E .调用可重入函数的函数
6.( 多选题 | 1 分)
有关并发程序,下面说法正确的是()
A .程序可以分为并发程序和顺序程序两类
B .程序可以分为并行程序和顺序程序两类
C .并发程序是一种特殊的并行程序
D .并行程序是一种特殊的并发程序
7.( 多选题 | 1 分)
有关“生产者-消费者”和“读者-写者”模型,下面说法正确的是()
A .二者除处理的都是互斥问题
B .二者除处理的都是同步问题
C .二者都要保证对缓冲区的访问是互斥的
D .“生产者-消费者”模型要保证对缓冲区的访问是互斥的
E .“读者-写者”模型要保证读者对缓冲区的访问是互斥的
8.( 多选题 | 1 分)
有关使用信号量实现互斥的说法正确的是()
A .互斥是一种特殊的同步
B .使用二元信号量和PV原语可以实现互斥
C .对于信号量sem_t mutex;
Sem_init(&mutex, 0 , 2);把mutex初始化为二元信号量,用作互斥锁
D .对于共享变量
volatile long cnt = 0;
for(i=0; i<ntiers; i++){
P(&mutex)
cnt++;
V(&mutex)
}
保证了对cnt的 访问是互斥的,cnt的计数是正确的
9.( 多选题 | 1 分)
有关信号量(semphore),下面说法正确的是()
A .信号量s是一个非负的全局变量
B .信号量只能通过P,V操作来处理
C .P,V操作确保信号量s非负
D .sem_post()完成P(s)的操作
E .sem_wait()完成V(s)的操作
10.有关下面的代码hello.c,编译后的可执行程序为phello,下面说法正确的是()
A .编译命令是:gcc hello.c -o phello
B .编译命令是:gcc hello.c -lpthread -o phello
C .编译命令是:gcc hello.c -pthread -o phello
D .phello运行时有一个线程
E .phello运行时有两个线程
F .phello运行时主线程先执行完
G .phello运行时对等线程先执行完
H .phello运行时对等线程和主线程执行顺序不确定
11.( 多选题 | 1 分)
有关线程控制,下面说法正确的是()
A .与进程一样,线程也有父子关系
B .与进程控制中fork()
等价的是pthread_create()
C .与进程控制中exit()等价的是pthread_exit()
D .与进程控制中waitpid()等价的是pthread_join()
E .与进程控制中kill()等价的是pthread_cancel()
F .与进程控制中getpid()等价的是pthread_self()
12( 多选题 | 1 分)
关于线程,下面说法正确的是()
A .线程是运行在进程中的逻辑流
B .每个线程有自己的线程上下文,包括TID、栈、栈指针、PC、通用寄存器和条件码
C .进程是程序级并发,线程是函数级并发
D .一个进程中的线程共享该进程的虚拟地址空间
13( 多选题 | 1 分)
一个状态机包含()
A .状态
B .事件
C .自循环
D .转移
14.有关下面代码,编译后的可执行程序是echoserv,下面说法正确的是()
A .第19行中的STDIN_FILENO的值可以用grep -nr STDIN_FILENO /usr/include 查到为1
B .第24行select()会导到致程序阻塞,可以替代accept()
C .程序运行时,输入CTRL+D,可以让select返回
D .以上代码中加入csapp.h就能编译成功
15.( 多选题 | 1 分)
有关下面代码,编译后的可执行程序是echoserv,下面说法正确的是()
图像 1.png
A .这是一个并发echo服务器
B .这是一个迭代echo服务器
C .第33行关闭已连接描述符
D .第33行关闭监听描述符
E .删除第33行会导致内存泄露
F ../echoserv 5056
,5056是连接的客户端进程的端口号
G ../echoserv 5056 ,5056是连接的服务器进程的端口号
H .删除第30行会导致内存泄露
16( 多选题 | 1 分)
现代操作系统提供的构造并发程序的方法有()
A .异常
B .进程
C .I/O多路复用
D .信号
E .线程
错题分析
14题
- 对于A
grep -nr STDIN_FILENO /usr/include STDIN_FILENO
为0
- 对于B,select()不能用accept()代替。
- 对于C,在Linux系统里,在标准输入上键入Ctri+D表示EOF。故选C
- 对于D,加入头文件后也编译失败,故排除。
10题
#include "csapp.h"
void *thread(void *vargp);
int main()
{
pthread_t tid;
Pthread_create(&tid,NULL,thread,NULL);
Pthread_join(tid,NULL);
exit(0);
}
void *thread(void *vargp)
{
printf("Hello,word!\n");
return NULL;
}
多线程编译需要-lpthread或-pthread参数
pthread_join使得主线程等待对等线程先执行完
7题
- 生产者,消费者问题。生产者生产项目并把它们插入到一个有限的缓冲区。消费者从缓冲区中取出这些项目,然后消费它们
- 信号量的另一个重要作用是调用对共享资源的访问。在这种场景中,一个线程用信号量操作来通知另有一线程,程序状态中的某个条件已经为真了。
- 故答案为BD
20155332 补交ch12课下作业的更多相关文章
- 20165302 ch02 课下作业
20165302 ch02 课下作业 作业内容 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的测试 发一篇相关内容的博客, ...
- 20175221 MyCP(课下作业,必做)
MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...
- 20175221 《Java程序设计》迭代和JDB(课下作业,选做):
20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...
- 20175333曹雅坤MyCP(课下作业,必做)
MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin ...
- MyOD(课下作业,选做)
MyOD(课下作业,选做) 代码要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.b ...
- 迭代和JDB(课下作业,选做)
迭代和JDB(课下作业,选做) 题目要求 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能 2 m,n 要通过命令行传入 3 提交测试运行截图 ...
- ###20175311MyCP(课下作业,必做)
MyCP(课下作业,必做) 作业题目 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.b ...
- MyCP(课下作业,必做)
MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2 的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bi ...
- 20175212课下作业 MyCP
20175212课下作业 MyCP 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2 ...
随机推荐
- git pull 错误:The following untracked working tree files would be overwritten by merge
错误描述: $ git pull origin alphaFrom https://github.com/shirley-wu/HeartTrace * branch alpha ...
- Oracle EBS 日记账
select b.status, h.je_source, (select USER_JE_CATEGORY_NAME from GL_JE_CATEGORIES where JE_CATEGORY_ ...
- linuxGame:文明5汉化
此包来源苹果戏台的steam平台 参考网页: 1.https://tieba.baidu.com/p/4529797745 2.http://www.civclub.net/bbs/forum.php ...
- 企业级NFS网络文件共享服务_【all】
1.1. 什么是NFS(1台机器提供服务) Network File System(网络文件系统)通过局域网让不同的主机系统之间共享文件或目录. NFS客户端可以通过挂载的方式将NFS服务器端共享的数 ...
- 安装zabbix3.4的过程(一)
目录 zabbix服务端安装(centos7.4) zabbix客户端安装 (centos6.9) 注释:本次安装为官方推荐的yum安装方式,如果需要编译安装,请查看下边的博文: 博文地址:https ...
- Promise & Deferred Objects in JavaScript Pt.2: in Practice
原文:http://blog.mediumequalsmessage.com/promise-deferred-objects-in-javascript-pt2-practical-use Intr ...
- Keepalived 实现双机热备
原理 首先有一个虚拟ip暴露给客户端,虚拟ip对应的mac地址为一台真实服务器, 即用户向虚拟ip发送一个请求,该请求会被分发到真实服务器上. 现在有2台真实服务器,一台master,一台backup ...
- 用python解析word文件(三):style
太长了,我决定还是拆开三篇写. (一)段落篇(paragraph) (二)表格篇(table) (三)样式篇(style)(本篇) 选你所需即可.下面开始正文. 在前两篇中,我们已经解析出了par ...
- MySQL主从.md
MySQL Replication 概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它 ...
- python第十八课——常用内置函数
常用内置函数:round(): print(round(3.14),round(3.99)) print(round(3145.926,-2),round(413.575,2)) abs(): pri ...