图解操作系统

news/2024/4/19 14:20:09/文章来源:https://blog.csdn.net/Niracity/article/details/129145375

硬件结构

CPU是如何执行程序的?

图灵机的工作方式

图灵机的基本思想:用机器来模拟人们用纸笔进行数学运算的过程,还定义了由计算机的那些部分组成,程序又是如何执行的。

图灵机的基本组成如下:

  • 有一条「纸带」,纸带由一个个连续的格子组成,每个格子可以写入字符,纸带就好比内存,,而纸带上的格子的字符就好比内存中的数据或程序;
  • 有一个「读写头」,读写头可以读取纸带上任意格子的字符,也可以把字符写入到纸带的格子;
  • 读写头上有一些部件,比如存储单元、控制单元以及运算单元:1、存储单元用于存放数据;2、控制单元用于识别字符是数据还是指令,以及控制程序的流程等;3、运算单元用于执行运算指令;

以1+2为例:

  • 首先,用读写头把「1、2、+」这3个字符分别写入到纸带上的3个格子,然后读写头先停在1字符对应的格子上;
  • 接着,读写头读入1到存储设备中,这个存储设备成为图灵机的状态;
  • 然后读写头向右移动一个一个格,用同样的方式把2度如刀图灵机的状态,于是现在图灵机的状态存储着两个连续的数字,1和2;
  • 读写头在往右移动一个格,就会碰到+号,读写头读到+号后,将+号传输给控制单元,控制单元发现是一个+号而不是数字,所以没有存入到状态中,因为+号是运算符指令,作用时加和目前的状态,于是通知运算淡云工作。运算单元收到要加和状态中的值的通知后,就会吧状态中的1和2读入并计算,再将计算的结果3存放到状态中;
  • 最后,运算单元将结果返回给控制单元,控制单元将结果输给读写头,读写头向右移动,把结果3写入到纸带的格子中;
  • 通过上面的图灵机计算1+2的过程,可以发现图灵机主要功能就是读取纸带格子中的内容,然后交给控制单元识别字符是数字还是运算指令,如果是数字则存入到图灵机状态中,如果是运算符,则通知运算符单元读取状态中的数值进行计算,计算结果最终返回给读写头,读写头把结果写入到纸带的格子中。

事实上,图灵机这个看起来很简单的工作方式,和我们今天的计算机是基本一样的。接下来,我们一同再看看当今计算机的组成以及工作方式。

冯诺依曼模型

在1945年冯诺依曼和其他计算机科学家们提出了计算机具体实现的报告,其遵循了图灵机的设计,而且还提出用电子元件构造计算机,并约定了用二进制进行计算和存储。

最重要的定义是计算机基本结构分为5个部分,分别是运算器、控制器、存储器、输入设备、输出设备,这5个部分也被称为冯诺依曼模型。

存储器

控制单元  算术逻辑单元

输入 输出

运算器、控制器是在中央处理器里的,存储器就是我们常见的内存,输入设备则是计算机外界的设备,比如键盘就是输入设备,显示器就是输出设备。

存储单元和输入输出设备要与中央处理器打交道的话,离不开总线。所以,它们之间关系如图:

                寄存器                                        存储单元                输入/输出设备

控制单元                                                                      控制总线

                                                                                      数据总线

                逻辑运算单元                                                地址总线

        CPU

接下来,分别介绍内存、中央处理器、总线、输入输出设备。

内存

我们的程序和数据都是存储在内存,存储的区域是线性的。

在计算机数据存储中,数据的基本单位视字节BYTE,1字节等于8位/8bit。每一个字节都对应一个内存地址。

内存的地址是从0开始编号的,然后自增排列,最后一个地址为内存粽子结束-1,这种结构好似我们程序里的数组,所以内存的读写任何一个数据的速度都是一样的。

中央处理器

中央处理器也就是我们常见的CPU,32位和64位CPU最主要区别在于一次能计算多少字节数据:

32位CPU一次可以见4字节

64位CPU一次可以计算8字节

这里的32位和64 位,通常称为CPU的位宽。

之所以CPU要这样设计,是为了能计算更大的树枝,如果是8位的CPU,那么一次只能计算1字节0~255范围内的数值,这样就无法一次完成计算10000*500,于是为了能一次计算大数的运算

