【操作系统】第三章:计算机体系结构及内存分层体系(Part1:计算机体系结构)

简介: 【操作系统】第三章:计算机体系结构及内存分层体系(Part1:计算机体系结构)

目录


  • 计算机体系结构
  • 内存的层次结构
  • 操作系统在内存中的目标
  • 地址空间&地址生成
  •      逻辑地址空间的生成
  • 地址空间的定义
  • 操作系统的作用


正文


计算机体系结构


4ace177a422d60d58354d21ac986e28d_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png计算机体系结构分为三大块内容。如图所示

CPU:CPU完成了整个程序、软件的控制

内存:放置程序的代码和它所处理的数据

设备:各种外设,配合执行一系列额外的工作(比如保存数据到硬盘中,需要鼠标点点点)。输入输出(IO操作)

f84ed4238e8e58467dd0d1d0410fcc78_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png



内存的层次结构


5bc30331d257238cb7d3b1d04aec2fce_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

内存层级结构:就是CPU要访问的指令或者数据他所在的位置在什么地方。从上到下,CPU可以访问的数据是寄存器和闪存。这两部分是位于CPU芯片内部的,操作系统不能对其直接管理。他们速度很快容量很小,所以访问的数据有限。为此我们需要主存(物理内存),主存需要存放OS本身和OS运行的代码,主存的容量比寄存器和闪存大很多,速度相对比较慢。主存一掉电,其中的数据就会丢失,而且主存容量仍然小于硬盘容量,所以我们需要保存数据到硬盘上。

所以越靠近CPU,读取速度越快,存储容量越小。


操作系统在内存中的目标


b4d3602e417a9d7e2b8e63a460dce627_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

1.抽象:应用程序在内存中运行时,由于OS的管理,能够不用考虑过多的底层细节(不需考虑物理内存在哪,外设在哪)只需要掌握一个连续的地址空间(逻辑地址空间)。

2.保护:内存中可以同时运行多个应用程序,多个不同的应用程序相互之间可能会访问彼此的地址空间,所以我们需要隔离这些应用程序隔离。这个机制的实现就需要OS来完成。

3共享:访问相同内存,使进程之间可以安全可靠的数据传递。

4.虚拟化:当内存中储存程序比较多时,很容易出现内存不够的情况。所以我们需要更多的地址空间,我们把最需要放到内存中的数据放在内存中,把那些没那么必要的程序暂时放到硬盘中。这个管理过程我们希望对应用程序透明,同时令应用程序尽量用所需要的数据和空间。这个过程就是虚拟化。

image.png


地址空间&地址生成


b250b2ed2b51facb1c03e4c21e49776d_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

有两种地址空间。物理/逻辑地址空间(连续的物理地址空间)

物理地址空间和硬件直接对应,比如内存条代表的主存和硬盘代表的另一种存储空间。

逻辑内存空间是一个运行中的程序所看到的内存空间,相对而言吗他看到的地址空间更加简单(线性的),我们的应用程序因此很容易去访问和做控制及数据访问操作。图中的指令最终一定会放在主存或者硬盘中,现在位于箭头指向的程序中的某一位置。这个映射关系是需要OS进行管理的。

我们在机器里,总线上看到的地址是物理地址。所有的物理地址构成的空间由硬件支持的。


逻辑地址空间的生成


f442828a408500c3d59080605b77a3f6_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png

C程序变为汇编语言再变成机器语言,他会把编的函数名和符号名变成新的地址。.o程序起始地址全都是从零开始,里面的函数名和符号名都会变成相应的地址。另外一个编译过程中用到的工具lniker会把多个.0程序变成单一的应用程序,这个程序可以在内存中执行但是目前还存在硬盘中的程序,最后一步,放在硬盘中的执行程序再通过loader放到内存中去运行,这一步需要去完成一个分配逻辑地址的工作。相对于执行程序而言,地址会有一定的偏移量,可以为0,然后所有的程序会依照偏移量进行正确的访问和指令的操作。

程序放到内存中去后,他仍然是一个逻辑地址,而不是物理地址。

f56d66e00f789cd843cc09d548f34956_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYWhvdA==,size_16,color_FFFFFF,t_70.png


