计算机工作原理(程序猿必备的计算机常识)

目录

  • 一、计算机工作原理
    • 1.冯诺依曼体系
    • 2. CPU执行指令的过程
  • 二、操作系统
  • 三、进程的概念
  • 四、进程的管理
  • 五、进程的调度

一、计算机工作原理

1.冯诺依曼体系

现在的计算机大多都遵循冯诺依曼体系结构
在这里插入图片描述

CPU: 中央处理器,进行算术运算和逻辑判断,一个计算机中最核心的部分

衡量CPU的重要指标(当然远远不止这两个啦):

  1. 核心数:可以简单理解为一个核就是一个人干活,多核就是多个人干活
  2. 频率:CPU的运算速度,可以简单理解为一秒钟执行的指令个数

这两个值越高说明CPU越好

存储器:

  • 内存(咱们平时说的内存、运行内存):存储空间小,访问速度快,成本高,掉电后数据丢失

  • 外存(硬盘,软盘,光盘,U盘):存储空间大,访问速度慢,成本低,掉电后数据保留

输入设备: 用户给计算机发号施令的设备,如鼠标、键盘等

输出设备: 计算机给用户汇报结果的设备,如显示屏等

存储空间大小:硬盘>内存>CPU

数据访问速度:CPU>>内存>硬盘

2. CPU执行指令的过程

指令相当于你告诉计算机做什么,指令表简化版本

指令功能opcode操作的地址或寄存器
LOAD_A从RAM(内存)的指定地址,将数据加载到寄存器A中0010RAM(内存)地址(4bit)
LOAD_B从RAM(内存)的指定地址,将数据加载到寄存器B中0001RAM(内存)地址(4bit)
STORE_A将数据从寄存器A中写入指定地址中0100RAM(内存)地址(4bit)
ADD计算两个寄存器数据的和,并将结果放在第二个寄存器中10002位寄存器ID、2位寄存器ID

指令一共有8个bit位,前4位opcode表示操作码,后4位表示操作数也就是要操作的地址或者寄存器。

关于CPU的寄存器:

我们的计算机存储数据主要是依靠内存和硬盘,而CPU在进行运算的时候,首先会把数据从内存中读取到CPU中的寄存器当中,寄存器就是CPU内部存储数据的部分,寄存器的存储空间比内存小,访问速度比内存快,成本高,断电后数据会丢失。

CPU执行指令的过程:

  1. 读取指令:CPU从内存中读取到指定内容,将指令保存到专门的寄存器中
  2. 解析指令:对照指令表,解析指令要执行的操作和对应的操作数
  3. 执行指令:执行指令对应的操作

运行可执行文件(exe)时,操作系统会把exe文件加载到内存中,而exe文件中会包含程序运行的指令和数据
CPU中存在着一个特殊的寄存器:程序计数器,计数器保存了接下来要从哪个内存开始执行指令(初始值在exe文件被加载到内存中就会自动设置好),计数器初始值为0,开始时从0号地址开始执行指令,每执行完一次指令,计数器默认+1,但是遇到跳转类语句(函数调用、if语句、while语句等),会被设为其他值
举个例子(简略版):有一个程序的内存信息如下

地址数据
000101110
100011111
210000100
301001101
400000000
500000000
600000000
700000000
800000000
900000000
1000000000
1100000000
1200000000
1300000000
1400000011
1500001110

步骤:
1)读取指令:程序计数器为0,读取0号内存地址的内容,

2)解析指令:操作码为0010,操作数为1110,对照指令表为LOAD_A,也就是将1110(10进制为14)这个地址的数据,读取到寄存器A当中

3)执行指令:把14地址的内存的数据读取出来,放到寄存器A中,如图:
在这里插入图片描述

执行完毕,程序计数器+1,程序计数器的值变为1,

继续执行地址为1的指令

1)读取指令:读取地址为1的指令

2)解析指令:操作码0001, 操作数1111(二进制为15),对照指令表为LOAD_B,也就是将地址为1111的内存中的数据加载到寄存器B中

3)执行指令:将地址为1111的内存中的数据加载到寄存器B中,如图
在这里插入图片描述

程序计数器+1,变成2

执行地址为2的指令:

1)读取指令:读取地址为2的指令

2)解析指令:操作码1000, 操作数0100(二进制为15),对照指令表为ADD,此时操作数分成两部分,表示两个寄存器00表示寄存器A,01表示寄存器B

3)执行指令:3+14=17,将17存入寄存器B中,如图
在这里插入图片描述

计数器+1->3

执行地址为3的指令:

1)读取指令:读取地址为3的指令

2)解析指令:操作码0100, 操作数1101(二进制为15),对照指令表为SOTRE_A

3)执行指令:将寄存器A的数据(00010001)写入到地址1101中

计数器+1->4

地址为4的数据为全0,程序结束

二、操作系统

操作系统 = 内核+配套的应用程序

常见的操作系统:Windows、Linux、MacOS、Android、IOS

内核的功能就是:

