首页 > 编程知识 正文

数据库实现原理,共享内存如何实现

时间:2023-05-04 05:49:25 阅读:149850 作者:4108

Linux的2.2.x内核支持多种共享内存方法,包括系统调用、Posix共享内存和系统v共享内存。

共享存储器是最有用的进程间通信方式,可以说是最快的IPC形式。 两个不同的进程a、b共享内存意味着同一个物理内存映射到进程a、b各自的进程地址空间。 进程a可以立即看到进程b对共享存储器中数据的更新,反之亦然。 由于多个进程共享同一个内存区域,所以一定需要某种同步机制,可以同时实现排他锁和信号量。

系统v共享内存原理

需要在进程之间共享的数据被放置在被称为IPC共享内存区域的位置,需要访问该共享区域的所有进程必须将其共享区域映射到本进程的地址空间。 系统v共享内存通过shmget获取或创建IPC共享内存空间并返回相应的标识符。 内核保证shmget获取或创建共享内存区域,初始化共享内存区域对应的shmid_kernel结构,同时在特殊文件系统shm中创建并打开同名文件,在内存中保存该文件对应的dedel 新打开的文件不属于任何进程(任何进程都可以访问共享内存区域)。 所有这些都在系统调用shmget中进行。

mmap原理

在Linux上有一个名为mmap (该mmap )的系统调用,该系统调用将文件映射到进程的地址空间(进程使用的虚拟存储器),进程可以通过读写该进程的地址空间来读写文件

你可能会觉得不可思议,我明明写了内存,为什么会写文件呢? 他们之间是怎么转换的呢?

没错,你写的确实是内存,但你写的这个内存不是普通的内存。 你写在这个存储器里的内容,过一会儿就会被内核写入这个文件。 写入文件最终会将数据写入设备(硬盘、Nand Flash等)。

map的优点主要是为用户程序的随机访问、操作、文件提供了一种方便的操作方法; 其次,它提供了在不同进程中共享大量数据的高效手段。 它还为处理特大文件(不能一次读取到内存中)提供了有效的方法。

共享存储器原理

内核中存在特殊的文件系统,该文件系统的存储介质不是其他的,正是RAM。

shmget ) )调用后,系统会为您在此文件系统中创建一个文件,但此时您只是创建了此文件。

然后,应该调用shmat ()。 shmat ) )时,内核使用mmap将该文件映射到进程地址空间。 此时,可以直接读写映射的地址。

过了一会儿,内核把你写的内容写在了文件里。 但是这个文件的存储介质是内存,他怎么办? 明白了吗?

答:他要写内存啊

结论:使用内存映射文件处理大文件可以提高效率。

是否使用文件映射

首先,让我们看一下不使用内存映射文件时的处理流程。 首先,将磁盘文件的内容读取到内存中,然后进行修改,最后写回磁盘。 第一个磁盘文件的读取通过系统调用进行。 首先将文件内容从磁盘复制到内核空间缓冲区,然后将这些数据复制到用户空间。 实际上是两次复制数据。 第三步的写回也同样要经过两次数据拷贝。

因此,基本上有四次数据拷贝。 由于大文件的数据量在几十GB以上,所以复制开销非常大。

内存映射文件是操作系统提供的机制,可以减少这些不必要的数据拷贝,提高效率。 这是mmap )将文件直接映射到用户空间,mmap )没有进行数据复制,真正的数据复制是在缺页中断处理时进行的。 mmap )将文件直接映射到用户空间,中断处理函数基于该映射关系将文件从硬盘直接复制到用户空间,因此比read进行两次数据复制要好两倍

一般来说,读/写操作可以满足大多数文件操作的要求,但对于特定APP应用程序所需的数十GB或更大的存储,这种常规文件处理方法显然不可能处理。

map将文件或其他对象映射到内存。 文件映射到多个页面。 如果文件大小不是所有页面大小的总和,则未使用最后一页的区域将被清零。 munmap执行相反的操作,删除特定地址区域的对象映射。

在进程中使用mmap映射文件时,可以直接操作此虚拟地址,执行读写文件等操作,而不需要调用读、写等系统调用。 但是,请注意,直接写入该段存储器时,不会写入超过当前文件大小的内容。

使用共享内存通信的一个明显好处是效率高。 这是因为进程不需要数据副本就可以直接读写内存。 管道和消息队列等通信方式需要在内核和用户区域进行四次数据复制,而共享内存只进行两次数据复制:一次从输入文件复制到共享内存区域,一次从共享内存区域复制到输出文件。 实际上,在进程之间共享内存时,并不总是在读写少量数据后取消映射,而是在有新通信时重建共享内存空间。 而是在通信完成之前保持共享区域。 这会将数据内容保存在共享内存中,但不会写入文件。 共享内存的内容经常在取消映射时写入文件。 因此,使用共享存储器的通信方式非常有效率。

参照:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。