博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算机系统之旅
阅读量:4125 次
发布时间:2019-05-25

本文共 1935 字,大约阅读时间需要 6 分钟。

计算机系统是由硬件和软件组成的,接下来我们跟踪hello程序的生命周期开始学习。

#include 
int main(){
printf("hello, world\n"); return 0;}

hello程序从一个源文件(hello.c)开始,实际上就是由01组成的位序列,8个位被组织成一组,成为字节。从源文件到目标文件的转化是由编译器驱动程序完成的:

linux > gcc -o hello hello.c

在这里插入图片描述

为了理解运行hello程序发生了什么,需要了解典型系统的硬件组织:

  • 总线:贯穿系统的一组电子管道,携带信息并负责在各个部件传递,总线被设计为传送特定长的字节快,也就是,字中的字节数(即字长)是一个基本系统参数,大多数机器要么4字节(32位),要么8字节(64位)。
  • I/O设备:系统与外部世界的联系通道,每个I/O设备通过一个控制器适配器与I/O总线相连,控制器是I/O设备本身或系统主印制电路板(主板)上的芯片组,适配器则是一块插在主板插槽上的卡(比如网卡),它们的功能都是在I/O总线和I/O设备间传递消息。
    在这里插入图片描述
  • 主存:临时存储设备,存放程序和程序处理的数据,物理上来说,由一组动态随机存取器(DRAM)芯片组成,逻辑上来说,是一个线性字节数组,每个字节都有唯一地址(数组索引)
  • 处理器:解释存储在主存中指令的引擎,核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC),PC指向主存中某条机器语言指令(即含有该指令的地址)。
运行hello程序

初始时,键盘输入./hello,shell程序将字符逐一读入寄存器,再把它放到内存中,从键盘读取hello命令:

在这里插入图片描述

当在键盘敲回车,shell程序知道已经结束命令输入,然后shell执行一系列指令加载可执行的hello文件,将hello文件中的代码和数据从磁盘复制到主存

利用直接存储器存取(DMA),数据可以不通过处理器直接从磁盘到主存,从磁盘加载可执行文件到主存:

在这里插入图片描述

一旦目标文件hello的代码和数据加载到主存,处理器开始执行hello程序的main程序找那个的机器语言指令,这些指令将"hello,world\n"字符串的字节从主存复制到寄存器,再从寄存器复制到显示设备,最终显示在屏幕上

在这里插入图片描述

系统花费大量时间把信息从一个地方挪到另一个地方,hello程序机器指令最初在磁盘,程序加载,被复制到主存,程序运行,又从主存复制到处理器,数据串“hello,world\n”也是类似,这些复制就是开销,减慢了程序真正工作,针对这种处理器与主存的差异,采用了高速缓存存储器(cache或高速缓存)

在这里插入图片描述

在CPU和较大较慢的设备间插入一个更小更快的存储设备,计算机系统都被组织成了一个存储器层次结构

在这里插入图片描述
主要思想就是上一层的存储器作为低一层存储器的高速缓存

操作系统管理硬件

回到hello程序,当shell加载和运行hello程序,以及hello输出消息,shell和hello程序都没有直接访问键盘、显示器、磁盘或主存,取而代之是依靠操作系统提供的服务,操作系统可以看成应用程序和硬件之间的一层软件,所有应用程序对硬件操作都必须通过操作系统,计算机系统分层视图:

在这里插入图片描述

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

  • 防止硬件被失控的应用程序滥用
  • 向应用程序提供简单单一的机制控制复杂不相同的低级硬件设备

通过抽象概念(进程、虚拟内存和文件)实现这两个功能,文件是对I/O设备的抽象,虚拟内存是对主存和磁盘I/O设备的抽象,进程是对处理器、主存和I/O设备的抽象

进程是操作系统对正在运行的程序的抽象,操作系统保持跟踪进程运行所需状态信息,这种状态,就是上下文,包括PC和寄存器文件当前值,以及主存内容。任何时刻,单处理器系统只能执行一个进程的代码,进程切换时就会进行上下文切换。

虚拟内存为每个进程提供一个假象,即每个进程独占使用主存,每个进程看到的内存都是一致,称为虚拟地址空间。在Linux中,地址空间最上面是保留给操作系统的代码和数据,地址空间底部存放用户进程定义的代码和数据

在这里插入图片描述

文件就是字节序列,每个I/O设备,磁盘、键盘、显示器都可以看成文件,文件向应用程序提供了统一的视图

系统间利用网络通信

网络可视为一个I/O设备,当系统从主存复制一串字节到网络适配器,数据流经过网络到达另一台机器,而不是比如到达本地磁盘驱动器

在这里插入图片描述

多核处理器

多核处理器将多个CPU(称为‘核’)集成到一个集成电路芯片上,如下图,微处理器芯片有4个CPU核,每个核都有自己的L1和L2高速缓存,这些核共享更高层次的高速缓存,以及到主存的接口

在这里插入图片描述
工业界的专家预言他们能将几十个,最终会是上百个核做到一个芯片上

【完】?

转载地址:http://vyhpi.baihongyu.com/

你可能感兴趣的文章
红黑树算法思悟
查看>>
从山寨Spring中学习Spring IOC原理-自动装配注解
查看>>
实例区别BeanFactory和FactoryBean
查看>>
Spring后置处理器BeanPostProcessor的应用
查看>>
Spring框架的ImportSelector到底可以干嘛
查看>>
Mysql中下划线问题
查看>>
微信小程序中使用npm过程中提示:npm WARN saveError ENOENT: no such file or directory
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
Vue项目中使用img图片和background背景图的使用方法
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>