操作系统的存储结构及层次含示意图

CPU 只能从内存中加载指令,因此执行程序必须位于内存。通用计算机运行的大多数程序通常位于可读写内存,称为内存(main memory),也称为随机访问内存(Random Access Memory,RAM)。内存通常为动态随机访问内存(Dynamic Random Access Memory,DRAM),它采用半导体技术来实现。

计算机也使用其他形式的内存,如我们已经提到的只读内存(ROM)和电可擦可编程只读内存(EEPROM)。由于 ROM 不可修改,因此只能将静态程序(如引导程序)存在其中。ROM 的不可变性对游戏盒来说还是有用的。EEPROM 可以修改,但是不能经常修改,因此可以保存大多数的静态程序,例如,智能手机采用 EEPROM 来存储工厂安装的程序。

所有形式的内存都提供字节数组,每个字节都有地址。交互通过针对特定内存地址,执行一系列 load 或 store 指令来实现。指令 load 将内存字节或字保存到 CPU 寄存器,而指令 store 将寄存器内容保存到内存。除了明确使用 load 和 store 外,CPU 还会自动加载内存指令以便执行。

在冯•诺依曼体系结构(von Neumann architecture)上执行时,一个典型的指令执行周期是,首先从内存中获取指令,并存到指令寄存器(instruction register)。接着,该指令被解码,也可能会从内存中获取操作数据并且存到内部寄存器。在指令完成对操作数据的执行后,结果也可存到内存。

注意,内存单元只能看到内存地址的流,而并不知道它们如何产生(通过指令计数器、索引、间接、常量地址或其他方式)或它们是什么样(指令或数据)的地址。相应地,我们可以忽略程序如何产生内存地址,而只关注由程序运行所生成的地址序列。

在理想情况下,程序和数据都应永久驻留在内存中。由于以下两个原因,这是不可能的:
  1. 内存通常太少,不能永久保存所有需要的程序和数据。
  2. 内存是易失性的(volatile)存储设备,掉电时就会失去所有内容。

因此,大多数的计算机系统都提供外存(secondary storage)来扩充内存。外存的主要需求是,能够永久存储大量数据。最为常用的外存设备为硬盘磁盘(Hard Disk Drive,HDD),它能存储程序和数据。大多数程序(系统与应用)都保存在磁盘上,当要执行时才加载到内存。许多程序都使用硬盘作为它们处理的起点和终点。因此,磁盘存储的管理是否适当,对计算机系统来说十分重要(这将在后续章节中加以讨论)。

从更广意义上来说,以上所述的存储结构(由寄存器、内存和磁盘组成的),仅仅只是多种存储系统的一种。除此之外,还有高速缓存、CD-ROM、磁带等。每个存储系统都可存储与保存数据,以便以后提取。各种存储系统的主要差异是速度、价格、大小和易失性。

存储设备的层次
图 1 存储设备的层次

根据速度和价格,各种不同的存储可按层次来分类(图 1)。层次越高,价格越贵,速度越快。从高到低,每个层次的价格通常会降低,而访问时间通常会增加。这种折中是合理的,如果一个给定存储系统比另一个更快更便宜,而其他属性一样,那么就没有理由使用更慢更昂贵的存储。

事实上,许多早期存储设备,如纸带和磁心存储器,之所以现在已经进入博物馆,就是因为磁带和半导体内存(semiconductor memory)已变得更快更便宜。图 1 中上面四层存储通常由半导体内存构成。

除了不同的速度和价格,存储系统还分为易失的和非易失的。当电源切断时,正如前面所讲,易失存储(volatile storage)会丢失内容。如果没有昂贵的电池和发电后备系统,那么数据应写到非易失存储(nonvolatile storage)以便安全保管。在图 1 所示的层次中,固态磁盘之上的存储系统为易失的,而之下的为非易失的。

固态磁盘(solid-state disk)有多种类型,一般来说都比磁盘要快,也是非易失的。一种类型的固态磁盘在运行时将数据保存在一个大的 DRAM 数组上,它有一个隐藏磁盘和一个作为备份电源的电池。当外部电源被中断时,固态磁盘控制器将数据从 RAM 复制到磁盘。当外部电源恢复后,控制器将数据复制到 RAM。

另一种固态磁盘是闪存,它在照相机、个人数字助理(Personal Digital Assistant,PDA)和机器人中很受欢迎,并越来越多地作为通用计算机的存储。闪存比 DRAM 慢,但是无需电源以便保存内容。

另一种非易失性存储器是 NVRAM,即具有备用电池的 DRAM。这种存储与 DRAM 一样快,且是非易失的(只要电池有电)。

完整存储系统的设计应当平衡所有以上讨论的各种因素:它应只使用必需的昂贵存储,而提供尽可能便宜的、非易失的存储。当两个存储组件的访问时间或传输速率具有明显差异时,可以通过高速缓存来改善性能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


