Skip to content

Update aof.md-关于文章中对aof后台重写时,进程对物理内存权限描述有歧义 #319

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 19 additions & 3 deletions redis/storage/aof.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,25 @@ AOF 重写机制是在重写时,读取当前数据库中的所有键值对,

![](https://img-blog.csdnimg.cn/img_convert/5a1f2a90b5f3821c19bea3b7a5f27fa1.png)

这样一来,子进程就共享了父进程的物理内存数据了,这样能够**节约物理内存资源**,页表对应的页表项的属性会标记该物理内存的权限为**只读**
这样一来,子进程就共享了父进程的物理内存数据了,这样能够节约物理内存资源。页表对应的页表项的属性会标记该物理内存的权限为只读

不过,当父进程或者子进程在向这个内存发起写操作时,CPU 就会触发**缺页中断**,这个缺页中断是由于违反权限导致的,然后操作系统会在「缺页异常处理函数」里进行**物理内存的复制**,并重新设置其内存映射关系,将父子进程的内存读写权限设置为**可读写**,最后才会对内存进行写操作,这个过程被称为「**写时复制 (*Copy On Write*)**」。
不过,当父进程或者子进程在向这个内存发起写操作时,CPU 就会触发**缺页中断**,这个缺页中断是由于违反权限导致的。然后操作系统会在「缺页异常处理函数」里进行**物理内存的复制**,并重新设置其内存映射关系:

对于发起写操作的进程:

操作系统会为该进程复制一份新的物理内存页。

更新该进程的页表,使其映射到新复制的物理内存页。

将新内存页的权限设置为**可读写**,以便该进程可以继续执行写操作。

对于未发起写操作的进程:

该进程仍然映射到原来的物理内存页。

原来的内存页权限仍然是**只读**,直到该进程尝试写入时才会触发类似的写时复制过程。

这个过程被称为「写时复制 (Copy On Write)」。

![](https://img-blog.csdnimg.cn/img_convert/d4cfac545377b54dd035c775603b4936.png)

Expand Down Expand Up @@ -242,4 +258,4 @@ Redis 提供了三种将 AOF 日志写回硬盘的策略,分别是 Always、Ev

最新的图解文章都在公众号首发,别忘记关注哦!!如果你想加入百人技术交流群,扫码下方二维码回复「加群」。

![img](https://cdn.xiaolincoding.com/gh/xiaolincoder/ImageHost3@main/%E5%85%B6%E4%BB%96/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BB%8B%E7%BB%8D.png)
![img](https://cdn.xiaolincoding.com/gh/xiaolincoder/ImageHost3@main/%E5%85%B6%E4%BB%96/%E5%85%AC%E4%BC%97%E5%8F%B7%E4%BB%8B%E7%BB%8D.png)