电子科技大学。
作业报告。学生姓名学号: 指导教师:
学生e-mail:
一、作业名称。
多进程协同的词频统计。
二、作业要求。
基本功能:用例:word_count .
/prog ,通过遍历进程(2个以上)对输入目录prog中的文件进行递归并行遍历,统计各个文本文件中的各个单词出现的数量,由汇总进程收集各个遍历进程的统计信息进行汇总,并将汇总词频统计信息打印在屏幕上。
三、设计与实现。
本实验要求用多进程来解决词频统计的问题,接触到这个题目心中会有个大体的思路,首先递归找到某种类型的文件,然后fork子进程去完成统计,并发送到接收端,接收端进行会和,并输出屏幕。但是这是个很粗糙的方案,因为中间会遇到各种各样的问题。
第一,主进程递归查找目录,找到要找的文件类型后,怎么给各个子进程分配任务,要分多少个子进程,每个子进程干多少活,经过思考,我考虑把搜索到的所有特定类型的文件分成若干个组,每个组n个文件,把这n个文件名存到一个文件中,这个n在**中用宏定义来定义,可以改变该值,来改变子进程的个数,测试的时候更方便。
第二,选用哪种通信方式来保证接收端和发送端的通信,我选择了命名管道,他可以保证任意没有关系的进程通信,又具有锁机制,唯一需要考虑的就是防止数据交叉问题。
第三,考虑到性能问题,子进程需要对自己负责的几个文件的单词进行排序,每次查找并添加统计信息的时候可以用二分查找,减少频繁的查找时间,同时排序也会增加时间,综合考虑,还是选择了排序—二分查找的方法。
这个实验分为客户端,负责统计单词,并发送给服务器端,服务器端负责接收数据,并汇总这些信息,客户端的模块主要如下:
服务器端比较简单主要就是接受各个子进程的统计信息,并把他们进行汇总,打印屏幕。
客户端主进程首先用递归函数来查找给定目录下所有的特定类型的文件,并把它写入到一个临时目录中的临时文件中,当个数达到n之后,就需要重新建立一个新的临时文件,写入新的文件中,最后根据该临时目录下,临时文件的个数来创建子进程,每个子进程处理一个临时文件上的n个文件单词的统计,统计完毕后,把它通过管道发送给服务器进程。
服务器端主要从管道里读取各个子进程发送过来的统计信息,并把这些统计信息汇总,打印到屏幕上。
这里主要说明一些变量声明和函数声明:
static int num=3;
这个num变量主要用来确定每个子进程所要负责统计词频的文件个数,可以通过修改这个变量的值来修改每个子进程的工作量。
struct count
char word[28];
int num;
通过这个结构体来存储单词和它的词频,我们需要在**中对这个结构体进行排序,使得插入新的单词信息时,查找时间更短。
static int wordcount(char *)
static void dopath(char *,int);
static void addword(char *buf);
dopath 函数主要是为了递归查找特定类型的文件,并把他的路径存储到临时文件中。wordcount函数用来对文件进行单词分割,然后用addword函数来把每个分隔出来的单词添加到词频统计的信息中。
四、测试。本次试验时间复杂度o(n),空间复杂度为o(n*max),n为子进程的个数,max是结构体数组的大小,测试的时候,我们先把n设置为3,即每个子进程处理三个文件的单次统计。测试结果如下:
五、对本课程或本作业的建议和意见。
本作业主要练习进程和进程间的通信,以及处理一些进程间同步的问题,每一道题都有他要练习的目标,只要好好做,就能收获很多。
六、附录。
作业2 进程调度 答案
作业二进程调度。1 考虑如下四个作业 1 画出这些作业采用fcfs 先来先服务 hrrf 高响应比优先调度算法 的执行时间图。2 计算每个作业的周转时间和带权周转时间。3 计算平均周转时间和平均带权周转时间。2 进程调度采用spf 短进程优先调度算法 和抢占式高优先级优先调度算法 优先数越大优先级越...
2 1进程管理 作业
1 有关进程的下列叙述中是正确的。a 进程是静态的文本 b 进程与程序是一一对应的。c 进程与作业是一一对应的 d 多个进程可以在单个cpu上同时执行。2 进程之间的制约关系可以归结为。a 同步与互斥 b 并发与异步 c 同步与并发 d 同步与异步。3 下列的进程状态变化中的变化是不可能发生的。a ...
操作系统作业2进程和进程通信
实验二进程和进程通信。实验报告。仅供参考仅供参考!一 实验目的。通过使用进程和进程通信方面的系统调用的,加深理解有关进程方面的基本概念。通过实验对进程有进一步的感性认识,掌握系统v的ipc机制。二 实验题目。1 设计一个程序,创建一个子进程,使父子进程合作,协调地完成某一功能。要求在该程序中还要使用...