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

简述建设网站的步骤6深圳php网站开发

简述建设网站的步骤6,深圳php网站开发,路由器做php网站,单机游戏网页版内存管理——地址空间连续内存分配与非连续内存分配 一、地址空间1.1 计算机存储层次1.2 地址和地址空间1.3 虚拟存储的作用 二、内存分配2.1 静态内存分配2.2 动态内存分配 三、连续内存分配3.1 动态分区分配3.2 伙伴系统#xff08;Buddy System#xff09; 四、非连续… 内存管理——地址空间连续内存分配与非连续内存分配 一、地址空间1.1 计算机存储层次1.2 地址和地址空间1.3 虚拟存储的作用 二、内存分配2.1 静态内存分配2.2 动态内存分配 三、连续内存分配3.1 动态分区分配3.2 伙伴系统Buddy System 四、非连续内存分配4.1 段式存储管理4.2 页式存储管理4.3 页表4.4 段页式存储管理 一、地址空间 1.1 计算机存储层次 基本要求 一个进程需要一块存储时分配完成工作后收回 基本结构 首先分为物理存储和逻辑存储。 物理地址(PA, Physical Address) 用于内存芯片级的单元寻址与处理器和CPU连接的地址总线相对应。逻辑地址(LA, Logical Address) CPU执行机器指令时用来指定一个操作数或者是一条指令的地址。也是用户编程时使用的地址。 计算机的存储层次结构图 物理存储可以从计算机体系结构的三个重要模块入手CPU、内存和IO 计算机的存储多层结构图   大体的调用关系如下首先要考虑最为快速的缓存其存取速度与CPU主频相同。缓存的使用是我们所不能意识到的因为其依靠硬件实现。但内存和虚存是我们需要在操作系统当中操作的。   操作系统对内存资源的抽象图   逻辑地址空间物理地址如果交由计算机或许是可以方便使用的但是对于人来说并不容易记忆理解和使用。我们希望我们各个进程使用的存储都相对性地低耦合有一个比较清晰的逻辑结构。把线性的物理地址编号转换为抽象的逻辑内存结构的管理机制是MMU内存管理单元 内存管理的目标 抽象逻辑地址空间保护独立地址空间共享访问相同内存虚拟化更大都地址空间 操作系统中的内存管理方式 重定位(relocation)分段(segmentation)分页(paging)虚拟存储(virtual memory/storage) 1.2 地址和地址空间 地址空间的定义 物理地址空间 —— 硬件支持的地址空间address[0, Maxsys]逻辑地址空间 —— 一个运行在程序所拥有的的内存范围address[0, Maxprog] 逻辑地址的生成 主要步骤 编译、汇编、链接、重定位 .c file 函数位置、变量名即逻辑地址。.s file 汇编语言中更加贴近机器语言但是依然用符号代表变量名字。.o file 机器语言中起始地址都是从0开始的把变量名转换为地址。linker把多个.o file变成一个单一的.exe file。.exe file 中地址已经做了全局的分布不同的.o file程序的地址在单一程序中已经有各自的定义。.exe file 通过loader放到内存中运行会有一定的偏移量所以程序依照偏移量来进行正确数据的访问和指令的操作。 物理地址生成 CPU根据指令查找逻辑地址的物理地址在什么地方根据什么查找MMU内存管理单元将逻辑地址映射到物理地址 1.3 虚拟存储的作用 1. 外存的缓存 虚拟内存可作为外存的缓存 常用数据放在物理内存中不常用数据放在外存运行的程序直接用虚存地址不用关注具体放在物理内存还是外存 2. 简化应用编译和加载运行 每个运行程序具有独立的地址空间而不管代码和数据在物理内存的实际存放从而简化 编译的执行程序链接操作系统的执行程序加载共享动态链接库、共享内存内存分配物理不连续虚拟连续 3. 保护数据 虚拟内存可保护数据 独立的地址空间使得区分不同进程各自内存变得容易地址转换机制可以进行可读/可写/可执行的检查地址转换机制可以进行特权级检查 二、内存分配 运行应用所占内存按存储数据特 征划分成多个段(Segment) 内存分配方式 静态内存分配动态内存分配 连续内存分配非连续内存分配 2.1 静态内存分配 参考博文linux下程序各个部分对应的段位置图说 bss段 text段 data段 rodata段 栈 堆 静态内存分配是指编译时的内存分配 包括全局变量、静态变量和代码段位于全局/静态数据段、常量数据段、代码段 下面从低地址到高地址先分别说明下每个段的意义 1.受保护区 受保护区是用户不能访问的地址受系统保护一般为 0-4k我们平时写程序的初始化一个指针 char *p NULL;这个NULL就是指向的受保护区0 地址。 2. 代码段主要存放用户编写的业务逻辑程序、算法等这里的地址是绝对地址因此如果有链接动态库是放在共享库中的。 3. rodata段 .rodata段 是 只读数据段比如我们用const修饰的值就是放在这个区域的。 const int a[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];4. data段 .data段 是数据段存放了已经初始化的全局变量以及已初始化全局静态变量已初始化的局部静态变量等。 int g_init_v 1; static int static_init_v 1; static int static_uinit_v;初始化的全局变量已经初始化和未初始化的静态变量都在这个段初始化的局部静态变量。 5.bss段 .bss段 是未初始化的全局变量以及未初始化的静态局部变量。 int g_uinit_v;6.堆 程序员可以用来分配内存的空间使用malloc分配。 /* mallloc */ int *malloc_v malloc(10);在创建进程的时候会为进程分配多大的堆。 7.共享库 共享库在调用了共享库的可执行程序里面共享库放在这个位置。 8.栈 栈程序执行过程中程序用来存放临时变量和函数返回值的区域局部变量、函数。由系统分配和回收在进程创建的时候每个进程/线程都有自己独立的栈空间。 9.命令行和环境变量 就是我们linux的环境变量env命令行参数比如 int main(int argc, char *argv[])这里面argv所带的参数。 利用下面的例子说明 2.2 动态内存分配 动态内存分配是指运行时的内存分配 栈(stack) 局部变量 堆(heap) malloc()函数分配内存free()函数释放内存 1. 堆和栈的内存分配 栈由编译器管理隐式分配堆的分配和释放由程序员管理显式分配 2. 分配大小 栈是由高地址向低地址生长的数据结构是一块连续的内存能从栈中获得的内存较小编译期间确定大小堆是由低地址向高地址生长的数据结构是一个不连续的储存空间内存获取比较灵活也较大 3. 动态内存分配函数 malloc() malloc()函数: void * malloc (size_ t size); 申请一块size大小的连续堆内存函数返回值是一个指针指向刚分配的内存首地址如果申请内存失败 返回一个空指针即返回值为NULL 动态内存的分配和释放必须成对使用 如果malloc()比free()多会造成内存泄漏如果malloc()比free()少会造成二次删除破坏内存导致程序崩溃 4. 动态内存回收函数free() free()函数void free (void *ptr) 释放指针变量在堆区上的内存空间不能释放栈上的内存空间free()要与malloc()成对使用 三、连续内存分配 3.1 动态分区分配 1. 连续内存分配 给应用分配一块不小于指定大小的连续的内存区域 内存碎片 不能被利用的空闲内存 外碎片 分配单元间未被使用内存内碎片 分配单元内部未被使用内存 2. 动态分区分配 当程序被加载执行时分配一个进程指定大小可变的分区(块、内存块)并且分区的地址是连续的 操作系统需要维护的数据结构 所有进程的已分配分区空闲分区(Empty-blocks) 3. 动态分区分配策略 1最先匹配(First-fit)在内存中找到第一个比需求大的空闲块分配给应用程序 2最佳匹配(Best-fit)在内存中找到最小、最适合的空闲块分配给应用程序 3最差匹配(Worst-fit)在内存中找到最大的空闲块分配给应用程序 动态分区方式对比表 动态分区方式原理实现优势劣势最先匹配1. 空闲分区列表按地址顺序排序2. 分配需要寻找一个合适的分区3. 重分配需要检查是否可以合并相邻空闲分区简单 在高地址易于产生更大空闲块外部碎片 分配大块时间较慢最佳匹配1. 分配需要寻找一个合适的分区2. 空闲分区列表按照大小排序从小到大3. 重分配需要检查是否可以合并相邻空闲分区比较简单可减小外碎片大小 避免大的空闲分区拆分 大部分是小尺寸时高效外部碎片 释放分区慢 易产生很多无用小碎片最差匹配1. 分配时选最大分区2. 空闲分区列表按由大到小排3. 重分配需要检查是否可以合并相邻空闲分区避免出现太多的小碎片大部分分配是中尺寸时高效外部碎片 放分区慢 大空闲块易破碎大分区无法被分配 三种分配方式并无优劣之分因为我们无法判断内存请求的大小。 4. 碎片整理   可以看到的是三种分区动态分配的方式都会产生外部碎片因此我们可以对碎片进行一定的整理来解决碎片问题通过调整进程占用的分区位置来较少会避免分区随便 1紧凑 通过移动分配给进程的内存分区以合并外部碎片 紧凑条件 所有的应用程序可动态重定位 2分区对换 运行程序需要更多的内存时抢占等待的程序并回收它们的内存以增大可用内存空间 早期linux/unix分区对换过程充分运用内存的做法只有一个进程可以在内存中运行的状态下可以对换来实现多进程的交替运行 3.2 伙伴系统Buddy System 伙伴系统比较好的折中了分配和回收过程当中合并和分配块位置的碎片问题。 1. 分区大小 可分配分区的大小 2U待分配分区的大小为2(U-1) s ≤ 2U把整块分配给应用待分配分区的大小为 s ≤ 2(i-1) 将大小为 2i 的当前空闲分区划分成两个大小为 2i-1空闲分区重复划分过程直到2(i-1) s ≤ 2i 把一个空闲分区分配出去 2. 数据结构 空闲块按大小和起始地址组织成二维数组初始状态只有一个大小为 2U的空闲块 3. 分配过程 由小到大在空闲块中找最小可用块如空闲块过大对可用空闲块进行二等分直到得到合适可用空闲块 4. 释放过程 把块放入空闲块数组合并满足条件的空闲块 合并条件大小相同 2i地址相邻低地址空闲块起始地址为2i1的位数 四、非连续内存分配 1. 连续内存分配的缺点 分配给一个程序的物理内存是连续的内存利用率较低有外碎片 / 内碎片的问题 能否通过新的一些手段来改善这些情况 非连续内存分配 2. 非连续内存分配的优点 一个程序的物理地址空间是非连续的更好的内存利用和管理允许共享代码与数据共享库等…支持动态加载和动态链接 3. 非连续内存分配的缺点 建立虚拟地址和物理地址的地址转换难度大 软件方案开销相当大 硬件方案采用硬件辅助机制 ➢ 分段Segmentation ➢ 分页Paging 4.1 段式存储管理 1. 段地址空间 程序运行的段地址空间由多个段组成段的概念段表示访问方式和存储数据等属性相同的一段地址空间主代码段、子模块代码段、公共库代码段、栈段、堆数据(heap)、初始化数据段、符号表等… 逻辑地址空间转化为不连续的二维结构 2. 段访问机制 段的概念 段表示访问方式和存储数据等属性相同的一段地址空间对应一个连续的内存“块”若干个段组成进程逻辑地址空间 段访问 逻辑地址由二元组saddr组成 s——断号addr——段内偏移 段访问的硬件实现 4.2 页式存储管理 1. 页式存储管理概念 页帧帧、物理页面Frame, Page Frame 把物理地址空间划分成大小相同的基本分配单位2的n次方如51240968192 页面页、逻辑页面Page 把逻辑地址空间也划分为相同大小的基本分配单位帧和页的大小必须是相同的 页面到页帧 逻辑地址到物理地址的转化页表MMU/TLB 2. 页式存储管理的地址转化 页帧Frame 内存物理地址的表示二元组fo frame-number帧号F位共有 2F 个帧off-set帧内偏移S位每帧有 2S 字节 物理地址 f * 2s o 物理地址计算实例: 假定16-bit的地址空间9-bit512 byte大小的页帧物理地址表示 36 物理地址 f * 2s o 3 * 2 9 6 1542 其中 F帧号的位数 s一帧的长度 f帧号 s帧内偏移 页面Page 页内偏移 帧内偏移通常页号大小 ≠ 帧号大小 进程逻辑地址的表示二元组po p —— 页号p位2p个页 o —— 页内偏移S位每页有2S字节 虚拟地址 p * 2s o 3. 逻辑地址到物理地址的映射 页表 页表 页到帧的映射逻辑地址中的页号是连续的物理地址中的帧号是不连续的不是所有的页都有对应的帧 页表保存了逻辑地址——物理地址之间的映射关系 4.3 页表 1页表概述 页表结构 每个进程都有一个页表每个页面对应一个页表项随进程运行状态而动态变化页表基址寄存器 页表地址转化实例 2分页机制的性能问题 : 空间代价、时间开销 访问一个内存单元需要2次内存访问 ➢ 一次用于获取页表项 ➢ 一次用于访问数据 页表可能非常大 ➢ 64位机器如果每页1024字节那么一个页表的大小会是多少264 / 210 254 ➢ 每一个运行的程序都需要有一个页表 如何处理 ➢ 缓存Caching ➢ 间接Indirection访问 2. 快表 利用缓存的机制来减少对内存的访问实际上就是把近期访问过的页表项缓存到CPU里 TLB 使用关联存储实现具备快速访问性能如果TLB命中物理页号可以很快被获取如果TLB未命中对应的表项被更新到TLB中 3. 多级页表 通过简介引用的方式来减少页表的长度通过间接引用将页号分成k级 访问次数 k1 次具体访问过程第一级页表项作为第一页表的偏移找到第二级页表上的起始第二级页表项作为第二页表的偏移找到第三及页表上的起始…最后找到访问内存单元的物理页号 物理内存的访问减少每级页表的长度 二级页表实例 4. 反置页表 对于大地址空间64-bits系统多级页表变得繁琐页寄存器和反置页面的思路 不让页表与逻辑地址空间的大小相对应让页表与物理地址空间的大小相对应 4.4 段页式存储管理 段式存储在内存保护方面有优势页式存储在内存利用和优化转移到后备存储方面有优势。 在段式存储管理基础上给每个段加一级页表 通过指向相同的页表地址实现进程间的段共享 整理自 【清华大学】 操作系统
http://www.pierceye.com/news/537976/

