02. 计算机的组成

news2024/9/26 3:25:03

1. 从手机和电脑开始

要是20年前,大家对于计算机还很陌生,但是现在手机和电脑已经非常普及了,即使对于偏远地区可能有人没有接触过电脑,但是手机肯定都用过。其实手机和电脑都是计算机!

1.1 手机的8G+256G是什么意思?

我们口头上说的8G和256G都是内存,但其实两者有本质的区别。

8GB表示的是手机的运行内存,256G表示的是手机的存储空间(在电脑上叫做硬盘或磁盘)。

这里G的单位是Byte(字节)。

我们这里统一将8G叫做内存,256G叫做硬盘

1.2 硬盘是干啥用的?

我们从应用市场下载的应用程序比如微信、QQ、王者荣耀这些,都是安装在硬盘中的,包括手机上的照片、文件、电影都是存放在硬盘中。

硬盘就是存放数据的,而且是永久存放的。

1.3 内存是干啥用的?

当我们点击手机桌面上的王者荣耀图标启动应用时,内存就派上用场了!启动应用时会将存储在硬盘的程序复制(加载)到内存中,程序只有在内存中才能被运行。

程序只有被加载到内存中才能被运行,当程序退出后会释放它在内存中空间。所以当同时打开多个应用,内存可能就不够用,应用就会卡顿。

1.4 8G+256G和12G+512G区别在哪?

  • 存储容量:前者的存储容量是256GB,而后者则是512GB。因此,后者的存储空间更大,可以存储更多的个人文件、照片、视频等文件。

  • 运行内存:12GB的内存比8GB的内存更大,可以同时打开更多的软件,更快地切换应用程序,以及更流畅的使用软件。

所以为了可以同时运行更多程序要购买更大内存的手机。 为了存更多数据、安装更多应用要购买更大存储(硬盘)的手机。

1.5 为什么要快的CPU?

处理器(CPU,中央处理器).

上面我们说程序是从硬盘加载到内存中才能运行,那么程序是怎么运行的?

程序在内存中是通过CPU来运行的,程序在内存中是一条一条的指令,CPU通过解释执行内存中的一条条指令来运行程序。

CPU越好执行指令的速度越快。

手机处理器有华为麒麟处理器、苹果A系列处理器、高通骁龙、联发科天玑等。

电脑处理器有Intel类i3\i5\i7\i9,AMD类的R3\R5\R7\R9等。

1.6 你的手机为什么会卡?

  1. 内存不够:所以当玩王者荣耀的时候要把其它应用都关了,可以获得更好的游戏体验!
  2. CPU运算速度慢,一些应用比如游戏需要的计算量很大,就需要运行速度快的CPU。

2. 计算机的组成

  • 处理器(CPU):处理器(CPU)是计算机的大脑,负责执行和运算计算机程序的指令。它可以像大脑一样思考、处理信息。比如,当你在电脑上打开一个游戏,CPU就会负责计算出游戏中的动作和图像。

  • 内存:内存是计算机的临时存储器,可以存储你正在使用的文件和程序。就像人的记忆,当你在学习数学时,脑子会临时存储数学公式和计算结果,帮助你更好地解题。

  • 输入设备:输入设备是把信息输入到计算机中的工具,比如键盘、鼠标和触摸屏。比如,当你在键盘上敲字时,输入设备会把你的字母和数字输入到电脑中。

  • 输出设备:输出设备是把计算机处理后的信息展示给我们的工具,比如显示屏、耳机和打印机。比如,当你玩游戏时,输出设备会把游戏的图像和声音展示给你。

  • 存储设备:存储设备是用来永久保存文件和数据的地方,比如硬盘、U盘和光盘。就像小朋友的玩具箱一样,你可以把你最喜欢的玩具放在里面,保存在存储设备中,下次想玩时还能找到它们。

3. 处理器(CPU)

3.1 寄存器

