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

如何自学网站建设做网站怎么做放大图片

如何自学网站建设,做网站怎么做放大图片,wordpress主题idowns下载,南宁网站建设推广优化案例研究 Intel Core i7 该处理底层的Haswell微体系结构允许64位的虚拟和物理地址空间#xff0c;而现在的Core i7实现支持48位#xff08;256TB#xff09;虚拟地址空间和52位#xff08;4PB#xff09;物理地址空间#xff0c;这对目前来说已经完全够用了。#xff…案例研究 Intel Core i7 该处理底层的Haswell微体系结构允许64位的虚拟和物理地址空间而现在的Core i7实现支持48位256TB虚拟地址空间和52位4PB物理地址空间这对目前来说已经完全够用了。Linux的虚拟内存系统中页的大小为4KB 介绍了Core i7内存系统的重要部分——处理器封装 介绍了Core i7的地址翻译情况 层级结构的TLB 层级结构的页表4层每一层页表占VPN的9位也就是有292^929个PTE 层次结构的高速缓存L1、L2和L3 其中CR3控制寄存器指向第一级页表的起始位置CR3的值是每个进程上下文的一部分每次上下文切换的时候CR3的值都会被恢复 介绍了页表项PTE的格式 每个PTE占8个字节64位其中有40位是作为指向下一级页表物理基地址这个地方我有个疑问在这个例子里每一级页表的每一个PTE都有40位用来下一级页表的基地址这难道不会很浪费吗只存一次不就好了吗还有其他位用于权限控制和协助替换算法 Linux虚拟内存系统 Linux虚拟内存区域 Linux将虚拟内存组织成一些区域的集合。一个区域就是已经存在着的已分配的——已缓存和未缓存虚拟内存的连续片也就是说Linux虚拟内存系统所定义的区域范围是比虚拟页大的虚拟页是区域的基本单元。这些页是以某种方式相关联的例如代码段、数据段、堆、共享库段和用户栈都是不同的区域。 每个存在的虚拟页面都保存在某个区域而不属于某个区域的虚拟页是不存在的虚拟页本就是为进程所服务并且不能被进程引用。内核不用记录这些不存在的虚拟页能够节省更多的资源 下图是一个Linux进程等虚拟内存 Linux如何组织虚拟内存 内核为每一个进程都单独维护一个task_structtask_struct中的元素包含或者指向内核运行该进程所需的所有信息例如PID、指向用户栈的指针%rsp可执行目标文件的名字程序计数器PC等 task_struct中一个条目指向mm_struct它描述了虚拟内存的当前状态。我们感兴趣的字段有两个pgd和mmap pgd指向第一级页表的基址当内核运行这个进程时就把pgd的值放进CR3寄存器中 mmap指向一个vm_area_struct每一个vm_area_struct都描述了当前虚拟地址空间的一个区域 vm_area_struct的结构如下 vm_start指向这个区域的起始处vm_end指向这个区域的结束处vm_prot描述这个区域内所有页的读写权限vm_flags描述这个区域内的页面是与其他进程共享的还是私有的vm_next指向链表的下一个vm_area_struct Linux缺页异常处理 当出现缺页异常控制将转移到内核的缺页处理程序处理程序随后执行如下步骤 虚拟地址A时合法的吗即地址A是否在某个vm_area_struct指向的区域内。缺页处理程序通过搜索vm_area_struct的链表把A和每个vm_area_struct的vm_start和vm_end进行对比来得到结果。如果虚拟地址A不是合法的就会抛出段错误 因为一个进程可以创建任意个vm_area_struct如果通过链表来搜索会造成大量时间损耗因此在实际中Linux利用我们看不见的字段建立了一个树并在这棵树上查看 试图进行的内存访问是否合法换句话说进程是否有读写或者执行这个区域内页面的权限例如如果缺页是由于一条对代码段中的只读页面进程写操作造成的处理程序就会抛出段错误 此刻内核已经知道这个缺页是由于对合法的虚拟地址进行合法访问造成的。那么处理程序会选择一个牺牲页面如果牺牲页面被修改了那么就将它交换出去换入新的页面并更新页表。当缺页处理程序返回时CPU重新启动引起缺页的指令 内存映射 我们好奇虚拟内存是如何与磁盘上的对象关联起来的。Linux上通过一个叫内存映射的过程来实现虚拟内存的初始化内存映射有两种形式 **Linux文件系统中的普通文件**一个区域可以映射到一个普通磁盘文件的连续部分例如一个可执行文件。文件区被分成页大小4KB的片每一片包含一个虚拟页面的初始内容。因为虚拟页面是按需调度的已缓存或未缓存所以这些虚拟页面并没有实际进入物理内存DRAM直到CPU第一次引用到页面即发射一个虚拟地址触发访问合法地址的合法访问的缺页。 一个区域的大小如果比文件区要大那么剩下的就用0填充 匿名文件一个区域也可以映射到匿名文件。匿名文件是由内核创建的包含得全是二进制零。CPU第一次引用这种页面时内核会在虚拟内存中找到合适的替换页面如果该页面有修改那么就换出去用二进制零覆盖页面并更新页表。注意在这个过程中磁盘和内存之间没有实际的数据传输因此映射到匿名文件的区域中的页面也叫请求二进制零的页通常出现在可执行文件的.bss段以及栈和堆初始长度都是0特点都是没有和磁盘的数据交互所以就用匿名文件映射。 再看共享对象 内存映射为我们提供了一种清晰的基址用来控制多个进程如何共享对象 一个对象被映射到虚拟内存的一个区域可以是共享对象也可以是私有对象一个进程对一个共享对象的任何写操作其他进程也都会看见并且会作用在磁盘的原始对象上。 私有对象使用的是一种写时复制的技术映射到虚拟内存中一个私有对象开始生命周期的方式与共享对象一致在物理内存中只保存有私有对象的一份副本其中两个进程将一个私有对象映射到它们虚拟内存的不同区域但是共享这个对象的同一个副本。对于每个映射私有对象的进程相应私有区域的PTE是标记为只读的并且vm_area_struct标记为私有的写时复制 只要进程没有试图去写它的私有区域它们就可以继续共享物理内存中对象的一个单独副本然而只要有一个进程试图写私有区域的某个页面那么这个写操作就会触发一个保护故障 当故障处理程序发现是由于进程试图写私有区域中一个页面而引发的时它会在物理内存中新建这个页面的新副本注意只是页面的副本而不是整个对象更新当前进程对应页面的PTE指向该新副本其他进程的页表仍然指向旧的页面然后将页表的权限改为可写处理完后控制传会引发故障的指令 再看fork函数 之前的知识已经告诉我们父进程和fork的子进程拥有的是两个互不干涉的地址空间 当fork函数被父进程调用时内核就为子进程创建各种数据结构并分配了唯一的PIDtask_struct然后为了给这个进程创建虚拟内存它创建了父进程的mm_struct、vm_area_struct和页表的原样副本给子进程的地址空间因为父进程和子进程的代码和数据都有一模一样的区别在于调用fork函数后跳转的部分不同。并且将两个进程的每个页面都标记为只读每个区域结构都标记为私有的写时复制 这样fork函数在子进程中返回时即将跳转到与父进程不同的代码段父进程现在的虚拟内存调用fork函数时和子进程的虚拟内存是一样的。当这两个进程中任意一个有写操作时写时复制机制都会创建新页面彼此互不影响 再看execve函数 假设在当前进程中执行了如下的execve调用 execve(a.out, NULL, NULL);execve函数在当前进程加载并运行a.out中的程序用a.out程序替代当前程序步骤如下 删除已存在的用户区域映射私有区域为新程序的代码、数据、bss和栈区域创建新的vm_area_struct所有的这些区域都是私有的写时复制的映射共享区域设置程序计数器execve的最后一件事就是设置当前程序上下文中的程序计数器使之指向新代码区域的入口点 使用mmap函数的用户级内存映射 前面提到过的一个进程可以创建大量的虚拟内存区域怎么创建呢Linux进程可以使用mmap函数来创建新的虚拟内存区域并将对象映射到这些区域 #include unistd.h #include sys/mman.hvoid *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); // 如果成功则返回指向映射区域的指针如出错则为MAP_FAILED(-1)mmap函数要求内核创建一个新的虚拟内存区域最好是从地址start开始的一个区域并将文件描述符fd指定的对象的一个连续的片映射到这个新区域。连续的片的大小为length字节从距文件开始处偏移量offset字节的地方开始。 start只是一个暗示通常设置为NULL prot包含新映射的虚拟区域的访问权限位vm_area_struct里的vm_prot flags由描述被映射对象类型的位组成如果设置了MAP_ANON标记位那么映射的对象就是一个匿名对象那么相应的虚拟页面就是请求二进制零的。相应的还有MAP_PRIVATE和MAP_SHARED 例如 bufp mmap(NULL, size, PROT_READ, MAP_PRIVATE|MAP_ANON, 0, 0);该函数让内核创建了一个size字节的只读的私有的请求二进制零的虚拟内存区域如果调用成功bufp包含新区域的地址 mmap函数可以删除虚拟内存的区域 int mmap(void *start, size_t length);删除从虚拟地址start开始的长度为length字节的区域
http://www.dnsts.com.cn/news/75458.html

