【操作系统笔记一】程序运行机制CPU指令集

内存地址

指针 / 引用

指针、引用本质上就是内存地址,有了内存地址就可以操作对应的内存数据了。

在这里插入图片描述

不同的数据类型

在这里插入图片描述

字节序

  • 大端序(Big Endian):字节顺序从低地址到高地址顺序存储的字节序
  • 小端序(Little Endian):字节顺序从高地址到低地址顺序存储的字节序

对于人类来说,大端序比较好理解,字节序从低地址到高地址,对于计算机来说,小端序比较容易操作。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进制转换

二进制和十进制之间的转换

十进制转成二进制:整数除2取余;小数乘2取整

在这里插入图片描述

二进制转成十进制:按权求和方法

在这里插入图片描述

十进制和十六进制之间的转换

将十六进制转成十进制:按权展开求和方法,不过权的基数是16

在这里插入图片描述

十进制转成十六进制和十进制转成二进制的方法是一样的。

在这里插入图片描述

二进制和十六进制之间的转换

十六进制转成二进制:

  • 每一位十六进制数字转换为四位二进制数字,
  • 运算的顺序也是从低位向高位依次进行

在这里插入图片描述

二进制转成十六进制:

  • 每四位二进制数字转换为一位十六进制数字,
  • 运算的顺序是从低位向高位依次进行,
  • 高位不足四位用零补齐

在这里插入图片描述

CPU的控制器、运算器、寄存器

在这里插入图片描述

  • 寄存器用来暂存指令、数据等处理对象,可以将它看做是内存的一种,一个CPU的内部一般有20~100个寄存器。

  • 控制器负责把内存中的指令、数据读入寄存器,并根据指令的执行结果来控制整个计算机。

  • 运算器负责运算从内存中读入寄存器的数据。

CPU的执行流程

在这里插入图片描述
在这里插入图片描述

  1. 程序计数器内存 中读取出的指令是放入 指令寄存器 中的
  2. 指令接下来由 指令解码器(一种寄存器)解码,接着由运算器计算结果
  3. 计算的结果最终可能返回到内存,也可能被写入某个寄存器中,在计算过程中也可能从内存中读取数据

程序计数器

在这里插入图片描述

程序计数器又叫指令指针寄存器,是寄存器的一种。

  • 程序计数器负责从内存中获取指令,一开始指向第一条指令的内存地址,当这条指令被执行后,指针会自动指向下一条指令的内存地址(根据当前指令本身的字节大小计算偏移,如字节大小是3,则下一条地址就是从当前地址往后偏移3个字节)。

  • 不同计算机程序计数器的实现不同,一般它就是一个寄存器

CPU的指令集

不同架构的 CPU 的指令集不同,不同架构的 CPU 中相同名字的指令的含义也不一定相同。

在这里插入图片描述

指令

在这里插入图片描述

在这里插入图片描述

  1. 一条指令就是一串二进制码,它的前几位一般是 操作码, 如 movadd

  2. 操作码 后面跟着的一般是 操作数,操作数可以是寄存器,也可以是某个内存地址,或者是常量

  3. 不管什么样架构的CPU,CPU指令基本上都是按照 操作码 + 操作数 的实现方式

在这里插入图片描述
在这里插入图片描述

函数调用栈

函数调用栈中的每个元素是一个栈帧栈帧包含了参数值局部变量返回地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

栈内存

在这里插入图片描述

在这里插入图片描述

计算机状态交互和系统调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

用户态 & 内核态

  • 内核态:可以完全访问所有的硬件,也可以执行机器能够运行的任何指令
  • 用户态:只能执行一部分机器指令,对于那些会影响机器的控制或者可进行IO操作的指令,在用户态中的程序中是禁止的

在这里插入图片描述
在这里插入图片描述

用户态:是指应用程序在运行时 CPU 所处的状态,这个时候的 CPU 所处的状态的级别特别低,不能直接访问某些机器指令,或者不能直接访问 I/O (读写磁盘)。

