当前位置: 首页 > news >正文

嘉兴做网站优化价格/今日新闻 最新消息 大事

嘉兴做网站优化价格,今日新闻 最新消息 大事,各行各业网站建设,个体户可以做网站么sbrk/brk重新指定数据段的结束位置。sbrk&#xff08;增量&#xff09;&#xff0c;增量可正可负&#xff0c;也可以是0,&#xff0c;都返回原来的数据段结束地址&#xff0c;失败返回-1,。brk&#xff08;地址&#xff09;&#xff0c;返回0或者-1。头文件<unistd.h>。s…

sbrk/brk重新指定数据段的结束位置。sbrk(增量),增量可正可负,也可以是0,,都返回原来的数据段结束地址,失败返回-1,。brk(地址),返回0或者-1。头文件<unistd.h>。sbrk(0)可以取得当前结束地址。没有使用的虚拟内存地址,操作系统就没有映射到物理内存,如果试图访问会差生段错误。指定新的结束位置后如果有整个内存页被空闲出来,这一页就立即被解除映射。

<span style="font-size:18px;">#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{cout << "pagesize:" << getpagesize() << endl;int *p = (int*)sbrk(0);cout << p <<endl;//int n = *p;//出现段错误brk(p+8);//终点后移8*4个字节,操作系统把扩展的这段虚拟内存映射到物理内存,但映射以页为基本单位,实际映射的内存会是一页。for(int i = 0; i < 1025; ++i)//这里小于等于1024的话都不会出现段错误{p[i] = i;}for(int i = 0; i < 1025; ++i){cout << p[i] << " ";}cout << endl;return 0;
}</span>


18个数的时候



1024个数的时候



1025个数的时候


因为一个页是4096字节,4字节的整数可以存1024个,所以虽然超出终点但是不会出现段错误,只有超出页的范围才会出现段错误。



mmap系统调用(功能)
    void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset )
    内存映射函数mmap, 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的读取和修改,而不需要再调用read,write等操作。

    映射存储区位于堆和栈之间:这属于实现细节,各种实现之间可能不同。


mmap系统调用(参数)
      1)addr: 指定映射的起始地址, 通常设为NULL, 由系统指定。
      2)length: 映射到内存的文件长度。
      3) prot:   映射区的保护方式, 可以是:
             PROT_EXEC: 映射区可被执行
             PROT_READ: 映射区可被读取
             PROT_WRITE: 映射区可被写入

     对指定映射存储区的保护要求不能超过文件open模式访问权限。

      4)flags: 映射区的特性, 可以是:
            MAP_SHARED:写入映射区的数据会复制回文件, 且允许其他映射该文件的进程共享。
            MAP_PRIVATE:对映射区的写入操作会产生一个映射区的复制(copy-on-write)的私有副本, 对此区域所做的修改不会写回原文件。(此标志的一种用途是用于调试程序,它将程序文件的正文部分映射至存储区,但允许用户修改其中指令。)

      5)fd: 由open返回的文件描述符, 代表要映射的文件。
      6)offset: 以文件开始处的偏移量, 必须是分页大小的整数倍, 通常为0, 表示从文件头开始映射。

      子进程能够通过fork继承存储映射区(因为子进程复制父进程的地址空间,而存储映射区是该地址空间的一部分)

解除映射
      int munmap(void *start,size_t length)
     功能:取消参数start所指向的映射内存,参数length表示欲取消的内存大小。
    返回值:解除成功返回0,否则返回-1,错误原因存于errno中。

实例分析
mmap系统调用

虚拟内存区域
      虚拟内存区域是进程的虚拟地址空间中的一个同质区间,即具有同样特性的连续地址范围。一个进程的内存映象由下面几部分组成:程序代码、数据、BSS
和栈区域,以及内存映射的区域。

 一个进程的内存区域可以通过查看:/proc/pid/maps
08048000-0804f000 r-xp 00000000 08:01 573748 /sbin/rpc.statd #text
0804f000-08050000 rw-p 00007000 08:01 573748 /sbin/rpc.statd #data
08050000-08055000 rwxp 00000000 00:00 0 #bss
040000000-40015000 r-xp 00000000 08:01 933965 /lib/ld2.3.2.so #text
40015000-40016000 rw-p 00014000 08:01 933965 /lib/ld-2.3.2.so #data

       每一行的域为:start_end perm offset major:minor inode
       1) Start: 该区域起始虚拟地址
       2) End: 该区域结束虚拟地址
       3) Perm: 读、写和执行权限;表示对这个区域,允许进程做什么。这个域的最后一个字符要么是p表示私有的,要么是s表示共享的。
       4) Offset: 被映射部分在文件中的起始地址
       5) Major、minor:主次设备号
       6) Inode:索引结点