,CPU需要支持多个BYTE一起计算,所以CPU位宽越大,可以就散的数值就越大,比如说32位CPU能计算的最大整数是4294967295.

CPU 内部还有一些组件,常见的寄存器、控制单元和逻辑运算单元等。其中,控制单元丰泽控制CPU工作,逻辑运算单元负责计算,而寄存器可以分为多个种类,每种寄存器的功能又不尽相同。

CPU的寄存器主要作用是存储计算时的数据,你肯呢好奇为什么有了内存还需要寄存器?原因很简单,因为cpu离内存太远了,而寄存器就在cpu里,还紧挨着控制单元和逻辑运算单元,自然计算时速度会很快。

常见的寄存器分类:

通用寄存器,用来存放需要进行运算的数据,如需要进行加和运算的两个数据。

程序计数器,用来存储cpu要执行下一条指令「所在的内存地址」,注意不是存储了下一条要执行的指令,此时指令还在内存中,程序计数器只是存储了下一条指令的「地址」。

指令寄存器,用来存放当前正在执行的指令,也就是指令本身,指令被执行完成之前,指令都存储在这里。

总线

总线适用于CPU和内存以及其他设备之间的通信,总线可分为三种呢:

地址总线,用于指定cpu将要操作的内存地址;

数据总线,用于读写内存的数据;

控制总线,用于发送和接收信号,比如中断、设备复位等信号,CPU收到信号后自然进行相应,这是也需要控制总线;

当CPU要读写内存数据的时候一般需要通过下面这三个总线:

首先要通过地址总线来制定内存的地址;

然后通过控制总线控制是读或写命令;

最后通过数据总线来传输数据;

输入输出设备

输入设备想计算机输入数据,计算机经过计算后,把数据输出给输出设别。期间,如果输入设备是键盘,按下按键时是需要和CPU进行交互的,这时就需要用到控制总线了。

线路位宽与CPU位宽

数据是如何通过线路传输的呢?其实是通过操作电压,低电压表示0,高电压则表示1.

如果构造了高低高这样的信号,其实就是101二进制数据,十进制则表示5,如果只有一条线路,就意味着每次只能传递1bit的数据,即0或1,那么传输101这个数据就需要3次才能传输完成,这样的效率非常低。

这样一位一位传输的方式,成为串行,下一个bit必须等待上一个bit传输完成才能进行传输。当然,想一次多传输一些数据,增加线路即可,这是数据就可以并行传输。

为了避免低效率的串行传输的方式,线路的尾款最好一次就能访问到所有的内存地址。

CPU想要操作内存地址就需要地址总线:

如果地址总线只有1条,那每次只能表示0或1这两种地址,所以CPU能操作的内存地址最大数量位2个,(注意,不要理解成同时能操作2个内存地址);

如果地址总线右2条,那么能表示00、01、10、11这四种地址,所以cpu能操作的内存地址最大数量为4个。

那么想要CPU操作4G大的内存,那么就需要32条地址总线,因为2^2*2^10*2^10*2^10=2^32=4G。

知道了线路位宽的意义后,我们再来看CPU位宽。

CPU为快最好不要小雨线路位宽,比如32位CPU控制40位宽的地址总线和数据总线的话,工作起来就会非常复杂且麻烦,所以32位CPU最好和32位宽的线路搭配,因为32位CPU一次最多只能操作32位宽的地址总线和数据总线。

如果用32位CPU去加和两个64位大小的数字,就需要把这2个64位的数字分成两个低位32位数字和两位高位32位数字来计算,先加个两个低位的32位数字酸楚仅为,然后加和两位高位的32位数字,然后再加上仅为,就能计算出结果,可以发现32位CPU并不能一次性计算出加和两个64位数字的结果。

对于64位CPU就可以一次性算出加和两个64位数字的结果,因为64位CPU可以一次读如64位的数字,并且64位CPU内部的逻辑运算单元也支持64位数字的计算。但是不代表64位CPU性能比32位CPU高很多,很少应用需要算超过32位的数字,所以如果计算的数额不超过32位数字的情况下,32位和64位CPU之间没什么区别的,只有当计算超过32位数字的情况下,64位的优势才能体现出来。

另外,32位CPU最大只能操作4GB内存,就算你装了8GB内存条,也没用。而64位CPU寻址范围很大,理论最大的寻址空间位2^64即8GB。

程序执行的基本过程

