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

如何做外贸营销型网站推广绍兴网站建设公司电话

如何做外贸营销型网站推广,绍兴网站建设公司电话,泉港报名网站建设需要,免费网站制作公司概念先行先理解内存管理中的几个概念#xff1a;内存#xff0c;主存#xff0c;缓存#xff0c;外存#xff0c;虚拟内存#xff0c;物理内存#xff0c;虚拟地址#xff0c;物理地址外存:计算机的外部存储#xff0c;比如硬盘(机械硬盘、固态硬盘、混合硬盘)#x… 概念先行先理解内存管理中的几个概念内存主存缓存外存虚拟内存物理内存虚拟地址物理地址外存:计算机的外部存储比如硬盘(机械硬盘、固态硬盘、混合硬盘)usb内存:用于计算机运行过程中的临时存储断电清除(这也是我们计算机休眠能保留进程状态而断电关机不行的原因)。内存现在特指动态随机存储器(DRAM)就是我们电脑的内存条也就是我们说的物理内存等价于主存。也就是内存物理内存主存内存条缓存:在内存管理子系统中指的是静态随机存储器(SRAM)比如cpu与主存之间的多级缓存(L1, L2 和 L3 高速缓存)当然计算机广义上的缓存远不止这些虚拟内存抽象概念虚拟内存的引入旨在为每个进程提供统一线性一致的地址空间真正的地址则有MMU(内存管理单元)控制映射至对应的物理内存空间而虚拟地址物理地址则代表对应空间的偏移地址需要注意的是对于某一特定指令架构的计算机(比如32位)虚拟内存能够映射的地址一部分映射至物理内存当物理内存已满时则进行页面置换映射至对应的磁盘空间。也就是虚拟内存地址包括(物理内存与部分磁盘空间)的地址映射为什么呢比如32位系统内存条只有256M此时32位系统最多只能用4G内存(虚拟内存)32位系统即内存地址长度为32最多映射2^322^2*2^304G个字节。远远大于内存条则在进程运行过程中当运行数据超过内存限度部分数据自动“溢出”这时系统会将磁盘上的部分空间模拟成虚拟内存并将原来映射到物理内存中的暂时不运行的程序或不使用的数据置换到磁盘中腾出更多物理内存空间并重新映射至虚拟内存中被调用了解了概念简单看下内存管理子系统虚拟地址(virtual adress)与物理地址(physical address)的关系进程访问某个虚拟地址(虚拟页号偏移量)cpu通过内存管理单元(MMU)找到对应到物理内存中的物理地址并返回过程如下查询快表缓存(TLB)找到是否有缓存的页帧(物理页号)有则直接返回缓存的内容否则在页表(分页管理)中找到虚拟地址的虚拟页号对应的物理页号的起始地址返回物理地址(物理地址物理起始地址偏移量)用户空间与内核空间为了避免用户进程直接操作内核保证内核安全操作系统将虚拟内存划分为两部分一部分是内核空间(Kernel-space)一部分是用户空间(User-space)。在 Linux 系统中内核模块运行在内核空间对应的进程处于内核态而用户程序运行在用户空间对应的进程处于用户态。用户空间的进程无法直接访问内核函数比如由调度系统切换至内核态才能调用内核函数。这也就是为啥我们说调用glibc库的fread函数的时候需要会发生上下文切换并且发生两次拷贝(磁盘 - 内核缓冲区(read buffer) - 用户缓冲区)的原因虚拟内存分为用户空间与内核空间通常按3:1分配比如32位系统的能表示的最大虚拟地址为4G将最高的 1G 的字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF)供内核进程使用称为内核空间而较低的 3G 的字节(从虚拟地址 0x00000000 到 0xBFFFFFFF)供各个用户进程使用称为用户空间。下图是一个进程的用户空间和内核空间的内存布局内核空间内核空间总是驻留在内存中它是为操作系统的内核保留的。应用程序是不允许直接在该区域进行读写或直接调用内核代码定义的函数的。上图左侧区域为内核进程对应的虚拟内存按访问权限可以分为进程私有和进程共享两块区域。进程私有的虚拟内存每个进程都有单独的内核栈、页表、task 结构以及 mem_map 结构等。进程共享的虚拟内存属于所有进程共享的内存区域包括物理存储器、内核数据和内核代码区域。用户空间每个用户进程都有一个单独的用户空间用户空间包括以下几个内存区域运行时栈由编译器自动释放。存放函数的参数值局部变量和方法返回值等。每当一个函数被调用时该函数的返回类型和一些调用的信息被存储到栈顶调用结束后调用信息会被弹出弹出并释放掉内存。栈区是从高地址位向低地址位增长的是一块连续的内在区域最大容量是由系统预先定义好的申请的栈空间超过这个界限时会提示溢出比如递归申请会出现“栈溢出”现象内存映射区域例如将动态库共享内存等虚拟空间的内存映射到物理空间的内存一般是 shmmmap 函数所分配的虚拟内存空间。运行时堆用于存放进程运行中被动态分配的内存段位于 BSS 和栈中间的地址位。由开发人员申请分配(malloc)和释放(free)。堆是从低地址位向高地址位增长采用链式存储结构。频繁地 malloc/free 造成内存空间的不连续产生大量碎片。当申请堆空间时库函数按照一定的算法搜索可用的足够大的空间。因此堆的效率比栈要低的多。未初始化的数据段存放未初始化的全局变量BSS 的数据在程序开始执行之前被初始化为 0 或 NULL。已初始化的数据段存放已初始化的全局变量包括静态全局变量、静态局部变量以及常量。代码段存放 CPU 可以执行的机器指令该部分内存只能读不能写。通常代码区是共享的即其它执行程序可调用它。假如机器中有数个进程运行相同的一个程序那么它们就可以使用同一个代码段。当我们写完代码编译链接并且生成可执行文件后得到的这个东西就是一系列二进制代码的集合我们管这东西叫做程序存储在磁盘上。只有当我们执行这个文件后程序才会被操作系统读入内存运行比如[mqq9-37-26-84 ~]$ size /usr/local/bin/curltext data bss dec hex filename155348 1348 272 156968 26528 /usr/local/bin/curl上面命令输出的地址就是各个分段的虚拟地址当进程执行一个程序时需要先从先内存中读取该进程的指令然后执行获取指令时用到的就是虚拟地址。这个虚拟地址是程序链接时确定的(内核加载并初始化进程时会调整动态库的地址范围)。为了获取到实际的数据CPU 需要将虚拟地址转换成物理地址CPU 转换地址时需要用到进程的页表(Page Table)而页表(Page Table)里面的数据由操作系统维护。内存管理机制分段管理(Segmentation)分段机制下的虚拟地址由两部分组成段选择子和段内偏移量。段选择子保存在段寄存器里面。段选择子里面最重要的是段号用作段表的索引。段表里面保存的是这个段的基地址、段的界限和特权等级等控制位。段内偏移量位于 0 和段界限之间如果段内偏移量是合法的则段基地址段内偏移量物理内存地址。程序若干个逻辑分段(栈堆数据等)会映射到对应的物理内存分段如果要访问(栈)段 3 中偏移量 500 的虚拟地址我们可以计算出物理地址为段 3 在物理内存的基地址 7000 偏移量 500 7500。分段的内存碎片问题(内存碎片的产生可自行google)比较严重所以引入了分页管理(更小颗粒度)分页管理分页是把整个虚拟和物理内存空间切成一段段固定尺寸的页大小。在 Linux 下1页4KB。在分页机制下的虚拟地址有两部分组成分别是页号和页内偏移。页号作为页表的索引映射虚拟页号到物理页号在物理内存的基地址页内偏移量上面的基地址页内偏移物理内存地址下面举个例子虚拟内存中的页通过页表映射为了物理内存中的页如下图这里讲一下MMU中具体的页表映射逻辑虚拟页面中每一项包含多个控制位VALID 位表示是否缓存SUP 位表示进程是否必须运行在超级用也就是内核模式下才能访问该页WRITE 位控制页面的写访问EXRC 位控制页面的执行在任意时刻虚拟页面分为三个不同的状态未分配的VM 系统还未分配(或者创建)的页未分配的页没有任何数据和它们关联因此不占用任何内存空间。缓存的当前已缓存在物理内存中的已分配页。未缓存的未缓存在物理内存中的已分配页。思考个问题如果进程访问某个虚拟页面但没有对应的物理内存映射会发生什么会触发页中断就是我们说的Page Fault上图所示访问不到虚拟页的内存的时候(2)检测Valid0发生缺页中断然后交给缺页中断处理器处理逻辑(3)缺页中断处理器从物理内存中选择某一合适的页置换(swap)到磁盘然后从磁盘中创建新的虚拟页面更新虚拟页与物理页的映射然后返回用户进程。当异常处理程序返回时它会重启执行导致缺页的指令该指令会将导致缺页的虚拟地址重新发送到MMU。此时该虚拟页号已经在主存(物理内存)中了那么就是页命中了。简单分页会有空间的问题因为每个进程都维护自己的页表空间浪费所以引入了多级页表机制从而大大减少页表空间回到刚才的内存碎片的问题内存碎片通常分为内部碎片和外部碎片内部碎片是由于采用固定大小的内存分区当一个进程不能完全使用分给它的固定内存区域时就产生了内部碎片通常内部碎片难以完全避免。外部碎片是由于某些未分配的连续内存区域太小以至于不能满足任意进程的内存分配请求从而不能被进程利用的内存区域。一般我们解决的是外部碎片问题而现在操作系统普遍采用的段页式内存分配方式就是将进程的内存区域分为不同的段然后将每一段由多个固定大小的页组成。通过页表机制使段内的页可以不必连续处于同一内存区域从而减少了外部碎片然而同一页内仍然可能存在少量的内部碎片只是一页的内存空间本就较小从而使可能存在的内部碎片也较少。段页式内存管理段页式内存管理机制下虚拟地址由段号、段内页号和页内位移三部分组成。段页式地址变换中要得到物理地址须经过三次内存访问第一次访问段表得到页表起始地址第二次访问页表得到物理页号第三次将物理页号与页内位移组合得到物理地址。总的来说避免外碎片的方法有两种:利用分页单元把一组非连续的空闲页框映射到连续的线性地址开发一种适当的技术来记录现存的空闲的连续页框块的情况以尽量避免为满足对小块的请求而分割大的空闲快第一种方案的意思是我们使用地址转换技术把非连续的物理地址转换成连续的线性地址。就是上面提到的段页式内存分配第二种方案的意思是开发一种特有的分配技术来记录下来空闲内存的情况从而解决内存碎片问题。linux系统下采取了伙伴系统(buddy)和slab以及相关的分配算法回收机制提高了内存的利用率(具体感兴趣的可以自行google)。整体内存管理架构总结内存分为虚拟内存和物理内存虚拟内存分成用户空间和内核空间(3:1)内存管理有分段分页段页式机制地址转换由MMU负责(TLB页表)映射涉及知识点有页面置换缺页错误内存碎片等要对内存管理子系统有深入的了解还需要了解虚拟内存管理子系统中的各种机制与算法buddy (伙伴系统(buddy system)以页为单位管理和分配内存)slab(基于伙伴系统分配的大内存进一步细分成小内存分配)zone(内核地址映射逻辑)kswapd(页面换入换出页缓存回收zone扫描)bdflush(延迟dirty buffers刷盘机制)但是本篇文章旨在为了对内存管理有个整体的了解更深入的会放到后面的文章中
http://www.lebaoying.cn/news/28123.html