vm_area_struct
      Linux内核使用结构vm_area_struct(<linux/mm_types.h>)来描述虚拟内存区域,其中几个主要成员如下:
     1)unsigned long vm_start   虚拟内存区域起始地址
     2)unsigned long vm_end    虚拟内存区域结束地址

     3)unsigned long vm_flags  该区域的标记。如:VM_IO和VM_RESERVED。VM_IO将该VMA标记为内存映射的IO区域,VM_IO会阻止系统将该区域包含在进程的存放转
存(core dump )中,VM_RESERVED标志内存区域不能被换出。

mmap设备操作
      映射一个设备是指把用户空间的一段地址关联到设备内存上。当程序读写这段用户空间的地址时,它实际上是在访问设备。

      mmap设备方法需要完成什么功能?
      mmap方法是file_oprations结构的成员,在mmap系统调用发出时被调用。在此之前,内核已经完成了很多工作。mmap设备方法所需要做的就是建立
虚拟地址到物理地址的页表。
      int (*mmap) (struct file *, struct vm_area_struct *)

      mmap如何完成页表的建立?
     方法有二:
     1)使用remap_pfn_range一次建立所有页表;
     2)使用nopage VMA方法每次建立一个页表。

     构造页表的工作可由remap_pfn_range函数完成,原型如下:
     int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,unsigned long pfn, unsigned long size, pgprot_t prot)

     vma:           虚拟内存区域指针
     virt_addr:   虚拟地址的起始值

     pfn:             要映射的物理地址所在的物理页帧号,可将物理地址>>PAGE_SHIFT得到。
     size:           要映射的区域的大小。
     prot:            VMA的保护属性。


int memdev_mmap(struct file*filp, struct vm_area_struct *vma)
{
Vma->vm_flags |= VM_IO;
Vma->vm_flags |= VM_RESERVED;
if (remap_pfn_range(vma, vma->vm_start,
virt_to_phys(dev- >data)>> PAGE_SHIFT,
size,
vma->vm_page_prot))
return -EAGAIN;
return 0;
}


<span style="font-size:18px;">void *mmap(void *addr, //指定映射到内存哪个地址,一般NULL
size_t length, //长度(字节数)
int prot, //PROT_READ PROT_WRITE PROT_EXEC组合
int flags,  //MAP_SHARED MAP_PRIVATE二选一之后再跟其他标志组合:MAP_ANONYMOUS表示不使用文件(内存自动用0初始化)
int fd, off_t offset);//文件映射时才使用int munmap(void *addr, size_t length);//取消映射</span>


http://www.lbrq.cn/news/1029475.html

相关文章:

  • 网站图片代码/2022年最近一周新闻大事
  • 营销型网站制作方案/龙岗网站推广
  • 网站维护费一年多少钱/seo前线
  • 攀枝花网站seo/制作网站的最大公司
  • 威海专业网站建设/郑州seo技术服务
  • wordpress将用户锁在前台/网站排名优化软件联系方式
  • 宝鸡市住房和城市建设局网站/新闻发稿软文推广
  • 新万网站建设/百度关键词优化平台
  • 个人域名网站可以做企业站吗/深圳关键词排名优化系统
  • 新网站建设运营年计划书/西安疫情最新通知
  • 做网站都需要什么工具/福建优化seo
  • 揭阳手机网站建设/青岛seo推广公司
  • 设计网站推荐html/找网站设计公司
  • 如何做网站跳转/便宜的seo官网优化
  • 国家开发银行助学贷款网站/seo优化报告
  • 建一个app和网站那个比较好/公司官网模板
  • 传业做微采商城网站/智能建站模板
  • 池州网站优化/搜索历史记录
  • 网站如何做百度权重/常见的网络推广方式包括
  • 网站建设的基本流程是什么/免费网站建设seo
  • 帆布网站做哪个/百度官方网页版
  • 网站使用网络图片做素材 侵权吗/安徽疫情最新情况
  • 科技 杭州 网站建设/新闻稿件
  • 方城微网站开发/10种营销方法
  • 图片演示dw做网站/谷歌chrome安卓版
  • 政府网站建设如何更好服务人民/互联网产品营销策划方案
  • 成都最新疫情最新轨迹公布/搜索引擎优化的主要特征
  • 点网站出图片怎么做/产品如何做市场推广
  • 国内做批发的网站/西安网络推广seo0515
  • tp框架做餐饮网站/怎样推广自己的app
  • Oracle commit之后做了什么
  • 企业智脑正在构建企业第二大脑,四大场景引擎驱动数字化转型新范式
  • 数巅中标中建科技AI知识库项目,开启建筑业数智化新篇章
  • DataHub IoT Gateway:工业现场设备与云端平台安全互联的高效解决方案
  • 【数据结构初阶】--排序(一):直接插入排序,希尔排序
  • 袖珍手持气象仪的用途