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

杨浦区公司网站建设今天重要新闻

杨浦区公司网站建设,今天重要新闻,个人网页制作代码模板,企业网站的主要内容1. 扫盲篇1.1 操作系统存储层次常见的计算机存储层次如下#xff1a;寄存器#xff1a;CPU提供的#xff0c;读写ns级别#xff0c;容量字节级别。CPU缓存#xff1a;CPU和CPU间的缓存#xff0c;读写10ns级别#xff0c;容量较大一些#xff0c;百到千节。主存#x…1. 扫盲篇1.1 操作系统存储层次常见的计算机存储层次如下寄存器CPU提供的读写ns级别容量字节级别。CPU缓存CPU和CPU间的缓存读写10ns级别容量较大一些百到千节。主存动态内存读写100ns级别容量GB级别。外部存储介质磁盘、SSD读写ms级别容量可扩展到TB级别。CPU内的缓存示意图如下其中 L1d 和 L1i 都是CPU内部的cacheL1d 是数据cache。L1i 是指令缓存。L2是CPU内部的不区分指令和数据的。由于现代PC有多个CPUL3缓存多个核心共用一个。对于编程人员来说绝大部分观察主存和外部存储介质就可以了。如果要做极致的性能优化可以关注L1、L2、L3的cache比如nginx的绑核操作、pthread调度会影响CPU cache等。1.2 内存管理概述MMU内存管理单元通过CPU将线性地址转换成物理地址。1.2.1 虚拟内存物理内存是有限的即使支持了热插拔、非连续的不同的CPU架构对物理内存的组织都不同。这使得直接使用物理内存非常复杂为了降低使用内存的复杂度引入了虚拟内存机制。虚拟内存抽象了应用程序物理内存的细节只允许物理内存保存所需的信息按需分页并提供了一种保护和控制进程间数据共享数据的机制。有了虚拟内存机制之后每次访问可以使用更易理解的虚拟地址让CPU转换成实际的物理地址访问内存降低了直接使用、管理物理内存的门槛。物理内存按大小被分成页框、页每块物理内存可以被映射为一个或多个虚拟内存页。这块映射关系由操作系统的页表来保存页表是有层级的。层级最低的页表保存实际页面的物理地址较高层级的页表包含指向低层级页表的物理地址指向顶级的页表的地址驻留在寄存器中。当执行地址转换时先从寄存器获取顶级页表地址然后依次索引找到具体页面的物理地址。1.2.2 大页机制虚拟地址转换的过程中需要好几个内存访问由于内存访问相对CPU较慢为了提高性能CPU维护了一个TLB地址转换的cacheTLB是比较重要且珍稀的缓存对于大内存工作集的应用程序会因TLB命中率低大大影响到性能。为了减少TLB的压力增加TLB缓存的命中率有些系统会把页的大小设为MB或者GB这样页的数目少了需要转换的页表项也小了足以把虚拟地址和物理地址的映射关系全部保存于TLB中。1.2.3 区域概念通常硬件会对访问不同的物理内存的范围做出限制在某些情况下设备无法对所有的内存区域做DMA。在其他情况下物理内存的大小也会超过了虚拟内存的最大可寻址大小需要执行特殊操作才能访问这些区域。这些情况下Linux对内存页的可能使用情况将其分组到各自的区域中方便管理和限制。比如ZONE_DMA用于指明哪些可以用于DMA的区域ZONE_HIGHMEM包含未永久映射到内核地址空间的内存ZONE_NORMAL标识正常的内存区域。1.2.4 节点多核CPU的系统中通常是NUMA系统非统一内存访问系统。在这种系统中内存被安排成具有不同访问延迟的存储组这取决于与处理器的距离。每一个库被称为一个节点每个节点Linux构建了一个独立的内存管理子系统。一个节点有自己的区域集、可用页和已用页表和各种统计计数器。1.2.5 page cache从外部存储介质中加载数据到内存中这个过程是比较耗时的因为外部存储介质读写性能毫秒级。为了减少外部存储设备的读写Linux内核提供了Page cache。最常见的操作每次读取文件时数据都会被放入页面缓存中以避免后续读取时所进行昂贵的磁盘访问。同样当写入文件时数据被重新放置在缓存中被标记为脏页定期的更新到存储设备上以提高读写性能。1.2.6 匿名内存匿名内存或者匿名映射表示不受文件系统支持的内存比如程序的堆栈隐式创立的或者显示通过mmap创立的。1.2.7 内存回收贯穿系统的生命周期一个物理页可存储不同类型的数据可以是内核的数据结构或是DMA访问的buffer或是从文件系统读取的数据或是用户程序分配的内存等。根据页面的使用情况Linux内存管理对其进行了不同的处理可以随时释放的页面称之为可回收页面这类页面为页面缓存或者是匿名内存被再次交换到硬盘上大多数情况下保存内部内核数据并用DMA缓冲区的页面是不能重新被回收的但是某些情况下可以回收使用内核数据结构的页面。例如文件系统元数据的内存缓存当系统处于内存压力情况下可以从主存中丢弃它们。释放可回收的物理内存页的过程被称之为回收可以同步或者异步的回收操作。当系统负载增加到一定程序时kswapd守护进程会异步的扫描物理页可回收的物理页被释放并逐出备份到存储设备。1.2.8 compaction系统运行一段时间内存就会变得支离破碎。虽然使用虚拟村内可以将分散的物理页显示为连续的物理页但有时需要分配较大的物理连续内存区域。比如设备驱动程序需要一个用于DMA的大缓冲区时或者大页内存机制分页时。内存compact可以解决了内存碎片的问题这个机制将被占用的页面从内存区域合适的移动以换取大块的空闲物理页的过程由kcompactd守护进程完成。1.2.9 OOM killer机器上的内存可能会被耗尽并且内核将无法回收足够的内存用于运行新的程序为了保存系统的其余部分内核会调用OOM killer杀掉一些进程以释放内存。1.3 段页机制简介段页机制是操作系统管理内存的一种方式简单的来说就是如何管理、组织系统中的内存。要理解这种机制需要了解一下内存寻址的发展历程。直接寻址早期的内存很小通过硬编码的形式直接定位到内存地址。这种方式有着明显的缺点可控性弱、难以重定位、难以维护分段机制8086处理器寻址空间达到1MB即地址线扩展了20位由于制作20位的寄存器较为困难为了能在16位的寄存器的基础上寻址20位的地址空间引入了段的概念即内存地址段基址左移4位偏移分页机制随着寻址空间的进一步扩大、虚拟内存技术的引入操作系统引入了分页机制。引入分页机制后逻辑地址经过段机制转换得到的地址仅是中间地址还需要通过页机制转换才能得到实际的物理地址。逻辑地址 --(分段机制) 线性地址 --(分页机制) 物理地址。段页机制详见https://blog.lecury.cn/2017/05/05/内存寻址之段页存储机制分析/2. 进阶篇2.1 内存分配2.1.1 大块内存的分配扫盲篇也提到Linux基于段页式机制管理物理内存内存被分割成一个个页框由多级页表管理。除此之外由于硬件的约束DMA处理器只能对RAM的前16MB寻址。32位机器CPU最大寻址空间只有4GB对于大容量超过4GB的RAM无法访问所有的地址空间。Linux还将物理内存划分为不同的管理区ZONE_DMA、ZONE_NORMAL、ZONE_HIGHMEM每个管理区都有自己的描述符也有自己的页框分配器示意图如下对于连续页框组的内存分配请求是由管理区分配器完成每个管理区的页框分配是通过伙伴系统算法来实现。内核经常请求和释放单个页框为了提高性能每个内存管理区还定义了一个CPU页框高速缓存包含一些预选分配的页框。伙伴系统算法内核为分配一组连续的页框而建立的一种健壮、高效的分配策略这种策略缓解了内存碎片的发生。算法的核心思想是把所有的空闲页框分组为11个块链表每个块链表分别包含1、2、4、8、16、...、512、1024个连续页框。举个简单的例子说明算法的工作过程。假设需要256个页框的连续内存算法先在256个页框的链表中检查是否还有空闲块如果有就分配出去。如果没有算法会找到下一个更大的512页框的链表如果存在空闲块内核会把512页框分割成两部分一半用来分配另一半插入到256页框的链表中。2.1.2 小块内存的分配伙伴系统算法采用页框作为基本的内存区这适合于大块内存的请求。对于小块内存的分配是采用的slab分配器算法来实现的。slab并没有脱离伙伴系统算法而是基于伙伴系统分配的大内存基础上进一步细分小内存对象的分配。slab 缓存分配器提供了很多优点首先内核通常依赖于对小对象的分配它们会在系统生命周期内进行无数次分配slab 缓存分配器通过对类似大小的对象进行缓存从而避免了常见的碎片问题。slab 分配器还支持通用对象的初始化从而避免了为同一目而对一个对象重复进行初始化。最后slab 分配器还可以支持硬件缓存对齐和着色这允许不同缓存中的对象占用相同的缓存行从而提高缓存的利用率并获得更好的性能。slab分配器详见http://www.secretmango.com/jimb/Whitepapers/slabs/slab.html备注: slab着色主要是为了更好的利用CPU L1 cache所使用的地址偏移策略。如果slab分配对象后还有空间剩余就会把剩余的空间进行着色处理尽可能将slab对象分散在L1不同的cache line中。2.1.3 非连续内存的分配把内存区映射到一组连续的页框是最好的选择这样会充分利用高速缓存。如果对内存区的请求不是很频繁那么分配非连续的页框会是比较好的选择因为这样会避免外部碎片缺点是内核的页表比较乱。Linux以下方面使用了非连续内存区为活动交换区分配数据结构。给某些I/O驱动程序分配缓冲区。等2.2 实存、虚存实存进程分配的、加载到主存中的内存。包含来自共享库的内存只要这些库占用的页框还在主存中也包含所有正在使用的堆栈和堆内存。可以通过 ps -o rss 查看进程的实存大小。虚存包含进程可以访问的所有内存包含被换出、已经分配但还未使用的内存以及来自共享库的内存。可以通过 ps -o vsz 查看进程的虚存大小。举个例子如果进程A具有500K二进制文件并且链接到2500K共享库则具有200K的堆栈/堆分配其中100K实际上在内存中其余是交换或未使用并且它实际上只加载了1000K的共享库然后是400K自己的二进制文件RSS: 400K 1000K 100K 1500K VSZ: 500K 2500K 200K 3200K实存和虚存是怎么转换的呢当程序尝试访问的地址未处于实存中时就发生页面错误操作系统必须以某种方式处理这种错误从而使应用程序正常运行。这些操作可以是找到页面驻留在磁盘上的位置并加载到主存中。重新配置MMU更新线性地址和物理地址的映射关系。等。随着进程页面错误的增长主存中可用页面越来越少为了防止内存完全耗尽操作系统必须尽快释放主存中暂时不用的页面以释放空间供以后使用方式如下将修改后的页面写入到磁盘的专用区域上调页空间或者交换区。将未修改的页面标记为空闲没必要写入磁盘因为没有被修改。调页或者交换是操作系统的正常部分需要注意的是过度交换这表示当前主存空间不足页面换出抖动对系统极为不利会导致CPU和I/O负载升高极端情况下会造成操作系统所有的资源花费在调页层面。2.3 page cacheLinux中通过page cache机制来加速对磁盘文件的许多访问当它首次读取或写入数据介质时Linux会将数据存储在未使用的内存区中通过这些区域充当缓存如果再次读取这些数据时直接从内存中快速获取该数据。当发生写操作时Linux不会立刻执行磁盘写操作而是把page cache中的页面标记为脏页定期同步到存储设备中。可以通过free -m来查看page cache情况total used free shared buffers cached Mem: 32013 31288 724 0 241 12000 -/ buffers/cache: 19046 12966 Swap: 32767 23134 9633cached这列显示了page cache的情况。
http://wiki.neutronadmin.com/news/38016/

