操作系统笔记2 层次结构储存系统

一.储存器概述
1.储存器分类

1.按存储元件分类
存储元件必须具有截然不同且相对稳定的两个物理状态,才能被用来表示二进制代码0和1。目前使用的存储元件主要有半导体器件、磁性材料和光介质。用半导体器件构成的存储器称为半体存储;磁性材料存储器主要是表面存储,如磁盘存储器和磁带存储器;光介质存储器称为光盘存储器。

2.按存取方式分类
(1)随机存取存储器
随机存取存储器( Random Access Memory,简称RAM)的特点是按地址访问存储单元,为每个地址译码时间相同,所以,在不考虑芯片内部缓冲的前提下,每个单元的访问时间是一个常数,与地址无关。不过,现在的DRAM芯片内都具有行缓冲,因而有些数据可能因为已在行缓冲中而缩短了访问时间。随机存取存储器的存储介质是半导体存储器件。

(2)顺序存取存储器
顺序存取存储器( Sequential Access Memory,简称SAM)的特点是信息按顺序存放和出,其存取时间取决于信息存放位置,以记录块为单位编址。磁带存储器就是一种顺序存取储存器,其存储容量大,但存取速度慢。

(3)直接存取储存器
直接存取储存器( Direct Access Memory,简称DAM)的存取方式兼有随机访问和顺序访问的特点。首先直接定位到需读写信息所在区域的开始处,然后按顺序方式存取,磁盘存储器就是如此

(4)相联存储器
上述三类存储器RAM、SAM和DAM都是按所需信息的地址来访问,但有些情况下可能不知道所访问信息的地址,只知道要访问信息的内容特征,此时,只能按内容检索到存储位置进行读写。这种存储器称为按内容访问存储器( Content Addressed Memory,简称CAM)或相联存備器( Associative Memory,简称AM)。如6.5.3节提到的快表(TLB)就是一种相联存储器。

3.按信息的可更改性分类
按信息可更改性分读写置和只读存储( Read Only Memory,简称ROM)。读写存储器中的信息可以读出和写人,RAM芯片是一种读写存储器:只读存储器ROM芯片中的信息一旦确定,通常在联机情况下只能读不能写,但在某些情况下也可重新写入。
RAM芯片和ROM芯片都采用随机存取方式进行信息的访问。

4.按断电后信息的可保存性分类
按断电后信息的可保存性分成非易失性存储器( Nonvolatile Memory)和易失性存储( olatile Memory)。非易失性存储器也称不挥发性存储器,其信息可一直保留,不需电源维持

例如,ROM、磁表面存储器、光盘存储器等都是非易失性存储器;易失性存储器也称挥发性存储器,在电源关闭时信息自动丢失,例如,RAM、 cache等都是易失性存储器

5.按功能分类
(1)高速缓冲存储器
高速缓冲存储器( cache)简称高速缓存,位于主存和CPU之间,目前主要由静态RAM芯片组成,其存取速度接近CPU的工作速度,用来存放当前CPU经常使用到的指令和数据。

(2)主存储器
指令直接面向的存储器是主存储器,简称主存。CPU执行指令时给出的存储地址最终转换为主存地址,若不采用虚拟存储管理,则CPU直接给出主存地址。主存是存储器分层结构中的核心存储器,用来存放系统中启动运行的程序及其数据,主存目前一般用MOS管半导体存储器构成。

(3)辅助存储器
把系统运行时直接和主存交换信息的存储器称为辅助存储器,简称辅存。磁盘存储器和光盘存储器速度快,辅存的内容需要调入主存才能被CPU访问

(4)海量后备存储器
磁带存储器容量大,速度慢,主要用于脱机存档

二.主储存器组成和操作
1.主存储器的组成基本操作

由一个个储存0或1的储存单元(cell)构成。储存阵列(bank)。编址方式可以是按字节编址,也可以按字编址
CPU访问主存储器的操作:CPU先将地址送到主存地址寄存器(MAR),然后通过地址线将主存地址送到主存的地址寄存器,以便地址译码器进行译码后选中相应单元,同时CPU将读写控制信号通过控制线控制读写电路,如果是写操作则CPU需要同时将信息送到主存数据寄存器(MDR),如果是读操作,主存读出单元内容送数据线,然后送到MDR中。
比如:采用64位数据线,字节编址方式下,每次可以存取8个字节内容
地址编号从0开始,36位地址的寻址范围0~2^36-1。

2.磁盘储存器的结构

待补充

三,高速缓存cache
1.cache和主存块的映射

