活动介绍

非太并行虚拟机(NTPVM)项目介绍与实践

立即解锁
发布时间: 2025-08-22 01:29:17 阅读量: 1 订阅数: 7
PDF

UNIX系统编程:通信、并发与线程精解

### 非太并行虚拟机(NTPVM)项目介绍与实践 #### 1. 非太并行虚拟机概述 非太并行虚拟机(NTPVM)是一种调度器,它与PVM控制守护进程(pvmd)有许多相似的特性。NTPVM调度器负责在单个主机上创建和管理任务。调度器通过标准输入接收请求,并通过标准输出进行响应,后续标准输入和输出可以重定向到网络通信端口。调度器可能会收到创建任务或向其控制下的任务转发数据的请求。 任务是执行指定程序的进程,每个任务由计算ID和任务ID标识。当调度器收到创建具有特定计算ID和任务ID的任务请求时,它会创建一对管道并派生一个子进程来执行该任务。调度器与子任务之间通过管道进行通信,从调度器到子任务的管道在调度器端标记为writefd,子任务将其标准输入重定向到该管道;从子任务到调度器的管道在调度器端标记为readfd,子任务将其标准输出重定向到该管道。 调度器支持向任务传递输入数据、接收任务的输出数据,并向具有相同计算ID的任务广播数据。此外,调度器还支持编号屏障和取消具有相同计算ID的任务。与真正的PVM相比,NTPVM在几个方面更为简单。PVM具有有序消息传递功能,允许任何任务与同一计算中的其他任务进行通信,有消息缓冲机制,还提供复杂的计算监控工具。而NTPVM在收到消息时就立即传递,不支持点对点任务通信,监控能力也较为原始。 #### 2. NTPVM项目概述 NTPVM中的任务是独立的进程,被分组为称为计算的单元。调度器负责创建和管理这些任务。一般来说,一个计算中的任务不必驻留在同一台机器上,项目规范也考虑到了这一扩展。不过,本章描述的项目由单个调度器控制所有计算。 调度器通过从标准输入读取数据包并向标准输出写入数据包与外界进行通信。它可能会收到创建新任务的数据包,或者收到针对其控制下任务的数据数据包。调度器将其控制下任务生成的输出以数据包的形式转发到自己的标准输出。在项目的前四个部分,任务发送ASCII数据,调度器将数据封装在数据包中;之后,任务自己生成数据包。 调度器数据包包含计算ID、任务ID、数据包类型、数据包长度和数据包信息。前四项组成固定长度的数据包头部,存储在taskpacket_t类型的结构中。假设数据包的信息部分包含不超过MAX_PACK_SIZE字节的数据。 调度器将每个活动任务的信息保存在全局的ntpvm_task_t类型的tasks数组中,该数组应实现为一个具有适当访问和修改函数的对象。调度器不允许同时执行超过MAX_TASKS个任务。初始时,将tasks数组每个元素的compid成员设置为 -1,表示该插槽为空。 以下是ntpvm.h头文件的代码: ```c #include <pthread.h> #include <sys/types.h> #define MAX_PACK_SIZE 1024 #define MAX_TASKS 10 #define NUMTYPES 6 typedef enum ptype {NEWTASK, DATA, BROADCAST, DONE, TERMINATE, BARRIER} packet_t; typedef struct { int compid; int taskid; packet_t type; int length; } taskpacket_t; typedef struct { int compid; /* computation ID for task */ int taskid; /* task ID for the task */ int writefd; /* holds dispatcher->child fd */ int readfd; /* holds child->dispatcher fd */ int recvbytes; int recvpacksets; int sentbytes; int sentpackets; pid_t taskpid; /* process ID of the forked task */ pthread_t tasktid; /* thread ID of task output thread */ int barrier; /* -1 if not at barrier, else barrier number */ pthread_mutex_t mlock; /* mutex lock for element */ int endinput; /* true if no more input for task */ } ntpvm_task_t; ``` 调度器数据包共有六种类型:NEWTASK、DATA、BROADCAST、DONE、TERMINATE和BARRIER。数据包由taskpacket_t类型的头部结构和一个数据字段组成,数据字段是一个数组,其大小由头部的长度字段指定。调度器对不同类型数据包的解释如下: | 数据包类型 | 调度器处理方式 | | ---- | ---- | | NEWTASK | 当调度器在标准输入上收到NEWTASK数据包时,它会启动一个新任务。该数据包的信息部分给出了派生的子任务要执行的命令行。调度器创建两个管道并派生一个子进程,该子进程调用execvp执行指定的命令。 | | DATA | 调度器将从标准输入读取的DATA数据包视为针对由数据包头部的计算ID和任务ID标识的任务的输入数据。在项目的前四个部分,调度器会剥离数据包头部,并将实际的数据包数据写入相应任务的writefd。调度器还会将从单个任务收到的数据以DATA数据包的形式转发到其标准输出。 | | DONE | 当调度器在标准输入上收到DONE数据包时,它会设置tasks数组中相应任务的endinput成员,并关闭该任务的writefd文件描述符。调度器会丢弃后续到达的针对该任务的DONE或DATA数据包。 | | BROADCAST | 调度器将来自标准输入的任何BROADCAST数据包转发到指定计算中的所有任务。如果任务向调度器发送BROADCAST数据包,调度器会将请求转发到同一计算中的所有任务,并将请求转发到其标准输出。 | | TERMINATE | 如果调度器在其标准输入上收到TERMINATE数据包,它会杀死由数据包的计算ID和任务ID标识的任务。如果任务ID为 -1,调度器会杀死指定计算中的所有任务。调度器以类似的方式处理从readfd收到的TERMINATE数据包。如果没有任务ID与数据包匹配,或者任务ID为 -1,调度器还会将TERMINATE数据包写入标准输出。 | | BARRIER | BARRIER数据包用于在计算中的任务执行的特定点同步任务。 | NTPVM项目由以下几个部分组成: 1. **Part I**:I/O设置和测试 2. **Part II**:无输入的单个任务(处理NEWTASK和输出数据) 3. **Part III**:一次处理一个任务(处理NEWTASK、DATA和DONE数据包) 4. **Part IV**:多个任务和计算(处理NEWTASK、DATA和DONE数据包) 5. **Part V**:任务同步(处理BROADCAST和BARRIER数据包) 6. **Part VI**:清理(处理TERMINATION数据包和信号) 7. **Part VII**:有序消息传递 在项目的前四个部分,子任务不使用数据包进行通信,调度器在写入writefd之前会剥离数据包头部,这种格式允许调度器将普通的UNIX实用程序(如cat或ls)作为任务运行。从第五部分开始,任务使用数据包与调度器进行通信,此时项目需要特定的任务程序进行NTPVM测试。 以下是不同类型数据包和调度器处理方法的示例: - **NEWTASK数据包**:调度器等待来自标准输入的NEWTASK数据包,该数据包包含计算ID、任务ID和命令行字符串。例如,以下NEWTASK数据包请求创建计算3中的任务2来执行ls -l命令: ```plaintext Computation ID: 3 Task ID: 2 Packet Type: NEWTASK Packet Data Length: 5 Packet Information: ls -l ``` 调度器会将数据包中的数据转换为以空字符结尾的字符串,然后请求tasks数组查找一个空闲条目,并存储有关新任务的信息。如果检测到具有相同计算和任务ID的任务已经存在于tasks数组中,调度器会丢弃该数据包并报告错误。新条目的sentpackets、sentbytes、recvpackets、recvbytes和endinput成员设置为0,barrier成员设置为 -1,表示任务不在屏障处等待。调度器创建两个管道,并使用其中两个管道文件描述符与子任务进行通信,将这些描述符存储在tasks数组条目的readfd和writefd成员中。调度器派生一个子进程,并将子进程的进程ID存储在tasks条目的taskpid成员中。调度器关闭未使用的管道文件描述符,然后等待来自标准输入或任务的readfd描述符的I/O。子任务将其标准输入和输出重定向到管道,并关闭未使用的文件描述符,然后调用execvp执行命令字符串。 - **DATA数据包**:当调度器从标准输入读取DATA数据包时,它会询问tasks对象,以确定数据包的任务ID和计算ID是否与tasks数组中的任何条目匹配。如果没有匹配的条目,调度器会丢弃该数据包;否则,它会更新任务在tasks数组条目中的recvpackets和recvbytes成员。在项目的前四个部分,任务是接受ASCII输入的标准UNIX实用程序,调度器将数据包的信息部分转发到任务的writefd描述符。从第17.8节开始,每个任务以数据包格式读写数据,调度器将DATA数据包复制到其标准输出。例如,以下DATA数据包请求将数据“This is my data”发送到计算3中的任务2: ```plaintext Computation ID: 3 Task ID: 2 Packet Type: DATA Packet Data Length: 15 Packet Data: This is my data ``` - **DONE数据包**:当调度器在标准输入上收到DONE数据包时,它会设置tasks数组中相应任务的endinput成员,并关闭该任务的writefd描述符。例如,以下DONE数据包指定计算3中的任务2不再有输入数据: ```plaintext Computation ID: 3 Task ID: 2 Packet Type: DONE Packet Data Length: 0 Packet Data: ``` 当调度器在任务的readfd描述符上检测到文件结束指示时,它会关闭该描述符,并在标准输出上发送一个DONE数据包,表示任务已完成。如果任务的writefd描述符仍然打开,调度器会关闭它。调度器最终必须对该子任务进程调用wait,并将tasks数组条目的compid成员设置为 -1,以便该数组条目可以被重用。如果调度器在其自己的标准输入上收到文件结束指示,它会关闭所有活动任务的writefd描述符,并将每个活动任务在tasks数组条目的endinput成员设置为1。当它在所有活动任务的readfd描述符上收到文件结束指示时,调度器会等待每个任务,然后退出。调度器还应定期等待所有已完成的子任务。 #### 3. 调度器的I/O和测试 调度器通过调用getpacket从标准输入接收输入数据,并通过调用putpacket向标准输出发送输出数据。数据总是分两部分传输:首先,调度器读取或写入taskpacket_t类型的头部;然后,它使用头部中的长度成员来确定要读取或写入的数据包数据的字节数;最后,它读取或写入数据包的数据部分。假设数据包数据字段包含不超过MAX_PAC
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