内核态:是指操作系统在运行时 CPU 所处的状态,这个时候的 CPU 可以执行任何的一条的指令,包括特权指令,包括访问 I/O 指令等。

应用程序、操作系统、硬件之间的关系:

在这里插入图片描述

操作系统、CPU、内存之间的关系:

在这里插入图片描述

系统调用

系统调用是如何从用户态陷入内核态的?

  • 在 32 位Linux操作系统中是通过 80 软中断实现的
  • 在 64 位Linux操作系统中是通过 syscall 汇编指令实现的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

64 位操作系统用户态发起系统调用的过程:

  1. 将参数保存到寄存器
  2. 根据系统调用名称得到系统调用号,并将其存储到CPU的 rax 寄存器中
  3. 执行 syscall 指令
  4. CPU会根据 rax 寄存器中的系统调用号到sys_call_table中找到对应的系统调用函数并执行该函数的指令代码,将运算结果写到 rax 寄存器中
  5. rax 寄存器中获取系统调用的结果值返回给用户态应用程序

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

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

相关文章

从MVC到DDD,该如何下手重构?

作者:付政委 博客:bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 大家好,我是技术UP主小傅哥。多年的 DDD 应用,使我开了技术的眼界! MVC 旧工程腐化严重,…

探索视听新纪元: ChatGPT的最新语音和图像功能全解析

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🤖 人工智能 AI: 🧠 Machine …

图形处理软件Photoshop Elements 2020 mac中文版 ps简化版

Photoshop Elements 2020 mac是一款非常实用的图形处理工具。ps elements 2020 mac中文版可以帮助您自动生成照片和视频作品的功能,采用Adobe Sensei AI技术可进行图像组织、编辑和创建等。Photoshop Elements 2020 for Mac激活版可以帮助您轻松整理照片和视频&…

GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全)