起步 处理器架构,参考 x86是指intel的开发的一种32位指令集 intel和amd早期的cpu都支持这种指令集 AMD比Intel率先制造出了商用的兼容x86的CPU,AMD称之为AMD64 Intel选择了设计一种不兼容x86的全新64为指令集,称之为IA-64,后来支持AMD64的指令集,
pscp pscp -P 22 C:\work\test.txt root@192.168.1.5:/home/data pscp -P 22 root@192.168.1.5:/home/data/test.txt C://work// 检索 find / -name default.config
文件处理 ls -a # 显示所有文件 ls -l # 显示详细信息 ls -d # 显示路径 mkdir /目录名称 # 创建目录 cd /目录名称 # 切换目录 pwd # 显示当前路径 rmdir /目录名称 # 删除目录 cp -rp [目录名称] [目标目录] # 复制目录到目标目录 cp
准备一台电脑(我就用联想拯救者r7000演示) 参考博客制作启动盘 插上U盘,启动电脑,一直按F2 进入如下页面后,将U盘设置为第一启动项,点击exit,保存并退出 之后进入如下页面,选择第三项 进入如下页面,选择第四项 进入如下页面,选择第一项,选中后,先不要点Enter 按e键,将inst.st
认识 Linux系统是参考了UNIX系统作为模板开发的,但没有使用UNIX的代码;是UNIX的一种,但不是衍生版 在Linux内核的基础上开发是发行版 分区 逻辑分区永远从5开始 步骤 挂载:可理解为分配盘符,挂载点即是盘符名;不同之处:Linux中是以空目录名称作为盘符 Hda 第一块硬盘 Hda
文件处理命令 以 . 开头的文件是隐藏文件 以 - 开头表示这是一个文件 以 d 开头表示是一个目录 以 l 开头表示是一个软链接 第一个root是所有者,第二个root是所属组 ls -h 以文件默认大小后缀 显示 ls -i 查看i节点(唯一标识) 所有者:只能有一个,可变更 所属组:只能有一个
参考 01 02 03 前提环境 本地安装VirtualBox,并安装CentOS8,配置网络后,window系统上putty能连接到CentOS8服务器 配置步骤 右键服务器复制 启动复制后的服务器,查看ip和hostname发现和原来的服务器一样,需要修改 hostname # 查看主机名 vi
文件搜索命令 星号匹配任意字符,问号匹配任意单个字符 -iname 根据文件名查找且不区分大小写 -ok 命名会有一个询问的步骤 如果没有找到指定文件,可输入命令:updatedb 更新文件资料库;除tmp目录不在文件资料库收录范围之内 locate -i 文件名 # 检索时不区分大小写 which
安装环境 安装最新版的Virtual Box,点击安装 下载centos8镜像 创建虚拟机,可参考 选择下载到本地的镜像 设置启动顺序 点击启动 启动过程中报错:“FATAL:No bootable medium found!” 1.没有选择iso镜像 2.光驱没有排在第一位置 3.镜像只能选择x8
Linux严格区分大小写 所有内容文件形式保存,包括硬件 Linux不靠扩展名区分文件类型 挂载:将设备文件名和挂载点(盘符)连接的过程 Linux各个目录的作用 bin表示二进制 服务器注意事项 远程服务器不允许关机,只能重启 重启时应该关闭服务 不要在服务器访问高峰运行高负载命令 远程配置防火墙
IDE连接Linux,上传下载文件 参考1 参考2 连接Linux 上传下载文件 本地项目打包后上传 查看是否上传成功,右键下载 补充 后端项目开发完成后,需clean掉临时文件target文件夹,且只推送修改过的文件 前端项目开发的过程中,需要在每个子组件中使用scoped,确保每个子组件中的编码
起步 LTS与普通版本的区别 LTS版本的发布周期更长,更加稳定 安装jdk sudo mkdir /usr/lib/jvm # 在Ubuntu中创建目录 pscp D:\安装包\linux源码包\jdk-8u291-linux-x64.tar.gz chnq@192.168.0.102:/tmp
前言 最近在b站上看了兄弟连老师的Linux教程,非常适合入门:https://www.bilibili.com/video/BV1mW411i7Qf 看完后就自己来试着玩下,正好手上有台空闲的电脑就尝试不使用虚拟机的方式安装Linux系统 安装步骤 制作启动盘 下载ISO镜像,我这里下载的是Cen
新建虚拟电脑 设置内存和处理器 设置硬盘大小 完成 设置 查看光驱 设置启动顺序 点击启动 选择第1项 进入图形安装界面 选择安装位置,开始安装 设置root密码 重启 登录 查看本地文件夹 配置网络,点击设置 查看宿主机ip C:\Users\ychen λ ipconfig 无线局域网适配器 W
源码包安装需手动下载后安装 二进制包则在package目录下 rpm命令管理rpm包 若某个rpm包依赖于某个模块,需要到网站www.rpmfind.net查询该模块依赖的包,安装这个包后自动安装模块,之后就能安装rpm包了 安装升级时使用包全名 查询卸载时使用包名 虚拟机中的Linux系统安装rp
首先进入命令模式,再输入以下命令 命令模式用于输入命令 插入模式可对文件编写操作 编辑模式下的命令是在冒号后输入 :12, 15d # 删除指定范围的行,这里是删除12到15行 :n1,n2s/old/new/g ## 表示从n1行到n2行,old表示旧的字符串 vim使用小技巧:自定义快捷键,如快
使用源码包安装,需要自己指定安装位置,通常是 /usr/local/软件名/ linux中要想启动执行文件,应使用绝对路径 /绝对路径/rpm包名 start ## 执行方式一 service rpm包名 start ## 执行方式二 使用源码包安装后,由于自定义安装路径,就不能使用service命
网络命令 在收邮件的用户中,输入 mail 可查看邮件信息,输入序列号查看详细信息 在mail命令下,输入h 查看所有邮件的列表 输入:d 序列号 # 删除邮件 last # 统计所有用户登录或重启时间,用于日志查询 lastlog # 显示包括未登录用户的登录时间 lastlog -u 用户id
若要使用yum管理,必须能连接网络,首先配置网络IP 进入yum源文件中启动容器 使用yum源头安装rpm包不需要进入package路径,同时也不需要使用包全名,会有yum自动管理 安装软件组
简介 client即是本机安装的docker,相当于git Docker_host相当于centos系统 registry则是docker仓库,相当于GitHub 镜像用于创建docker容器,一个镜像可以创建多个docker容器 容器是由镜像创建的运行实例,(镜像相当于类,容器相当于类创建的对象)