地址空间的定义


8888888888.gif

映射关系完成了一个从逻辑地址到物理地址的映射,一个逻辑地址具体的对应的物理地址知道了的话,就可以从具体的外设中读写数据。

流程描述:当CPU需要某条指令时,当前指令需要ALU,会将相应参数传给ALU。CPU里的MMU会去查找逻辑地址的映射表中是否有对应的物理地址,如果有直接找到对应地址;没有的话,就会去内存中找。找到后会给CPU发出请求,需要某条物理地址的指令内容,主存会把内存的内容通过总线传给CPU,然后CPU开始执行指令。这过程里OS起到的作用就是:1,在这些步骤之前需要建好这个映射关系表,这就是物理地址生成的过程。这个关系可以放在内存中由CPU来缓存,可以加快这个访问的过程。


操作系统的作用


辜负她.gif

操作系统需要确保放到内存中的程序之间不能相互干扰,为此需要保证每个程序访问的地址程序是合法的(限制在约束范围之内的)。限制和约束也由OS完成。

一个程序可以有效访问的地址空间:1,起始地址;2,长度(有一块区域属于这个程序的合理访问区间,超出这个范围,那么这个程序的访问就不合法)。逻辑地址如果不满足区域限制,CPU会产生一个内存访问异常,OS将会进一步处理这个问题;满足则正常的去找到对应物理地址的位置,从中取出指令的数据。


目录
相关文章
|
9天前
|
存储 监控 Java
深入理解计算机内存管理:优化策略与实践
深入理解计算机内存管理:优化策略与实践
|
1月前
|
分布式计算 算法 大数据
探索操作系统的核心:调度与内存管理机制
【10月更文挑战第11天】 本文深入探讨了操作系统中两大核心功能——调度与内存管理机制。通过分析调度算法、进程状态转换及内存分配策略等关键方面,揭示了它们如何共同维护系统性能和稳定性。旨在为读者提供对操作系统内部运作的深刻理解,同时引起对优化策略的思考。
59 5
|
1月前
|
Java C语言 iOS开发
MacOS环境-手写操作系统-16-内存管理 解析内存状态
MacOS环境-手写操作系统-16-内存管理 解析内存状态
34 0
|
3月前
|
安全
计算机硬件升级增加内存(RAM)
【8月更文挑战第5天】
97 3
|
3月前
|
算法 程序员
理解操作系统内存管理:页面置换算法全解析
大家好,我是小米,热爱分享技术的大哥哥!今天聊的是操作系统中的页面置换算法。它解决的是内存满载时,如何选择合适的页面移出以腾出空间的问题。主要有三种算法:FIFO(先进先出),简单但性能不佳;LRU(最近最久未使用),考虑时间局部性,性能较好但实现较复杂;OPT(最佳置换),理论上最优但无法实际应用。这些算法各有千秋,在实际应用中需根据场景选择最合适的方案。希望这能帮大家更好地理解内存管理的核心机制!
148 2
|
4月前
|
Cloud Native Devops 数据库
云原生架构:未来软件开发的引擎深入理解操作系统的虚拟内存管理
【7月更文挑战第30天】在这篇文章中,我们将深入探讨云原生架构的概念,以及它如何改变软件开发的世界。我们将从云原生的基本概念开始,然后深入到它的关键技术和实践,最后讨论它对软件开发的未来影响。无论你是软件开发者,还是IT专业人士,这篇文章都将为你提供深入理解和掌握云原生架构的重要信息。 【7月更文挑战第30天】在数字世界的构建中,虚拟内存是操作系统不可或缺的一环。本文将探索虚拟内存的核心概念、工作机制及其对现代计算环境的重要性,同时揭示其背后的技术细节和面临的挑战。
42 3
|
4月前
|
存储 固态存储 芯片
计算机中内存与存储
【7月更文挑战第28天】
67 1
|
3月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
369 0
|
22天前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
45 1
|
26天前
|
存储
共用体在内存中如何存储数据
共用体(Union)在内存中为所有成员分配同一段内存空间,大小等于最大成员所需的空间。这意味着所有成员共享同一块内存,但同一时间只能存储其中一个成员的数据,无法同时保存多个成员的值。