(1).直接映射
cache 行号=主存块号 mod cache 行数
例如:cache一共16行根据100 mod 16 = 4,可知主存100块映射到cache第四行中。
优点:容易实现,命中时间短
缺点:在处理同余主存块时cach行利用率低

(2).全相联映射
一个主存块可以装入cache任何行中
优点:只要有空闲的cache行就不会发生冲突。
缺点:每个cache行都设置一个比较器,实现困难,不适合容量大cache

(3).组相联映射
将cache分成大小相等的组,主存块映射到cache的固定组的任意一行
cache 行号=主存块号 mod cache 组数
假设cache有2c行,分为2q行 s=c=p-q,s=1为2路组相联,s=2为4路组相联。

2.cache中主存块的替换算法

(1).先进先出算法FIFO
缺点:产生较大缺失率
(2).最近少用算法LRU
通过LRU位计数硬件将长时间未使用的主存块替换出去
其位数与cache组有关,2路组相联有1位LRU位,4路组相联有2位LRU位
(3).最不经常用算法LFU
替换掉cache中主存块引用次数最少的主存块,与LRU类似
(4).随机替换算法
稍逊色于基于使用的算法且代价低

3.cache一致性问题

(1).一致性问题
①当多个设备访问主存时,例如硬盘通过DMA与主存交换数据时cache中内容被cpu修改,则从主存传输到硬盘的内容就无效。相反,cache的内容无效
②当多个CPU访问各自cache共享主存时,一个CPU修改则对应主存块和其他CPU对应cache内容则无效
解决一致性问题的方法,两种写操作方式:
全写法:当CPU执行写操作时,若写命中,则同时写cache和主存;若写不命中则
写分配法:先在主存块中更新储存单元,然后分配给一个cache行
非写分配:仅更新主存单元不把主存1块装入cache
全写法实际采用的是对主存块信息与其他所有副本信息同时更新,也叫通写法,直写法。
如果写操作频繁发生则会发生写缓冲饱和发生阻塞。
回写法:当CPU发生写操作时,若写命中,则信息只被写入cache;若写不命中,则在在cache中分配一行,将主存块调入该cache行中并更新cache
注:如果数据在cache中为命中,cache缺失为不命中

4.影响cache效率因素

(1)关联度与命中率 关联度越高命中率越高,与多少路相联映射有关
(2)单级/多级cache
目前cache基本在CPU内部 采用L1 L2 L3 cache,访问顺序是L1 L2 L3,L1 cache采用分离cache 数据cache和指令cache分开设置,L2 L3称为联合cache
(3)主存-总线-cache连接结构
窄型结构 在总线,主存,cache之间每次按一个字节传输
宽型结构 每次传输多个字节
交叉结构 每次按一个字节传输 DDR,DDR2,DDR3 SDRAM采用2,4,8个模块交叉存取方式。

四,虚拟存储器
1.基本概念

指令执行期间,通过储存器管理部件(MMU)将指令中逻辑地址(也称为虚拟地址,简称VA)转换为主存中物理地址(也称为主存地址,简称PA)在地址转换的过程中由硬件检查是否发生越界访问或越权。若发现信息不在主存中则从硬盘中读取到主存,解决了编程空间受限的问题,也解决了多程序共享主存的安全问题。MMU包含在CPU中。
进程是一个具有一定独立功能的程序关于某个数据集合的一次活动,简单说进程就是一个程序的一次执行过程。每个进程都有自己的地址空间,地址空间包含读区(代码和只读数据),可读可写区(初始化数据和未初始化数据),动态的堆区和栈区。程序在加载后才能称为进程
进程与线程

2.虚拟地址空间

每个高级语言进过编译,汇编,连接等处理会映射到统一的虚拟地址空间
在Linux系统中虚拟空间分为两大部分:内核虚拟存储空间,用户虚拟存储空间,分别简称为内核空间,用户空间。
内核空间在0xc0000000以上的高端地址上,用来存放操作系统内核代码和数据等,其中内核代码和数据区在每个进程空间中都相同。用户程序没有权限访问内核区。
用户空间用来存放进程的代码和数据等,又被分为几个区域:
用户栈 用来存放程序运行过程中的参数,返回地址,过程局部变量等,该区从高地址向低地址增长,或反向减退(与大小端区分开)
共享库 用来存放公共的共享代码,如hello中的printf()
③堆 用来储存动态申请存储,用malloc()函数或new分配的储存区,动态地址从低地址向高地址增长,相反free()或delet操作释放相应内存区。
可读写数据区 存放进程中的静态全局变量,堆区从该区域结尾向高地址增长
只读数据和代码区 存放代码和只读数据,如字符串“hello world\n”
每个区域都有起始位置,堆区和栈区相向生长,栈区从内核起始位置0xc0000000开始向低增长,栈区和堆区合起来称为堆栈,其中的共享库映射区从0x40000000开始向高地址增长,只读代码区从
0x08048000开始向高地址增长。
虚拟机制有三个好处:
①每个进程具有一致的虚拟地址空间,简化储存管理。
②把主存看作硬盘的缓存,在主存中仅保留当前活动的程序段和数据区,并根据需要在硬盘和主存中进行信息交换,主存空间得到有效利用。
③每个进程的虚拟地址都是私有的,独立的,可以保护各自进程不受其他进程破坏