寄存器用于临时存储指令和数据。它们是CPU运行时最快的存储器,因此通常用于存储需要频繁访问的数据(它比内存要快的多)

CPU中有多个寄存器(几十个到上百个左右),其中有两个最重要的寄存器,即累加器(Accumulator)和程序计数器(Program Counter)。

累加器是CPU内部最重要的寄存器之一,通常用于存储算术运算结果。比如,如果我们要计算1 + 2,CPU通过将1存储到累加器中,然后将2添加到累加器中来计算结果。

程序计数器是另一个重要的寄存器,用于存储当前执行指令的位置。当CPU执行完一条指令时,程序计数器会自动加上指令的长度,指向下一条指令的位置。这样,CPU就可以依次执行多条指令。

3.2 控制器

控制器负责控制计算机的运行。它可以解析指令,对CPU中的其他部分发出命令,从而执行程序中的指令。

控制器的工作原理类似于指挥家。它发送指令集,并监视计算机的状态和进程。例如,如果控制器要求从内存中读取数据,它会向内存控制器发送指令,并控制数据的流动。

另一个控制器的主要任务是控制数据的流动。比如,控制器可以决定哪些数据要从内存中读取到寄存器中、哪些数据要从寄存器中传输到计算器中执行运算等。

3.3 运算器

运算器负责进行数值运算。CPU通过运算器计算各种算法和逻辑运算,从而实现计算机的数据处理功能。

运算器通常由算术逻辑单元(ALU)、加法器和乘法器组成。其中,算术逻辑单元执行算术运算和逻辑操作;加法器用于加法运算;乘法器用于乘法运算等。

例如,如果我们要计算1 + 2的值,计算机首先将1和2从内存中加载到寄存器中,然后将它们传递到运算器中。运算器通过加法器将这两个值相加,最后将结果存储回寄存器中。

3.4 时钟

时钟是CPU内部的主要时序源。它提供一个基准信号,告诉CPU什么时候执行下一条指令。在每个时钟周期中,CPU执行一个指令,并更新运行状态。

时钟按照固定的速率运行,比如,一个2GHz时钟可以在每秒钟运行2亿次。通过时钟,CPU可以保证每个时钟周期是相同长度的,并确保数据在正确的时间内被处理。

因此,对于CPU来说,时钟速率是一个非常重要的参数。时钟速率越高,CPU每秒钟可以执行的指令就越多,计算机的运行速度也就越快。

寄存器、控制器、运算器和时钟是CPU内部的四个基本部分。它们密切合作,实现了计算机的指令执行和数据处理。比如,寄存器可以暂时存储数据;控制器可以控制进程的流动;运算器可以计算各种算法和逻辑运算;时钟可以提供一个基准信号,保证CPU正确执行指令。

4. 内存

程序员编程就是与内存打交道!

4.1 什么是程序?

了解内存之前先说明什么是程序?程序是由指令数据组成的!

程序运行时,会将硬盘里面的程序复制到内存中。

4.2 内存的结构

1)内存的物理结构

内存的实际样子

内存的示例图

内存中有很多引脚,将VCC和GND连接到电源后,就可以通过电流给其它引脚传递0和1信号。+5V直流电压表示1,0V表示0。

上述内存中的引脚包括

  • VCC和GND:给芯片供电的
  • 地址信号引脚10个 A0~A9
  • 数据信号8个 D0~D7
  • 控制信号 RD读,WR写

A是单词Address的首字母,D是单词Data的首字母,WR是单词Write的缩写,RD是单词Read的缩写。

那么这个内存能存储多少数据呢?

数据信号引脚有D0~D7共八个,表示一次可以输入输出8位(= 1字节)的数据。

地址信号引脚有A0~A9共十个,表示可以指定0000000000~1111111111共1024个地址。而地址用来表示数据的存储场所,因此我们可以得出这个内存IC中可以存储1024个1字节的数据。因为1024 = 1K,所以该内存IC的容量就是1KB。

