《操作系统》OS学习(四):计算机体系结构、内存层次和地址生成

计算机除了计算能力之外还有存储能力,存储能力即计算机拥有一系列的存储介质,我们可以在存储介质上存储我们的代码和数据。计算机体系结构中约定了哪些地方可以用来存储数据:CPU内的寄存器、内存和外存。不同的存储介质,容量、速度和价格都是不同的。为了建立一个合理的系统,我们将计算机系统中的存储介质组织成一个层次结构。操作系统针对层次结构下的存储单元进行管理。操作系统的存储管理就是用来管理这些存储介质的。最基本的管理要求就是当一个进程需要使用存储单元的时候,操作系统能够分一块存储介质给它使用,等它不用的时候还回给操作系统。

计算机体系结构:包括CPU、内存和I/O设备。

CPU中有寄存器和高速缓存。寄存器的空间是非常小的,可能是32位或64位,能存的诗句也就几十字节或几百字节。CPU中还有高速缓存,高速缓存仅次于CPU寄存器,处理速度接近CPU频率,容量远小于内存,速度远快于内存,当CPU要读取的数据存在于高速缓存时(命中),可以直接返回数据而不需要访问内存,合理利用内存访问的局部性特点,可以达到极高的命中率。内存也是比较大的能存储数据的介质,他的最小访问单位是字节,也就是8bit,通常我们的计算机系统是32位的总线,也就是说可以同时从内存中读写32位也就是4字节。一次读写32位时牵扯到地址对齐,因此读写时不能从任意地方开始读一个4字节。

内存层次:

了解了上面这些,我们可以看下计算机中内存的层次关系:首先是处理器中有两级缓存,这一部分内存管理是由硬件实现的,因此用户或操作系统是无法显示地进行控制的。再下面一层则是内存,内存再下面一层可以是外存中的虚拟内存,这两个层次是由操作系统机型管理的。当CPU能层高速缓存中获取所需读取的内容无需访问内存,能够在内存中获取的内容无需访问虚拟内存,内存缺页时才会从虚拟内存中读取需要的内容。而这几个层次上的内存的访问速度是有这巨大差别的。最快的L1缓存可以达到接近CPU频率的速度,内存可以达到1.3GHz,外存较慢需要5ms,可以看到最快和最慢能差到百万数量级,如何将这几个层次有机地结合到一起,挑战性还是很大的。

内存管理:

我们希望将内存管理做到什么程度呢?如下图,系统中有不同的进程,进程通过操作系统内核访问物理内存,访问受内存管理单元(MMU)的控制。我们希望每个进程认为它自己独占内存,因此进程能看到的是逻辑地址空间。MMU负责将逻辑地址空间映射到真实的物理地址空间。而这些都对内存管理提出了很高的要求,主要需要满足如下几条:

  1. 抽象,进程使用逻辑地址空间;
  2. 保护,由逻辑地址空间映射到物理地址空间时不同进程之间不能访问到其他进程的内存;
  3. 共享,所用进程共用操作系统内核;
  4. 虚拟化,进程可以使用比实际内存空间更大的地址空间。

其中的保护性和共享性是相对矛盾的两个要求,既要保护好各自的空间,又要访问相同内存。甚至逻辑地址空间中看到的可以存储数据的空间是大于实际物理内存的。

操作系统为了达到上述效果,具体采用的内存管理方式有以下几条:

  1. 重定位。在最初的计算机中,是直接使用总线上的物理地址来编写程序的,程序要读写某个内存单元,直接访问它所在的物理地址。这有很大缺陷,你的程序只能在指定类型的机器上运行。重定位通过将进程中的逻辑地址加上重定位寄存器的值获得物理地址。这样通过修改重定位寄存器的值就可以将程序运行下去。为了实现,程序和操作系统里面都需要有相应的支持。
  2. 分段。实际我们在写程序的时候,逻辑结构并不是必须连成一片的区域,而是把程序分为数据、代码、堆栈。这三个部分是相对独立的。这样每一块需要的空间就变少了。分段依然需要每一段内的内容是连续的,这个要求依然很高。
  3. 分页。分页就是把内存分成最基本的单位,选取合适的大小的连续区域作为一页,一页作为内存管理的基本单位。
  4. 虚拟存储。目前多数系统(如Linux)采用按需页式虚拟存储。将不常用内容转移到外存上存储,这也使得逻辑地址空间可以大于实际物理内存空间。