吴雄辉

高级架构师
10年武汉大学硕士,操作系统领域资深技术专家,职业生涯早期在一家知名互联网公司,担任操作系统工程师的职位负责操作系统的设计、优化和维护工作;后加入了一家全球知名的科技巨头,担任高级操作系统架构师的职位,负责设计和开发新一代操作系统;如今为一名独立顾问,为多家公司提供操作系统方面的咨询服务。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

【CAD转UDEC:一步到位的解决方案】:快速转换与模型导入指南

# 摘要 本文系统介绍了CAD(计算机辅助设计)数据转换为UDEC(通用离散元法代码)模型的全过程。首先概述了转换的基本概念及其重要性,然后详细阐述了理论转换过程中的关键步骤,包括CAD与UDEC模型差异的分析、理论转换机制,以及转换软件与工具的选择。接着,本文提供了实践操作的详细指南,包括准备工作、模型转换的步骤和常见问题解决策略。此外,还探讨了高级应用技巧,如CAD模型优化和UDEC模型的高级应用。最后,本文介绍了自动化与定制化转换解决方案,并对未来的发展趋势进行展望。整个研究旨在提升CAD到UDEC转换的效率和质量,为相关领域的研究与应用提供参考和指导。 # 关键字 CAD转UDEC;

HCIA-Datacom网络监控与管理:使用NMS维护网络健康的5大技巧