相关文章:

  • 住房和城乡建设部网站下载魔改wordpress主题
  • dremrever怎么做网站阿里云php网站建设教程
  • 网站建设课程旅行社手机网站建设方案
  • 书店网站建设策划书总结关于外贸公司的网站模板
  • 张家港市规划建设网站房地产估价师
  • 创建网站有什么用南京做网站优化的企业
  • 网站seo设置是什么怎么知道网站被百度k了
  • 个人网站开发的意义自己建设网站需要什么手续
  • 网站的建设流程怎样使用仿站小工具做网站
  • 佛山企业模板建站企业微信管理系统
  • 百度推广登录网站网站开发需要什么技术人员
  • 有关网站升级建设的申请书中国工业设计公司
  • 线上销售怎么做优化网站哪家好
  • 成都网站建设备案audio player wordpress 使用
  • 做网站设计的公司上海装修公司名字
  • 处理器优化软件se 网站优化
  • 网站制作公司汉狮网络电子商务网站建设评估的指标有哪些?
  • asp网站伪静态教程网站建设多少钱实惠湘潭磐石网络
  • wordpress 外贸网站建设wordpress模板安装
  • 中国精准扶贫网站建设现状惠安规划局建设局网站
  • 营销型网站制作建设网络营销推广技巧
  • 哪里有做网站推广的宁波招聘网站开发
  • 建站工具帝国双语网站开发
  • 呼和浩特企业网站建设赞叹天河网站建设公司
  • 新郑做网站公司吉林省建设项目招标网
  • 深圳做网站哪里最好南宁seo外包平台
  • 新开传奇网站推荐做百度推广怎么做才能有电话
  • 文件夹里内容做网站的分类做网站上线一般要多久
  • 企业网站页头背景图河南网络优化服务
  • 成品网站nike源码免费现在装宽带要多少钱