深入理解计算机系统 视频教程,深入理解计算机系统1

第一章 计算机系统漫游

代码段的生命周期

hello.c

#include

int main()

{

printf("hello world!\n");

return 0;

}

1.1 前序

源程序(源文件)实际上就是一个由0和1组成的位(又成比特bit)序列,8个位被组组成一组,称为字节。每个字节表示程序中的某些文本字符(大部分的现代计算机系统都使用ASCII标准来表示文本字符)

1.2 编译过程

hello.c -> 预处理器(cpp) -> hello.i(修改了源程序文本-将#include、宏 进行相应的替换) -> 编译器(ccl) -> hello.s(翻译成汇编程序文本) -> 汇编器(as) -> hello.o(翻译成机器语言指令) -> 链接器(ld) -> hello(可执行文件)

1.3 系统硬件的执行流程

系统硬件的组成

1.总线

贯穿剩个系统的是一组电子管道,称为总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传递定长的字节块,也就是子(word).字重的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同.现在的大多数机器字节长要么是4个字节(32位),要么是8个字节(64位)

2.I/O设备

I/O(输入/输出)设备是系统与外部世界的联系通道

3.主存

主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据.从物理上来说,主存是由一组动态随机存存取存储器(DRAM)芯片组成的.从逻辑上来说,存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引),这些地址是从零开始的.一般来说,组成程序的每条机器指令都由不同数量的字节构成

4.处理器

中央单元处理器(CPU),简称处理器,是解释(或执行)存储在主存中指令的引擎.处理器的核心是一个为一个字的存储设备(或寄存器),称为程序计数器(PC).在任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)

从系统痛点开始,直到系统断电,处理器一直在不断地执行程序计算器指向的指令,在更新程序计数器,使其指向下一条指令.处理器看上去是按照一个非常简单的执行模型来操作的,这个模型是由指令集架构决定的.这个模型中,指令按照严格的顺序执行,而执行一条指令包含执行一系列步骤.处理器从程序计数器指向的内存处读取指令,解释执行中的位,执行指令指示的简单操作,然后更新PC,使其指向下一条指令,而这条指令并不一定和内存中刚跟执行的指令相邻.

这样的简单操作并不多,它们围绕着主存、寄存器文件(register file)和算数/逻辑单元(ALU)进行.寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字.ALU计算新的数据和地址值.下面是一些简单的操作的例子,CPU在指令的要求下可能会执行这些操作

- 加载:从主存复制一个字节或者一个字到寄存器,以覆盖寄存器原来的内容

- 存储:从寄存器复制一个字节或者一个字到主存的某个位置,已覆盖这个位置上原来的内容

- 操作:把两个寄存器的内容复制到ALU,ALU对着两个字做算术运算,并将结果存放到一个寄存器中,已覆盖寄存器中原来的内容

- 跳转:从指令本身抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的值

1.4 存储设备形成层次结构

在处理器和一个较大较慢的设备(例如主存)之间插入一个更小更快的存储设备(例如告诉缓存)的想法已经成为一个普遍的观念.实际上,每个计算机系统中的存储设备都被组织成了一个存储器层次结构,在这个层次结构中,从上至下,设备的访问速度越来越慢,容量越来越大,并且每个字节的造价也越来越便宜.寄存器文件在层次结构中位于顶层,也就是第0级或记为L0.

1.5 操作系统硬件管理

操作系统有两个基本的功能:

- 防止硬件被失控的应用程序滥用

- 向应用程序提供简单一直的机制来控制复杂而又通常大不相同的低级硬件设备

操作系统通过几个基本的抽象概念(进程、虚拟内存和文件)来实现这两个功能

