计算机工作原理解析和解剖(基础版)

我们会从软件⼯程师的⻆度解释计算机是如何⼯作的,我们的主要⽬标既不是期待
⼤家可以造出⾃⼰的计算机,也不是介绍如何编程,⽽是希望让⼤家了解计算机的核⼼⼯作机制后,打破计算机的神秘感,并且有利于理解我们平时编程时的⼀些⾏为、动作的历史渊源。

1.计算机是如何工作的 

计算机发展史:

计算的需求在⼈类的历史中是⼴泛存在的,发展⼤体经历了从⼀般计算⼯具到机械计算机到⽬前的电⼦计算机的发展历程。
⼈类对计算的需求,驱动我们不断的发明、改善计算机。⽬前这个时代是“电⼦计算机”的时代,发
展的潮流是:更快速、更稳定、更微型。计算机的以后将如何发展,期待⼤家的努⼒。

冯诺依曼体系(Von?Neumann?Architecture)

现代的计算机,,⼤多遵守冯诺依曼体系结构

图有点丑哈哈哈,手残画师嘻嘻

• CPU?中央处理器:进⾏算术运算和逻辑判断.
• 存储器:分为外存和内存,?⽤于存储数据(使⽤⼆进制⽅式存储)
• 输⼊设备:⽤⼾给计算机发号施令的设备.
• 输出设备:计算机个⽤⼾汇报结果的设备.

针对存储空间
硬盘>内存>>CPU
针对数据访问速度
CPU>>内存>硬盘

cpu基本工作流程

  1. 取指令阶段:CPU从内存中取出下一条指令,并将其存储在指令寄存器中。

  2. 解码指令阶段:CPU对取出的指令进行解码,确定指令的操作类型和操作数。

  3. 执行指令阶段:CPU根据解码后的指令类型执行相应的操作,可能涉及算术运算、逻辑运算、数据传输等。

  4. 访存阶段:如果执行的指令需要访问内存中的数据,CPU会将数据地址发送到内存控制器,然后从内存中读取或写入数据。

  5. 写回阶段:如果执行的指令产生了结果,CPU会将结果写回到相应的寄存器或内存位置。

这些阶段构成了CPU的基本工作流程,它们不断循环执行,从而实现计算机的各种功能和任务。

然后我们把这⼀节中⼀些要点给⼤家做⼀个⽂字总结:
1. CPU中的PC寄存器,是决定CPU要执⾏哪条指令的关键;
2. 指令是由动作+操作对象组成
3. CPU眼中只有指令,没有其他的概念

编程语言和计算机的关系

我们借助上文讲的cpu和内存来还原下我们熟悉的java语言是如何联系cpu的

程序(program)

所谓程序,就是⼀组指令以及这组指令要处理的数据。狭义上来说,程序对我们来说,通常表现为⼀组⽂件。
程序=指令+指令要处理的数据。

早期的编程语言是需要用二进制来编写的,十分的麻烦,大家会疯掉,所以现在的编程语言就应运而生了

为了提升编程效率,最早创造了汇编语⾔的概念。其实汇编语⾔和机器语⾔(也就是指令)直接是完全⼀⼀对应的,只是相对于0、1这些数字,发明了⼀些帮助⼈类记忆和理解的符号将其对应起来,也就是我们上⾯看到的类似LOAD_A、LOAD_B等。程序员完成编程之后,需要使⽤汇编器(assembler)将汇编语⾔翻译成机器语⾔。
虽然汇编降低了程序员的记忆成本,但要求程序还是必须掌握计算机硬件的所有知识,⽽且随着计算机⼚商越来越多,⼀次编写的程序往往只适⽤于⼀类计算机。这个是远远不够的,所以更为⾼级的语⾔诞⽣了,⾼级语⾔屏蔽了硬件细节,让程序员可以站在更⾼的层⾯上思考⾃⼰的业务。这⾥以C语⾔为例,程序员完成程序的编写之后,需要使⽤编译器(compiler)和连接器(linker)将程序翻译成汇编语⾔,再借助汇编器变成最终的机器语⾔。
借助封装的思想,我们学习编程变得越来越容易。不过有利则有弊,⾼度的抽象,导致很多的程序员把计算机视为⼀个⿊箱,完全⽆法理解⾃⼰的程序是如何⼯作起来的,希望我们⼤家不要做这种程序员。
我们使⽤的Java语⾔相对于C语⾔更⾼级⼀点,但基本抽象原理上没有太⼤的差异,我们暂时就不展开说明了。

注意:高级语言的一条语句statement往往对应很多条指令Instruction.

操作系统(Operating System)