1、管理硬件设备:硬件厂商会提供相应的驱动程序,操作系统通过驱动程序间接操作硬件设备

2、给软件提供稳定的运行环境,现在的操作系统上一般会同时运行很多程序,操作系统会确保当某个程序出问题了,不会影响别的程序执行(例如,你在写代码正在听网易云音乐,当你的代码出bug了,你的网易云音乐不会停止)

操作系统会给应用程序提供API(接口),让应用程序调用,完成不同的功能

三、进程的概念

进程process(也叫任务task),就是正在执行的应用程序

应用程序有两种状态:

1、未运行:此时是一个躺在硬盘上的exe文件

2、运行中:exe文件会被加载到内存中,并且cpu执行了里面的指令

任务资源管理器中可以查看:
在这里插入图片描述

执行进程里的指令需要硬件资源,如下
在这里插入图片描述

进程是操作系统进行资源分配的基本单位。

四、进程的管理

简单版本理解:

两个方面:

1、描述:通过C语言的结构体或者C++、Java语言中的类,把一个进程的各种属性描述出来

2、组织:通过某些数据结构(比如链表),把上面的结构体一个一个串起来,并进一步的进行各种增删查改

创建一个进程,就相当于创建了一个结构体,并且插入到链表中;销毁(结束)进程也就是把该进程从链表上删除;查看进程,就是在遍历链表

结构体中包含的关键内容

  1. PID 进程的标识符:同一时刻,一台机器上一个PID就表示了一个进程,一台机器上PID不会重复,操作系统可以通过PID找到对应的进程
  2. 一组内存指针:通过这些指针,可以知道进程的指令和数据在哪里(操作系统运行一个可执行程序时,会把exe文件中的指令和数据加载到内存中,这些指针保存着这些地址)
  3. 文件描述符表(顺序表/数组):描述了进程打开了硬盘中的哪些文件
  4. 进程状态
  5. 进程优先级
  6. 进程上下文
  7. 进程的记账信息

以上4、5、6、7共同决定了进程的调度,我们单独下文介绍

五、进程的调度

计算机同时存在多个要执行的进程,CPU的每个核心可以执行一个进程(也就是执行里面的指令),但是一台机器CPU拥有的核心数量有限,但是却要执行几乎上百个进程,怎么办?

进程调度解决了以上问题:分时复用

某个时刻CPU运行进程1(其他进程先等着),运行一段时间后,CPU去运行进程2,过一会又运行进程3,以此类推,因为CPU运算速度快,上述切换的速度也快,我们看着就像是多个进程在同时执行,这也叫并发执行

多核心的CPU每个核心之间微观上也能同时执行不同的进程,叫并行执行

现在一般把并发和并行统称为并发,并发编程

下面这些属性,就是用于支持并发执行这个调度过程

  1. 进程状态,包括以下5个

    新建状态:当一个进程被创建,但是未分配内存资源,此时这个进程就处于新建状态;

    就绪状态:可以随时被调度到CPU上执行指令的;

    运行状态:CPU正在执行某个进程的指令,这个进程就处于运行状态;

    阻塞状态:无法被调度到CPU上进行执行(因为要进行其他操作,例如写代码时使用Scanner等待用户输入,如果不去输入,程序会一直卡在这);

    终止状态:表示该进程完成了它的执行,与此同时该进程占用的系统资源也被回收

  2. 进程优先级:进程调度时,有的进程先执行,有的进程后执行,这就是优先级

  3. 进程上下文:分时复用,一个进程执行一段时间,就要从CPU上调度走,过一段时间又回来,此时需要沿着上次执行的结果继续执行,这个进程离开时,之前执行的中间结果会被相应的寄存器保存起来,用于下次使用,寄存器中保存起来的就叫进程的上下文。可以理解为:打游戏的存档~~当你游戏玩累了,不想玩了,此时可以存档,等下次你再想玩的时候直接读档即可

  4. 进程的记账信息:在有优先级的前提下,不同的进程利用的系统资源是不一样的,操作系统会统计每个进程在CPU上执行的时间、内存使用情况等,根据这个记账信息,操作系统会进一步调整调度策略,做出优化,确保资源足够让每个进程正常执行

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

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

相关文章

百度文心一言API批量多线程写文章软件-key免费无限写

百度文心大模型的两款主力模型ENIRE Speed、ENIRE Lite全面免费,即刻生效。 百度文心大模型的两款主力模型 这意味着,大模型已进入免费时代! 据了解,这两款大模型发布于今年 3 月,支持 8K 和 128k 上下文长度。 ER…

赢销侠的秘密武器:如何提升客户满意度?

在竞争激烈的商业战场上,客户满意度是企业能否长盛不衰的关键。它如同一面镜子,映照出企业的服务质量和产品实力。那么,赢销侠们是如何运用秘密武器来提升客户满意度的呢?本文将深入探讨这一课题,并揭示背后的策略与智…

灾备方案中虚拟化平台元数据备份技术应用