3.虚拟存储器的实现

参考cache的机制,可以把DRAM构成的主存看成是硬盘存储器的缓存。实现虚拟存储器,必须考虑交换块大小,映射,替换,写一致性等问题
(1)分页式虚拟存储器
在虚拟内存中,生成可执行文件时,会通过可执行文件中的程序表头,将可执行文件的相同访问属性的代码和数据段映射到虚拟地址空间中。
硬盘和主存之间按页面为单位交换信息,虚拟空间中的页分为虚拟页,逻辑页或虚页,简称VP;主存空间也被分为同样大小的页框,也成为物理页或实页,简称PF或PP
当访问某个页不在主存时发生缺页异常,从硬盘中将缺失页装入主存。虚拟地址空间中有一些没有内容的空间,称为未分配页,对于代码和数据等有内容区域称为已分配页,已分配页又分为两种:已调入主存称为缓存页而存在硬盘上的页称为未缓存页。
页缺失的处理代价很大,所以需要提高命中率。也因如此在处理一致性问题时使用回写方式
在虚拟储存管理机制中采用全相联映射,建立个个虚拟页或磁盘上储存位置的关系通常采用页表
①页表
虚拟页在页表中都有个对应的页表相。装入位也称为有效位或存在页,存在主存则为1,没有调入主存则为0;修改位用来说明页面是否被修改,判断是否需要回写回硬盘;使用位用来说名页面使用情况,用于替换控制(LRU,FIFO等)。访问权限位用来说明页是否可读可写可执行(ARM-Linux笔记记录)用于存储保护。禁止缓存位说明是否可装入cache。
页表属于进程控制信息,位于虚拟空间的内核空间记录在基址寄存器中,解决页表过大的方法又很多,有一级页表,多级页表,还有哈希方法倒置页表等。
②地址转换
地址转换由MMU完成,假设每个进程的虚拟地址有m页,主存有n个页框(一般m>=n),虚拟地址分为两个字段:高位字段为虚拟页号,低位字段为页内偏移地址。物理地址也分为两个两个字段高位字段为物理页号,低位为为业内偏移地址,两者低位相同。
③块表
在高速缓存中的页表称为后备转换缓冲器(TLB),称为块表,相应主存的页表称为慢表

(2)分段式虚拟存储器
段通常有段名,段起点,段长等。每个段在主存的位置记录在段表中,每个段在段表中有一个段表项,用来指名对应段在主存中的位置,段长,访问权限,使用和装入情况等。虚拟地址由段号和段内地址组成。
三种异常情况:
①缺段:装入位=0
②地址越界:偏移量超过最大段长
③访问越界:操作方式与指定访问权限不符

(3)段页式虚拟存储器
程序按模块分段,段内再分页,用段表和页表进行两级定位管理。他兼有分页和分段的优点,缺点是在地址映像中多次查表
个人渣制作,有问题请大佬指出

五.存储保护

1.硬件必须三种基本功能
①使部分CPU状态只能由操作系统内核程序写(一般称为管态指令或特权指令)。常用的特权指令有刷新cache,刷新TLB,改变特权模式,停止处理器执行等。
②支持至少两种特权模式
执行内核程序时处理器所处模式属于管理模式,内核模式超级用户模式管理程序状态,简称管态,管理态,内核态或核心态;执行用户程序时处理器所处模式称为用户模式用户状态目标程序状态,简称目态或用户态。简称内核态用户态
③提供让CPU在内核态用户态之间互相转换的机制
如果用户程序需要访问内核代码和数据,那么必须通过系统调用接口来访问。异常和中断可以使CPU从用户态转到内核态。操作系统防止用户进程修改页表,以确保用户进程只能访问由OS分配的储存空间。

2.存储保护包括两种情况
①访问权限保护
访问权限保护就是看是否发生了访问越权,则发生存储保护错误。通常在页表或段表中设置访问权限来实现这种保护。
②存储区域保护
存储区域保护就是看是否发生地址越界,通常有一下几种储存区保护方式,加界重定位,健保护,环保护

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值