2)用楼房来理解内存的内部结构

从程序员的角度来看,可以把内存假想成每层都存储着数据的楼房。

内存为1KB时,如下图所示的有1024层的楼房(这里地址的值是从上往下逐渐变大)。每一层存放一个字节,也就是8个二进制位。

3)4GB的内存需要多少位地址引脚?

4GB = 22 * 210 * 210 * 210B = 232B

4GB = 4,294,967,296 B(4GB的楼有四十多亿层)

所以,4GB的内存需要至少32位地址引脚来进行寻址。

4)往内存写入数据

往10000000001地址 写入 01100001数据

  • 给VCC接入+5V,给GND接入0V,也就是给内存通电
  • 地址引脚A0~A9 输入信号10000000001
  • 数据引脚D0~D7 输入信号01100001
  • WR引脚输入信号1,RD引脚输入信号0

5)读取内存中的数据

读取10000000001地址的数据

  • 给VCC接入+5V,给GND接入0V,也就是给内存通电
  • 地址引脚A0~A9 输入信号10000000001
  • WR引脚输入信号0,RD引脚输入信号1
  • D0~D7引脚输出信号01100001,也就是D1、D2、D7有+5V电流流出。

6)C语言的变量

// 定义变量
char a; // 1个字节
short b; // 2个字节
int c; // 4个字节
	
// 给变量赋值
a = 'a';
b = 100;
c = 200;

定义变量的时候会在内存中分配内存空间,如char分配一个字节的空间,short分配连续两个字节的空间,int分配连续四个字节的空间。如下:

7) C语言的指针

刚刚入门编程学习C语言的时候,很多学生无法理解C语言的指针。

通过上述内容你是不是觉得指针很简单。

char *d; 
short *e; 
int *f;	
d = &a;  // 将变量a的地址赋给指针变量d
e = &b;  // 将变量b的地址赋给指针变量e
f = &c;  // 将变量c的地址赋给指针变量f

现在计算机上使用的程序通常都是64位。这种情况下,指针变量的长度也是64位。

定义指针时,我们通常会在变量名前加一个星号(*)。我们知道,d、e、f 都是用来存储64位(8字节)的地址的变量。然而,为什么这里又用来指定char(1字节)、short(2字节)、int(4字节)这些数据类型呢?大家是不是也感到很奇怪?实际上,这些数据类型表示的是从指针存储的地址中一次能够读写的数据字节数。

  • 指针d保存的值就是地址 x+1
  • 指针e保存的值就是地址 x+2
  • 指针f保存的值就是地址 x+4

可以看出指针保存的是数据的首地址,指针类型决定指针一次读写的字节长度。如int *f,指针f一次性读写4个字节。

5. 硬盘

5.1 为什么硬盘叫磁盘

硬盘也叫磁盘,它内部是排列整齐的一个个小磁体。

磁盘上面有“电刷”,磁盘可以转动,“电刷”也可以上下移动,过程中“电刷”会刷过每个小磁体,可以知道磁体是否有磁性,并且电刷会放电来控制小磁体是否有磁性。

“电刷”刷过磁盘中一小段,得到上面排列整齐的小磁体的磁性顺序组合,我们假设有磁性用1表示,无磁性用0表示,假如得到 01100001(8个小磁体),就得到一个字节的数据。

5.2 硬盘的结构

磁盘的物理结构可以分为四个层次:盘片、磁道、扇区、块(或称为“分区”)。

1)盘片

磁盘通常有一个以上的盘片,每个盘片都是一个金属或玻璃制成的圆形碟片,用于存储数据。通常一个盘片有两个磁面,即内圈和外圈。每个磁面上都刻有一些类似于唱片槽的磁道。

2)磁道

磁道是盘片上的一个环形区域,用于存储数据。一个磁盘通常会有几千个磁道,每个磁道都有一个磁道编号,用于唯一标识该磁道。

