0
点赞
收藏
分享

微信扫一扫

并发编程02:CompletableFuture

归零者245号 2023-05-06 阅读 30

嵌入式软件开发,非科班专业必须掌握的基本计算机知识

核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统

这一部分主要讲解了CPU的组成和扩容、CPU与存储器(主存、辅存、缓存)的连接

 

一 存储器以及其与CPU的连接

1)存储器的扩容

一块存储芯片的内部结构

1k×4位存储矩阵结构

由1k×4位构建一个1k×8位存储矩阵(位扩展)——芯片扩容

由1k×4位构建一个2k×4位存储矩阵(字扩展)多了一条地址线A10

若再增加一条地址线A11

由1k×4位构建一个2k×8位存储矩阵(位扩展+字扩展

2)存储器与CPU的连接 

存储器与CPU连接示意图

例:

存储芯片 

译码器与门电路(圆圈的意思是将当前信号 取反) 

地址分配

实现MREQ作为访存控制信号(低电平有效)、WR作为读/写控制信号(低电平为读、高电平为写)

二 缓存Cache

存储器与CPU连接时会发现,CPU很快,主存很慢,因此需要一种更快的存储器——缓存Cache

程序的局部性访问原理

基本工作原理

把缓存和主存以块为单位,

读时,判断地址是否在缓存中,常用则备份至缓存中,缓存满时需要按照一定规则清理已有的块

写时,考虑保持数据一致性的办法

主存-Cache地址映射

地址分两块                                                         地址分四块

分2的m次方块

图中主存中两个地址映射缓存一个地址,因此需要加标志位(黄色字体)

直接映射 

例:

全相联映射

组相联映射

Cache缓存中只有主存部分的块,因此CPU查询主存地址时,不一定能够在缓存中找到,因此涉及命中率问题

前面提及缓存中的数据需要被及时替换,因此需要算法

直接映射无需考虑替换算法,直接替换

对于全相连和组相连,因为某一主存块可能映射到Cache中的多个块中,因此存在以下替换算法:

写策略(改写的时机)

三 虚拟存储器

之前是缓存与主存搭配,这部分是辅存与主存配合,扩大存储容量

页式虚拟存储器

图中 虚页号要大于实页号,因此映射时需要其他操作,即页表起始地址

段式虚拟存储器 

页式虚拟存储器(Paging Virtual Memory)和段式虚拟存储器(Segmentation Virtual Memory)都是常用的虚拟存储器管理方式,但它们有着不同的实现方式和特点。

1)实现方式

页式虚拟存储器将进程的地址空间划分为固定大小的页面(Page),相邻的页面是连续的,每个页面的大小通常为2的幂次方。物理内存也被分成相同大小的帧(Frame),每个页面可以映射到一个或多个帧中。当进程需要访问一个页面时,操作系统会根据页面号查找该页面所在的帧,然后通过内存管理单元把该页面加载到内存中。

段式虚拟存储器则将进程的地址空间划分为若干个逻辑段(Segment),每个逻辑段具有一定的长度、基址和保护属性。每个逻辑段可以动态地分配物理内存中的若干个连续区域,这些区域可以是不连续的,但必须满足逻辑地址空间中段的大小限制。当进程需要访问一个逻辑段时,操作系统会根据给定的段号和段内偏移量计算出对应的物理地址。

2)存储管理

在页式虚拟存储器中,操作系统把逻辑地址(由页号和页内偏移量组成)转换为物理地址(由帧号和页内偏移量组成)。这个过程叫做页面映射(Page Mapping),可以通过页表或者快表来实现。

在段式虚拟存储器中,操作系统把逻辑地址(由段号和段内偏移量组成)转换为物理地址(由物理地址和段内偏移量组成)。这个过程叫做段映射(Segment Mapping),可以通过描述符表来实现。

3)特点

页式虚拟存储器的最小存储单位是页面,其大小一般为4KB、8KB或者16KB。页式虚拟存储器将地址空间和物理内存都划分为等大小的块,因此易于管理和实现。但是,在进行页面映射时,由于可能存在不同页面映射到同一帧的情况,因此可能会产生页面置换和页面失效等问题。

段式虚拟存储器的最小存储单位是逻辑段,每个逻辑段的大小不定,根据需要动态调整段式虚拟存储器更加灵活,可以为不同类型的数据分配不同大小的地址空间,但管理和实现相对复杂,需要占用更多的内存开销。

综上所述,页式虚拟存储器和段式虚拟存储器分别适用于不同的应用场景,开发人员需要根据具体情况选择合适的虚拟存储器管理方式。

段页式虚拟存储器

段页式虚拟存储器(Segmentation Paging Virtual Memory)是将段式虚拟存储器和页式虚拟存储器相结合的一种内存管理机制。在段页式虚拟存储器中,进程的地址空间被划分为多个逻辑段,每个逻辑段被进一步分成多个固定大小的页面。每个逻辑段的长度可以动态调整,而每个页面的大小通常固定为2的幂次方。

与普通的段式虚拟存储器不同的是,段页式虚拟存储器使用了分段和分页两级映射机制。进程访问一个地址时,首先根据该地址所在的逻辑段号进行段映射,然后再把段内偏移量转换为页面号和页内偏移量,进行页面映射。因此,段页式虚拟存储器既具有段式虚拟存储器的灵活性,又兼具页式虚拟存储器的管理效率。

在段页式虚拟存储器中,操作系统需要维护两级页表来完成地址转换。第一级页表用于映射逻辑段号到物理地址,称为段表(Segment Table);第二级页表用于映射页面号到物理帧号,称为页表(Page Table)。当进程需要访问一个地址时,操作系统首先查找该地址对应的段号的段表项,确定物理地址空间中该逻辑段的位置和大小。接着,根据偏移量计算出页面号,并在对应的页表项中查找物理帧号。最后,使用物理帧号和页内偏移量组合成最终的物理地址。

相较于纯粹的页式虚拟存储器和段式虚拟存储器,段页式虚拟存储器具有更好的灵活性和管理效率,但同时也带来了更多的复杂度和开销。在实际应用中,需要权衡不同方面的需求,选择适合的内存管理方式。

举报

相关推荐

0 条评论