冯诺依曼模型:程序实际上是一条一条指令,所以程序的运行过程就是把每一条指令一步一步的执行起来,负责执行指令的就是CPU了。

那CPU执行程序的过程如下:

第一步:CPU读取程序计数器的值,这个值是指令的内存地址,然后CPU的控制单元操作地址总线指定需要访问的内存地址,接着通知内存设备准备数据,数据准备好后通过数据总线将指令数据传给CPU,CPU收到内存传来的数据后,将这个指令数据存入指令寄存器。

第二步,程序计数器的值自增, 表示只想下一条指令。这个自增的大小,由CPU的位宽决定,比如32位的额CPU,指令时4字节,需要4个内存地址存放(一个内存地址能存一个字节的数据)因此程序计数器的值会自增4;

第三步,CPU分析指令寄存器中的指令,确定指令的类型和参数,如果是计算类型的指令,就把指令交给运算逻辑单元运算;如果是存储类型的指令,则交由控制单元执行;

简单总结一下就是,一个程序执行的时候,CPU会根据程序计数器里面的内存地址,从内存里面吧需要执行的指令读取到指令寄存器里面执行,然后根据指令长度自增,开始顺序读取下一条指令。

CPU从程序计数器去读取指令、到执行、再到下一条指令,这个过程会不断循环,直到程序执行结束,这个不断循环的过程称为cpu的指令周期。

a=1+2执行具体过程

CPU不认识a=1+2这个字符串,要把整个程序翻译成汇编语言的程序,这个过程称为编译成汇编代码。

针对汇编代码,我们还需要用汇编器翻译成机器码,这些机器码由0和1组成的机器语言,这一条条机器码就是一条条的计算机指令,这个才是CPU能够真正认识的东西。

下面来看看  a = 1 + 2 在 32 位 CPU 的执行过程:

程序编译过程中,编器器通过分析代码,发现1和2都是数据,于是程序运行时,内存会又个专门的区域来存放这些数据,这个区域就是数据段。如下图,数据1和2的区域位置:

数据1被放到0x200位置;

  • 数据 2 被存放到 0x204 位置;

注意,数据和指令是分开区域存放的,存放指令区域的地方称为正文段。

0x100:load指令:将0x200地址中的数据1装入到寄存器R0;

0x104:load指令:将0x204地址中的数据2装入到寄存器R1;

0x108:add指令:将寄存器R0和R1的数据想家,并把结果存放到寄存器R2;

0x10c:set指令/store指令:将寄存器R2中的数据存回数据段中的0x208地址中,这个地址也就是变量a内存中的地址。

编一碗好吃呢过后,具体执行程序的时候,程序计数器会被设置为0x100地址,然后依次执行这4条指令。

上面的例子中,由于是在32位CPU执行的,因此一条指令是占32位大小,所以你会发现每条指令间隔4个字节(因为内存的存储单元是1字节)。

而数据的大小是根据你在程序中指定的变量类型,比如int类型的数据则占4字节,char/byte占1字节。

指令

上面的例子中,图中指令的内容我写的是建议的汇编代码,目的是为了方便理解指令的具体内容,事实上指令的内容是遗传二进制数字的机器码,每条指令都有对应的机器码,CPU通过解析机器码老知道指令的内容。

不同的CPU有不同的指令集,也就是对应着不同的汇编语言和不同的机器码,接下来最简单的mips指集,来看看机器码是如何生成的,这样也能明白二进制的机器码的具体含义。

mips的指令是一位32位的整数,高6位代表着操作吗,表示这条指令是一条什么样的指令,剩下的26位不同指令类型锁表示的内容也就不相同,主要有三种类型R和J。

R指令:用在算数和逻辑操作,里面有读取和写入数据的寄存器地址。如果是逻辑位操作,后面还有唯一操作的位移量,而最后的功能码则是再前面的操作吗不够的时候,扩展操作吗来表示对应的具体指令的;

I指令,用在数据传输、条件分支等。这个类型的指令,就没有了唯一令的功能码,也没有了第三寄存器,而是把这三部分直接合并了一个地址值或一个常数;

J指令,用在跳转,高6位之外的26位都是一个跳转之后的地址;

接下来,我们把前面例子的这条指令:add指令将寄存器R0和R 的数据相加,并把结果放入到R2,翻译成机器码。

