存储管理
逻辑地址与物理地址
定义
- 逻辑地址(Logical Address): 也称为虚拟地址,是由程序产生的地址空间中的地址。程序员和操作系统使用逻辑地址来访问和管理内存,但这些地址在实际的硬件上可能并不存在,因为它们还需要经过地址映射和转换才能对应到物理内存中的实际存储位置
- 物理地址(Physical Address): 是指计算机内存中实际的硬件地址,表示内存中存储单元的实际位置。物理地址是硬件级别的地址,与具体的RAM芯片或存储设备相关
联系
- 关系: 逻辑地址和物理地址之间存在映射关系,通过地址映射机制,将逻辑地址映射到相应的物理地址。高级程序语言使用逻辑地址,运行过程中在内存中使用物理地址。
- 映射过程: 操作系统使用页表或段表等数据结构,通过地址转换的方式将逻辑地址转换为物理地址
- 抽象层次: 逻辑地址是在程序员和操作系统层面的抽象,提供了一种虚拟的地址空间,而物理地址是底层硬件层面的实际地址
不同之处
- 存在形式: 逻辑地址是程序员和操作系统看到的地址,是抽象的虚拟地址;物理地址是硬件实际的地址,对应真实的存储位置
- 可扩展性: 逻辑地址空间可以比物理地址空间更大,允许程序使用更多的地址,提高了灵活性;物理地址则直接对应实际的硬件存储,受到硬件容量的限制
- 映射机制: 逻辑地址需要经过地址映射,而物理地址是直接对应硬件中的存储单元
- 访问权限: 操作系统可以通过逻辑地址控制对内存的访问权限,而物理地址表示实际的硬件存储位置,权限由硬件控制
分区存储
简单来说就是将内存分为若干固定大小的区域,每个区域存储一个程序或进程。
页式存储
简单总结来说页式存储就是将物理内存和逻辑内存划分为固定大小的页,实现灵活的内存管理。
每个页分为页号和页内地址,页号用来和块号对应,代表存储的位置,大小可以代表页的数量页内地址代表的是存储的数据内容大小可以代表数据大小
优点
- 利用率高、碎片小(只是在最后一个页面有)
- 分配及管理简单
缺点
- 增加了系统的开销
- 可能会产生抖动现象
Q:什么是抖动现象?
A:在存储管理中,抖动现象通常指的是在虚拟内存系统中,由于页面置换算法的不断执行而导致的频繁页面调度和物理内存的不断变动。这种不断的页面调度可能会导致性能的波动,称为抖动。
页式存储的地址表示
由页内地址+页号组成。
页内地址:决定了每一页能存储的最大值。
(1)页内地址也叫块内地址,因为页的大小跟块的大小是相等的,里面的编号的个数都是一致的。
(2)如图所示,页内地址的编号从0~11,也就是12位二进制,就有2的12次方个编码,所以这个页内地址指定的页的大小或者块的大小就是4K.
页号:决定了在整个页式存储中,程序做多能分多少个页。
(1)决定页的编号(是第几个页,它的编号)。
(2)如图所示,页号从12到31,共20个位二进制,也就是2的20次方个页,所以这个程序最多分1M个页。
页面置换算法
一句话总结这个算法的目的就是根据页面访问情况,选择合适的页面进行替换,以优化内存利用
最优算法(OPT)
理论上的算法无法实现,是在进程执行完后进行的最佳效率计算,用来让其他算法比较差距 。原理是选择未来最长时间内不被访问的页面置换,这样可以保证未来执行的都是马上要访问的。
先进先出算法(FIFO)
先调入内存的页先被置换淘汰,会产生抖动现象, 即分配的页数越多,缺页率可能越多(即效率越低)
最近最少使用(LRU)
在最近的过去,进程执行过程中,过去最少使用的页面被置换淘汰,根据局部性原理,这种方式效率高,且不会产生抖动现象。(效率最高的)
快表
简单总结快表就是在页式存储中,用于快速查找物理页框的高速缓存,提高地址转换效率的方式
快表是一块小容量的相联存储器,由快速存储器组成,按内容访问,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号(可以看成是页表的频繁访问数据的副本)。
快表与慢表的区别
快表是将页表存于Cache中
慢表是将页表存于内存上
慢表需要访问两次内存才能取出数据,而快表是访问一次Cache和一次内存,因此更快。
段式存储
将程序或进程划分为若干逻辑段,每段具有不同的长度,实现更灵活的内存分配
将进程空间分为一个个段,每段也有段号和段内地址,与页式存储不同的是,每段物理大小不同,分段是根据逻辑整体分段的
优点
- 程序逻辑完整修改互不影响
缺点
- 内存碎片浪费大导致内存利用率低
段式存储的地址表示
- 段式存储的地址=段号+段内地址
- 段内地址:决定了每一个段能存储的最大值。
- 段号:决定了段式存储中最多允许有多少个段。
段页式存储
一句话总计段页式存储结合了段式存储和页式存储的特点,既具备段的灵活性又有页的高效管理
优点
- 结合了页式存储和段式存储的优点。
- 内存利用率高,内存碎片小。
- 存储时每一个程序段的含义得到了保存。
缺点
- 管理机制比较复杂,导致软件管理的成本增加,系统复杂度增加,从而导致系统性能的下降,执行效率下降。
段页式存储的地址表示
- 采用也页式存储的方式来存储每一个程序段。
- 每一个页的地址是多大。在一个段中最多允许有多少个页。整个段页式存储最多允许多少个段。
文件管理
文件结构
计算机系统中采用的索引文件结构如下图所示:系统中有13个索引节点,0-9为直接索引,即每个索引节点存放的是内容,假设每个物理盘大小为4KB,共可存4KB* 10=40KB数据:10号索引节点为一级间接索引节点,大小为4KB,存放的并非直接数据,而是链接到直接 物理盘块的地址,假设每个地址占4B,则共有1024个地址,对应1024个物理盘,可标10244KB=4098KB数据。
二级索引节点类似,直接盘存放一级地址,一级地址再存放物理盘快地址而后链接到存放数据的物理盘块,容量又扩大了一个数量级,为1024 1024*4KB数据。
树形文件
树形结构主要是区分相对路径和绝对路径,如图下图:
当前处于D1文件下,如果想要寻找F2,如果是是相对路径就是直接“W2”,如果是绝对路径,必须要从根目录“/”出发,应该是“/D1/W2”。
相对路径
是从当前路径开始的路径
绝对路径
是从根目录开始的路径
全文件名
全文件名=绝对路径+文件名。要注意,绝对路径和相对路径是不加最后的文件名的,只是单纯的路径序列。
文件属性
- R只读文件属性
- A存档属性
- S系统文件
- D1
- H隐藏文件
文件名的组成
- 驱动器号
- 路径
- 主文件名
- 扩展名
空间存储
空闲区表法
将所有空闲空间整合成一张表,即空闲文件目录,记录每个连续空闲区的起始盘块号、盘块数。
- 适用于连续分配方式
空闲链表法
将所有空闲空间链接成一个链表,根据需要分配
适用于离散分配的物理结构。
- 空闲盘块链:空闲盘块中存储着下一个空闲盘块的指针
操作系统保存着链头,链尾指针
- 空闲盘区链:以连续的空闲盘块组成一个空闲盘区。空闲盘区中的第一个盘块内记录了盘区的长度,下一个盘区的指针
操作系统保存着链头,链尾指针
成组链接法
既分组,每组内又链接成链表,是上述两种方法的综合
位示图法
对每个物理空间用一位标识,为1则使用,为0则空闲,形成张位示图
其他操作系统
微内核操作系统
微内核,顾名思义,就是尽可能的将内核做的很小,只将最为核心必要的东西放入内核中,其他能独立的东西都放入用户进程中,这样系统就被分为了用户态和内核态,如下图所示:
实质 | 优点 | 缺点 | |
---|---|---|---|
单体内核 | 将图形 、设备驱动及文件系统等功能全部在内核中实现,运行在内核状态和同一地址空间 | 减少进程间通信和状态切换的系统开销,获得较高的运行效率 | 内核庞大,占用资源较多且不易裁剪 。系统的稳定性和安全性不好 |
微内核 | 只实现基本功能,将图形系统、文件系统设备驱动及通信功能放在内核之外 | 内核精炼,便于裁剪和移植。系统服务程序运行在用户地址空间,系统的可靠性 、稳定性和安全性较高 。可用于分布式系统。 | 用户状态和内核状态需要频繁切换,从而导致系统效率不如单体内核 |
嵌入式操作系统
特点
- 微型化
- 代码质量高
- 专业化
- 实时性强
- 可裁剪可配置
实时嵌入式操作系统的内核服务
- 异常和中断
- 计时器
- I/O管理
常见的嵌入式RTOS (实时操作系统)
- VxWorks
- RT-Linux
- QNX
- pSOS
嵌入式系统初始化过程按照自底向上 、从硬件到软件的次序依次为芯片级初始化->板卡级初始化->系统级初始化
芯片级是微处理器的初始化,板卡级是其他硬件设备初始化,系统级初始化就是软 件及操作系统初始化。