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题

  • 对于Agrep -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课下作业的更多相关文章

  1. 20165302 ch02 课下作业

    20165302 ch02 课下作业 作业内容 补充完成课上测试(不能只有截图,要有分析,问题解决过程,新学到的知识点) 完成教材 p97 2.96 2.97,要有完备的测试 发一篇相关内容的博客, ...

  2. 20175221 MyCP(课下作业,必做)

    MyCP(课下作业,必做) 任务详情 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: - java MyCP -tx XXX1.txt XXX2 ...

  3. 20175221 《Java程序设计》迭代和JDB(课下作业,选做):

    20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...

  4. 20175333曹雅坤MyCP(课下作业,必做)

    MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin ...

  5. MyOD(课下作业,选做)

    MyOD(课下作业,选做) 代码要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.b ...

  6. 迭代和JDB(课下作业,选做)

    迭代和JDB(课下作业,选做) 题目要求 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能 2 m,n 要通过命令行传入 3 提交测试运行截图 ...

  7. ###20175311MyCP(课下作业,必做)

    MyCP(课下作业,必做) 作业题目 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.b ...

  8. MyCP(课下作业,必做)

    MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2 的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bi ...

  9. 20175212课下作业 MyCP

    20175212课下作业 MyCP 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2 ...

随机推荐

  1. LeetCode 题解之Plus One

    1.题目描述 2.题目分析 从后向前做加法,等于10则进位,否则直接加1 ,返回 digits; 3.代码 vector<int> plusOne(vector<int>&am ...

  2. [转载]Cool, Tomcat is able to handle more than 13,000 concurrent connections

    Last time I have promised you to take a look at more real life scenario regarding threads. In the la ...

  3. Ehcache.xml 配置及属性说明

    1.配置样例 <?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStor ...

  4. docker集群部署

    一.使用自定义网桥连接跨主机容器 要是Linux可以工作在网桥模式,必须安装网桥工具bridge-utils,运行命令:# yum install bridge-utils 查看桥连状态:# brct ...

  5. SQLSERVER的 筛选索引(Fiter Index)

    fiter index(筛选索引)是SQL Server的一项功能,可使此数据库与众不同. 筛选索引的概念 SQL Server中常用的索引是一种物理结构,它包含来自所有行的一组选定列的值 在一张桌子 ...

  6. [翻译] ASFTableView

    ASFTableView A customizable Web like multi column table view for iOS with header and inner rows. 一个类 ...

  7. Redis学习---Redis操作之其他操作

    全局有效的其他操作 save 强制将内存/缓存中的key刷到硬盘上 ------------------------------------------------------------------ ...

  8. AT89S52之串行异步通信笔记

    SRF 中断入口地址 中断源 外中断 外部中断0 INT0(P3.2) 外部中断1 INT1(P3.3) 电平方式触发 低电平 脉冲方式触发 脉冲后延的负跳 内中断 定时中断 串行中断 中断允许控制寄 ...

  9. November 27th 2016 Week 48th Sunday

    It is never too late to be what you might have been. 勇敢做自己,永远不嫌迟. What I might have been? Experienci ...

  10. APUE8进程控制 fork vfork exec