操作系统是⼀组做计算机资源管理的软件的统称。⽬前常⻅的操作系统有:Windows系列、Unix系
列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。

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

1.防止硬件被时空的应用程序滥用;

2.向应用程序提供简单的一致的机制来控制复杂而通常大相径庭的低级硬件设备;

什么是进程/任务??(Process/Task)

每个应⽤程序运⾏于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运⾏,所有的硬件资源都被这个程序在使⽤。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。

进程是操作系统对⼀个正在运⾏的程序的⼀种抽象,换⾔之,可以把进程看做程序的⼀次运⾏过程;
同时,在操作系统内部,进程⼜是操作系统进⾏资源分配的基本单位。

进程控制块抽象(PCB Process Control Block)

计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。在Java语⾔中,我们可以通过类/对象来描述这⼀特征.

// 以下代码是 Java 代码的伪码形式,重在说明,⽆法直接运⾏
class PCB {
// 进程的唯⼀标识 —— pid;
 // 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
// 分配给该资源使⽤的各个资源
// 进度调度信息(留待下⾯讲解)
}

这样,每⼀个?PCB?对象,就代表着⼀个实实在在运⾏着的程序,也就是进程。
操作系统再通过这种数据结构,例如线性表、搜索树等将PCB对象组织起来,⽅便管理时进⾏增删查改的操作.

CPU分配-------进程调度(Process Scheduling)

为了方便讨论和理解,大部分场景下假设是单CPU单核的计算机

操作系统对CPU的资源的分配,采用的是时间模式-----不同的进程在不同的时间段去使用CPU资源.

内存分配---------内存管理(Memory Manage)

操作系统对内存资源的分配,采⽤的是空间模式⸺不同进程使⽤内存中的不同区域,互相之间不会⼲扰。

进程间通信(Inter Process Communication)
如上所述,进程是操作系统进⾏资源分配的最⼩单位,这意味着各个进程互相之间是⽆法感受到对⽅
存在的,这就是操作系统抽象出进程这⼀概念的初衷,这样便带来了进程之间互相具备”隔离性
(Isolation)。
但现代的应⽤,要完成⼀个复杂的业务需求,往往⽆法通过⼀个进程独⽴完成,总是需要进程和进程
进⾏配合地达到应⽤的⽬的,如此,进程之间就需要有进⾏“信息交换“的需求。进程间通信的需求
就应运⽽⽣。
⽬前,主流操作系统提供的进程通信机制有如下:
1. 管道
2. 共享内存
3. ⽂件
4. ⽹络
5. 信号量
6. 信号
 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

心理学大纲

简介 psychology,“psyche”(ψυχή):意为"soul"(灵魂),即对我们灵魂的研究 我的学习的目的 了解人精神世界的模型,人格的形成],作为观察分析他人内心的理论指导,便于我实践了解情绪的机理,…

vite项目创建

