操做系统原理以内存管理(第四章第一部分)

内存管理的⽬标:实现内存分配和回收,提升内存空间的利用率和内存的访问速度算法

1、存储器的层次结构

寄存器:在CPU内部有一组CPU寄存器,寄存器是cpu直接访问和处理的数据,是一个临时放数据的空间。缓存

高速缓冲区:通常CPU都会从内存取数据到寄存器,而后进行处理,但因为内存的处理速度远远低于CPU,致使CPU在处理指令时每每花费不少时间在等待内存作准备工做,因而在寄存器和主内存间添加了CPU缓存,CPU缓存比较小,但访问速度比主内存快得多,若是CPU老是操做主内存中的同一址地的数据,很容易影响CPU执行速度,此时CPU缓存就能够把从内存提取的数据暂时保存起来,若是寄存器要取内存中同一位置的数据,直接从缓存中提取,无需直接从主内存取安全

缓存命中率:寄存器并非每次数据均可以从缓存中取得数据,假如寄存器要获取的不是同一个内存地址中的数据,那寄存器就必须直接绕过缓存从内存中取数据。因此并非每次都能从缓存中取到数据,这种现象叫作缓存的命中率。命中就直接取缓存中的数据,不然从内存中取;可见缓存命中率的高低也会影响CPU执行性能。函数

交互流程:当一个CPU须要访问主存时,会先读取一部分主存数据到CPU缓存(固然若是CPU缓存中存在须要的数据就会直接从缓存获取),进而在读取CPU缓存到寄存器,当CPU须要写数据到主存时,一样会先刷新寄存器中的数据到CPU缓存,而后再把数据刷新到主内存中。性能

数据存储的局部性原理:spa

 局部性:在⼀段较短期内,程序的执⾏仅限于某个部分,相应地它所访问的存储空间也局限于某个区域操作系统

分类:blog

  • 时间局部性:某条指令⼀旦执⾏,不久 后该指令可能再次执⾏
  • 空间局部性:⼀旦程序访问了某个单元,不久 后附近的存储单元也将被访问

2、 程序的连接和装入

⾼级语⾔程序  -》   编译、连接 -》   可执⾏程序进程

程序的连接:将编译后的⽬标模块装配成⼀个可执⾏程序内存

  • 静态连接  程序运⾏前完成连接操做(程序运⾏前,⽤连接程序将⽬标模块连接成⼀个完整的装⼊模块。)       优:运⾏速度快
    • 连接程序的任务    一、对逻辑地址进⾏修改          二、变换外部调⽤符号
  • 动态连接  程序执⾏时进⾏连接操做(可将某些⽬标模块的连接推迟到这些模块中的函数被调⽤执⾏时才进⾏)      优:节省了空间

程序的装⼊

 

 

 

  • 绝对装⼊⽅式:编译时产⽣物理地址的⽬标代码
  •  可重定位装⼊⽅式 (静态重定位):编译时地址是逻辑地址,装⼊时 经过重定位转换为物理地址 ( 重定位:程序装⼊时对⽬标程序中的指令和数据地址的修改过程叫重定位
  • 动态运⾏时装⼊⽅式(动态重定位):程序执时经过重定位转换为物理地址

 物理地址=逻辑地址+程序在内存中的起始地址

 

3、 连续分配存储管理方式

连续分配方式:为一个用户程序分配一个连续的内存空间。

连续分配方式进一步分为:单一连续分配、固定分区分配、动态分区分配以及动态重定位分区分配。

一、单一连续分配:任什么时候刻主存储器最多只有⼀个做业

二、固定分区分配:每一个分区⼤⼩固定不变(各个分区大小能够相同也能够不一样),每一个分区能够且仅能够装⼊⼀个做业

 

 

 固定分区说明表 :由固定分区说明表能够查看哪一个分区空闲,哪一个分区被占用

 

 

 三、动态分区分配:

 

 

  空闲分区表: 由空闲分区表可知 哪一个分区已被占,哪一个分区是空闲。(分区编号、分区大小、起始地址)

  空闲分区链:

 

 

 

3.一、动态分区分配内存算法:

  一、⾸次适应算法:空闲分区链以地址递增的顺序连接, 从链⾸开始查找 ,直⾄找到第⼀个满⾜要求的空闲分区, 从该分区中划出⼀块内存给进程 ,剩下的仍留在空闲链中。

 

 

 外部碎⽚:分配后留在空闲链上的。首次适应算法会产生该碎片。

 内部碎⽚:因为空闲的区域比申请的大一点点,系统就直接把多余的这一点也分配给你。

 

  二、循环⾸次适应算法:从上次找到的空闲分区的下⼀个空闲分区开始查找。 优势:空闲区分布均匀

 

  三、 最佳适应算法:空闲分区链以分区⼤⼩递增的顺序连接,从链⾸开始查找, 直⾄找到第⼀个与进程请求的空间⼤⼩ 最接近的空闲分区。

 

 3.二、动态分区回收内存的流程

1)释放⼀块连续的内存区域    2)若是被释放的区域与其余空闲区相邻,则合并空闲区      3)修改空闲分区链

 

 

*************************************************************************************

 

 

 

**********************************************************************************************

 

 

*****************************************************************************************

 系统区用于驻留操做系统,用户区用于分配给用户进程使用

为了防止工做用户程序对操做系统的破坏,保证系统的安全、可靠,在操做系统中应该考虑设置存储器保护机制。在单用户、单任务操做系统中较经常使用的方法是设置一个基址寄存器和一个界限寄存器。

界限寄存器:存放装入用户区程序的地址范围

基址寄存器:存放程序在物理内存中最小地址的是基址寄存器

相关文章
相关标签/搜索