首先需要介绍下元数据是什么? 元数据(Metadata)是一个重要的概念,它描述了数据的数据,也就是说,元数据提供了关于数据属性的信息。这些属性可能包括数据的存储位置、历史数据、资源查找、文件记录等。 元…

LabVIEW与欧陆温控表通讯的实现与应用:厂商软件与自主开发的优缺点

本文探讨了LabVIEW与欧陆温控表通讯的具体实现方法,并对比了使用厂商提供的软件与自行开发LabVIEW程序的优缺点。通过综合分析,帮助用户在实际应用中选择最适合的方案,实现高效、灵活的温控系统。 LabVIEW与欧陆温控表通讯的实现与应用&#…

基于Jenkins+Kubernetes+GitLab+Harbor构建CICD平台

1. 实验环境 1.1 k8s环境 1)Kubernetes 集群版本是 1.20.6 2)k8s控制节点: IP:192.168.140.130 主机名:k8s-master 配置:4C6G 3)k8s工作节点 节点1: IP:192.1…

day-37 最大正方形

思路 动态规划,这题主要得弄明白状态转换方程,dp[i][j]表示以(i,j)为右下角的最大正方形 解题方法 1.首先将第一行和第一列初始化,当对应位置的matrix为’0’时,dp数组对应位置也为零,否则为1 …

上位机图像处理和嵌入式模块部署(f407 mcu中fatfs中间件使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们已经实现了spi norflash的驱动,理论上这已经可以实现数据的持久化保存了。为什么还需要一个文件系统呢?主要原因还…

HTML静态网页成品作业(HTML+CSS)——家乡常德介绍网页(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…

【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt窗口 | 对话框 | 模态对话框 文章编号:Qt 学习笔记 / 51…

API开发秘籍:揭秘Swagger与Spring REST Docs的文档自动化神技

在这个数字化时代,如何让你的业务像外卖一样快速送达顾客手中?本文将带你走进Spring Boot的世界,学习如何利用RESTful API构建一个高效、直观的“外卖帝国”。从基础的REST架构风格,到Spring MVC的魔力,再到Swagger和S…

解决kettle界面右上角的connect消失——且使用admin登录不上Kettle资源库

一、问题描述 1.1、Kettle界面右上角的connect消失了 当我们配置Kettle界面的资源库(Other Repositories)内容后,Kettle界面右上角的connect消失了;如下图所示: 1.2、使用默认的账户【admin】和密码【admin】登录不上kettle资源库 当我们切换到我们配置的数据库使用超管账…

排序-希尔排序

介绍 希尔排序属于那种没有了解过的直接看代码一脸懵逼的, 所以同学们尽量不要直接看代码,仔细阅读本篇博客内容。 插入排序本来算是一个低效排序, 一次只可以挪动一个数据, 但是,它的强来了!&#xff01…

513.找树左下角的值

给定一个二叉树,在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路: 深度最大的叶子结点一定是最后一行。 优先左边搜索,记录深度最大的叶子节点,此时就是树的最后一行最左边的值 代码: class Solution:def fi…

272 基于matlab的形态滤波和局域值分解(LMD)的齿轮故障诊断

基于matlab的形态滤波和局域值分解(LMD)的齿轮故障诊断,GUI交互界面。通过形态滤波对一维信号进行降噪处理,并通过LMD局部均值分解提取故障信号,最后提取处故障频率。程序已调通,可直接运行。 272 形态滤波…

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中应用

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中的应用 由北京海特伟业科技有限公司任洪卓发布于2024年6月1日 红外语音听力广播(即红外听力教学考试系统)在英语四六级听力考试的应用正日益凸显出其重要性和优越性。在当前的高等教育…

排序-插入排序与选择排序

插入排序 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 打扑克牌整理手牌用的就是插入排序的思想 代码实现 void InsertSort(int* a, int n) { assert(a); …

中间件模版引擎

文章目录 中间件1.自定义中间件1)全局2)局部中间件 2.内置中间件(静态资源目录) Art-template1.模板语法1)输出2)原文输出3)条件判断4)循环5)子模版6)模版继承7&#xff…

2024四川三支一扶“考生信息表”照着填❗

2024四川三支一扶“考生信息表”照着填❗ ☑️四川三支一扶开始报名,大家要按照提示如实、准确、完整填写《高校毕业生“三支一扶”计划招募考生信息表》哦~ ☑️不知道怎么填写的宝子们,可以参考图1。 ☑️毕业证书编号如实填写,若是应届生&…

vue3 todolist 简单例子

vue3 简单的TodList 地址: https://gitee.com/cheng_yong_xu/vue3-composition-api-todo-app-my 效果 step-1 初始化项项目 我们不采用vue cli 搭建项目 直接将上图文件夹,复制到vscode编辑器,清空App.vue的内容 安装包 # 安装包 npm…

JVM双亲委派模型

在之前的JVM类加载器篇中说过,各个类加载器都有自己加载的范围,比如引导类加载器只加载Java核心库中的class如String,那如果用户自己建一个包名和类名与String相同的类,会不会被引导类加载器加载。可以通过如下代码测试&#xff0…