mmap xv6 xv
Binder系列-5-binder_mmap—1—mmap()分析
一、man mmap 1. 函数声明 #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *addr, size ......
XV6 lab2 增加系统调用
在本lab实验中,需要实现两个系统调用,分别为trace和sysinfo。 系统调用trace主要用于debug其他程序所执行的系统调用。打开trace,并通过mask设置需要观察的系统调用内容。在后续命令执行的时候,即可打印相关系统调用和其返回值。 系统调用sysinfo则用于统计空闲内存个数,以 ......
xv6启动,lab 1
lab地址:https://pdos.csail.mit.edu/6.S081/2020/labs/util.html 课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html 启动xv6 git clone git://g.csail.mi ......
mmap内存映射 --- 字符设备驱动,用户空间和内核空间映射到同一个物理内存
内存映射可实现用户程序对设备驱动内存的直接存取 示例代码: 驱动层 #include <linux/init.h> #include <linux/module.h> #include <linux/miscdevice.h> #include <linux/fs.h> #include <linu ......
xv6 想到什么记什么
xv6不同视频里安装了不同版本 两个我都装了 一个是xv6-public 点进去是深大视频里配套的i386 arch 另一个是xv6 risc-V 就是另一个我参考的视频里 运行xv6 用的QEMU 是个linux上的模拟器 xv6又是个unix变体简易版系统 所以最终说起来这个系统是一个程序,跑在 ......
xv6 start
操作系统必须满足三个要求:多路,隔离,交流。 用户模式和管理模式 强隔离要求应用程序和操作系统之间有一个硬边界。如果应用程序出错,我们不希望操作系统失败或其他应用程序出错,相反操作系统应该能够清理失败的应用程序并继续运行其他应用程序。为了实现强隔离,操作系统必须安排应用程序不能修改(甚至读取)操作系 ......
xv6 mmap
in linux 调用mmap,会申请一段内存空间(文件的内存映射部分),并且自动映射到指定的文件内存映射部分。 mmap void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); addr为用 ......
xv6 file system
xv6 file system 在我看来文件系统某种程度上是最复杂的一部分(单从页数也足以说明了),而且我对文件系统的了解其实很少,因此这部分仔细看了一下。 xv6文件系统提供类似unix的文件、目录和路径名,并将其数据存储在virtio磁盘上以实现持久化。 文件系统解决了几个挑战: 文件系统需要磁 ......
xv6 cow
虚拟内存提供了一定程度的间接性:内核可以通过将PTE标记为无效或只读来拦截内存引用,从而导致页面错误,并可以通过修改PTE来更改地址的含义。 xv6中的fork系统调用将父进程的所有用户空间内存复制到子进程中。如果父对象很大,则复制可能需要很长时间。更糟糕的是,这项工作经常被大量浪费:fork通常在 ......
xv6 device driver
Interrupts and device drivers 驱动程序是操作系统中管理特定设备的代码:它配置设备硬件,告诉设备执行操作,处理由此产生的中断,并与可能等待设备I/O的进程进行交互。驱动程序需要与它所管理的设备并发执行并且必须理解设备的硬件接口,编写代码可能很棘手。 设备通常可以产生中断, ......
xv6:labs2 syscall
lab2 1、lab2的内容总结:关于系统调用整个跟踪过程: 使用系统调用时,用户态会通过软中断(trap,陷阱)进入内核中,由trap识别中断来自系统调用,然后调用syscall函数, 跟踪过程: 1、打开gdb: 2、跟踪用户态trace执行过程: 首先执行以下两条指令,为trace的main函 ......
xv6 traps
traps 引入 三种类型的事件会导致CPU暂时搁置普通指令的执行,并强制将控制转移给处理事件的特殊代码。 系统调用。用户程序执行调用指令要求内核为它做一些事情 异常。指令(用户或内核)做了一些非法的事情,例如除以零或使用无效的虚拟地址 设备中断。当设备发出需要注意的信号时,例如当磁盘硬件完成读或写 ......
xv6 pagetables
页表 地址空间简介 Xv6运行在Sv39 RISC-V上,这意味着只使用64位虚拟地址的底部39位;不使用前25位。在这个Sv39配置中,RISC-V页表逻辑上是一个包含227(134,217,728)个页表项(pte)的数组。每个PTE包含一个44位物理页码(PPN)和一些标志。分页硬件通过使用3 ......
【操作系统MIT 6.1810笔记】xv6讲义:第一章
第1章-操作系统接口(Operating system interfaces) 设计一个好的接口是困难的:“简单易用的接口” vs “强大复杂的接口功能”是一对主要矛盾。 解决这一矛盾的主要方式:设计可组合在一起以提供更广泛用途的少量机制。 kernel xv6系统中,每个进程(process)包含 ......
xv6book阅读 chapter1
xv6book主要研究了xv6如何实现它的类Unix接口,但是其思想和概念不仅仅适用于Unix。任何操作系统都必须将进程多路复用到底层硬件上,相互隔离进程,并提供受控制的进程间通信机制。 1 了解xv6 xv6是一个模仿unix内部设计的操作系统,其提供了unix中对应的部分系统调用。理解xv6对于 ......
asis2016_b00ks(根据报错信息确定mmap拓展偏移)
这个应该是大部分人学off-by-one的第一个例题,当时笔者也是只在本地去测试,最近重温又发现了一些有趣的东西 这里有个off-by-null,可以看到14行 如果i = a2就break,再让*a1 = 0,比如我们的size为10,正常我们被允许输入10个字节的数据,这里的i是从0开始的,所以 ......
mitos - xv6 for riscv
参考: code: https://github.com/mit-pdos/xv6-riscv book: https://pdos.csail.mit.edu/6.828/2021/xv6/book-riscv-rev2.pdf note: https://mit-public-courses-c ......
C语言 mmap完成文件读写
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <fcntl.h> #include <unistd.h> int main() { // 打开文件进行读写 int f ......
xv6 traps
trap: 在xv6操作系统中,"trap"是指程序从用户态切换到内核态的一种机制。这种切换通常会在几种情况下发生,例如:系统调用、出现页错误(page fault)或者外部设备触发了中断。Trap机制是通过一些特定的硬件指令和硬件状态来实现的,例如修改程序计数器(PC)的值,以便将程序的控制权转移 ......
从内核世界透视 mmap 内存映射的本质(源码实现篇)
本文基于内核 5.4 版本源码讨论 通过上篇文章 《从内核世界透视 mmap 内存映射的本质(原理篇)》的介绍,我们现在已经非常清楚了 mmap 背后的映射原理以及它的使用方法,其核心就是在进程虚拟内存空间中分配一段虚拟内存出来,然后将这段虚拟内存与磁盘文件映射起来,整个 mmap 系统调用就结束了 ......
Go每日一库之93:mmap
## 1 mmap 简介 > In computing, mmap is a POSIX-compliant Unix system call that maps files or devices into memory. It is a method of memory-mapped file I ......
mmap:Python内存映射文件操作
# 前言 [内存](https://so.csdn.net/so/search?q=%E5%86%85%E5%AD%98&spm=1001.2101.3001.7020)映射通常可以提高I/O的性能,因为使用内存映射时,不需要对每个访问都建立一个单独的系统调用,也不需要在缓冲区之间复制数据,内核和用 ......
mmap:Python内存映射文件操作
前言 内存映射通常可以提高I/O的性能,因为使用内存映射时,不需要对每个访问都建立一个单独的系统调用,也不需要在缓冲区之间复制数据,内核和用户都能很方便的直接访问内存。 本篇,将详细介绍Python内存映射库:mmap。 mmap(读文件) 使用mmap()函数可以创建一个内存映射文件。该函数的第1 ......
从内核世界透视 mmap 内存映射的本质(原理篇)
本文基于内核 5.4 版本源码讨论 之前有不少读者给笔者留言,希望笔者写一篇文章介绍下 mmap 内存映射相关的知识体系,之所以迟迟没有动笔,是因为 mmap 这个系统调用看上去简单,实际上并不简单,可以说是非常复杂的一个系统调用。 如果想要给大家把 mmap 背后的技术本质,正确地,清晰地还原出来 ......
xv6 进程切换中的锁:MIT6.s081/6.828 lectrue12:Coordination 以及 Lab6 Thread 心得
引言 这节课和上一节xv6进程切换是一个完整的的进程切换专题,上一节主要讨论进程切换过程中的细节,而这一节主要讨论进程切换过程中锁的使用,所以本节的两大关键词就是"Coordination"(协调)和 "lost wakeup" Coordination 就是有关出让CPU,直到等待的事件发生再恢复 ......
xv6 中的进程切换:MIT6.s081/6.828 lectrue11:Scheduling 以及 Lab6 Thread 心得
# 絮絮叨 这两节主要介绍 xv6 中的**线程切换**,首先预警说明,这节课程的容量和第 5/6 节:[进程的用户态到内核态的切换](https://www.cnblogs.com/looking-for-zihuatanejo/p/17644000.html)一样,**细节多到爆炸**,连我自己 ......
关于在数据库系统MMAP的使用
问题引出 在数据库系统中对于文件I/O管理,通常有两种选择 开发者自己实现buffer bool来管理文件I/O读入内存的数据 使用Linux操作系统实现的MMAP系统调用映射到用户地址空间,并且利用对开发者透明的page cache来实现页面的换入换出 理论介绍 程序调用MMAP返回了指向文件内容 ......
XV6中的锁:MIT6.s081/6.828 lectrue10:Locking 以及 Lab8 locks Part1 心得
这节课程的内容是锁(本节只讨论最基础的锁)。其实**锁本身就是一个很简单的概念**,这里的简单包括 3 点: 1. **概念简单**,和实际生活中的锁可以类比,不像学习虚拟内存时,现实世界中几乎没有可以类比的对象,所以即使这节课偏向于理论介绍,也一点不会感觉晦涩。 2. **使用简单**,几乎所有的 ......
mmap
# mmap > Memory Map # 1.`mmap`使用方法 ```go func Mmap(fd int, offset int64, length int, prot int, flags int) ([]byte, error) ``` 1. fd:文件描述符 2. offset:文件 ......