GeoPandas和Matplotlib地图高亮显示——与中国建交的国家(不全) 一、概要二、整体架构流程三、完整代码 一、概要 这段代码是使用GeoPandas和Matplotlib库在Python中绘制世界地图的一个例子,它突出了与中国建交的国家(部分&#x…

全栈工程师必须要掌握的前端JavaScript技能

作为一名全栈工程师,在日常的工作中,可能更侧重于后端开发,如:C#,Java,SQL ,Python等,对前端的知识则不太精通。在一些比较完善的公司或者项目中,一般会搭配前端工程师&a…

【kafka实战】03 SpringBoot使用kafka生产者和消费者示例

本节主要介绍用SpringBoot进行开发时&#xff0c;使用kafka进行生产和消费 一、引入依赖 <dependencies><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency><depen…

智能热水器丨打造智能家居新体验

随着科学技术的不断发展&#xff0c;智能电器越来越被大众所采纳&#xff0c;如智能扫地机&#xff0c;智能洗衣机&#xff0c;智能微波炉等等&#xff0c;越来越智能的电器为人们的生活带来了许多便利。以往的热水器一般都是只有按键/机械的控制方式&#xff0c;没有其他无线控…

2015年蓝桥杯省赛C/C++ A组 灾后重建题解(100分)

10. 灾后重建 Pear市一共有N&#xff08;<50000&#xff09;个居民点&#xff0c;居民点之间有M&#xff08;<200000&#xff09;条双向道路相连。这些居民点两两之间都可以通过双向道路到达。这种情况一直持续到最近&#xff0c;一次严重的地震毁坏了全部M条道路。 震后…

操作系统级 ChatGPT 爆火!

本期推荐开源项目目录&#xff1a; 1. 操作系统贾维斯&#xff1f; 2. 开源翻译模型 3. 整理的 AI 技术资料 01 操作系统贾维斯&#xff1f; 让你的操作系统额变得智能&#xff0c;通过在终端输入自然语言 来让计算机执行一些通用的功能&#xff0c;比如创建、编辑照片、文件夹…

根据excel批量修改文件夹及其文件名称

简介 表哥公司电脑上有一大批文件夹&#xff0c;用于存放一些pdf。他希望对这些文件进行整理。文件夹批量重命名为好记一些的名字&#xff0c;文件夹下的pdf改成的名字格式为&#xff1a;文件夹名序号。 例如&#xff1a;文件夹从“1234”&#xff0c;改成“案件001”&#xf…

亚马逊投资Anthropic; OpenAI将推出新版ChatGPT

&#x1f989; AI新闻 &#x1f680; 亚马逊投资Anthropic获得可靠AI基础模型开发合作 摘要&#xff1a;亚马逊投资Anthropic至多40亿美元&#xff0c;将共同开发可靠高性能的基础模型&#xff0c;并能提前使用Anthropic技术。Anthropic将主要依赖亚马逊的云服务来训练未来的…

如何使用show profile 查看sql的执行周期

修改配置文件/etc/my.cnf 新增一行&#xff1a;query_cache_type1 重启mysql 先开启 show variables like %profiling%; set profiling1;select * from xxx ;show profiles; #显示最近的几次查询show profile cpu,block io for query 编号 #查看程序的执行步骤

微表情识别API + c++并发服务器系统

微表情识别API c并发服务器系统 该项目只开源c并发服务器程序&#xff0c;模型API部分不开源 地址&#xff1a;https://github.com/lin-lai/-API- 更新功能 4.1版本 改用epoll实现IO多路复用并发服务器 项目介绍 本项目用于检测并识别视频中人脸的微表情 目标任务: 用户上…

黑马JVM总结(二十四)

&#xff08;1&#xff09;练习-分析a a:先执行iload1&#xff1a;把数据读入到操作数栈中 iinc&#xff1a;把局部变量表中的1号曹位做一个自增&#xff0c;他在局部变量表中发生的并没有影响到操作数栈 a&#xff1a;限制性自增在做iload 自增变成12 iload把12读取到操作数…

Linux学习之HIS部署(4)

ElasticSearch部署 ElasticSearch资源 RabbitMQ资源 ElasticSearch服务部署 #OpenJDK环境部署 [rootServices ~]# yum clean all; yum repolist -v ... Total packages: 8,265 [rootServices ~]# yum -y install java-1.8.0-openjdk-devel.x86_64 #安装OpenJDk ... Compl…

微信删除好友对方知道吗?如何加回微信好友?

微信是我们日常生活中使用最多的社交软件&#xff0c;很多小伙伴在使用微信时都曾发出过这样的疑问&#xff1a;微信删除好友对方知道吗&#xff1f;当自己在微信中删除某人后&#xff0c;对方是否会收到信息提醒&#xff1f;另外&#xff0c;如果删除好友后感到后悔&#xff0…

start()方法源码分析

当我们创建好一个线程之后&#xff0c;可以调用.start()方法进行启动&#xff0c;start()方法的内部其实是调用本地的start0()方法&#xff0c; 其实Thread.java这个类中的方法在底层的Thread.c文件中都是一一对应的&#xff0c;在Thread.c中start0方法的底层调用了jvm.cpp文件…

seata的启动与使用

1 下载seata 下载地址&#xff1a;https://github.com/seata/seata/releases/v0.9.0/ 1.1 修改配置文件 将下载得到的压缩包进行解压&#xff0c;进入conf目录&#xff0c;调整下面的配置文件&#xff1a; registry.conf registry {type "nacos"nacos {serverA…

Spring 学习(八)事务管理

1. 事务 1.1 事务的 ACID 原则 数据库事务&#xff08;transaction&#xff09;是访问并可能操作各种数据项的一个数据库操作序列。事务必须满足 ACID 原则——即原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Iso…

uniapp:tabBar点击后设置动画效果

APP端不支持dom操作&#xff0c;也不支持active伪类&#xff0c;绞尽脑汁也没办法给uniapp原生的tabBar点击加动画效果&#xff0c;所以最终只能舍弃原生tabBar&#xff0c;改用自定义tabBar。 自定义tabBar的原理是&#xff0c;页面的上部分分别是tabBar对应的页面组件&#…