# UMManage **Repository Path**: wangzhankun/ummanage ## Basic Information - **Project Name**: UMManage - **Description**: 跨虚拟页表的共享内存管理方案 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-12 - **Last Updated**: 2023-11-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 修改log |是否解决|问题|性能|解决方法| |---|---|---|---| |x|不知道为啥`VirtUintrTest.cpp`改为`VirtUintrTest.c`之后,会出现`kill`函数未声明的情况。如果手动声明的话,会导致多进程情况下使用`kill`发送信号是无效的。|release模式下,多进程69万,多线程410万|解决方案是使用gnu17而非c17,(或者gnu的其它语言版本),这样才会启用GNU拓展,能够正确编译。| |部分解决|死锁问题。在测试时发现无法无论是多线程模式还是多进程模式,都存在程序无法继续执行的问题。|release,多线程416万,多进程87万|应该是解决了,原因是:1. `init_um`函数中对整个内存区域的初始化不对,如果enclave先启动并初始化了变量之后,normal再启动就会清空整个内存区域,因此这里需要修复。解决方法是,创建共享内存时就清空整个内存; 2. 在`async_call`函数中冗余增加了`num_call_and_ret`,必须保证该变量仅在`ring-buffer.c:writeData`函数中增加,在`ring-buffer.c:readData`函数中减小。| # 设计方法 ## 适用范围 仅支持单生产者单消费者模式,支持两个线程/进程互为生产者和消费者。 仅测试了Linux系统。 目标:提供极其高效的跨进程/线程异步函数调用机制,特别适用于多函数调用、多数据传输领域。 ## 概述 目前,我在测试时,每次传输的数据限制在2048个字节以内(随机传输),消费者在消费时 无论是线程还是进程,都是通过共享内存的方式实现数据交换的。如果要实现异步通知,进程间通信需要使用`kill`函数进行通知(或许还有其它方式,我不知道);线程间异步通知可以通过条件变量等方法。如果对实时响应有强要求,可以通过轮询的方法实现,轮询也可以避免特权级切换(目前所有的异步通知机制都是需要内核参与的吧,用户态中断倒是个不错的通知机制,可以避免内核参与)。 文件目录: ```sh . ├── Log 支持多线程的标准输出 ├── README.md ├── src 测试文件 ├── UMManage 共享内存管理库 └── xmake.lua ``` ## 共享内存管理 共享内存的管理是通过ring-buffer机制实现的,因此仅支持数据先入先出:即消费者只能消费生产者先生产出的数据。