内存篇纪实

目录

在1G内存中能否malloc(1.2G)

内存管理有几种方式

什么是虚拟内存:

虚存好处:

虚存代价:

内存碎片,内碎片,外碎片

虚拟地址,逻辑地址,线性地址,物理地址

内存置换方法:最佳(OPT)最近最少使用 先进先出,时钟

假设临界区资源释放,如何保证只让一个线程获得临界区资源而不是都获得

OS中的缺页中断是什么

缺页中断:

缺页中断需要经历的步骤:

OS缺页中断如何实现的

系统调用与库函数之间的关系

意义:

区别:

 page cache (页缓存),以及OS如何设计页缓存


在1G内存中能否malloc(1.2G)

                malloc能够申请的空间大小与物理内存的大小是没有之间关系的,仅与程序的虚拟内存有关。而且在操作系统不同或者是在不同情况下,能够分配的虚拟内存是不同的。

内存管理有几种方式

                内存管理可以分为块式管理,页式管理,段式管理和段页式管理。

块式管理:将内存分为一块一块的,会造成一定的空间浪费。

页式管理:页的大小是固定的,便于管理,缺点是页长与程序的逻辑大小没有关系。与块式管理区别在于便于换入换出;

段式管理:进程的地址空间是按照自身逻辑划分为若干个段:由段号(段名)+段内地址(段内偏移量);其长度可以动态改变的区域。

段页式管理:将存储组织由分段式和分页式相结合的方式

1、用分段的方法分配和管理虚拟存储器

2、用分页的方式来分配和管理内存

什么是虚拟内存:

虚拟内存就是让应用程序认为他自己有连续可用内存,允许程序员编写并运行比程序实际拥有大得多的内存;

虚存好处:

1、扩大了地址空间:段式分配,页式分配,段页式分配使寻址空间比实存大;

2、内存保护:各进程运行在各自的虚拟内存地址空间,互相不会干扰对方;

3、公平分配内存:采用虚存以后,每个进程都有相同大小的内存空间;

虚存代价:

1、虚存管理需要额外的内存

2、虚拟内存转换为实际物理地址需要耽误运行时间

3、页面换入换出磁盘需要时间

内存碎片,内碎片,外碎片

内存碎片:由于多次分配内存产生了许多间隙,造成使用效率下降;

内碎片:处于程序区内部的\页面内部的存储器模块的碎片

外碎片:小到无法给任何程序分配的存储空间

虚拟地址,逻辑地址,线性地址,物理地址

虚拟地址:由段选择符和段内偏移符组成

逻辑地址:逻辑地址就是指段内偏移地址

线性地址:就是虚拟地址到实际地址的变换空间

物理地址:CPU外部地址总线的寻址物理内存的地址0

内存置换方法:最佳(OPT)最近最少使用 先进先出,时钟

1、最佳:淘汰的页面是以后都不会再次使用的/最长时间都不会再访问的页面

2、最近最少使用:每次淘汰的页面都是最近最久未使用过的。赋予每个页面对应的页表项中一个访问字段,用于记录上次访问的时间

3、先进先出:每次淘汰的都是最先进入的页面

4、时钟:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个链表的循环队列

假设临界区资源释放,如何保证只让一个线程获得临界区资源而不是都获得

给临界区资源加上互斥锁,保证再资源释放时只有一个线程获得临界区资源

OS中的缺页中断是什么

缺页中断:

在请求分页时,可以通过查询页表的状态位来确定所要访问的页表是否存在于内存中,当访问的页表不存在在内存中时,便会引发一次缺页中断,此时OS会根据页表中的外存地址在内存中找到所缺的一页,将之调入内存。

malloc等内存分配函数在分配时只是为内存建立了虚拟内存地址,并没有为虚拟内存分配实际的物理地址,当进程访问这些没有建立映射关系的虚拟内存时,触发器自动触发了一个缺页异常。

缺页中断需要经历的步骤:

1、保护CPU现场

2、分析中断原因

3、转入缺页中断处理程序进行处理

4、恢复CPU现场,继续执行

OS缺页中断如何实现的

FIFO

最近最少使用

系统调用与库函数之间的关系

系统调用:OS为用户提供的操作硬件设备的接口

库函数:对系统调用的分装,提高了可移植性;

意义:

1、避免了用户对底层硬件的编码:比如终端打印信息

2、隐藏背后细节

3、保证了系统安全与稳定

4、方便编程

区别:

1、C函数库相同,不同的OS的调用规则不同

2、函数库调用的是函数库中的程序,系统调用是调用内核的服务

3、库函数是在用户空间执行,而系统调用是在内核空间执行

4、函数库属于过程调用,开销小,而系统调用需要在用户态和内核态进行上下文切换。开销大。

5、系统调用是方便OS,而库函数为了方便用户

6、系统调用依赖于平台,而库函数不依赖

7、系统调用无缓冲,而库函数是有缓冲

 page cache (页缓存),以及OS如何设计页缓存

我们知道文件一般存放在硬盘(机械硬盘或固态硬盘)中,CPU 并不能直接访问硬盘中的数据,而是需要先将硬盘中的数据读入到内存中,然后才能被 CPU 访问。

由于读写硬盘的速度比读写内存要慢很多,所以为了避免每次读写文件时,都需要对硬盘进行读写操作,Linux 内核使用页缓存(Page Cache)机制来对文件中的数据进行缓存。

当用户对文件进行读写时,实际上是对文件的页缓存进行读写。所以对文件进行读写操作时,会分为以下两种情况进行处理:

  • 当从文件中读取数据时,如果要读取的数据所在的页缓存已经存在,那么就直接把页缓存的数据拷贝给用户即可。否则,内核首先会申请一个空闲的内存页(页缓存),然后从文件中读取数据到页缓存,并且把页缓存的数据拷贝给用户。
  • 当向文件中写入数据时,如果要写入的数据所在的页缓存已经存在,那么直接把新数据写入到页缓存即可。否则,内核首先会申请一个空闲的内存页(页缓存),然后从文件中读取数据到页缓存,并且把新数据写入到页缓存中。对于被修改的页缓存,内核会定时把这些页缓存刷新到文件中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值