![HCIA-Datacom网络监控与管理:使用NMS维护网络健康的5大技巧](https://grafana.com/media/blog/integration-clickhouse/Clickhouse-integration-3.png) # 摘要 网络监控和管理是保障现代网络稳定运行的关键环节,网络管理系统(NMS)在这一过程中扮演着至关重要的角色。本文首先探讨了NMS在网络监控与管理中的重要性,并对网络监控的基础理论进行了分析,包括关键指标的监测以及监控工具的选择。通过实践章节,本文深入介绍了NMS的部署与配置,监控实践技巧以及故障诊断与管理方法。此外,本文还讨论了网络监控数据的

深入了解LED控制:掌握显示屏界面设计与功能配置

![LED显示屏软件](http://18280613.s21i.faiusr.com/2/ABUIABACGAAgy4PljQYo1Y-E8QYwuAg4zwI.jpg) # 摘要 LED显示屏作为现代显示技术的重要组成部分,在信息传播和广告等领域发挥着重要作用。本文首先介绍了LED控制的基础知识,随后深入探讨显示屏界面设计原理,包括屏幕分辨率、色彩模型、设计工具及用户体验的优化。文章进一步阐述了LED显示屏的功能配置与实现,包括文本、图像视频播放以及动态效果的制作和传感器集成。针对LED显示屏的技术标准和通信协议进行了详尽分析,并通过实践案例展示了LED控制在不同场景的应用。最后,本文展

【FPGA信号完整性故障排除】:Zynq7045-2FFG900挑战与解决方案指南

![【FPGA信号完整性故障排除】:Zynq7045-2FFG900挑战与解决方案指南](https://www.protoexpress.com/wp-content/uploads/2024/04/Parallel-termination-_diff.-pair-1-1024x421.jpg) # 摘要 随着电子系统对性能要求的日益提高,FPGA信号完整性成为设计和实现高性能电子系统的关键。本文从FPGA信号完整性基础讲起,分析了Zynq7045-2FFG900在高速接口设计中面临的信号完整性挑战,包括信号反射、串扰、电源地线完整性和热效应等问题,并探讨了硬件设计因素如PCB布局和元件选

自动化脚本编写:简化you-get下载流程的秘诀

![自动化脚本编写:简化you-get下载流程的秘诀](https://www.edureka.co/blog/content/ver.1531719070/uploads/2018/07/CI-CD-Pipeline-Hands-on-CI-CD-Pipeline-edureka-5.png) # 摘要 随着数字内容的爆炸性增长,自动化脚本在内容管理和数据处理中的作用变得越来越重要。本文首先介绍了自动化脚本编写的基础知识,并以you-get工具作为实践案例,详细阐述了其基础应用与脚本化过程。随后,文章进一步深入探讨了自动化脚本的高级定制方法,包括参数化、高级下载功能实现以及维护与扩展性的策

数据隐私与合规性问题:数据库需求分析中的【关键考量】

![数据隐私与合规性问题:数据库需求分析中的【关键考量】](https://www.collidu.com/media/catalog/product/img/f/8/f834a9dd19e7431b1ebd7219f776ee0921f7540df717b7b86435cb800f48607b/gdpr-compliance-slide1.png) # 摘要 随着信息技术的快速发展,数据隐私与合规性问题日益突出,成为数据库设计和管理的重要议题。本文从数据隐私与合规性概述出发,深入探讨了数据库设计中的隐私保护策略,包括数据分类、敏感度评估、数据加密与匿名化技术以及访问控制与权限管理等。此外,

【进阶知识掌握】:MATLAB图像处理中的相位一致性技术精通

![相位一致性](https://connecthostproject.com/images/8psk_table_diag.png) # 摘要 MATLAB作为一种高效的图像处理工具,其在相位一致性技术实现方面发挥着重要作用。本文首先介绍MATLAB在图像处理中的基础应用,随后深入探讨相位一致性的理论基础,包括信号分析、定义、计算原理及其在视觉感知和计算机视觉任务中的应用。第三章重点阐述了如何在MATLAB中实现相位一致性算法,并提供了算法编写、调试和验证的实际操作指南。第四章对算法性能进行优化,并探讨相位一致性技术的扩展应用。最后,通过案例分析与实操经验分享,展示了相位一致性技术在实际图

高斯过程可视化:直观理解模型预测与不确定性分析

# 摘要 高斯过程(Gaussian Processes, GP)是一种强大的非参数贝叶斯模型,在机器学习和时间序列分析等领域有着广泛应用。本文系统地介绍了高斯过程的基本概念、数学原理、实现方法、可视化技术及应用实例分析。文章首先阐述了高斯过程的定义、性质和数学推导,然后详细说明了高斯过程训练过程中的关键步骤和预测机制,以及如何进行超参数调优。接着,本文探讨了高斯过程的可视化技术,包括展示预测结果的直观解释以及多维数据和不确定性的图形化展示。最后,本文分析了高斯过程在时间序列预测和机器学习中的具体应用,并展望了高斯过程未来的发展趋势和面临的挑战。本文旨在为高斯过程的学习者和研究者提供一份全面的

【MATLAB词性标注统计分析】:数据探索与可视化秘籍

![【MATLAB词性标注统计分析】:数据探索与可视化秘籍](https://img-blog.csdnimg.cn/097532888a7d489e8b2423b88116c503.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzMzNjI4MQ==,size_16,color_FFFFFF,t_70) # 摘要 MATLAB作为一种强大的数学计算和可视化工具,其在词性标注和数据分析领域的应用越来越广泛。本文

【VB.NET GUI设计】:WinForms与WPF设计与实现的艺术

![【VB.NET GUI设计】:WinForms与WPF设计与实现的艺术](https://www.der-wirtschaftsingenieur.de/bilder/it/visual-studio-c-sharp.png) # 摘要 本文系统地介绍了VB.NET环境下的图形用户界面(GUI)设计,重点讲解了WinForms和WPF两种技术的使用与进阶。首先,概述了VB.NET在GUI设计中的作用,并对WinForms设计的基础进行了深入探讨,包括事件驱动编程模型、表单和控件的运用、界面布局技巧以及数据绑定和事件处理。随后,转向WPF设计的进阶知识,强调了M-V-VM模式、XAML语法