![](https://img2020.cnblogs.com/blog/1585694/202010/1585694-20201028114153849-2030273858.png)

如上图所示:文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示

进程

```进程```是操作系统对一个正在运行的程序的一种抽象.在一个系统上可以同时运行多个进行,而每个进程都好像在独占地使用硬件.而```并发运行```,则是说一个进程的指令和另一个进程的指令是交错执行的.在大多数系统中,需要运行的进程数是多于可以运行他们的CPU个数的.传统系统在一个时刻只能执行一个程序,而先进的多核处理器同时能够执行多个程序,这是通过处理器在进程间切换来实现的.操作系统是新建这种交错的机制称为```上下文切换```

操作系统保持跟踪进程运行所需的所有状态信息.这种状态,也就是上下文,包括许多信息,入PC和寄存器we年的当前值.当操作系统决定要把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存了当前进程的上下文、恢复新进程的上下文,然后将控制权传递到新进程.新进程就会从它上次停止的地方开始

线程

尽管通常我们认为一个进程只有单一的控制流,但是在现代系统中,一个进程实际上可以由多个称为```线程```的执行单元组成,每个线程都运行在进行的上下文中,并共享同样的代码和全局数据.由于网络服务器中对并行处理的需求,现场称为越来越重要的编程模型,因为多线程之间比多进程之间更容易数据共享,也因为线程一般来说都比进程更高效.当有多处理器可用的时候,多线程也是一种使得程序可以运行的更快的方法

虚拟内存

虚拟内存是一个抽象的概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存.每个进程看到的内存都是一致的,称为```虚拟地址空间```.

在Linux中,地址空间最上面的区域是保留给操作系统中的代码和数据的,这对所有进程来说都是一样的.地址空间的底部区域存放用户进行定义的代码和数据(下图中地址是从下往上增大的)

每个进程看到的虚拟地址空间由大量准确定义的区域构成,每个区都有专门的功能

- 程序代码和数据:对所有的进程来说,代码时从同一固定地址开始,紧接着是和C全局变量相对应的数据位置.代码的数据区是直接按照可执行目标we年的内容初始化,在示例中就是可执行文件 hello.

- 堆:代码和数据区后紧随着的是运行时```堆```.代码和数据区在进程一开始运行时就被制定了大小,与此不同,当调用了malloc和free这样的C标准库函数时,堆可以在运行时动态地扩展和收缩

- 共享库:大约在地址空间的中间部分是一块用来存放像C标准库和数学库的共享库的代码和数据的区域.共享库的概念非常强大,也相当难懂

- 栈:位于用户虚拟地址空间顶部的是```用户栈```,编译器用它来实现函数调用.和堆一样,用户栈在程序执行期间可以动态的扩展和收缩.特别的,每次我们调用一个函数时,栈会增长;从一个函数返回时,栈胡收缩

- 内核虚拟内存:地址空间顶部的区域是为了内核保留的.不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数.相反,它们必须调用内核来执行这些操作

文件

文件就是字节序列,仅此而已.每个I/O设备,包括磁盘、键盘、显示器、甚至网络,都可以看成是文件.系统中的所有输入输出都是通过使用一小组称为 Unix I/O的系统函数调用来读写文件实现的

文件这个简单而精致的概念是非常强大的,因为它向应用程序提供了一个统一的视图.

1.6 系统之间利用网络通讯

现代系统经常通过网络和其他系统连接到一起.从一个单独的系统来看,网络可以视为一个I/O设备.当系统从主存复制一串字节到网络适配器时,数据流经过网络到达另一台机器,而不是比如说到达本地磁盘驱动器.相似地,系统可以读取从其他机器发来的数据,并把数据复制到自己的主存.

随着Internet这样的全球网络出现,从一台主机复制信息到另外一台主机已经成为计算机系统最重要的用途之一.例如:电子邮件、即时通讯、万维网、FTP、和Telnet这样的应用都是基于网络复制信息的功能

1.9 Amdahl定律

![](https://img2020.cnblogs.com/blog/1585694/202010/1585694-20201028142434217-424989952.png)

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

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

相关文章

Java与iOS对话:Java对象与Apple plist序列化

我很高兴地宣布我的第一个开源项目java-plist-serializer可以帮助您将Java(尤其是基于Spring的应用程序)与iOS应用程序集成。 背景 我正在将Java Webapp作为后端并且客户端是iOS设备的项目。 最近,我收到了创建Web服务的任务,该服…

web.cofing(新手必看)

花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法。很适合新手参看&#xff0c;由于Web.config在使用很灵活&#xff0c;可以自定义一些节点。所以这里只介绍一些比较常用的节点。 <?xml version"1.0"?> <!--注意: 除了手动编辑此文件以外&…

MIPS下CPU和RAM的数据流动情况详解

这是计算机硬件间的数据路径&#xff08;即数据流动的路径&#xff09;&#xff0c;下面将较详细分析此图&#xff1a; PC&#xff08;program counter&#xff0c; 程序计数器&#xff09;是一个用于记录当前计算机正在执行的指令的地址的寄存器&#xff08;register&#xff…

计算机乱程序怎么办,我的电脑程序乱了怎么办

我的电脑程序乱了&#xff0c;想用光盘恢复一下系统的修复安装方法第一种方法&#xff1a;1、点击“开始”菜单&#xff0c;点击“运行”2、输入CMD回车3、输入命令SFC/SCANNOW4、插入系统光盘系统会自动将硬盘中的系统文件于系统盘中的文件比较并进行修复如果不行&#xff0c;…

【计算机网络】网络层——IP协议

目录 一. 基本概念 二. 协议报文格式 三. 网段划分 1. 第一次划分 2. CIDR方案 3. 特殊的IP地址 四. IP地址不足 1. 私有IP和公网IP 2. DHCP协议 3. 路由器 4. NAT技术 内网穿透(NAT穿透) 五. 路由转发 路由表生成算法 结束语 一. 基本概念 IP指网络互连协议…

完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分

托管豆 这篇文章是本教程第1部分的继续。 在“ com.mb”包中&#xff0c;您将需要创建以下类&#xff1a; package com.mb;import org.primefaces.context.RequestContext;import com.util.JSFMessageUtil;public class AbstractMB {private static final String KEEP_DIALOG…

P1014 Cantor表

洛谷 p1014 题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a; 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号。第一项是1/1&#xff…

dvd管理系统

>>>>>>>>>>>>>>>>>>>> 语言&#xff1a;java 工具&#xff1a;eclipse 时间&#xff1a;2016.12.1 >>>>>>>>>>>>>>>>>>>> 一代代码&#xff1a; 1 …

佳能2900打印机与win10不兼容_佳能RF 1.4、RF 2增倍镜与RF 100500mm L IS USM并不完全兼容...

据佳能官方透露&#xff0c;佳能RF 1.4、RF 2增倍镜与RF 100-500mm F4.5-7.1 L IS USM镜头并不完全兼容。在安装使用两款增倍镜时&#xff0c;用户需将RF 100-500mm镜头变焦环的变焦位置移动到超过300mm的远摄区域。而在搭配增倍镜后&#xff0c;镜头变焦范围将限定在300-500mm…

县级的图书馆计算机管理员,图书馆管理员的岗位职责

图书馆管理员的岗位职责导语&#xff1a;在领导的命令下&#xff0c;紧紧围绕学校总体工作要求&#xff0c;牢固树立全心全意为教学及教科研第一线服务的思想&#xff0c;工作主动热情&#xff0c;努力做好管理育人的工作。图书馆管理员岗位职责&#xff1a;1、每学期认真制订切…

使用Java快速入门的Apache Thrift

Apache Thrift是由facebook创建的RPC框架&#xff0c;现在它是一个Apache项目。 Thrift可让您在不依赖语言的定义文件中定义数据类型和服务接口。 该定义文件用作编译器的输入&#xff0c;以生成用于构建通过不同编程语言进行通信的RPC客户端和服务器的代码。 您也可以参考Thri…

Windows/Linux安装python2.7,pycharm和pandas——《利用Python进行数据分析》

一、Windows下&#xff08;两种方法&#xff09; 1. 安装Python EDP_free并安装pandas ① 如果你没有安装python2.7&#xff0c;可以直接选择安装Python EDP_free&#xff0c;然后再安装pandas等包就行 &#xff1a; Python EDP_free 网址&#xff1a; http://epdfree-7-3-2.…

Python基础类型

1. 列表、元组操作 列表是我们最以后最常用的数据类型之一&#xff0c;通过列表可以对数据实现最方便的存储、修改等操作 定义列表 names [Alex,"Tenglan",Eric] 通过下标访问列表中的元素&#xff0c;下标从0开始计数 >>> names[0] Alex >>> nam…

angular点击按钮弹出页面_Win10提示“由于启动计算机时出现了页面文件配置问题”解决方法...

我们在使用Windows10系统的过程中&#xff0c;经常会遇到一些问题。近期有一个网友咨询装机之家小编&#xff0c;称自己Windows10系统开机之后&#xff0c;弹出系统属性对话框&#xff0c;提示“由于启动计算机时出现了页面文件配置问题”的问题&#xff0c;我们要如何解决呢&a…

计算机程序编程就业,计算机编程就业

为毕业生写计算机编程就业提供计算机编程就业范文参考,涵盖硕士、大学本科毕业论文范文和职称论文范文&#xff0c;包括论文选题、开题报告、文献综述、任务书、参考文献等&#xff0c;是优秀免费计算机编程就业网站。基于编程语言类课程教学方法的探讨位把考查学生的编程能力也…

Spring集成–第1节– Hello World

Spring Integration的“ Hello World ” –考虑一个简单的程序&#xff0c;以使用Spring Integration将“ Hello World”打印到控制台&#xff0c;并在此过程中访问一些企业集成模式概念 在进入程序本身之前&#xff0c;快速回顾一下消息传递概念将很有用–消息传递是一种集成样…

正则表达式贪婪模式与懒惰模式

正则表达式贪婪匹配模式&#xff0c;对于初学者&#xff0c;往往也很容易出错。有时候需要匹配一个段代码内容&#xff0c;发现匹配与想要不一致。发现原来&#xff0c;跟贪婪模式有关系。如下&#xff0c;我们看下例子&#xff1a; 什么是贪婪模式 字符串有: “<h3>abd&…

stm32 薄膜键盘原理_市面上的笔记本键盘优缺点解析,看完秒懂

大家在选购电脑时&#xff0c;很多人的关注重点都是笔记本的配置好不好、外观设计酷不酷和电池续航能力强不强&#xff0c;对电脑键盘往往不会太在意&#xff0c;其实一个好的电脑键盘也可以帮助你提高工作效率&#xff0c;特别对于小编这样的文字工作者&#xff0c;如果键盘手…

计算机等级考试心得体会,计算机等级考试心得体会(2)

估计以后的考试也可能略有变化&#xff0c;即逐渐增加使用命令的条数。由于该内容变化小&#xff0c;考生应当练习到纯熟的境地&#xff0c;在考试时用尽可能少的时间来做这部分内容&#xff0c;以使其他内容有更多的时间。六题能做出五题即可&#xff0c;有一题一时想不起&…

Web开发框架–第1部分:选项和标准

在我的公司&#xff0c;我们正在评估未来几年将使用哪种Web开发框架。 自上次评估以来&#xff0c;我们一直在使用由Struts 2驱动的Java应用服务器作为MVC&#xff0c;将Tiles作为模板引擎&#xff0c;将jQuery用于Javascript awesomennes&#xff0c;将DWR用于AJAX调用&#x…