上述4条内存管理方式的实现高度依赖硬件。比如与计算机存储架构紧耦合;MMU的结构是什么样的,CPU能够识别的页表是什么样的,也就是MMU如何处理CPU存储访问请求的硬件。

地址空间

从逻辑地址到最后在总线上出现的物理地址,有一个转换的过程,在学习具体的转换算法之前,我们需要学习地址生成的过程。生成过程中并不是所有地址都允许访问的,因此还需要对地址的合法性进行检查。

地址空间定义:计算机地址空间有两种,物理地址空间和逻辑地址空间。

  • 物理地址空间就是硬件支持的真实地址空间,这是受硬件支持的,比如32位的系统,就是从0到4G-1的位置。
  • 逻辑地址空间就是在CPU中运行的进程看到的地址,这个地址是从物理地址空间中分配的一段或几段子空间。

地址生成及处理过程:

整体可以分为如下几个步骤,ALU需要逻辑地址中的内容(读或写),MMU对逻辑地址进行转换,转换为物理地址,CPU控制逻辑给总线发送物理地址请求。内存发送物理地址的内容给CPU或者将CPU给的数据存储到物理地址。操作系统做的是建立逻辑地址LA和物理地址PA之间的映射。

逻辑地址生成:

生成过程如下图。比如最开始是高级语言写了一段代码,其中有一个函数foo();首先要进行编译,编译为机器能够识别的汇编语言;之后进行汇编,将函数名从字符串变为地址75;而这个函数可能是某个函数库中的成员,而函数库的位置程序是不知道的,这就需要链接,将需要的文件拼接起来,此时可能在原先的代码前面插入了一段代码,比如地址偏移了100,此时函数地址变为了175;最后需要进行程序加载即重定位,因为这段程序不一定是从逻辑地址的0位开始的,比如是从1000开始的,那么函数地址成为1175。经历了这么多步骤之后,生成的1175才是我们需要的逻辑地址。

那么逻辑地址是在什么时间生成的呢:

  1. 编译时。假定起始地址已知,也就是我知道我的程序要放在哪,那么编译时就可以生成逻辑地址。但是当起始地址改变时,比如修改了代码,必须重新编译。老旧的功能机买来之后不允许下载软件,这种情况下地址通常就是写死的。
  2. 加载时。当你修改了代码或者安装了各种新的软件,写程序时是无法知道新的代码存储在什么地址的。也就是编译时起始位置未知时,编译器需生成可重定位的代码,等到加载时重定位,生成绝对地址。通常在可执行文件的前面有一个重定位表,加载的时候改成绝对地址,程序就可以跑了。
  3. 执行时。执行到这条指令之前一直使用相对地址,当执行到这一条指令的时候,才可以去知道它确切访问的地址。这种情况出现在使用虚拟存储的系统里。优点就是在程序执行过程中就可以将代码移动,而前面两种生成时机都不可以。但是需要地址转化硬件支持,相对较麻烦。

地址检查

CPU执行到某条指令,得到它的逻辑地址,首先根据逻辑地址判断所在它的偏移量是否在所在段(比如数据段)的长度之内,如果超出了段长度,认为是非法请求,否则认为是合法的。此时加上段基址得到物理地址,进行访问。在这个过程中操作系统要做的就是设置段起始地址和最大逻辑地址空间(段长度)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GCC中SIMD指令的应用方法

