计算机系统漫游

news2024/11/27 15:33:46

重点理解部分:

  1. 系统硬件:对硬件如处理器、存储器、I/O设备有一个基本的认识,理解它们的基本工作原理以及它们是如何协同工作的。
  2. Hello,World程序运行的过程:了解一个C程序如何从源代码到最终在计算机上运行的全过程。其中包括预处理、编译、汇编和链接等步骤。这个过程对于理解计算机系统来说非常重要。
  3. 处理器读取和解释存储在内存中的指令:理解指令是如何被加载到内存,处理器是如何获取和执行这些指令的。
  4. 缓存和内存的层次结构:理解缓存、主存和硬盘等不同级别存储设备之间的关系,为什么会有这样的层次结构,以及它们对程序性能的影响。
  5. 操作系统管理硬件:如何管理进程,文件和网络。理解系统调用和它们如何与硬件交互。
  6. 系统之间的网络通信:理解互联网是如何工作的,计算机是如何通过网络来交换信息的。
  7. 重要的系统级概念:并发和并行,这两个概念在计算机系统中非常重要,理解它们的含义和区别,以及它们在现代计算机系统中的应用。

不过在第一章内容中,不需要立即掌握上述内容,在后续继续学习过程中,会有更深入的了解。我相信哈…

系统硬件

系统硬件:计算机系统主要由处理器(CPU)、存储器(RAM)、和输入输出设备(I/O设备)组成。CPU负责执行程序指令,进行运算和控制操作;RAM存储正在运行的程序和数据;I/O设备负责与外部世界进行信息交互,例如键盘、鼠标、显示器等。

总线(Bus):贯穿整个系统的一组电子管道,它将处理器、内存和I/O设备链接起来,并携带信息字节在这节部件间传递。

I/O设备(Input/Output Devices):是系统与外界的联系通道。包括各种输入设备(如键盘、鼠标)、输出设备(如显示器、打印机)以及存储设备(如硬盘、光盘驱动器)。这些设备可以通过总线与处理器和内存进行通信,也可以通过DMA(Direct Memory Access,直接内存访问)方式访问主存,这可以在不占用CPU的情况下,直接在I/O设备和主存之间传输数据。

主存(Main Memory):也称作内存,是一个临时存储设备,主要用于存储正在运行的程序以及其所需要处理的数据。

处理器(Processor):也称为中央处理器(CPU),它是计算机的运算核心和控制核心。它是一个字长大小的存储设备或寄存器,始终指向主存中的某条机器语言指令。

处理器的工作过程:

  1. 指令读取:处理器首先从程序计数器(PC)指向的存储器处读取指令。
  2. 指令解释:然后处理器会解释指令中的位。
  3. 指令执行:之后,处理器会执行指令指示的简单操作。
  4. 更新程序计数器:最后,处理器更新程序计数器指向下一条指令。这条指令并不一定在存储器中与刚刚执行的指令相邻。

处理器可以执行的操作类型包括:

  • 加载:从主存中复制一个字节或一个字到寄存器,替代寄存器原来的内容。
  • 存储:从寄存器复制一个字节或一个字到主存的某个位置,替代该位置原来的内容。
  • 更新:复制两个寄存器的内容到算术逻辑单元(ALU),ALU将两个字相加,并将结果存放到一个寄存器中,替代该寄存器原来的内容。
  • I/O读:从一个I/O设备中复制一个字节或一个字到一个寄存器。
  • I/O写:从一个寄存器复制一个字节或一个字到一个I/O设备。
  • 转移:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,替代PC中原来的值。

image-20230526165335191

编译过程

Hello, World程序运行的过程

  • 预处理:预处理器(cpp)按照你在源代码中的指示修改代码。例如解析#include#define等预处理指令。即将hello.c处理成hello.i。

  • 编译:编译器(cc1)将预处理过的C源代码(hello.i)翻译成汇编语言(hello.s)。

  • 汇编:汇编器(as)将汇编语言翻译成机器语言指令,生成可重定位目标文件(hello.o)。

  • 链接:链接器(ld)将目标文件与库文件链接在一起,生成一个可执行文件。

image-20230526165632096

存储器层次结构

image-20230526173302709

计算机系统中的存储设备按照它们的存取速度和容量组织成了一个层次结构,这就存储器层次结构