加和运算是、add对应的mips指令里操作码是00000,以及最末尾的功能码是10000,这些数值都是固定的,查一下mips指令集的手册就能知道的;

rs代表第一个寄存器R0的编号,即00000;

rt代表第二个寄存器R 1 的编号即00001;

rd代表目标的临时寄存器R2的编号,即00010;

因为不是唯一操作,所以位移量是00000

把上面这些数字拼在一起就是一条32位的mips'假发指令了,那么用16禁止表示的机器码则是0x00011020.编译器在编译程序的时候,会构造指令,这个过程叫做指令的编码。CPU执行程序的时候,就会解析指令,这个过程叫做指令的解码。现代大所属CPU都适用流水线的方式来执行指令,所谓的流水线就是把一个任务拆分成多个小任务,于是一条指令通常分为4个阶段,称为4级流水线,如下图:

2.2磁盘比内存慢几万倍?

2.3 如何写出让 CPU 跑得更快的代码?

2.4 CPU 缓存一致性

#2.5 CPU 是如何执行任务的?

2.6 什么是软中断?

中断是什么?

中断是一种异步的时间处理机制,可以提高系统的并发处理能力。

操作系统收到了中断请求,会打断其他进程的运行,所以中断请求的相应程序,也就是中断处理程序,要尽可能快的执行完,这样可以减少对正常进程运行调度的影响。

而且,中断处理程序在响应中断时,可能还会临时关闭中断,这意味着,如果当前中断处理程序没有执行完之前,系统中其他的中断请求都无法被响应,也就是说中断有可能丢失,所以中断处理程序要短且快。

什么是软中断?

Linux系统为了解决中断处理程序执行过长和中断丢失问题,将中断过程分成了两个阶段,分别是上半部分和下半部分。

上半部分:

用来快速处理终端,一般会暂时关闭中断请求,主要负责处理跟硬件紧密相关或时间敏感的事情。

下半部分:

用来延迟处理上半部分未完成的工作,一般以内核线程的方式运行。

系统里有哪些软中断?

如何定位软中断CPU使用率过高的问题?

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

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

相关文章

allure简介

allure介绍allure是一个轻量级,灵活的,支持多语言的测试报告工具多平台的,奢华的report框架可以为dev/qa提供详尽的测试报告、测试步骤、log也可以为管理层提供high level统计报告java语言开发的,支持pytest,javaScript,PHP等可以…

C语言——动态内存管理

目录0. 思维导图:1. 为什么存在动态内存分配2. 动态内存函数介绍2.1 malloc和free2.2 calloc2.3 realloc3. 常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态内存开辟的空间越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块动态开辟内存的一部…

django+celery+ RabbitMQ自定义多个消息队列

关于django celery的使用网上有很多文章,本文就不多做更多的说明。 本文使用版本 python3.8.15 Django3.2.4 celery5.2.7celery.py from __future__ import absolute_import, unicode_literals import os from celery import Celery from kombu import Exchange, …

毕业后想从事软件测试,现在需要学习哪些内容呢

在你选择学习之前,要先考虑一下这个是不是你喜欢的发展方向,而不是只听别人推荐就直接做了选择先了解下软件测试是做什么的以及未来发展前景,最后才是如何自学 软件测试就是在测试这个软件是不是能够完全按照需求运行。软件测试岗再简单点说…

Windows启动docker客户端报错:Hardware assisted virtualization and enabled in the BIOS

报错内容 : 🌟1.在控制面板中点击 启用或关闭Windows功能🌟2.勾选如下复选框🌟3.Windows功能中没有Hyper-V复选框怎么办?(如果有请跳过此步骤)此时不同人的电脑还会出现没有Hyper-V选项的情况1.打开 Windows PowerShell,输入 sys…

如何效率搭建企业流程系统?试试低代码平台吧

编者按:本文介绍了一款可私有化部署的低代码平台,可用于搭建团队流程管理体系,并详细介绍了该平台可实现的流程管理功能。关键词:可视化设计,集成能力,流程审批,流程调试天翎是国内最早从事快速开发平台研发…

Hive内部表与外部表的区别具体说明

目录 1.在/opt/atguigu/目录下,新建两个txt文件 2.在hadoop的web端递归创建一个目录,存储这两个文件 3.查看web端的文件 一、内部表: 1.创建一个内部表,并指定内部表的存储位置 2.查看内部表,内部表中没有数据 …