X86架构上的多媒体应用开发,如果能够使用SIMD指令进行优化, 性能将大大提高。目前,IA-32的SIMD指令包括MMX,SSE,SSE2等几级。 在GCC的开发环境中,有几种使用SIMD指令的方式,本文逐一介绍。X86的…

使用angular4和asp.net core 2 web api做个练习项目(二), 这部分都是angular

上一篇: http://www.cnblogs.com/cgzl/p/7755801.html 完成client.service.ts: import { Injectable } from angular/core; import { Http, Headers } from angular/http; import { Observable } from rxjs/Observable; import { ErrorHandler } from angular/core; import rxj…

leelen可视对讲怎么接线_楼宇对讲系统怎么布线 楼宇对讲系统布线方式【介绍】...

随着智能小区规模不断增加,楼宇可视对讲系统应用越来越广泛,因而视频信号的传输方式与布线设计显得越来越重要。视频信号与数据和音频信号不同,可行的一种传输方式为视频信号基带传输,下面小编就简要介绍一下这种传输方式和布线方…

路由汇总实例

5.2.2.2 路由汇总策略 之前提到过,在网络管理员计划好子网选择并进行预期地路由汇总时,手动路由汇总工作能取得最佳效果。例如,之前的例子设定好了一个考虑周全的计划,管理员只使用远离Yosemite路由器并以10.2开头的子网。这个规定…

《操作系统》OS学习(五):连续内存分配 内存碎片、动态分配、碎片整理、伙伴系统

内存碎片 在没有其他方式辅助的情况下,我们分配给一个进程的内存是连续的。在分配时候我们需要有动态分配与碎片处理。如何理解呢?就是每个进程需要一块内存,我们要选取合适的位置的内存分配给它。当有的进程先结束了内存还给操作系统&#…

世界之窗浏览器删除文本框信息_文本框——Excel里的便利贴

工作表里面的单元格应该是足够我们来记录数据和信息了。但是文本框这个功能在工作表中还是存在,可以理解为便利贴功能。插入文本框1.点击“插入”选项卡。2.然后点击“文本框”。3.在下拉菜单里面,有两种可供选择:横排文本框和垂直文本框。在…

RHEL 5服务篇—常用网络配置命令

常用网络配置命令 在“Linux系统管理”的文章中,大家已经学习了Linux系统的基本管理命令和技巧,为了进一步学习Linux网络服务打下了良好的基础。所以我作者以后将陆续推出Linux网络服务的相关文章。希望大家能给与我大大的支持。 今天我们就来学习一下…

清华大学《操作系统》(六):非连续内存分配 段式、页式、段页式存储管理

背景 连续内存分配给内存分配带来了很多不便,可能所有空闲片区大小都无法满足需求大小,这个分配就会失败。基于这种现状,就有了非连续内存分配的需求。非连续分配成功的几率更高,但也面对更多的问题,比如分配时是不是…

C语言第三次博客作业---单层循环结构

一、PTA实验作业。 题目1 1.实验代码 int n,i; double height1,height2;//1为输入身高&#xff0c;2为输出身高。 char sex; //1<height1<3; //N<1; scanf("%d",&n); while(n--){getchar();scanf("%c%lf",&sex,&height1);switch(sex)…

清华大学《操作系统》(七):虚拟存储、覆盖、交换

接下来几节都是对虚拟存储的讲解。虚拟存储是非连续存储管理的扩展。通过将内存中的数据暂存到外存的方式&#xff0c;为进程提供更大的内存空间。虚拟存储出现的主要原因是因为程序规模的增长速度远远大于存储器容量的增长速度&#xff0c;导致内存空间不够用。其实针对内存空…

遵义大数据中心项目工程概况_市委书记张新文到曹州云都大数据中心等项目现场调研建设情况...

4月25日&#xff0c;市委书记张新文到曹县调研重点项目建设情况&#xff0c;研究推进措施。市委常委、秘书长任仲义参加活动。张新文首先来到曹州云都大数据中心项目建设现场&#xff0c;查看项目推进情况。曹州云都大数据中心&#xff0c;是涵盖云计算区、研发办公区、公寓生活…

