操作系统:内存管理原理关于物理地址,虚拟地址空间,页式,段式,段页式

操作系统之内存管理

今天见到有关操作系统方面的题发现有点忘了,所以来复习一遍
下面是今天遇到的选择题,网易校招18年真题的选择题

操作系统:内存管理原理关于物理地址,虚拟地址空间,页式,段式,段页式_第1张图片
下面我们来进入正题

1.什么是内存管理

  1. 内存管理是运行在计算机上的应用程序通过软硬件协作来访问内存的一种方法

  2. 内存管理子系统的职责为:进程请求内存时分配可用内存,进程释放内存后回收内存,以及跟踪系统中内存的使用状况

  3. 操作系统的生命周期划分为两个阶段:正常执行和自举阶段
    自举阶段使用的是临时内存
    正常运行阶段使用的内存有两种情况:
    1. 第一种是静态内存分配,主要是针对一部分固定的内存分配给内核代码和数据
    2. 第二种是动态内存分配,主要是针对进程的创建和空间的扩张


为什么会有内存划分

		最简单的内存管理系统是进程对所有内存都具备访问权限的系统
		这种进程必须包含所有需要硬件进行操作的全部代码,可以找到自己的内存地址,并且将自身数据载入内存
		这种方式不但给开发人员带了很大的负担,而且保证进程与可用内存的大小合适也很困难
		这种情况很不适合如今功能度杂化的程序,因此内存管理将这个复杂的任务交给操作系统
		所以可用内存会在操作系统和用户进程之间划分

虚拟内存的由来 —> Virtual memory

由于操作系统既能够实现多个程序共享系统资源,同时还要求内存限制对程序开发者透明,在这种需求下,就出现了虚拟内存,虚拟内存支持程序访问比系统物理可用内存大得多的内存空间,而且也使得多个程序共享内存变得更有效

  • 物理内存,也叫核心内存,使系统中的RAM芯片控制的可用内存。
  • 虚拟内存:虚拟内存依靠透明的使用磁盘空间,得以使程序运行起来好像他们使用的内存比系统物理内存要大很多,我们之所以称其为虚拟内存就是因为磁盘存储体有效地充当内存,但本身不是内存
    磁盘空间:相比物理内存价格更低,容量更大,可以作为物理内存的扩充。
    操作系统:内存管理原理关于物理地址,虚拟地址空间,页式,段式,段页式_第2张图片

程序的虚拟地址空间

当程序从内存中存取数据时,会使用地址来指出需要访问的内存位置,该地址被称为**虚拟地址(Virtual Address)**,
它们组成**进程虚拟地址空间(virtual address space)**。进程都有自己独有的虚拟地址范围,
这样的好处是可防止非法读取活写覆盖其它进程二点数据。虚拟内存允许进程使用超过物理内存的内存空间,
因此操作系统可以给每个进程提供独立的虚拟线性地址空间。

操作系统:内存管理原理关于物理地址,虚拟地址空间,页式,段式,段页式_第3张图片

//该结构体为虚拟地址空间存储数据结构
mm_struct{
			//size_t 内存大小
            //code_start 0x00084000000
            //code_end   0x8789000
            //data_start   
            //data_end  
            //代码中操作环境变量:char* env[], char** environ, getenv()  
};

分页机制:页表&虚拟地址空间

虚拟地址经过页表映射之后他们每个变量的真正的物理内存地址有可能不连续的,通过这种方式来充分利用我们的物理内存。
**页表:**操作系统为每一个进程创建一个页表通过映射来进行虚拟地址和物理地址之间的转换,同时页表还有一个重要的功能:内存访问控制
操作系统:内存管理原理关于物理地址,虚拟地址空间,页式,段式,段页式_第4张图片


页式内存管理

页是内存管理器管理的基本内存单元,页的许多状态需要被记录下来。比如内核需要知道什么时候页可以被回收。为此,内核使用页描述符,内存中每个物理页都对应一个页描述符。

页结构定在include/linux/mm.h中

struct Page{
	unsigned long flags;	
	//32位的位图,每一位表示页面的一个属性
	atomic_t count;   //页的引用计数
	struct list_head list; //页的双向链表
	struct address_space *mapping ;
	unsigned long index;
	struct list_head lru;	//链接最少的页表,可能被回收
	union{
		struct pte_chain *chain;
		pte_addr_t direct
	}pte;
	unsigned long private;
	#if define (WANT_PAGE_WIRTUAL)
	void *virtual;	//指向页的虚拟地址
	#endif
	/*
	count : 
		count自带按相当于计数器,统计一个页使用或引用的次数。
		数值0表示页空闲,既页面是可重用的,-1表示没有被内核引用
	virtual:
		virtual是一个指向页所对应虚拟地址的指针,通常情况下,
		它就是页在虚拟内存中的地址。但是,有些内存并不永久映射在
		内核地址空间,在这种情况下,这个域的值为NULL,需要的时候,
		必须动态映射这些页
	*/

页式管理方式的优点是:

  • 一个程序不必连续存放。
  • 便于改变程序占用空间的大小(主要指随着程序运行,动态生成的数据增多,所要求的地址空间相应增长)。

缺点

  • 要求程序全部装入内存,没有足够的内存,程序就不能执行。

页式管理的数据结构

在页式系统中进程建立时,操作系统为进程中所有的页分配页框。当进程撤销时收回所有分配给它的页框。在程序的运行期间,如果允许进程动态地申请空间,操作系统还要为进程申请的空间分配物理页框。操作系统为了完成这些功能,必须记录系统内存中实际的页框使用情况。操作系统还要在进程切换时,正确地切换两个不同的进程地址空间到物理内存空间的映射。这就要求操作系统要记录每个进程页表的相关信息。为了完成上述的功能,—个页式系统中,一般要采用如下的数据结构。



段式内存管理

在段式存储管理中,将程序的地址空间划分为若干个段(segment),这样每个进程有一个二维的地址空间,
段式存储管理系统中,则为每个段分配一个连续的分区,而进程中的各个段可以不连续地存放在内存的不同分区中。程序加载时,操作系统为所有段分配其所需内存,这些段不必连续,物理内存的管理采用动态分区的管理方法。

段式存储管理的优点

分页对程序员而言是不可见的,而分段通常对程序员而言是可见的,因而分段为组织程序和数据提供了方便。与页式虚拟存储器相比,段式虚拟存储器有许多优点:
(1) 段的逻辑独立性使其易于编译、管理、修改和保护,也便于多道程序共享。
(2) 段长可以根据需要动态改变,允许自由调度,以便有效利用主存空间。
(3) 方便编程,分段共享,分段保护,动态链接,动态增长
缺点
(1) 主存空间分配比较麻烦。
(2) 容易在段间留下许多碎片,造成存储空间利用率降低。
(3) 由于段长不一定是2的整数次幂,因而不能简单地像分页方式那样用虚拟地址和实存地址的最低若干二进制位作为段内地址,并与段号进行直接拼接,必须用加法操作通过段起址与段内地址的求和运算得到物理地址。因此,段式存储管理比页式存储管理方式需要更多的硬件支持。


页式和段式管理的区别

页式和段式系统有许多相似之处。比如,两者都采用离散分配方式,且都通过地址映射机构来实现地址变换。但概念上两者也有很多区别,主要表现在:

  1. 需求:是信息的物理单位,分页是为了实现离散分配方式,以减少内存的碎片,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要。
  2. 一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。
  3. 大小:页大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。
  4. 逻辑地址表示:页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
  5. 比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。

段页式内存管理

现在操作系统采用的是段页式内存管理
段页式存储组织是分段式和分页式结合的存储组织方法,这样可充分利用分段管理和分页管理的优点。

  1. 用分段方法来分配和管理虚拟存储器。程序的地址空间按逻辑单位分成基本独立的段,而每一段有自己的段名,再把每段分成固定大小的若干页。
  2. 用分页方法来分配和管理实存。即把整个主存分成与上述页大小相等的存储块,可装入作业的任何一页。程序对内存的调入或调出是按页进行的。但它又可按段实现共享和保护。
  3. 逻辑地址结构。一个逻辑地址用三个参数表示:段号S;页号P;页内地址d。
  4. 段表、页表、段表地址寄存器。为了进行地址转换,系统为每个作业建立一个段表,并且要为该作业段表中的每一个段建立一个页表。系统中有一个段表地址寄存器来指出作业的段表起始地址和段表长度

分段式内存管理过程:

由段口找到相应的段表,并且在段表页中可以得到段表内也的起始地址,然后取出段内页号,找到相应的页表项,就可以得到段内页号和物理页号,得到物理页号以后和页内偏移相加为物理地址
物理地址:物理页号+页内偏移

操作系统:内存管理原理关于物理地址,虚拟地址空间,页式,段式,段页式_第5张图片

段页式存储管理的优缺点

优点

  1. 它提供了大量的虚拟存储空间。
  2. 能有效地利用主存,为组织多道程序运行提供了方便。

缺点:

  1. 增加了硬件成本、系统的复杂性和管理上的开消。
  2. 存在着系统发生抖动的危险。
  3. 存在着内碎片。
  4. 还有各种表格要占用主存空间
  5. 段页式存储管理技术对当前的大、中型计算机系统来说,算是最通用、最灵活的一种方案。

你可能感兴趣的:(Linux,计算机网络,内存管理,编程基础)