相关文章:

  • 网站报价单申请网页要多少钱
  • 重庆网站运营购物网站功能
  • 网站中 点击出现登录框怎么做网站上怎么做弹幕效果
  • 网站搭建类型开发工程师是什么
  • 建一个网站 服务器机房托管价格暴雪手游
  • 网站域名查询地址慧算账代理记账公司
  • 天津电商网站制作网络服务器忙请稍后重试怎么办
  • 携程网站联盟如何在国外网站开发新客人
  • 高新技术企业申报网站网站带薪歌手都要怎样做呀
  • 常州网站开发培训软件合集软件资料2023
  • 番禺网站建设番禺网络营销江苏省住房和城乡建设局
  • 做小说网站做国外域名还是国内的好吉安市建设技术培训中心网站
  • 原平新闻热点头条wordpress 优化seo
  • 综合型企业网站有哪些天津手机网站制作
  • 帝国+只做网站地图重庆人居建设集团网站
  • 为什么网站在本地看没问题上传之后没有内容呢?搬搬屋源码网
  • 阳江网站制作公司阿里巴巴国际站做2个网站有用
  • 网站推广与维护设计方案百度竞价员
  • 亚马逊关键词排名查询工具徐州整站优化
  • 成都家具网站建设wordpress英文
  • 大型门户网站有哪些作风建设提升年活动网站
  • 化妆品网站制作需要中企动力邮箱app
  • 专业制作网站装修公司电话号码大全
  • 网站后缀co注册公司代理记账费用
  • 站长做旅游网站上海十大公司排名
  • 网站页面优化简单吗学校网站怎么做
  • jquery素材网站网站建设的基本需求有哪些
  • 制作一个网站能多少钱链接缩短网址
  • 自己建设网站步骤产品外观设计的重要性
  • 哪些网站容易做三星网上商城打不开