mit6.s081 lab6 Copy-on-Write Fork for xv6

2024-03-11 06:32
文章标签 fork s081 mit6 write xv6 copy lab6

本文主要是介绍mit6.s081 lab6 Copy-on-Write Fork for xv6,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Implement copy-on write

copy-on-write fork需要解决什么问题?
xv6中的fork()调用需要拷贝所有父进程中的user space memory给子进程,如果user space memory中的空间很大,那么这个拷贝的过程需要消耗非常多的时间。而且这个拷贝的动作很多时候都是浪费的,因为在fork()后往往还会调用exec(),之前所拷贝的user space memory需要被丢弃掉。
为了解决以上问题,需要实现copy-on-write fork。在COW fork中将会推迟对物理内存的分配和拷贝操作,一开始只是创建一个pagetable给子进程,该pagetable指向父进程的物理页,COW fork会将父进程和子进程中的pte标记为不可写的,当其中的一个进程试图对物理页进行写操作室,CPU就会发生page fault,kernel中的page fault handler会对page fault进行处理,handler会为发生page fault的process分配一个物理页,并将原来的物理页中的内容拷贝到新的物理页,然后修改发生page fault的process中的pte指向新分配的物理页,并将pte标记为可写入的。物理页的删除需要通过一个引用计数来记录有多少个process正在共享当前的物理页,当引用数量为0时,才真正地释放该物理页。
为了实现cow fork需要对xv6进行以下修改:
1.修改uvmcopy()中的代码,复制页表时不再分配新的物理页,而是使子进程中的pte指向父进程的物理页,清除父进程和子进程中的pte中的PTE_W位。

int
uvmcopy(pagetable_t old, pagetable_t 

这篇关于mit6.s081 lab6 Copy-on-Write Fork for xv6的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/796946

相关文章

Unstructured cannot write mode RGBA as JPEG 错误解决

Unstructured cannot write mode RGBA as JPEG 错误解决 0. 错误详细1. 解决方法 0. 错误详细 Image Extraction Error: Skipping the failed imageTraceback (most recent call last):File "/root/miniconda3/envs/learn-y

70-java write类应用场景

在Java中,我们可以使用java.io包中的FileWriter和BufferedWriter类来写入数据到文件。以下是一个简单的例子,展示了如何使用FileWriter和BufferedWriter来写入数据到文件: import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;pub

SylixOS write 0 字节问题

1 问题描述 在移植中间件过程中,在SylixOS调用write函数写入0字节的数据到文件中时,会导致对应的中间件测试用例失败,失败的原因是文件系统中的write函数在Linux系统和SylixOS有区别,两种实现的差别如下。 2 write函数的实现机制 2.1 SylixOS实现机制 在SylixOS下通过write 函数写数据到普通文件中时,第一步会判断写入的数据是否为0,如果是0直

Java 入门指南:Java 并发编程 —— Copy-On-Write 写时复制技术

文章目录 Copy-On-Write使用场景特点缺点CopyOnWrite 和 读写锁相同点之处不同之处 CopyOnWriteArrayList适用场景主要特性方法构造方法CopyOnWriteArrayList 使用示例 CopyOnWriteArraySet适用场景主要特性方法构造方法使用注意事项CopyOnWriteArraySet 使用示例 Copy-On-Writ

Linux进程初识:OS基础、fork函数创建进程、进程排队和进程状态讲解

目录 1、冯诺伊曼体系结构 问题一:为什么在体系结构中存在存储器(内存)? 存储单元总结: 问题二:为什么程序在运行的时候,必须把程序先加载到内存? 问题三:请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 2、操作系统 2.1操作系统的概念: 我们首先要明白什么是管理: 2.2为什么要有操作系统? 2.3操作系统如何保证稳定和安全呢?(利用系统调用函数解决)

df.write.csv

# 将 DataFrame 写入 CSV 文件# 拆分 ArrayType 列df_exploded = df.withColumn("interests", explode("interests"))print("\nExploded DataFrame:")df_exploded.show(truncate=False)# 写入 CSV 文件df_exploded.write.csv

redis被攻击redis READONLY You can‘t write against a read only slave.

redis 日志路径 /var/log/redis 拿下来后发现有这种错误 Operation now in progress 可能是网络断开导致, 查找redis whereis redis 修改 vim /etc/redis.conf 大概在300行 下面代码yes改no slave-read-only no 重启redis sudo systemctl restart

Linux的进程,线程以及调度(fork与僵尸,内存泄漏,task结构体,停止状态与作业控制)

1.Linux进程生命周期(就绪、运行、睡眠、停止、僵死) 2.僵尸是个什么鬼? 3.停止状态与作业控制,cpulimit 4.内存泄漏的真实含义 5.task_struct以及task_

2024.9.1 Python,跳跃游戏,贪心算法,回溯算法复原 IP 地址,关于回溯过程中列表的[:]以及copy问题再讨论

先祝各位C友们9月快乐,生活幸福。 1.跳跃游戏,贪心算法 昨天的三个代码我写到最后没时间去盘了,今天来盘一下,昨天我写的第一个代码从逻辑上就有问题,所以不停的报错不停的报错,我在报错的过程中不断地去加可能性,但是加一种可能就只解决一种问题,所以说明问题没有在根本上解决,所以我便在今天去看之前的代码有什么问题,我的代码如下: #错的class Solution:def jump(self,

NumPy(十三):数组的复制【.copy()】

import numpy as np# 数组的复制ar1 = np.arange(10)ar2 = ar1print('ar1 = {0}, ar2 = {1}'.format(ar1, ar2))print('ar2 is ar1: ', ar2 is ar1)# 回忆python的赋值逻辑:指向内存中生成的一个值 → 这里ar1和ar2指向同一个值,所以ar1改变,ar2一起改变ar1