• 2024-06-20【操作系统】MMAP内存映射|零拷贝
     
  • 2024-06-11glibc函数malloc的工作原理
    glibc提供了malloc函数来动态分配内存,我们只知道调用malloc会返回给我们一个指针,指向一块内存空间或NULL,那么malloc的工作原理是什么呢?概述:1.小于128kB的空间,使用内存池(在堆上)或brk或sbrk系统调用在堆上分配2.大于128kB的空间,使用mmap在文件映射区分配+----------------
  • 2024-06-11零拷贝
    普通流程网络IO读写流程应用进程的每一次写操作,都会把数据写到用户空间的缓冲区中,再由CPU将数据拷贝到系统内核的缓冲区中,之后再由DMA将这份数据拷贝到网卡中,最后由网卡发送出去。这里我们可以看到,一次写操作数据要拷贝两次才能通过网卡发送出去,而用户进程的读操作则是将整个
  • 2024-06-06Linux开发:多进程通过shm_open/mmap共享内存
    Linux编程:多进程间通过shmget共享内存_检测共享内存中是否有数据-CSDN博客介绍了通过SYSV的方式进行多进程间共享内存,这种方式属于比较久远的方式。POSIX也提供了共享内存的方法,使用起来要更容易些式其原理是利用Linux的tmpfs(Linux开发:tmpfs文件系统-CSDN博客)$df
  • 2024-04-27二进制文件内存映射
    点击查看代码#对二进制文件做内存映射#使用mmap模块对文件进行内存有映射操作importmmapimportos.pathdefmemory_map(filename,access=mmap.ACCESS_WRITE):""":paramfilename::paramaccess:mmap.ACCESS_WRITE:读写mmap.A
  • 2024-04-06mmap与remap_pfn_range
    参考资料:https://www.cnblogs.com/pengdonglin137/p/8149859.htmlhttps://blog.csdn.net/HuangChen666/article/details/133633120 remap_pfn_range:remap_pfn_range是Linux内核中的一个函数,用于将物理页面框号(PFN)映射到用户空间的虚拟地址范围中。PFN是物理页面在内存
  • 2024-04-04CSC3150Unix的教学操作系统
    CSC3150-说明书-A3介绍这项任务使用xv6,一个简单的、类似Unix的教学操作系统,作为平台指导您实现mmap和munmp系统调用。这两个用来共享进程之间的内存,并将文件映射到进程地址空间。一般来说,这项任务的重点是内存映射文件。支持内存映射的机制文件可以处理文件,就好像它们是程序内存
  • 2024-04-02MIT 6.S081入门lab10 mmap
    MIT6.S081入门lab10mmap一、参考资料阅读与总结1.JournalingtheLinuxext2fsFilesystem文件系统可靠性:磁盘崩溃前数据的稳定性;故障模式的可预测性;操作的原子性-论文核心:将日志事务系统加入Linux的文件系统中;事务系统的要求:元数据的更新;事务系统的顺序性;数据块写入磁
  • 2024-03-12RocketMQ为什么这么快?我从源码中扒出了10大原因!
    大家好,我是三友~~RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快那么,问题来了,RocketMQ为什么这么快呢?接下来,我将从以下10个方面来探讨一下RocketMQ这么快的背后原因如果你对RocketMQ还不了解,可以从公众
  • 2024-03-12RocketMQ为什么这么快?我从源码中扒出了10个原因!
    大家好,我是三友~~RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快那么,问题来了,RocketMQ为什么这么快呢?接下来,我将从以下10个方面来探讨一下RocketMQ这么快的背后原因如果你对RocketMQ还不了解,可以从公众
  • 2024-02-26零拷贝,mmap 和 sendFile
    传统的IOmmapmmap是一种内存映射技术,mmap相比于传统的IO来说,其实就是少了1次CPU拷贝而已,上图。sendFile在Linux中,提供sendFile函数,实现了零拷贝
  • 2024-02-23[MIT 6.S081] Lab: mmap
    Lab:mmap在本次实验中,我们要实现的是一个比较简简单的mmap实现,将文件映射到内存中的某个块,并根据权限设置这块内存的行为,以及为其提供延迟分配策略。mmap对于将文件映射到内存,其实是先规划好一块区域给文件使用,为什么要提供延迟分配,是因为如果需要映射一个文件时,就规划好一
  • 2024-02-14【XV6】 mmap
    代码:https://github.com/JasenChao/xv6-labs.git文件映射到进程地址题目要求实现两个系统调用:mmap和munmap。主要功能就是将文件映射到进程的内存中。题目给出了mmap和munmap的声明:void*mmap(void*addr,size_tlen,intprot,intflags,intfd,off_toffset)
  • 2024-01-29面试官:说一下零拷贝技术的实现原理?
    零拷贝(Zero-copy)技术是一种计算机操作系统中用于提高数据传输效率的优化策略。在传统的数据传输过程中,需要将数据从一个缓冲区拷贝到另一个缓冲区,然后再传输给目标。这涉及到多次的CPU和内存之间的数据拷贝操作,会消耗CPU的时间和内存带宽。而零拷贝技术通过直接共享数据的内
  • 2024-01-28perf_event_open学习 —— mmap方式读取
    目录示例程序2采集单个值采集多个值示例程序2示例程序3示例程序2Linuxperf子系统的使用(二)——采样(signal方式)在上一篇《Linuxperf子系统的使用(一)——计数》已经讲解了如何使用perf_event_open、read和ioctl对perf子系统进行编程。但有时我们并不需要计数,而是要采样。比如这
  • 2024-01-13Binder系列-5-binder_mmap—1—mmap()分析
    一、manmmap1.函数声明#include<sys/mman.h>void*mmap(void*addr,size_tlength,intprot,intflags,intfd,off_toffset);intmunmap(void*addr,size_tlength);intmsync(void*addr,size_tlength,intflags)作用:将文件或设备向内存中进行映射或取消映
  • 2023-12-17mmap内存映射 --- 字符设备驱动,用户空间和内核空间映射到同一个物理内存
    内存映射可实现用户程序对设备驱动内存的直接存取示例代码:驱动层#include<linux/init.h>#include<linux/module.h>#include<linux/miscdevice.h>#include<linux/fs.h>#include<linux/slab.h>//定义kmalloc接口#include<asm/io.h>//定义virt_to_phys接
  • 2023-12-17linux 进程间通信 --- 共享内存(POSIX 版本)
    POSIX进程间通信POSIX进程间通信(InterprocessCommunication,IPC)是SystemV进程间通信的变体。它是在Solaris7发行版中引入的。与SystemV对象类似,POSIXIPC对象的属主、属主的组以及其他用户具有读取和写入权限,但是没有执行权限。POSIXIPC对象的属主无法将对象
  • 2023-12-10锁统计 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/lockstat.html锁统计什么顾名思义,它提供了有关锁的统计信息。为什么因为诸如锁争用之类的问题会严重影响性能。如何Lockdep已经在锁函数中设置了钩子,并将锁实例映射到锁类上。我们在此基础上构建(参见运行时锁正确性验证器)
  • 2023-12-06xv6 mmap
    inlinux调用mmap,会申请一段内存空间(文件的内存映射部分),并且自动映射到指定的文件内存映射部分。mmapvoid*mmap(void*addr,size_tlength,intprot,intflags,intfd,off_toffset);addr为用户指定的内存起始地址,为0时由系统分配。length制定映射的长度,单位是字节。
  • 2023-11-11【pwn】[HGAME 2023 week1]simple_shellcode --orw利用攻击
    先查看程序的保护状态可以看到,保护全开,拖进ida看主函数的逻辑可以看到有个mmap函数:mmap()函数是Unix和类Unix操作系统中的一个系统调用,用于在进程的地址空间中映射文件或者其它对象。这样做的好处是可以让文件直接映射到内存中,从而避免了频繁的文件I/O操作,提高了文件的读
  • 2023-11-08一次Binder通信最大可以传输多大的数据?
    前言在第六章中,我通过匿名共享内存的方式解决Binder通信是无法传递大数据的问题,一次Binder通信最大可以传输是1MB-8KB(PS:8k是两个pagesize,一个pagesize是申请物理内存的最小单元)但是这个答案对不对呢,我只能说不准确,接下来我们来仔细研究一下1MB-8KB的限制来源于哪里frameworks/
  • 2023-11-06Python工具箱系列(四十五)
    内存映射文件 mmap是python内置标准库,提供将文件映射到内存的机制。通过mmap将文件映射到内存之后,我们可以高效并优雅地对文件的内容进行随机访问。通常打开文件后要通过组合各种seek()、read()和write()调用来访问,使用mmap后可以简单将文件映射到内存,然后通过切片操作来访问数据
  • 2023-11-06Python工具箱系列(四十五)
    内存映射文件mmap是python内置标准库,提供将文件映射到内存的机制。通过mmap将文件映射到内存之后,我们可以高效并优雅地对文件的内容进行随机访问。通常打开文件后要通过组合各种seek()、read()和write()调用来访问,使用mmap后可以简单将文件映射到内存,然后通过切片操作来访问数据
  • 2023-11-01asis2016_b00ks(根据报错信息确定mmap拓展偏移)
    这个应该是大部分人学off-by-one的第一个例题,当时笔者也是只在本地去测试,最近重温又发现了一些有趣的东西这里有个off-by-null,可以看到14行如果i=a2就break,再让*a1=0,比如我们的size为10,正常我们被允许输入10个字节的数据,这里的i是从0开始的,所以是0-10,也就是11字节,多出的