【操作系统笔记一】程序运行机制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.rhkb.cn/news/143540.html

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

相关文章

无需公网IP,实现公网SSH远程登录MacOS【内网穿透】

目录 前言 1. macOS打开远程登录 2. 局域网内测试ssh远程 3. 公网ssh远程连接macOS 3.1 macOS安装配置cpolar 3.2 获取ssh隧道公网地址 3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址 4.1 保留一个固定TCP端口地址 4.2 配置固定TCP端口地址 5. 使用固定TCP端…

云可观测性:提升云环境中应用程序可靠性

随着云计算的兴起和广泛应用,越来越多的企业将其应用程序和服务迁移到云环境中。在这个高度动态的环境中,确保应用程序的可靠性和可管理性成为了一个迫切的需求。云可观测性作为一种解决方案,针对这一需求提供了有效的方法和工具。本文将介绍…

windows 安装 MySQL 绿色版

windows 安装 MySQL 绿色版 下载 官网: MySQL下载页面: MySQL直接下载链接:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.34-winx64.zip 安装 将下载的mysql.zip文件解压缩到指定目录 搜索 cmd 并以管理员身份运行 切换到…

自制网页。

文章目录 注:代码中图片等素材均来自网络,侵删 20230920_213831 index.html <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-…

成为黄金代理,必须考虑到这一点

目前很多投资者都会选择黄金代理进行现货黄金投资账户的开立。一方面是市场中各种各样的现货黄金代理&#xff0c;越来越专业&#xff0c;提供的交易服务越来越好&#xff0c;另一方面是黄金代理和黄金平台进行合作&#xff0c;如果平台选得好&#xff0c;投资者在平台开户还是…

Linux服务器自定义登陆提示信息

背景 最近在搭建zookeeper和应用服务环境&#xff0c;需要配置很多东西&#xff0c;然后不同服务器的文件路径之类的东西可能会有一些不同&#xff0c;比较麻烦&#xff0c;就准备给每个服务器配置一个登陆提示&#xff0c;让每一个登陆的用户能很快了解配置信息和文件路径。 …

云主机秘钥泄露及利用

云平台作为降低企业资源成本的工具&#xff0c;在当今各大公司系统部署场景内已经成为不可或缺的重要组成部分&#xff0c;并且由于各类应用程序需要与其他内外部服务或程序进行通讯而大量使用凭证或密钥&#xff0c;因此在漏洞挖掘过程中经常会遇到一类漏洞&#xff1a;云主机…

Pytest单元测试框架 —— Pytest+Allure+Jenkins的应用

一、简介 pytestallurejenkins进行接口测试、生成测试报告、结合jenkins进行集成。 pytest是python的一种单元测试框架&#xff0c;与python自带的unittest测试框架类似&#xff0c;但是比unittest框架使用起来更简洁&#xff0c;效率更高 allure-pytest是python的一个第三方…

conan入门(二十八):解决conan 1.60.0下 arch64-linux-gnu交叉编译openssl/3.1.2报错问题

上一篇博客《conan入门(二十七):因profile [env]字段废弃导致的boost/1.81.0 在aarch64-linux-gnu下交叉编译失败》解决了conan 1.60.0交叉编译boost/1.80.1的问题后&#xff0c;我继续交叉编译openssl/3.1.2时又报错了 conan install openssl/3.1.2 -pr:h aarch64-linux-gnu.…

SpringSecurity的认证流程源码深入刨析

环境 SpringBoot版本&#xff1a;2.7.14 流程图 默认的Filter SpringSecurity的默认Filter地址&#xff1a;http://t.csdn.cn/YH838 常见的认证授权技术 1、基于表单的认证&#xff08;Cookie & Session&#xff09; 基于表单的认证并不是在 HTTP 协议中定义的&#x…

浅谈电气防火保护器在地下商场的应用

摘 要&#xff1a;近年来&#xff0c;我国城市发展速度加速。很多城市大力建造地下建筑设施&#xff0c;比如地铁、地下停车场和地下商场等。地下商场属于人员密集型建筑&#xff0c;其防火设计一直令相关的专家头疼。由于人员密集&#xff0c;防火处理不好将酿成灾难性的后果。…

【JUC系列-08】深入理解CyclicBarrier底层原理和基本使用

JUC系列整体栏目 内容链接地址【一】深入理解JMM内存模型的底层实现原理https://zhenghuisheng.blog.csdn.net/article/details/132400429【二】深入理解CAS底层原理和基本使用https://blog.csdn.net/zhenghuishengq/article/details/132478786【三】熟练掌握Atomic原子系列基本…

RHCE---Web 服务器

文章目录 目录 文章目录 前言 一.Web服务器概述 网址及HTTP协议概述&#xff1a; HTTP协议请求过程&#xff1a; 二.搭建动态HTTP网页 动态网页概述&#xff1a; 搭建动态的HTTP协议网页&#xff1a; 总结 前言 通过上一个章节的学习了解了时间服务器以及远程连接服务器&a…

深信服安全GPT 2.0升级,开启安全运营“智能驾驶”旅程

9月22日&#xff0c;深信服对外展示安全GPT落地成果与2.0升级能力。来自各行业权威嘉宾代表&#xff1a;美的集团首席信息安全官&#xff08;CISO&#xff09;兼软件工程院院长、欧洲科学院院士&#xff08;MAE&#xff09;、IEEE Fellow、IET Fellow、ACM杰出科学家、AAIA Fel…

一个简单的工具,多种用途—J2L3x的优势

J2L3x 是一款流行的团队合作工具&#xff0c;许多组织和公司已经开始使用它来简化和提高沟通和协作的效率。J2L3x 的优势与其多种用途不无关系&#xff0c;下面将详细介绍。 1、实时通信与信息共享 J2L3x 通过实时通信功能&#xff0c;使团队成员随时随地都能保持联系。J2L3x…

向量数据库风起时,闭源「墨奇AI数据库」想成为第三种存在

AI大模型时代下,图片、视频、自然语言等多模态的非结构化数据量陡增,而大模型支持的token数有限,虽然可以在RLHF的配合下具备一定程度的“短期记忆”,但正是因为“长期记忆”的缺失,导致大模型经常会出现“一本正经地胡说八道”的情况。 区别于用来处理结构化数据的传统数…

【unity2023打包安卓工程】踩坑记录

这里写自定义目录标题 踩坑记录使用环境Unity的准备工作Windows10 SDKAndroidstudio第一个需要注意的地方第二个需要注意的地方第三个需要注意的地方第四个需要注意的地方第五个需要注意的地方第六个需要注意的 其他unity启动缓慢 更新更新一 2023.9.27 踩坑记录 踩了快一个星期…

在Vue中通过ElementUI构建前端页面【登录,注册】,在IEDA构建后端实现前后端分离

一.ElementUI组件入门 1.对于ElementUI的理解 是一套基于 Vue.js 的开源UI组件库&#xff0c;提供了丰富的可复用组件&#xff0c;可以帮助开发者快速构建美观、易用的前端界面 2.Element UI 的特点和优势 多样化的组件&#xff1a;Element UI 提供了众多常用的基础组件&#…

全网最牛,Jmeter接口自动化测试从0到1实施步骤(详细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、工具下载 JDK…

uniapp 微信小程序之隐私协议开发

uniapp 微信小程序之隐私协议开发 官网通知&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html 1、配置 __usePrivacyCheck__: true&#xff1b;位置 manifest.json : "mp-weixin":{"__usePrivacyCh…