相关文章:

  • 河南便宜网站建设价格低分享网站排名
  • 海外留学网站建设方案wordpress 引用来源
  • 做简历的网站wordpress 浏览次数 2
  • 手机销售网站的建设wordpress 小工具居中
  • 做化工的外贸网站都有什么地方西宁知名网站设计公司
  • 网站的构建个人网站创意
  • 中介网站设计做网站公司需要准备资料
  • 文字游戏做的最好的网站wordpress添加贴吧表情
  • 自己做网站兼职浙江创都建设有限公司网站
  • 免费的行情网站推荐下载安装建立网站找什么公司
  • vs2010做的网站新乐市住房和城乡建设局网站
  • 网站建站安全需求做棋盘游戏辅助的网站
  • 室内设计方案网站东莞产品网站建设公司
  • 珠海做企业网站多少钱求个网站这么难吗2021年
  • 手机端网站开发语言蓟县网站建设
  • 江西网站开发科技公司做轴承生意的网站
  • 可直接进入网站的代码数商云科技
  • 通许画册设计网站企业网站建设合同
  • 怎么做网站网页归档wamp 网站开发首先做什么
  • 杭州医疗器械网站制作做网站后用浏览量百度给钱
  • 网站模板下载郑州建网站
  • 网站设计联系北京市企业信用信息网
  • php网站欣赏网站开发合同 保密条款
  • 做网站的报价河南网站推广电话
  • 网站前台管理系统网站开启速度变慢了
  • dwcc怎么做网站ps做网站对齐技巧
  • 杭州市江干区建设局网站iis 网站模板下载
  • 重庆家居网站制作公司网站建设行业前景如何
  • 专业简历制作网站有哪些黄骗免费网站
  • 子页面的网站地址怎么做淮南网备案查询