【操作系统---8】虚拟地址空间知识点整理

文章目录

    • 程序地址空间:
    • 页表:
    • 写时拷贝技术:
    • 内存置换算法:

程序地址空间:

32位操作系统上,内存寻址范围最多4个字节,内存大小最多4G,不论插多少内存条

用户空间从0x00 00 00 00到 0x c0 00 00 00 内核空间1G 用户空间3G

内存地址:对一块内存区域的编号

Q:虚拟地址如何存储数据?	

A:虚拟地址空间是一个结构体 struct mm_struct	给操作系统描述了一个完整连续的地址空间
  ulong mem_size	  

页表:

作用就是做映射,把真实的地址空间和假的虚拟地址空间转换 地址一致是虚拟地址空间一致

Q:为什么使用虚拟地址空间?	

A:进程在通过虚拟地址从而获取变量数据,最终还是要去访问物理内存你的,因为数据存放在物理内存中.虚拟地址
  和物理地址通过页表完成映射,虚拟地址连续,物理地址不一定连续,通过映射转换实现数据的离散存储,内存使用
  率更高,而且有内存访问控制

页表不但记录了虚拟地址和物理地址的映射关系,还记录了这块地址的属性(rw属性)

pcb里的指针指向mm_struct,mm_struct通过页表映射到物理内存中的位置

写时拷贝技术:

修改的时候在重新分配一块物理内存空间 子进程用来干其他事情,所以可能根本就不使用父进程的数据,所以一开始就拷贝一份会造成性能降低

Q:创建子进程都发生了什么?	

A:操作系统通过复制创建子进程,子进程一开始和父进程指向同一块物理内存区域,当内存数据发生改变时,为子进
  程重新开辟内存更新页表

代码段是只读的,双方都没可能修改,所以指向的位置是一定一样的,所以代码是共享的

Q:虚拟地址空间和页表有什么用?	

A:提高内存利用率,增加内存访问控制,保持进程独立性

进程的独立性: 独立会使进程更加稳定,所有每个进程都有自己的虚拟地址空间和自己的页表

Q:页表是如何将虚拟地址转换为物理地址的?


A:分段式内存管理:		

		内存地址的构成:段号+段内偏移
		
					段表---有很多段表项(物理段的起始地址)

  分页式内存管理:	
		
		内存地址的构成:页号+页内偏移
		
					页表---有很多的页表项	

					页号得到虚拟页号,虚拟页号得到物理页号,组成物理页号+页内偏移

分段是便于编程,段内使用分页式,所以我们使用的是段页式内存管理

		内存地址构成:虚拟段号+段内页号+页内偏移

		通过段号找到段表项,段表项中有段内页表起始地址,段内页号在段内页表中找到页表项

		通过页表项中的物理页号和页内偏移得到物理地址

内存置换算法:

	Q:内存只有4G,但是处理5G的数据?
	
	A:swap分区,内存不够的时候将内存中暂时不使用的数据置换到交换分区中,腾出内存处理数据
	
	FIFO:最先进入缓存的数据最先被淘汰
	LFU:最近最少未使用,基于访问次数(频率)
	LRU:最近最久未使用,基于访问时间

32位操作系统,只有4G内存,不可以申请6G内存
64位操作系统,只有4G内存,可以申请6G内存,因为还有swap分区的大小

你可能感兴趣的:(操作系统,虚拟地址空间)