MIT 6.S081 Lab5 Copy-On-Write Fork】的更多相关文章

前言 最近绝大多数的空闲时间都拿来锤15-445了,很久没动6.S081.前几天回头看了一下一个月前锤完的Lazy Allocation,自己写的代码几乎都不认识了.......看来总结之类的东西最好还是趁着热乎的时候写啊. 不过15-445的内容实在太多了,我只是为了锤Lab粗略的看了看课件,课件里很多东西都没研究,相关的总结还是推迟到所有Lab锤完后重新整理一下再写吧.先把几天前刚做完的Copy-On-Write给写出来.最近会把前面草草写下的Lab Lazy Allocation的相关内容…
前言 今晚在实验室摸鱼做6.S081的Lab3 Allocator,并立下flag,改掉一个bug就拍死一只在身边飞的蚊子.在击杀8只蚊子拿到Legendary后仍然没能通过usertest,人已原地裂解开来.遂早退实验室滚回宿舍,捡起自己已经两年没写的blog,码点自己用vscode调试xv6的心得和小tips,如果对同样在码xv6但无法忍受gdb调试界面的小伙伴们有帮助那就太好了,积点功德,但愿明天能通过test,少打几只蚊子( 还是从直接用gdb调试说起 刚开始码lab时,我想很多人第一反…
前言 打开自己的blog一看,居然三个月没更新了...回想一下前几个月,开题 + 实验室杂活貌似也没占非常多的时间,还是自己太懈怠了吧,掉线城和文明6真的是时间刹手( 不过好消息是把15445的所有lab都锤完了,最近一个月应该没啥活干.立个flag,这个月更它个10篇blog,把15445的知识点.lab,以及6.S081想写的东西都写完.今天先做个复健,码一下刚做完的lab8,以及xv6的file system的学习笔记. 坏消息是leetcode一道没动,甚至主力啥语言啥框架还没定下来,开…
前言 Lab一做一晚上,blog一写能写两天,比做Lab的时间还长( 这篇博文是半夜才写完的,本来打算写完后立刻发出来,但由于今天发现白天发博点击量会高点,就睡了一觉后才发(几十的点击量也是点击量啊T_T).... 我个人计划采用bottom-up的方式,用两篇blog配合源码讲解xv6的文件系统. xv6对文件系统的架构做出了如下的分层: 我个人倾向于将设备驱动程序也加入到文件系统的架构中,因此最后形成的架构图如下: 本篇blog讲解首先谈了谈我个人对文件系统的见解,随后讲解xv6的存储介质层…
前言 我本想把上篇中没讲完的剩余层全部在本篇中讲完,但没想到越写越多.日志层的代码不多,其思想和解决问题的手段也不算难以理解,但其背后涉及的原理和思想还是非常值得回味的,因此我打算用一整篇完整的blog来讲解日志层,并对其作出一点扩展. 本篇内容应该也会帮你对事务的拥有一个更好地理解. 聊聊xv6的文件系统(上篇):https://www.cnblogs.com/KatyuMarisaBlog/p/14366115.html 浅谈一致性 警告: 本节内容我越写越觉得自己是个民科,整出了一套四不像…
前言 只有光头才能变强 在读<Redis设计与实现>关于哈希表扩容的时候,发现这么一段话: 执行BGSAVE命令或者BGREWRITEAOF命令的过程中,Redis需要创建当前服务器进程的子进程,而大多数操作系统都采用写时复制(copy-on-write)来优化子进程的使用效率,所以在子进程存在期间,服务器会提高负载因子的阈值,从而避免在子进程存在期间进行哈希表扩展操作,避免不必要的内存写入操作,最大限度地节约内存. 触及到知识的盲区了,于是就去搜了一下copy-on-write写时复制这个技…
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这些数据对象的创建过程. 在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于 父进程,具有良好的并发性,但是二者之间的通讯需要通过专门的通讯机制,如:pipe,fifo,System V IPC机制等,另外通过fork创建子进程系统开销很大,需要将上面描述的每…
目录 1. 简介 2. 安装ubuntu20.04 3. 更换源 3.1 更换/etc/apt/sources.list文件里的源 3.2 备份源列表 3.3 打开sources.list文件修改 3.4 刷新列表 4. 安装SSH 4.1 SecureCRT 报错 4.2 解决方法 4.3 修改ssh_config 4.4 修改sshd_config 4.5 重新启动服务并测试 5. 配置静态IP 6. 安装RISC-V交叉编译工具 7. 安装QEMU 8 测试 8. 1 下载xv6源码 8.…
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:Bootstrap作为一款超级流行的前端框架,已经成为很多人的首选,不过有时未免有点审美疲劳.那么可以试试Metro UI CSS,一个Windows 8风格的前端框架,和Bootstrap类似,功能也更多. Bootstrap虽然很流行,扩展也很多,但是如果你希望实现Windows 8的Metro风格的话,除了去寻找一个Bootstrap的主题外,还可以直接使用Metro UI CSS这套前…
线程基础 进程 系统中程序执行和资源分配的基本单位 每个进程有自己的数据段.代码段和堆栈段 在进行切换时需要有比较复杂的上下文切换   线程 减少处理机的空转时间,支持多处理器以及减少上下文切换开销, 比创建进程小很多 进程内独立的一条运行路线 处理器调度的最小单元,也称为轻量级进程 可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享 线程相关的执行状态和存储变量放在线程控制表内 一个进程可以有多个线程,有多个线程控制表及堆栈寄存器,共享一个用户地址空间   多线程同步问题 线程共…
pthread多线程编程的学习小结  pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写     程序员必上的开发者服务平台 —— DevStore pthread多线程编程整理 1 Introduction 不用介绍了吧… 2 Thread Concepts 1.     Thread由下面部分组成: a.     Thread ID b.     Stack c.     Policy d.     Signal mask e.   …
pthread_key_t和pthread_key_create()详解 下面说一下线程中特有的线程存储, Thread Specific Data .线程存储有什么用了?他是什么意思了?大家都知道,在多线程程序中,所有线程共享程序中的变量.现在有一全局变量,所有线程都可以使用它,改变它的值.而如果每个线程希望能单独拥有它,那么就需要使用线程存储了.表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的.这就是线程存储的意义. 下面说一下线程存储的具体用法.1.…
Pester is a BDD inspired testing framework for PowerShell just like Jasmine is on the JavaScript side and RSpec is on the Ruby side for example (I do believe that JavaScript is one of the best comparisons for PowerShell though, it being a scripting l…
线程概述: 其实在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone().该系统copy了一个和原先进程完全一样的进程,并在这 个进程中执行线程函数.不过这个copy过程和fork不一样.copy后的进程和原先的进程共享了所有的变量,运行环境.这样,原先进程中的变量变动在 copy后的进程中便能体现出来. 大部分多线程程序需要在线程间共享数据.如果两个线程同时访问共享数据就可能有问题,因为一个线程可能在另一个线程修改共享数据的过程中使用该数据:并认为共享数据保持不变…
摘要:pthread_join使一个线程等待另一个线程束. 代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了.加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行. 函数pthread_join用来等待一个线程的结束. 目录 1函数简介 2函数应用 ▪ linux中的应用 ▪ pthread_join的应用 3使用范例 1函数简介编辑 头文件 : #include <pthread.…
背景 在Linux中,要了解进程的信息,莫过于从 proc 文件系统中入手去看. proc的详细介绍,可以参考内核文档的解读,里面有很多内容 yum install -y kernel-doc cat /usr/share/doc/kernel-doc-3.10.0/Documentation/filesystems/proc.txt proc主要内容 Table of Contents ----------------- 0 Preface 0.1 Introduction/Credits 0…
"""Utility functions for copying and archiving files and directory trees. XXX The functions here don't copy the resource fork or other metadata on Mac. """ import os import sys import stat import fnmatch import collections im…
Table of Contents 1. /proc/PID/cwd 2. /proc/PID/clear_refs 3. /proc/PID/coredump_filter 4. /proc/PID/environ 5. /proc/PID/exe 6. /proc/PID/fd 7. /proc/PID/io8. /proc/PID/limits 7.1. rchar. I/O counter: chars read 7.2. wchar. I/O counter: chars writte…
一.configparse # 注释1 ; 注释2 [section1] # 节点 k1 = v1 # 值 k2:v2 # 值 [section2] # 节点 k1 = v1 # 值 1.获取所有节点 import configparser config = configparser.ConfigParser() config.read('test',encoding='utf-8') ret = config.sections() print(ret)#['section1', 'sectio…
线程中特有的线程存储, Thread Specific Data .线程存储有什么用了?他是什么意思了? 大家都知道,在多线程程序中,所有线程共享程序中的变量.现在有一全局变量,所有线程都可以使用它,改变它的值.而如果每个线程希望能单独拥有它,那么就需要使用线程存储了.表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的.这就是线程存储的意义. 函数原型: int pthread_key_create(pthread_key_t *key, void (*de…
转自http://blog.chinaunix.net/uid-20788636-id-1841334.html 1.线程创建和退出创建线程实际上就是确定调用该线程函数的入口点,这里通常使用的函数是pthread_create.在线程创建以后,就开始运行相关的线程函数,在该函数运行完之后,该线程也就退出了,这也是线程退出一种方法.另一种退出线程的方法是使用函数pthread_exit,这是线程的主动行为.在线程中使用pthread_exit来代替进程中的exit.由于一个进程中的多个线程是共享数…
基础和应用 1.Redis是远程调用技术的首字母缩写. 2.Redis可以用来做什么? Redis可以用来做缓存. 分布式锁 3.Redis的应用举例 记录帖子的点赞数.评论数和点击数.(使用HASH) 记录用户的帖子ID列表,便于快速显示用户的帖子列表.(ZSET) 记录帖子的标题.摘要.作者和封面信息,用于展示.(hash) 记录帖子的点怎用户ID和列表ID,用于显示和去重计数.(zset) 缓存近期热帖内容,减少数据库压力.(hash) 记录帖子相关文章ID,根据内容推荐相关帖子.(lis…
3.7.1.再论进程 3.7.1.1.多进程实现同时读取键盘和鼠标 3.7.1.2.使用进程技术的优势 (1)CPU时分复用,单核心CPU可以实现宏观上的并行.微观上的串行 (2)实现多任务系统需求(多任务的需求是客观的,多任务就是同时要做很多事情) 3.7.1.3.进程技术的劣势 (1)进程间切换开销大(进程断点的保护和进程断点的恢复) (2)进程间通信麻烦而且效率低(进程与进程之间天生是隔离的或者说是独立的) 3.7.1.4.解决方案就是线程技术 (1)线程技术保留了进程技术实现多任务的特性…
          HEC-ResSim Reservoir System Simulation             User's Manual       Version 3.1 May 2013     Approved for Public Release. Distribution Unlimited.     CPD-82 REPORT DOCUMENTATION PAGE Form Approved OMB No. 0704-0188 The public reporting b…
资源 ucore在线实验指导书 我的ucore实验代码 练习1: 加载应用程序并执行(需要编码) 题目 do_execv函数调用load_icode(位于kern/process/proc.c中) 来加载并解析一个处于内存中的ELF执行文件格式的应用程序,建立相应的用户内存空间来放置应用程序的代码段.数据段等,且要设置好proc_struct结构中的成员变量trapframe中的内容,确保在执行此进程后,能够从应用程序设定的起始执行地址开始执行.需设置正确的trapframe内容. 请在实验报告…
目录 Part A:Multiprocessor Support and Cooperative Multitasking Multiprocessor Support 虚拟内存图 Exercise 01 Application Processor Bootstrap Exercise 02 Question Per-CPU State and Initialization Exercise 03 Exercise 04 Locking Exercise 05 Question Round-Ro…
1. ucore lab5介绍 ucore在lab4中实现了进程/线程机制,能够创建并进行内核线程的调度.通过上下文的切换令线程分时的获得CPU,使得不同线程能够并发的运行. 在lab5中需要更进一步,实现我们平常开发接触到的.运行在用户态的进程/线程机制.用户线程通常用于承载和运行应用程序,为了保护操作系统内核,避免其被不够鲁棒的应用程序破坏.应用程序都运行在低特权级中,无法直接访问高特权级的内核数据结构,也无法通过程序指令直接的访问各种外设. 但应用程序访问高特权级数据.外设的需求是不可避免…
[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5597818.html ] 据说安卓应用里通过fork子进程的方式可以防止应用被杀,大概原理就是子进程被杀会向父进程发送信号什么的,就不深究了. 首先fork()函数它是一个系统调用,在sys.h中: extern int sys_fork (); // 创建进程. (kernel/system_call.s, 208) // 系统调用函数指针表.用于系统调用中断处理程序(int 0x80),…
Engish version copied from here Why This Document? As editor of the Jargon File and author of a few other well-known documents of similar nature, I often get email requests from enthusiastic network newbies asking (in effect) "how can I learn to be a…
未经许可谢绝以任何形式对本文内容进行转载! 一.环境配置 关于MIT课程中使用的JOS的配置教程网上已经有很多了,在这里就不做介绍,个人使用的是Ubuntu 16.04 + qemu.另注,本文章中贴出的代码均是JOS中未经修改的源代码,其中有一些细节是MIT课程中要求学生自己实现的. 二.Boot Loader代码分析 1.boot.S(AT&T汇编格式) #include <inc/mmu.h> # Start the -bit protected mode, jump into…