3)扇区

扇区是磁道上的一个小区域,是磁盘的最小读写单位。一个扇区通常包含512个字节的数据,还包含一些元数据,如校验和、扇区编号等信息。扇区的数量和大小通常是标准化的,例如现在的硬盘通常采用4096字节的扇区大小。

4)块(分区)

块是文件系统使用的一种逻辑单位,也称为分区。它是由连续的扇区组成的,用于存储文件和目录等数据。块的大小根据文件系统不同而不同,常见的有1KB、2KB、4KB等。在磁盘上,每个块都有一个标识符,称为块号。

总体来说,磁盘的结构就是由多个盘片、每个盘片上的多个磁道、每个磁道上的多个扇区、以及一个个由连续扇区组成的块组成的。

6. 最后

本章对计算机的组成进行了深入的分析,涵盖了主要的硬件组成,包括中央处理器、内存、输入输出设备、硬盘以及其他外部设备。虽然以上硬件组成同等重要,但由于程序员平时编程所需直接操作的、最多打交道的却是计算机的内存,因此在讲解这些硬件组成时,对内存进行了最为详细、深入的剖析。

关注微信公众号:“小虎哥的技术博客”,让我们一起成为更优秀的程序员❤️!

文章和代码仓库:

gitee(推荐):https://gitee.com/cunzaizhe/xiaohuge-blog

github:https://github.com/tigerleeli/xiaohuge-blog

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

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

相关文章

2D-2D对极几何中的基本矩阵、本质矩阵和单应矩阵

本文主要参考高翔博士的视觉SLAM十四讲第二版中的7.3章节内容。文章目录 1 对极约束2 本质矩阵E3 单应矩阵 1 对极约束 现在,假设我们从两张图像中得到了一对配对好的特征点,如图7.9所示(假如后面我们有若干对这样的匹配点,根据这…

IDEA打开一个项目时,idea左侧project模式下,不显示项目工程目录的解决方法

在IDEA打开一个一个已有的项目chapter3时,idea左侧project模式下,左侧也没有project按钮,如下问题截图:(ps:项目结构可以显示,但是src等目录不见) 在网上查了一些方法: 1、解决办法…

移动端的概念

【移动端】 1. 什么是移动端 大前端时代: ​ 前端开发涉及的领域越来越多,如:PC端,移动端,小程序,App,甚至是物联网​ 大前端’的大字体现在地位重要,涉及领域众多​ 前后端完全分…

从零开始的Hadoop学习(五)| HDFS概述、shell操作、API操作

1. HDFS 概述 1.1 HDFS 产出背景及定义 1)HDFS 产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切 需要一种系统来管理多台机器上的…

OpenCV(八):图像二值化

目录 1.固定值二值化 2.自适应阈值二值化 3.Android JNI完整代码 1.固定值二值化 固定阈值二值化是OpenCV中一种简单而常用的图像处理技术,用于将图像转换为二值图像。在固定阈值二值化中,像素值根据一个预定义的阈值进行分类,大于阈值的…

OFDM 系统在 AWGN 信道下对不同载波频率偏移 (CFO) 的 BER 灵敏度研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

软件测评国家标准概要总结

