Linux原理及应用04.ppt
《Linux原理及应用04.ppt》由会员分享,可在线阅读,更多相关《Linux原理及应用04.ppt(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、LINUXLINUX原理及应用原理及应用武汉大学计算机学院武汉大学计算机学院 李文海李文海Email:第三章第三章 存储管理存储管理n存储管理的任务是方便用户使用存储管理的任务是方便用户使用存储资源存储资源,在有限的物理空间内使在有限的物理空间内使更多更多的用户进程高效的用户进程高效地获得和使用地获得和使用尽可能多尽可能多的存储空间,从而的存储空间,从而提提高高系统的整体性能。系统的整体性能。nLinux系系统统本本身身采采用用段段页页式式存存储储管管理理,使使用用最最小小限限度度的的段段机机制制和和三三级级分分页页机机制制。在在I386保保护护模模式式下下,系系统统可可以以获获得得大大容容量
2、量的的虚虚拟拟存存储储器器,并并且且在在各各进进程程之之间间实实现现有有效效的的存存储储共共享享和保护和保护。3.1虚拟存储器虚拟存储器 n额外附加的存储器空间总是十分诱人的,即使它们也很慢。如果在RAM被用完时,通过把暂暂暂暂时时时时不不不不用用用用的代码和数据转移到磁盘上以腾出更多空间的方法来使用磁磁磁磁盘盘盘盘代代代代替替替替RAMRAMRAMRAM的话,那将是很好的一件事情。Linux恰好能够做到这一点,这被称之为虚虚虚虚拟拟拟拟内内内内存存存存(virtualmemory)。n虚拟内存是一种对RAM和磁盘n主存和辅存进行无缝混合访问无缝混合访问无缝混合访问无缝混合访问的技术n虚拟内存
3、对于应用程序来说就好像它真的存在一样n并非真的内存,内核使得应用程序无法分辨出它们的区别n对于应用程序来说,就好像真的有很很很很大大大大数数数数量量量量的的的的RAMRAMRAMRAM,只不过有时候比较慢慢慢慢而已。3.1.1 局部性原理局部性原理n在某个特定的时间段中,CPU不是随机地访问整个程序和数据,而是集中集中集中集中地访问程序和数据的某一个部分。n术语“虚拟内存虚拟内存虚拟内存虚拟内存”还有另外一层意思n对进程驻留地址进行欺骗的方法n每个进程都会认为认为认为认为它的地址是从从从从0 0 0 0开始并由此连续向上开始并由此连续向上开始并由此连续向上开始并由此连续向上发展的n很明显,这一
4、点同时对所有进程都成立是不可能的n在生成代码生成代码生成代码生成代码时这个假定(fiction)却能够带来很大方便n进程不必也不须知道它们是否真正从0地址开始驻留3.1.2 虚拟地址和虚拟地址空间虚拟地址和虚拟地址空间n内存中同时存在多个进程,每个进程的地址都是每个进程的地址都是每个进程的地址都是每个进程的地址都是以以以以0 0 0 0地址作为起始地址的虚拟地址空间地址作为起始地址的虚拟地址空间地址作为起始地址的虚拟地址空间地址作为起始地址的虚拟地址空间。进程中的每一条指令和数据在这样的虚地址空间中,都有一个唯一确定一个唯一确定一个唯一确定一个唯一确定的地址地址地址地址,即虚拟地址虚拟地址虚拟
5、地址虚拟地址。n虚拟内存不仅仅让你的计算机内存显得更多,内存管理子系统还提供:nLargeAddressSpaces(巨大的地址空间)nProtection(保护)nMemoryMapping(内存映射)nFairPhysicsMemoryAllocation(公平分配物理内存)nSharedVirtualMemory(共享虚拟内存)3.2内存管理方式n在虚拟存储技术的发展过程中,使用了不同的地址空间划分方法地址空间划分方法和映射关系映射关系,这些不同的划分和映射对应于不同的存储管理方式。n由于I386体系结构的限制,在I386平台上的Linux系统采用n n两级页索引两级页索引两级页索引两级
6、页索引,页目录页目录页目录页目录和中间目录中间目录中间目录中间目录合二为一nLinux根据IntelCPU的要求,最低限度地设置与段有关的结构和初始化程序,但实质上放弃了段放弃了段放弃了段放弃了段式管理式管理式管理式管理功能n真正发挥作用的是以页目录和页表页目录和页表页目录和页表页目录和页表为中心的数据结构和函数。3.2内存管理方式nLinux系统使用系统使用I386提供的四级保护机制中的两级:提供的四级保护机制中的两级:n n0 0级级级级由系统内核使用由系统内核使用n n3 3级级级级由用户程序使用。由用户程序使用。nLinux将将每每个个用用户户进进程程4GB4GB长长度度的的虚虚拟拟内
7、内存存划划分分成成固固定大小的页面。其中定大小的页面。其中n n03GB-103GB-1是用户态空间,由各进程是用户态空间,由各进程独占独占独占独占n 3GB4GB-13GB4GB-1是是内内核核态态空空间间,由由所所有有进进程程共共共共享享享享,但但只只有有内内核态的进程才能访问。核态的进程才能访问。nLinux将将物理内存也划分成固定大小的页面,以页帧物理内存也划分成固定大小的页面,以页帧(page frame)为单位,页帧的长度固定,等于页长,为单位,页帧的长度固定,等于页长,对对INTEL CPU缺省为缺省为4K4K字节。每个页面由数据结构字节。每个页面由数据结构page管理,它们又作
8、为数组管理,它们又作为数组mem_mapmem_map的元素。的元素。3.2内存管理方式n虚拟地址到物理地址映射的抽象模型3.2.1 页页n把进程的虚拟地址空间划分为相等大小的部分,每个部分称为页页,同时把物理内存空间也按照页的大小划分为小的部分,称为页页面面或页页框框。对于80386体系,页和页面大小都为4K字节字节。n在页和页面页和页面页和页面页和页面之间建立一一映射一一映射一一映射一一映射关系n连续的一维虚地址空间虚地址空间虚地址空间虚地址空间可以分别存放在不同的物理空间物理空间物理空间物理空间中n页内地址连续连续连续连续,页间可以不连续不连续不连续不连续n页和页面之间的映射关系记录在页
9、表页表页表页表中页表及对应关系地址变换示意图3.2.2 3.2.2 段段 n把整个程序按照逻逻辑辑结结构构划分为不同的段段,每个段有自己的名称,大大小小不不等等,段之间不不存存在在顺顺序序关关系系,这样,进程具有一个二二维维的的虚拟空间虚拟空间。3.2.3 段页段页n n综合综合段式和页式管理的思想。如何理解?如何理解?如何理解?如何理解?3.3 803863.3 80386段页机制段页机制n本本节节针针对对LinuxLinux系系统统的的主主要要平平台台之之一一Intel Intel 8038680386系统,介绍其系统,介绍其段页式段页式硬件支持机制硬件支持机制。3.3.1 实模式与保护模
10、式实模式与保护模式n n80386803868038680386是是是是IntelIntelIntelIntel公公公公司司司司推推推推出出出出的的的的32323232位位位位CISCCISCCISCCISC(复复复复杂杂杂杂指指指指令令令令集集集集计计计计算算算算机)芯片。机)芯片。机)芯片。机)芯片。它有两种工作模式:它有两种工作模式:n n实实实实地地地地址址址址模模模模式式式式:与与与与早早早早期期期期的的的的80868086兼兼兼兼容容容容,不不不不能能能能启启启启用用用用分分分分页页页页机机机机制制制制,不不不不区区区区分分分分特特特特权权权权级级级级,分分分分段段段段机机机机制制
11、制制也也也也受受受受到到到到限限限限制制制制,直直直直接接接接寻寻寻寻址址址址方方方方式式式式,只只只只能能能能寻址寻址寻址寻址1MB1MB。n n虚虚虚虚拟拟拟拟地地地地址址址址模模模模式式式式,又又又又称称称称保保保保护护护护模模模模式式式式:支支支支持持持持分分分分段段段段机机机机制制制制,整整整整个个个个虚虚虚虚拟拟拟拟空空空空间间间间可可可可以以以以划划划划分分分分为为为为16K16K个个个个段段段段,每每每每个个个个段段段段的的的的大大大大小小小小可可可可变变变变,最最最最大大大大能能能能够够够够达达达达到到到到4GB4GB,每每每每个个个个段段段段可可可可以以以以提提提提供供供供
12、独独独独立立立立的的的的段段段段内内内内保保保保护护护护,支支支支持持持持二二二二级级级级分分分分页页页页机机机机制制制制,每每每每个个个个页页页页面面面面4KB4KB,提提提提供供供供段段段段页页页页式式式式存存存存储储储储管管管管理理理理的的的的硬硬硬硬件件件件支支支支持持持持。同同同同时时时时,在在在在同同同同一一一一任任任任务务务务内内内内部部部部,还还还还提提提提供供供供4 4种种种种(0303)保保保保护护护护特特特特权权权权级级级级,某某某某一一一一级级级级特特特特权权权权i i i i只只只只可可可可以以以以访访访访问问问问所所所所有有有有其其其其他他他他大大大大于于于于等等等
13、等于于于于这这这这一一一一特特特特权权权权级级级级(i)i)i)i)的的的的程程程程序段。序段。序段。序段。回顾回顾回顾回顾1MB1MB如何得来?如何得来?如何得来?如何得来?保护内容远不止这些保护内容远不止这些保护内容远不止这些保护内容远不止这些3.3.2 3.3.2 地址空间地址空间 n在在I386体体系系结结构构中中,提提供供段段页页式式存存储储管管理理的的硬硬件件支支持。与内存管理有关的地址空间包括:持。与内存管理有关的地址空间包括:n n逻辑地址空间逻辑地址空间逻辑地址空间逻辑地址空间n n线性地址空间线性地址空间线性地址空间线性地址空间n n物理地址空间物理地址空间物理地址空间物理
14、地址空间n在存储过程中,要经过相对独立的两级地址变换。在存储过程中,要经过相对独立的两级地址变换。n n第第第第一一一一级级级级使使用用分分分分段段段段机机制制,把把包包含含段段段段地地地地址址址址和和段段段段内内内内偏偏偏偏移移移移地地地地址址址址的的二二维维虚虚拟拟地地址址空空间间转转换换为为一一个个线线线线性性性性地地址址空空间间(也也是是虚虚虚虚拟拟拟拟地址空间);地址空间);n n第第第第二二二二级级级级使使用用分分分分页页页页机机制制,把把线线线线性性性性地地址址空空间间转转换换为为物物物物理理理理地地址址空间。空间。3.3.2 3.3.2 地址空间地址空间n从虚拟地址空间到线性地
15、址空间的转换关系由I386的分段机制管理。段选择器段选择器标识一个段,它是虚拟地址的两部分之一。描述符索引描述符索引13bits13bits GDT/LDT 1bitGDT/LDT 1bit 访问特权级访问特权级 2bits2bitsnI386的段描述符表分GDTGDT和LDTLDT两类,是包含段描述符的两个特殊的段。段描述符表段描述符表存储在由操作系统维护并由操作系统通过处理器中的存储管理硬件所访问的特殊段中。3.3.2 3.3.2 地址空间地址空间n每每个个虚虚虚虚拟拟拟拟地地地地址址址址空空空空间间间间(16K个个段段)可可以以分分为为相相等等的的两两个个部部分分,一一半半称称为为全全全
16、全局局局局虚虚虚虚拟拟拟拟地地地地址址址址空空间间,由由全全局局段段描描述述符符表表(GDTGDT)映映射射,另另一一半半称称为为局局局局部部部部虚虚虚虚拟拟拟拟地地地地址址址址空空空空间间间间,由由局部段描述符表局部段描述符表(LDTLDT)映射。映射。n系系统统中中所所有有进进程程共共共共享享享享一一个个全全全全局局局局段段表表,而而每每每每个个个个进进进进程程程程都都有有自自己己的的局局局局部部部部段段表表。当当进进程程发发生生切切换换时时,GDTGDT不不不不变变变变,而而LDTLDT更更新新为为正正正正在在在在执执执执行行行行进进程程的的LDT,因因此此所所有有进进程程共共享享GDT
17、所所映映射射的的物物理理地地址址空空间间,每每个个进进程程都都有有自自己单独的地址空间。己单独的地址空间。nI386体系结构采用体系结构采用二级分页二级分页二级分页二级分页机制,线性地址到物理地机制,线性地址到物理地址的映射采用一个址的映射采用一个二级页表二级页表二级页表二级页表。线性地址空间到物理线性地址空间到物理地址空间的转换关系由地址空间的转换关系由页表页表页表页表描述,页表存放在物理描述,页表存放在物理地址空间中。地址空间中。3.4 Linux3.4 Linux存储管理存储管理 nLinux系统本身采用段页式存储管理n使用最小限度的段机制和三级分页机制n在I386保护模式下可以获得大容
18、量的虚拟存储器n并且在各进程之间实现有效的存储共享和保护存储共享和保护存储共享和保护存储共享和保护。3.4.1 3.4.1 段页设置段页设置 nLinux系统最低限度地利用I386体系的分段机制,把整整整整个虚拟地址空间直接映射为线性地址空间个虚拟地址空间直接映射为线性地址空间个虚拟地址空间直接映射为线性地址空间个虚拟地址空间直接映射为线性地址空间,一个虚拟地址空间只包含一个段,段的大小为4GB。也就是说,一个进程最大可以占有一个进程最大可以占有一个进程最大可以占有一个进程最大可以占有4GB4GB的空间的空间的空间的空间。nLinux2.2.16及以前的版本,在全局段表(GDT)中,每个进程(
19、每个虚拟地址空间)有两个静态的表项:n n任务状态段任务状态段任务状态段任务状态段(TaskStatusSegment,TSS),这项记录着进程切换过程中的CPU现场状态,n n局部段表局部段表局部段表局部段表(LDT),LDT项是这个进程对应的局部段表的入口。而每个进程的局部段表中只有三个表项:一个空表项,一个用户数据段和一个用户代码段,用户数据和代码用户数据和代码用户数据和代码用户数据和代码都是从地址0开始,大小为3GB3GB3GB3GB,称为用户空间。所有进程的3GB4GB-13GB4GB-13GB4GB-13GB4GB-1线性空间线性空间线性空间线性空间,都由系统共享系统共享系统共享系
20、统共享,存放系统数据段和系统代码段,称为内核空间。3.4.1 段页设置段页设置 nLinux系统使用I386提供的四级保护机制中的两级:0级由系统内核使用,3级由用户程序使用。LinuxLinux内内内内核核核核存存存存储储储储在在在在内内内内核核核核空空空空间间间间。用户进程有各自的虚拟地址空间,都使用从03GB-1的线性空间,而内核空间映映映映射射射射到到到到每每每每一一一一个个个个用用用用户户户户线线线线性性性性空空空空间间间间的3GB4GB-13GB4GB-1的地方,由由由由所有进程共享所有进程共享所有进程共享所有进程共享。n整个线性空间通过分页的方式映射到物理空间。每页大小为4KB,
21、因此整个4GB的线性空间可以分为1 1 MM个页。Linux系统采用三级分页机制,对页表建立三级索引:页目录(pagedirectory),中间目录(pagemiddledirectory)和页表(pagetable)。由于I386体系结构的限制,在I386平台上的Linux系统采用两级页索引,页目录和中间目录合二为一目录和中间目录合二为一目录和中间目录合二为一目录和中间目录合二为一。3.4.2 地址映射地址映射 nIntelx86保护模式的地址映射段选择子段选择子16bits16bits段内偏移段内偏移32bits32bits页内偏移页内偏移12bits12bits物理地址物理地址32bit
22、s32bits页目录索引页目录索引10bits10bits 页表索引页表索引10bits10bits 逻辑地址逻辑地址线性地址线性地址物理地址物理地址GDTGDT、LDTLDTpgdpgd、ptepte3.4.2 地址映射地址映射nIntelx86的分段描述符索引描述符索引13bits13bits GDT/LDT 1bitGDT/LDT 1bit段选择子段选择子访问特权级访问特权级 2bits2bits段内偏移段内偏移32bits32bits段基地址段基地址32bits32bits段描述符段描述符8bytes8bytes+线性地址线性地址32bits32bits段界限段界限20bits20bi
23、tsGDTGDT3.4.2 地址映射地址映射nLinux在i386上的分页线性地址线性地址物理地址物理地址32bits32bitspmd_t*dirpmd_t*dir+页帧首地址页帧首地址20bits PAGE_SHIFT20bits rss*/struct list_head mmlist;/*List of all active mms.These are globally strung together off */*init_mm.mmlist,and are protected by mmlist_lock*/unsigned long start_code,end_code,sta
24、rt_data,end_data;unsigned long start_brk,brk,start_stack;unsigned long arg_start,arg_end,env_start,env_end;unsigned long rss,total_vm,locked_vm;/unsigned long rss,total_vm,locked_vm;/驻留内存页框总数,驻留内存页框总数,驻留内存页框总数,驻留内存页框总数,VMAVMA总数及被锁总数及被锁总数及被锁总数及被锁VMAVMA总数总数总数总数unsigned long def_flags;unsigned long cpu
25、_vm_mask;unsigned long swap_address;unsigned dumpable:1;/*Architecture-specific MM context*/mm_context_t context;3.4.2 地址映射地址映射nLinux定义了虚存段定义了虚存段vma。一个。一个vma段是一个段是一个连续的连续的连续的连续的线性地址区间线性地址区间线性地址区间线性地址区间。vma段由数据结构段由数据结构vm_area_structvm_area_struct描描述。述。n进程通常占用进程通常占用几个几个几个几个vmavma段,分别用于段,分别用于代码段代码段代码段代
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 原理 应用 04
限制150内