2023.2 新方案 java代码混淆 java加密 字符串加密

Java字节码可以反编译,特别是创业公司,很好的项目很容易被别人破解反编译,造成很严重的损失,所以本混淆方案能很好的保护源码,而且在不断迭代,增强混淆效果,异常问题处理,达到保护项目的目的: 本次升级包括: 2023年02年19日 : ht-confusion-project-1.8…

PK体系下的教育场景—电子白板的应用

PK体系指基于国产飞腾(Phytium)CPU和麒麟(Kylin)操作系统的技术和产业体系,被誉为“中国架构”,目前基于PK体系的相关软硬件已经广泛用于党政、金融、电信等关基行业。教育信创在国家大战略布局下&#xff…

【技术分享】Web自动化之Selenium安装

Web 应用程序的验收测试常常涉及一些手工任务,例如打开一个浏览器,并执行一个测试用例中所描述的操作。但是手工执行的任务容易出现人为的错误,也比较费时间。因此,将这些任务自动化,就可以消除人为因素。Selenium 可以…

理解QPSK的实质-I右手正旋-Q左手负旋

正在学习5GNR PDCCH,用到QPSK。作一小结。 引言 我认为像我这样一个死民科,非主流非科班的通信人,理解QPSK的意义,甚至不比欧拉公式,或者是傅里叶变换小。 因为QPSK相较于BPSK,是真正第一次体现了调制的…

模拟默认密码自动生成-课后程序(JAVA基础案例教程-黑马程序员编著-第五章-课后作业)

【案例5-2】 模拟默认密码自动生成 【案例介绍】 1.任务描述 本例要求编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。 2.运行结果 运行结…

Power BI 数据处理介绍(数据初始调整、合并列及查看数据结构)

本系列的文章: 安装流程和示例介绍: 《Power BI windows下载安装流程)》《Power BI 11个必学官方示例数据案例(附下载链接)》 数据导入阶段介绍: 《Power BI 数据导入(SQL Server、MySQL、网页…

C++(42)-FSM-有限状态机

1.FSM 是什么? 一种用来进行对象行为建模的工具,用于描述对象在生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。2.FSM 组成:状态、事件、动作3.FSM类型: 3.1Moore: 输出:当前状态有关…

mysql -学习总结

mysql 详解1、mysql特点2、事务2.1 事务的四大特性 – ACID2.2 并发事务问题2.3 事务的四大隔离级别2.4 事务隔离级别操作sql2.5 事务原理 – LBCC MVCC2.4.1 行的隐藏列2.4.2 ReadView2.4.3 MVCC在四种隔离级别下的区别2.5 undo log、binlog、redo log2.5.1 Undo log2.5.2 bin…

2023年2月22日PMP®项目管理认证课程正式开课

PMP认证是Project Management Institute在全球范围内推出的针对评价个人项目管理知识能力的资格认证体系。国内众多企业已把PMP认证定为项目经理人必须取得的重要资质。 PMP认证是Project Management Institute在全球范围内推出的针对评价个人项目管理知识能力的资格认证体系。…

安装MQTT Server遇到报错“cannot verify mosquitto.org‘s certificate”,该如何解决?

MQTT是基于发布/订阅的轻量级即时通讯协议,很适合用于低带宽、不稳定的网络中进行远程传感器和控制设备通讯等操作中。在我们的软件研发中,也经常使用MQTT协议进行消息通信等。今天来和大家分享一些关于在安装MQTT Server中遇到的疑难问题及解决思路。当…

文献综述怎么写?有哪些准备工作和内容要求

文献综述的撰写是提高研究生论文写作能力的重要途径,是研究生在撰写学术论文和学位论文中必须要涉及的内容,是不可或缺的,写好一篇好的文献综述是存在诸多困难和挑战的,需要掌握一定的技巧和方法。 一、文献综述的写作目的 文献综…

mysql常用且易混淆函数整理

DATE_FORMAT(date,format) 函数中format的格式如下: 类型转化函数 为了进行数据类型转化,MySQL提供了CAST()函数,它可以把一个值转化为指定的数据类型。类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED 示例&a…

Python|每日一练|数组|回溯|栈|树|双指针|单选记录:N 皇后|二叉树的前序遍历|四数之和

1、N 皇后(数组,回溯) n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 …