相关文章:

  • 推介做界面的网站免费设计图片软件
  • 网站备案为什么要闭站wordpress core
  • 什么网站是php京东第一次做网站
  • 文学写作网站网站开发项目建设经验
  • 网站的结构设计已收录的网站不好优化
  • 网站建设3要素个人做淘宝客网站不能备案吗
  • 邯郸做网站的公司哪家好wordpress远程写作
  • 百度站长中心编写网站用什么语言
  • 济南网站建设服务商wordpress用户管理 插件
  • 淘宝宝贝链接怎么做相关网站v2ray wordpress
  • 英文网站模板源代码seo是指
  • 山东助企网站建设推广任务发布平台app
  • 在线商城网站模板深圳画册设计价格
  • dnf网站上怎么做商人wordpress portfolio 缩略图
  • 成都网站优化推广免费网站空间 推荐
  • 万户做网站好不好百度快照手机入口
  • 适合大学生创业的网站建设类型陕西省住房建设部官方网站一建
  • 专做程序员招聘的网站外网加速器试用七天
  • 工人找工作哪个网站好江苏建筑职业技术学院
  • 南通做网站价格网上办卡
  • 大良营销网站建设服务淘宝网那样的网站模板
  • 网站备案 不关站网站建设空间空间有几种类型
  • 做房产中介网站青岛企业建站系统
  • 网站建设实践建设招标网是什么网站
  • 制作自己的网站多少钱安全员考试成绩查询网
  • 凡客诚品首页html网站百度关键词seo排名优化
  • 建设流网站项目网站建设专家评审意见
  • 瑞金网站建设光龙在线制作diy电子印章
  • 东莞网站建设制作威海人才招聘网官网
  • 祥云平台网站管理系统湖南网站设计外包哪家好