linux 可执行文件的分析(gcc GUN BUILEIN)

1、GCC The History of GCC 1984年&#xff0c;Richard Stallman发起了自由软件运动&#xff0c;GNU (Gnus Not Unix)项目应运而生&#xff0c;3年后&#xff0c;最初版的GCC横空出世&#xff0c;成为第一款可移植、可优化、支持ANSI C的开源C编译器。GCC最初的全名是GNU C Com…

Cassandra 的数据存储结构——本质是SortedMapRowKey, SortedMapColumnKey, ColumnValue

Cassandra 的数据存储结构 Cassandra 的数据模型是基于列族&#xff08;Column Family&#xff09;的四维或五维模型。它借鉴了 Amazon 的 Dynamo 和 Googles BigTable 的数据结构和功能特点&#xff0c;采用 Memtable 和 SSTable 的方式进行存储。在 Cassandra 写入数据之前&a…

清华大学《操作系统》(八):置换算法

功能&#xff1a;置换算法是指当出现缺页异常时&#xff0c;需要调入新页面而内存已满时&#xff0c;置换算法选择被置换的物理页面。 设计目标&#xff1a; 尽可能减少页面的调入调出次数&#xff1b;把未来不再访问或短期内不访问的页面调出。 页面锁定&#xff1a; 了解具…

烂泥:通过vsphere给esxi添加本地硬盘

公司ESXi服务器的硬盘空间不够使用&#xff0c;现在新加了一块硬盘在ESxi服务器上。在服务器上添加完硬盘后&#xff0c;在Vsphere上是看不到新加硬盘的。 下面我们来通过虚拟机模拟该情况&#xff0c;先添加一块硬盘。如下图&#xff1a; 在Esxi添加完硬盘后&#xff0c;现在通…

清华大学《操作系统》(九):进程和线程

进程 定义&#xff1a; 进程是指一个具有一定独立功能的程序在一个数据集合上的一次动态执行的过程。 组成&#xff1a; 代码数据状态寄存器&#xff08;正在运行的一个程序的所有状态信息&#xff09;&#xff1a;CPU状态CP0、指令指针IP通用寄存器&#xff1a;AX、BX、CX…

开始Flask项目

1.新建Flask项目。2.设置调试模式。3.理解Flask项目主程序。4.使用装饰器&#xff0c;设置路径与函数之间的关系。5.使用Flask中render_template&#xff0c;用不同的路径&#xff0c;返回首页、登录员、注册页。6.用视图函数反转得到URL&#xff0c;{{url_for(‘login’)}}&am…

烂泥:mysql数据库使用的基本命令

1、连接数据库的格式 mysql -h IP -u用户名 -p密码; 1.1连接远程数据库 mysql -h 192.168.1.214 -uroot -p123456 也可写成&#xff1a; mysql -h 192.168.1.214 -u root -p 123456 1.2连接本地数据库 mysql -uroot -p123456 也可写成&#xff1a; mysql -u root -p 123456 2、…

《操作系统》OS学习(十):进程控制

进程切换&#xff08;上下文切换&#xff09;&#xff1a; 定义&#xff1a;暂停当前运行进程&#xff0c;从运行状态变成其他状态&#xff0c;调度另一个进程从就绪状态变成运行状态要求&#xff1a;切换前&#xff0c;保存进程上下文&#xff1b;切换后&#xff0c;恢复进程…

GCC 命令选项使用详解

GCC 命令行详解[转帖] 1、gcc包含的c/c编译器 gcc、cc、c、g gcc和cc是一样的&#xff0c;c和g是一样的&#xff0c;一般c程序就用gcc编译&#xff0c;c程序就用g编译 2、gcc的基本用法 gcc test.c这样将编译出一个名为a.out的程序 gcc test.c -o test这样将编译出一个名为t…