软件测试 软件测评是指针对软件功能、性能、用途使用价值等进行的评价和测试; 软件测评主要依靠标准是GB/T 25000.51-2016 系统与软件工程 系统与软件质量要求和评价(SQuaRE) 第51部分:就绪可用软件产品(RUSP&#x…

基于JavaWeb和mysql实现校园订餐前后台管理系统(源码+数据库)

一、项目简介 本项目是一套基于JavaWeb和mysql实现网上书城前后端管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都…

小兔鲜儿---商品分类

目录 准备工作​ 渲染轮播图​ 一级分类​ 获取数据​ Tab 交互​ 二级分类​ 骨架屏​ 准备工作​ 参考效果 商品分类页中的广告位,可复用之前定义的轮播图组件 XtxSwiper。 静态结构 商品分类页静态结构: src/pages/category/category.vue …

Docsify + Gitalk详细配置过程讲解

💖 作者简介:大家好,我是Zeeland,开源建设者与全栈领域优质创作者。📝 CSDN主页:Zeeland🔥📣 我的博客:Zeeland📚 Github主页: Undertone0809 (Zeeland)&…

二进制安全虚拟机Protostar靶场 安装,基础知识讲解,破解STACK ZERO

简介 pwn是ctf比赛的方向之一,也是门槛最高的,学pwn前需要很多知识,这里建议先去在某宝上买一本汇编语言第四版,看完之后学一下python和c语言,python推荐看油管FreeCodeCamp的教程,c语言也是 pwn题目大部…

FastestDet:比yolov5更快!更强!全新设计的超实时Anchor-free目标检测算法(附源代码下载)...

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 计算机视觉研究院专栏 作者:Edison_G 本篇文章转自于知乎——qiuqiuqiu,主要设计了一个新颖的轻量级网络! 代码地…

【多线程】线程安全(重点)

文章目录 1. 观察线程不安全1.1 示例11.2 示例2 2. 线程不安全的原因2.1 修改共享数据2.2 原子性2.3 可见性2.4 顺序性 3. synchronized同步方法3.1 synchronized特性3.1.1 互斥3.1.2 刷新内存3.1.3 可重入 3.2 synchronized使用3.2.1 直接修饰普通方法3.2.2 修饰静态方法3.2.3…

开源照片管理服务LibrePhotos

本文是为了解决网友 赵云遇到的问题,顺便折腾的。虽然软件跑起来了,但是他遇到的问题,超出了老苏的认知。当然最终问题还是得到了解决,不过与 LibrePhotos 无关; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…

uniapp微信小程序用户隐私保护

使用wx.requirePrivacyAuthorize实现微信小程序用户隐私保护。 一、前言 微信小程序官方出了一个公告《关于小程序隐私保护指引设置的公告》。不整的话,后果很多授权无法使用,详见《小程序用户隐私保护指引内容介绍》 。 二、隐私相关设置 1、在 微信…

基于Laravel通用型内容建站企业官网系统源码 可免费商用

是一个基于 Laravel 企业内容建站系统。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,免费且不限制商业使用 2023年08月23日增加了以下12个特性: [新功能] 手机端Banner支持…

视频监控人员行为识别算法

视频监控人员行为识别算法通过opencvpython网络模型框架算法,视频监控人员行为识别算法可以识别和判断员工的行为是否符合规范要求,一旦发现不符合规定的行为,视频监控人员行为识别算法将自动发送告警信息。OpenCV的全称是Open Source Comput…

Java8实战-总结18

Java8实战-总结18 使用流筛选和切片用谓词筛选筛选各异的元素截短流跳过元素 使用流 流让你从外部迭代转向内部迭代。这样&#xff0c;就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了&#xff1a; List<Dish> vegetarianDishes new ArrayList<>…

​​​​​​​嵌入式学习笔记(8)ARM汇编伪指令

伪指令的意义 伪指令不是指令&#xff0c;伪指令和指令的根本区别是经过汇编后不会生成机器码。 伪指令的意义在于指导汇编过程。 伪指令是和具体的汇编器有关的&#xff0c;我们使用gnu工具链&#xff0c;因此学习gnu下的汇编伪指令 gnu汇编中的一些符号 用来做注释。 : …

react利用wangEditor写评论和@功能

先引入wangeditor写评论功能 import React, { useEffect, useState, useRef, forwardRef, useImperativeHandle } from react; import wangeditor/editor/dist/css/style.css; import { Editor, Toolbar } from wangeditor/editor-for-react; import { Button, Card, Col, For…