计算机工作原理解析和解剖(基础版)
我们会从软件⼯程师的⻆度解释计算机是如何⼯作的,我们的主要⽬标既不是期待
⼤家可以造出⾃⼰的计算机,也不是介绍如何编程,⽽是希望让⼤家了解计算机的核⼼⼯作机制后,打破计算机的神秘感,并且有利于理解我们平时编程时的⼀些⾏为、动作的历史渊源。
1.计算机是如何工作的
计算机发展史:
计算的需求在⼈类的历史中是⼴泛存在的,发展⼤体经历了从⼀般计算⼯具到机械计算机到⽬前的电⼦计算机的发展历程。
⼈类对计算的需求,驱动我们不断的发明、改善计算机。⽬前这个时代是“电⼦计算机”的时代,发
展的潮流是:更快速、更稳定、更微型。计算机的以后将如何发展,期待⼤家的努⼒。
冯诺依曼体系(Von?Neumann?Architecture)
现代的计算机,,⼤多遵守冯诺依曼体系结构

图有点丑哈哈哈,手残画师嘻嘻
• CPU?中央处理器:进⾏算术运算和逻辑判断.
• 存储器:分为外存和内存,?⽤于存储数据(使⽤⼆进制⽅式存储)
• 输⼊设备:⽤⼾给计算机发号施令的设备.
• 输出设备:计算机个⽤⼾汇报结果的设备.
针对存储空间
硬盘>内存>>CPU
针对数据访问速度
CPU>>内存>硬盘
cpu基本工作流程
-
取指令阶段:CPU从内存中取出下一条指令,并将其存储在指令寄存器中。
-
解码指令阶段:CPU对取出的指令进行解码,确定指令的操作类型和操作数。
-
执行指令阶段:CPU根据解码后的指令类型执行相应的操作,可能涉及算术运算、逻辑运算、数据传输等。
-
访存阶段:如果执行的指令需要访问内存中的数据,CPU会将数据地址发送到内存控制器,然后从内存中读取或写入数据。
-
写回阶段:如果执行的指令产生了结果,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. 信号
相关文章:
计算机工作原理解析和解剖(基础版)
我们会从软件⼯程师的⻆度解释计算机是如何⼯作的,我们的主要⽬标既不是期待 ⼤家可以造出⾃⼰的计算机,也不是介绍如何编程,⽽是希望让⼤家了解计算机的核⼼⼯作机制后,打破计算机的神秘感,并且有利于理解我们平时编程…...
外网ssh远程连接服务器
文章目录 外网ssh远程连接服务器一、前言二、配置流程1. 在服务器上安装[cpolar](https://www.cpolar.com/)客户端2. 查看版本号,有正常显示版本号即为安装成功3. token认证4. 简单穿透测试5. 向系统添加服务6. 启动cpolar服务7. 查看服务状态8. 登录后台࿰…...
滴滴基于 Ray 的 XGBoost 大规模分布式训练实践
背景介绍 作为机器学习模型的核心代表,XGBoost 在滴滴众多策略算法业务场景中发挥着至关重要的作用。因此,保障并持续提升 XGBoost 模型的离线训练及在线推理稳定性一直是机器学习平台的重点工作。同时,面对多样化的业务场景定制需求和数据规…...
k8s从入门到实践
k8s从入门到实践 介绍 Kubernetes(简称k8s)和Docker Swarm是两个流行的容器编排工具,它们都可以帮助用户管理和部署分布式应用,尤其是基于容器的应用。以下是两者的主要特点和对比: Kubernetes (k8s): 开…...
Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件
一、参考资料 stackoverflow qt - How to generate .sln/.vcproj using qmake - Stack Overflowhttps://stackoverflow.com/questions/2339832/how-to-generate-sln-vcproj-using-qmake?answertabtrending#tab-topqt - 如何使用 qmake 生成 .sln/.vcproj - IT工具网 (coder.wo…...
金蝶云星空 ServiceGateway RCE漏洞复现
0x01 产品简介 金蝶云星空是一款云端企业资源管理(ERP)软件,为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云星空聚焦多组织,多利润中心的大中型企业,以 “开放、标准、社交”三大特性为数字经济时代的企业提供开放的 ERP 云平台。服务涵盖:财…...
二叉树的最大深度[简单]
优质博文:IT-BLOG-CN 一、题目 给定一个二叉树root,返回其最大深度。 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2:…...
[Redis]不同系统间安装redis服务器
日常服务器端开发,消息队列等需求,免不了用到redis,搭建一个redis服务器,方便开发和测试,我们从以下三类系统来说明下: 安装 Redis 服务器的过程因操作系统而异。以下是在常见的 Linux 发行版(…...
Unity之动画和角色控制
目录 📕 一、动画 1.创建最简单的动画 2.动画控制器 📕二、把动画和角色控制相结合 📕三、实现实例 3.1 鼠标控制角色视角旋转 3.2 拖尾效果 📕四、混合动画 最近学到动画了,顺便把之前创建的地形࿰…...
C语言库函数实现字符串转大小写
目录 引言 代码 引言 处理字符串时,除了将字符串中的所有大写字母转换为小写字母外,我们还可以利用其他相关函数进行更丰富的文本操作。本文将以一段使用isupper()、tolower()函数实现字符串全转小写的C语言程序为例,详细介绍这两个函数以及…...
hcip----ospf
一:动态路由协议 IGP 协议---RIP OSPF ISIS EIGRP EGP--EGP ---BGP 三个角度的评判一款动态路由协议的优劣 RIP --request response 1.选路--选路依据不好,可能出现环路 2.收敛速度--计时器 3.占用资源-- RIPV1 RIPV2 RIPNG--ipv6 OSPFV1 OSPFV…...
vue中如何写过滤器
全局注册 (可以在main.js中进行全局注册 vue.fifler(test’,function(v){return v0? ‘终止’:v1?进行中:异常 })在组件页面使用 <view>{{state|test}}</view> <script> export default {data(){return {state: 1// state 1 进行中…...
c语言-文件的读写操作(下)
文章目录 前言一、文件的随机读写1.1 fseek()1.2 ftell()1.3 rewind() 总结 前言 本篇文章介绍c语言中文件的随机读写 一、文件的随机读写 1.1 fseek() fseek()函数的作用是根据文件指针的位置和偏移量定位文件指针 int fseek ( FILE * stream, long int offset, int origi…...
android学习笔记----SQLite数据库
用SQLite语句执行: 首先看到界面: 代码如下: MainActivity.java import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.EditTe…...
开发知识点-Flutter移动应用开发
支持 安卓 IOS Android 鸿蒙 第一章dart基础章节介绍 移动电商——Flutter-广告Banner组件制作 移动电商——Flutter实战课程介绍 Flutter实例——路由跳转的动画效果...
视频尺寸魔方:分层遮掩3D扩散模型在视频尺寸延展的应用
▐ 摘要 视频延展(Video Outpainting)是对视频的边界进行扩展的任务。与图像延展不同,视频延展需要考虑到填充区域的时序一致性,这使得问题更具挑战性。在本文中,我们介绍了一个新颖的基于扩散模型的视频尺寸延展方法——分层遮掩3D扩散模型(…...
openssl3.2/test/certs - 061 - other@good.org not permitted by CA1
文章目录 openssl3.2/test/certs - 061 - othergood.org not permitted by CA1概述笔记END openssl3.2/test/certs - 061 - othergood.org not permitted by CA1 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_git_prj\study\openSS…...
如何实现无公网ip远程访问本地websocket服务端【内网穿透】
文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…...
pip清华源怎么换回来
怎么临时使用清华源 pip install scrapy -i https://pypi.Python.org/simple/怎么永久换源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple修改清华源后怎么换回来 删掉/home/XXX/.config/pip/pip.conf...
[Go]认识Beego框架
对比Gin的简洁,自己之前基于Gin撸了一个架子,确实比beego目录看着舒服多了,不过最近接触到beego的项目,beego的bee工具使用还是很方便,来简单梳理下细节; Beego是一个开源的Go语言Web应用框架,…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