存储器层次结构的主要思想是一个层次的存储器作为下一层次上的存储器的告诉缓存。这个结构从顶到底分别是:寄存器、高速缓存(Cache)、主存(Main Memory)、磁盘存储(Disk Storage)以及备份存储(Backup Storage)。

  1. 寄存器:位于CPU内部,有着最快的访问速度,但数量有限,成本最高。
  2. 高速缓存(Cache):位于CPU和主存之间,设计用于存储由CPU频繁访问的数据,以减少CPU和主存之间的数据传输。高速缓存分为几级,L1 Cache最接近CPU,访问速度最快但容量最小,然后是L2、L3 Cache,访问速度逐级下降,容量逐级增大。
  3. 主存(Main Memory):也称为RAM,是用来存储正在运行的程序和数据的。相比于寄存器和Cache,主存的访问速度较慢,但容量较大,价格较便宜。
  4. 磁盘存储(Disk Storage):也称为硬盘,是一种非易失性存储设备,用于长期存储数据和程序。相比于主存,磁盘的访问速度更慢,但容量更大,价格更便宜。
  5. 备份存储(Backup Storage):如磁带、云存储等,主要用于数据备份和灾难恢复,其速度最慢,但成本最低,容量最大。

存储器层次结构存在的主要原因是处理器和存储器之间的“速度差距”。处理器的速度远远超过了存储器的速度,如果没有Cache,那么处理器就会花大量的时间在等待数据存取上,这就是所谓的存储器壁垒(Memory Wall)问题。通过引入Cache,我们可以将常用的数据保存在接近CPU速度的存储器中,从而大大提高程序的运行效率。

操作系统

操作系统可以看成应用程序和硬件之前插入的一层软件,所有应用程序对硬件的操作都必须通过操作系统。

image-20230526174234829

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

  • 防止硬件被失控的应用程序滥用
  • 在控制复杂而又通常广泛不同的低级硬件设备方面,为应用程序提供简单一致的方法。

操作系统通过下图显示的抽象概念(进程、虚拟存储器、文件)实现这两个功能。

image-20230526175604390

进程

进程:是操作系统对运行程序的一种抽象。当你运行一个程序时,操作系统会创建一个新的进程来执行它。这个进程看起来好像它是独占的,即它有自己的处理器、内存和I/O设备。实际上,操作系统允许多个进程并发运行,交错执行每个进程的指令,创建出它们各自独占硬件的假象。

这种并发运行的实现是通过操作系统的一种机制:上下文切换。操作系统保存每个进程运行所需的所有状态信息,即上下文,这包括程序计数器(PC)和寄存器文件的当前值,以及主存的内容。当操作系统决定从当前进程切换到另一个进程时,它会保存当前进程的上下文,恢复新进程的上下文,然后将控制权交给新进程。新进程就会从上次停止的地方开始运行。

例如,当你在shell中运行hello程序时,最初只有shell进程在运行,等待你的输入。当你让它运行hello程序时,shell通过调用一个系统调用来执行你的请求,系统调用会将控制权交给操作系统。操作系统保存shell进程的上下文,创建一个新的hello进程及其上下文,然后将控制权交给hello进程。hello程序运行完毕后,操作系统恢复shell进程的上下文,并将控制权返回给shell,它会继续等待你的输入。

image-20230526181446339

进程这个概念需要硬件和操作系统软件的紧密合作来实现。虽然它为我们提供了一个看似简单的运行环境,但实际上,操作系统和硬件背后的复杂性被隐藏了起来。另外,由于进程的并发执行,时间的概念被打乱了,导致很难获取准确和可重复的运行时间测量。

线程

线程是一个进程内的执行单元,每个线程都在进程的上下文中运行,并共享同一套代码和全局数据。相比于多进程,多线程更易于数据共享,也更为高效。特别是在需要并行处理的场景,如网络服务器,线程就显得尤为重要。

虚拟存储器

虚拟存储器是另一个操作系统的重要抽象。它为每个进程提供了一种假象,即每个进程都在独占地使用主存。每个进程看到的是一致的存储空间,称之为虚拟地址空间。例如,在Linux系统中,虚拟地址空间被分为两部分:底部的四分之三存放用户进程的代码和数据,顶部的四分之一则预留给操作系统的代码和数据。这样的设计使得每个进程都有一致的视角,似乎拥有了整个主存。

image-20230526181957252

虚拟地址空间由多个区组成,每个区都有特定的功能:

  1. 程序代码和数据区:从一个固定的地址开始,包含了程序的代码和与C全局变量相对应的数据区。这些区域的内容直接由可执行目标文件初始化。
  2. :紧接在代码和数据区之后的是运行时堆。与代码和数据区的大小在进程开始时就确定不同,堆可以在运行时动态地扩展和收缩,这主要是通过调用如malloc和free这样的C标准库函数来实现的。
  3. 共享库:在虚拟地址空间的中间部分是存放共享库的代码和数据的区域,如C标准库和数学库等。共享库是一个非常强大的概念,允许多个应用程序共享同一份库的副本,从而节省内存空间。
  4. :位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。像堆一样,用户栈在程序执行过程中可以动态地扩展和收缩。每次函数调用时,栈就会增长;每次函数返回时,栈就会收缩。
  5. 内核虚拟存储器:在虚拟地址空间的顶部四分之一部分是预留给内核的,内核是操作系统总是驻留在内存中的部分。应用程序不能直接读写这个区域的内容,或直接调用内核代码定义的函数。