1.使用命令创建一个vite项目 npm init vuelatest vite.config.js配置 import { fileURLToPath, URL } from "node:url";import { defineConfig, loadEnv } from "vite"; import vue from "vitejs/plugin-vue"; export default defineConfig(({…

ZK监控方法以及核心指标

文章目录 1. 监控指标采集1.1 zk版本高于3.6.0监控指标采集1.2 zk版本低于3.6.0监控指标采集1.3 配置promethues采集和大盘 2. 核心告警指标3. 参考文章 探讨zk的监控数据采集方式以及需要关注的核心指标,便于日常生产进行监控和巡检。 1. 监控指标采集 3.6.0 版本…

哪吒汽车与经纬恒润合作升级,中央域控+区域域控将于2024年落地

近日,在2024哪吒汽车价值链大会上,哪吒汽车与经纬恒润联合宣布合作升级,就中央域控制器和区域域控制器展开合作,合作成果将在山海平台新一代车型上发布。 哪吒汽车首席技术官戴大力、经纬恒润副总裁李伟 经纬恒润在智能驾驶领域拥…

Java入门高频考查基础知识6-深入挖掘Java集合框架的奇幻世界(45题3.6万字参考答案)

在Java编程语言中,集合(Collection)指的是存储一组对象的容器。Java提供了一套丰富的集合框架,以及包含在Java标准库中的集合类。这些集合类提供了各种功能和操作,可以方便地对一组对象进行管理和操作。 目录 一、集合…

VUE引入DataV报错记录

DataV官网(不支持Vue3):Welcome | DataV 一、按照官网引入后报错 【1】 Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 将…

在docker中配置 Linux ls 配色方案 与 shell 提示符

发行版中默认的配置一般非常合理,但是docker中往往忽略了这些简单的配置,备忘一下 1. ls 配色方案 vim ~/.bashrc 在文件最末尾加入如下一行内容: export LS_COLORS"rs0:di01;34:ln01;36:mh00:pi40;33:so01;35:do01;35:bd40…

在游戏里开公司!基于ERNIE SDK的多智能体游戏应用

在虚拟世界有一座神奇的办公室,当你输入你的创业方向,办公室的智慧打工人们将团结合作,为你的项目勤劳奔走,并在过程中,把日报周报都写好,让你随时掌握项目进度和最终成果!该项目基于ERNIE SDK开…

前端canvas项目实战——简历制作网站(二)——右侧属性栏(颜色)

目录 前言一、效果展示二、实现步骤1. 实现一个自定义的选色板2. 创建属性工厂,为每个对象定制属性3. 为canvas对象注册监听器,点击不同对象时更新属性列表 三、Show u the code后记 前言 上一篇博文中,我们实现了左侧工具栏,通过…

操作系统(3)---操作系统引导

在安装操作系统后,磁盘的分布如下: C盘是这个磁盘的活动分区(又称主分区),安装了操作系统 开机过程如下: 1.计算机的主存由RAM和ROM组成,RAM关机数据消失,而ROM(Basic In…

swagger2 和 knife4j 整合

swagger整合knife4j 导入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version></dependency>引入配置 我们自己写一个配置类也好,我这里写…

iframe框架使用

一、什么是iframe框架 通俗讲就是将一个页面嵌入另一个页面&#xff0c;可以是本地的html,jsp也可以是网址如baidu.com 二、怎么用&#xff1f; <iframe name"uploadPage" src"/uploadImg.html" width"100%" height"50" marginh…

Rollup:打包 TypeScript - React 组件库

调用浏览器摄像头拍照组件 1、前提1、安装依赖2、添加 rollup.config.js 配置3、修改 package.json3.1 添加打包命令3.2 添加组件入口3.3 添加组件声明入口3.4 浏览器支持 1、前提 1.1 通过 create-react-app take-photo --template 创建前端应用 1.2 添加组件 TakePhoto (拍照…

磺化-Cy5-谷氨酰胺,Sulfo Cyanine5 Glutamine,被广泛应用于生物医学研究中

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;磺化-Cy5-谷氨酰胺&#xff0c;Sulfo Cyanine5 Glutamine&#xff0c;Sulfo Cy5 Glutamine 一、基本信息 产品简介&#xff1a;Sulfo Cyanine5 Glutamine作为一种荧光标记物&#xff0c;被广泛应用于生物医学研究中…

Android开发修炼之路——(一)Android App开发基础-1

本文介绍基于Android系统的App开发常识&#xff0c;包括以下几个方面&#xff1a;App开发与其他软件开发有什么不一样&#xff0c;App工程是怎样的组织结构又是怎样配置的&#xff0c;App开发的前后端分离设计是如何运作实现的&#xff0c;App的活动页面是如何创建又是如何跳转…

【C++修炼秘籍】List深度剖析

【C修炼秘籍】STL-List ☀️心有所向&#xff0c;日复一日&#xff0c;必有精进 ☀️专栏《C修炼秘籍》 ☀️作者&#xff1a;早凉 ☀️如果有错误&#xff0c;烦请指正&#xff0c;如有疑问可私信联系&#xff1b; 目录 【C修炼秘籍】STL-List 文章目录 前言 一、list介绍…

three.js中Meshline库的使用

three.js中Meshline的使用 库的地址为什么要使用MeshLine,three.js内置的线不好用吗?MeshLine入门MeshLine的深入思考样条曲线一个问题 库的地址 https://github.com/spite/THREE.MeshLine?tabreadme-ov-file 为什么要使用MeshLine,three.js内置的线不好用吗? 确实不好用,…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-Tag标签管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

2023年CSDN年底总结-独立开源创作者第一年

2023年最大的变化&#xff0c;就是出来创业&#xff0c;当独立开源创作者&#xff0c;这一年发起SolidUI开源项目&#xff0c;把知乎重新开始运营起来。CSDN粉丝破万&#xff0c;CSDN博客专家和AI领域创作者。 2023年年度关键词&#xff1a;创业 https://github.com/CloudOrc…

HCIP:三层架构

配置r1 配置r2 给sw1在vlanif1上配地址&#xff0c;并且ping 23.1.1.1 可通 给sw2配地址 在sw1上做汇总 在sw2上做汇总 在sw1上启动 在sw2上启动 在sw1上启动vlan 在sw2上启动vlan 在sw1上给接口配置vlan 在sw2上给接口配置vlan 在sw3上划分vlan 在sw4上划分vlan 给sw5划分vlan…