虚拟存储器的运作需要硬件和操作系统软件间的精密复杂的互相合作。基本思想是把一个进程虚拟存储器的内容存储在磁盘上,然后用主存作为磁盘的高速缓存。

网络通信和其他系统级概念

网络是现代计算机系统的核心组成部分,它使得不同的计算机系统可以彼此进行通信和数据交换。从单个系统的视角来看,网络可以被看作是另一种I/O设备,系统可以从主存中复制数据到网络适配器,然后数据通过网络到达另一台机器。相反,系统也可以从网络中读取数据,将数据复制到主存中。

我们可以通过telnet应用在远程主机上运行程序。假设我们在本地主机上的telnet客户端连接到远程主机的telnet服务器,登录并运行shell,然后在shell中输入命令来运行程序。接下来,远程shell将运行程序并将输出返回给telnet服务器,最后,telnet服务器通过网络将输出传输到telnet客户端,客户端将输出显示在我们的本地终端上。

image-20230526182852458

这种在客户端和服务器之间进行交互的方式在所有网络应用中都是非常典型的。我们可以利用这种机制来创建各种网络应用程序,如Web服务器等。

总体来说,网络为计算机系统提供了与其他系统通信的能力,使得数据可以在不同的系统之间传输。这为许多网络应用提供了基础,也极大地提高了计算机系统的功能性和灵活性。

系统之间的网络通信

互联网是一个全球性的计算机网络,它使用TCP/IP协议族来连接全球各地的计算机。在网络通信中,数据被分解为小的数据包,然后通过网络发送到目的地。每个数据包都包含源地址和目标地址,这样它就可以被正确地路由到目的地。

计算机通过网络交换信息的基本过程是这样的:首先,源计算机的操作系统将要发送的信息分解为一个个数据包,并添加TCP/IP头信息,然后通过NIC发送到网络。这些数据包通过网络到达目的地后,目标计算机的操作系统将它们重新组合成原始信息。

在互联网中,还有一些特定的服务和应用程序,如HTTP(用于网页传输)、FTP(用于文件传输)、SMTP(用于电子邮件传输)等,它们都是建立在TCP/IP协议之上的,用来执行特定的网络通信任务。

并发和并行

并发是指一个系统能够处理多个任务的能力。这并不意味着它们会同时运行;而是意味着在同一时间段内,这些任务都在进展,但可能会被分解为更小的子任务,并交替执行。并发常常出现在单核处理器的系统中,通过任务切换(task switching)和时间分片(time slicing)技术,使得单个处理器看起来像是在同时处理多个任务。

并行则是指在同一时刻执行多个任务的能力。这通常需要多个处理器或者多核处理器的支持。在并行计算中,任务会被分解为一些可以独立并行执行的小任务,然后在多个处理器或核心上同时运行。

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

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

相关文章

智慧农业大数据平台的“智慧”体现在哪些方面?

看到农业两个字,我们先想起来的是什么?是耕种呢,还是灌溉? 其实,种植业只是狭义上的农业,从广义上讲,农业指包括种植业、林业、畜牧业、渔业、副业五种产业形式。所以,山东仁科智慧…

电脑如何查找重复文件?轻松揪出它!

电脑如何查找重复文件?小编每天要接触各种文档、图片等资料,很多时候下载了一些图片后,我根本记不住,下次看到不错的图片,我又会下载下来,结果就是和之前下载的图片是一样的内容。下载的重复文件多了&#…

如何处理SAP错误:不可能为条目1000 UMB 1000 MR1 2004确立帐户 (附:ChatGPT 如何处理这个问题的?)

SAP财务用户在MR22 进行修改物料价格时,出现了一个报错。报错如下:“不可能为条目1000 UMB 1000 MR1 2004确立帐户”。 Account determination for entry 1000 UMB 1000 MR2 2004 not possible Message No. M8147 Diagnosis The system did not find …

Web安全:代码执行漏洞 测试(防止 黑客利用此漏洞.)

Web安全:代码执行漏洞 测试 攻击者可以通过构造恶意输入来欺骗应用程序执行恶意代码。这种漏洞通常出现在应用程序中使用动态语言(如 PHP、Python、Ruby 等)编写的代码中,因为这些语言允许在运行时动态执行代码。攻击者可以通过构造特定的输入来欺骗应用…

利用canvas画一个时钟

利用canvas画一个时钟 详细步骤 画中心圆点和刻度线 画时针 画分针 画秒针 下面是整体代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body&g…

【亲测有效】idea部署jrebel插件

idea部署jrebel插件 1.背景 最近在维护tomcat项目&#xff0c;工程修改代码后需要rebuild才能更新class文件&#xff0c;进而运行生效。 同事介绍jrebel可以实现热部署&#xff0c;于是接入使用。 2.简介 JRebel是一套JavaEE开发工具。 Jrebel 可快速实现热部署&#xff0c…

尚硅谷Docker实战教程-笔记02【安装docker、镜像加速器配置】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

c++学习——构造函数和析构函数

当对象产生时&#xff0c;必须初始化成员变量&#xff0c;当对象销毁前&#xff0c;必须清理对象. 初始化用构造函数&#xff0c;清理用析构函数&#xff0c;这两个函数是编译器调用.初始化的作用和析构函数的作用 构造函数点和析构函数的注意 构造函数和析构函数的权限必须是公…

Redis基本介绍 五大数据类型

Redis基本介绍 redis-benchmark性能测试工具 测试如&#xff1a; redis-benchmark -h localhost -p 6379 -c 100 -n 10000000 redis默认有16个数据库 切换数据库和查看数据库大小 &#xff1a; 设置值和取值&#xff1a; >set name chunling >get name >keys…

python+django网上美食菜品订餐系统的设计与实现vue

随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;好吃网线上订餐系统当然也不能排除在外&#xff0c;从美食类型、美食信息的统计和分析&#xff0c;在过程中会产生大量的、各种…

与创新者同行,共享数字时代创新红利-通付盾城市沙龙圆满举行!

5月25日&#xff0c;通付盾城市沙龙在深圳圆满举行。通付盾与多家企业分享了数字安全创新实践-“WAAP解决方案、GPT助力APP合规开发解决方案、UIAM解决方案”&#xff0c;与合作伙伴共话生态&#xff0c;共同起航&#xff0c;共创未来&#xff01; 会上&#xff0c;通付盾面向各…

基于java的篮球论坛系统的设计与实现

背景 过网上调查和搜集数据,我们可以发现篮球论坛管理方面的系统在中并不是相当普及,在篮球论坛管理方面的可以有许多改进。实际上如今信息化成为一个未来的趋势或者可以说在当前现代化的城市典范中,信息化已经成为主流,开发一个篮球论坛系统一方面的可能会更合乎时宜,另一方面…

springboot+vue财务管理系统(java项目源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的财务管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&a…

opencv_c++学习(二十四)

一、积分图像 积分图像是对原图像进行积分操作的算法。如上图左所示&#xff0c;不同颜色代表不同区域。当我们想求取一个像素点的积分值时&#xff0c;我们需要求取该点左上方区域的数据之和&#xff0c;如P0的积分值是浅蓝色区域的数据之和。 P1的积分值为蓝色和橙色区域的数…

SSM框架学习-SSM整合(整合配置、功能模块开发、接口测试)

1. 整合配置 首先创建maven模块&#xff0c;导入相应的坐标 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency&g…

计算机是如何工作的??(多进程编程)

目录 多进程编程进程调度组织进程调度 本篇博客的重点知识是进程进程的调度 操作系统&#xff1a;像是windows&#xff0c;android&#xff0c;iOS等都是常见的操作系统 下面是关于计算机在底层工作的原理流程图 在操作系统层面&#xff1a; 对上&#xff0c;要给软件提供稳…

《低代码指南》——低代码维格云能源行业解决方案

目录 典型场景介绍: 一、能源资产管理 二、碳核查 三、配电运营 总 结: 从业界实际情况来看,流程建设本身是一个对业务现实进行抽象的过程,这个过程即使不考虑软件开发的门槛,对于很多客户而言也是个涉及较长周期的复杂工作,往往需要咨询专家或专业公司帮助其建设内…

【Python】函数式编程例子

知识目录 一、写在前面&#x1f37a;二、七段数码管显示倒计时✨三、斐波那契序列&#x1f37a;四、总结撒花&#x1f60a; 一、写在前面&#x1f37a; 大家好&#xff01;我是初心&#xff0c;今天我们回到了Python从入门到精通。 今天跟大家分享的文章是 Python中函数的使用…

sentinel原理分析及源码剖析

sentinel功能 sentinel功能可参考官网 可以从sentinel的dashboard中了解到sentinel的核心功能包括 流控规则 阈值类型&#xff1a;QPS、并发线程数流控模式&#xff1a;直接&#xff0c;关联&#xff0c;链路流控效果&#xff1a;快速失败&#xff08;滑动时间窗算法Default…

分享Python采集99个焦点图,总有一款适合您

分享Python采集99个焦点图&#xff0c;总有一款适合您 Python采集的99个焦点图下载链接&#xff1a;https://pan.baidu.com/s/1887LXr2ovCAw-Bp7PuM66g?pwdbyx4 提取码&#xff1a;byx4 原创Jquery焦点图片切换效果 自定义大小&#xff0c;使用方 jquery立体式缩略图焦点图…