从零开发操作系统-CPU的实模式和保护模式以及长模式

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

  1. 了解大厂经验
  2. 拥有和大厂相匹配的技术等

希望看什么,评论或者私信告诉我!

文章目录

  • 一、背景
  • 二、实模式和保护模式以及长模式的背景
      • 2.1 模式分类
      • 2.2 模式切换
  • 三、总结

一、背景

其实也没有啥背景。
最主要的原因就像 《30天自制操作系统》一书作者说的那样,写一个操作系统,仅仅想想就是一件特别有趣的事情呢。一两年前曾经入手开始写过,但慢慢的就不了了之了。现在又有这个想法了,准备一直干下去,最终写一个操作系统出来,算是程序员生涯的一份礼物。

其次的原因,是因为我也认为未来初级程序员的岗位会越来越少,借助 LLM 人人都是初级程序员可能会变成现实。这个时候专业性和底层就会越来越重要。

二、实模式和保护模式以及长模式的背景

从零开发操作系统进入到了第3天,马上就可以通过 C 语言进行开发了。书中突然来了一句:CPU有16位和32位两种模式。感觉有些不可思议,不是还有 64 位吗?经了解之后总结如下:

2.1 模式分类

在 x86 架构中,CPU 有几种不同的模式,其中最常见的是实模式(Real Mode)和保护模式(Protected Mode)。此外,还有长模式(Long Mode),这是在引入 x86-64 架构时增加的。以下是这些模式的简要说明:

  1. 实模式(Real Mode)

    • 这是 x86 系统启动时的初始模式,对应书中的 16 位 CPU 模式。
    • 在实模式下,CPU 使用 20 位地址总线,可以寻址 1MB 的物理内存( 内存的最小单位是字节 )。
    • 段地址和偏移地址组合成物理地址,使用 16 位段寄存器和 16 位偏移量。
    • 实模式主要用于 BIOS 启动过程和早期的操作系统(如 DOS)。
    • 我们之前开发的所有汇编都是在实模式下运行的
    • 没有虚拟内存,没有GDT
  2. 保护模式(Protected Mode)

    • 保护模式是在 80286 及更高版本的 CPU 中引入的,对应书中的 32 位 CPU 模式
    • 在保护模式下,CPU 可以使用分段和分页机制来保护内存和提供更复杂的内存管理。
    • 虚拟地址
    • 保护模式支持 32 位的地址空间,可以寻址 4GB 的物理内存(在 80386 及更高版本的 CPU 中)。
    • 保护模式是现代操作系统(如 Windows, Linux)的基础。
    • 不能调用 BIOS
  3. 长模式(Long Mode)

    • 长模式是在 64 位 x86-64 架构中引入的。
    • 长模式允许 CPU 使用 64 位的地址空间,可以寻址超过 4GB 的物理内存。
    • 在长模式下,CPU 可以运行 64 位的操作系统和应用程序。
    • 长模式向下兼容保护模式,但不兼容实模式。

2.2 模式切换

  • 从实模式到保护模式

    • 通常在 BIOS 启动代码执行后,操作系统会初始化 CPU 并切换到保护模式。
    • 切换到保护模式需要设置新的段寄存器值,并启用保护模式位。
  • 从保护模式到实模式

    • 通常在系统重启或关机时,操作系统会将 CPU 切换回实模式。
    • 切换回实模式需要重新设置段寄存器,并禁用保护模式位。

三、总结

x86 架构的 CPU 有实模式、保护模式和长模式。实模式主要用于系统启动和早期操作系统,保护模式提供了更复杂的内存管理和更大的寻址空间,而长模式则支持 64 位的地址空间和更大的内存寻址能力。现代操作系统通常在保护模式或长模式下运行。

另外如果以16位模式启动的话,用AX和CX等16位寄存器会非常方便,但反过来,像EAX和ECX等32位的寄存器,使用起来就很麻烦。另外,16位模式和32位模式中,机器语言的命令代码不一样。同样的机器语言,解释的方法也不一样,所以16位模式的机器语言在32位模式下不能运行,反之亦然。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何解决IDE添加错误GitHub token后无法连接GitHub的问题

背景 当初学者首次使用IDE(IDEA、Xcode等)对GitHub仓库进行操作(push、fetch)时,会提示输入GitHub账户和token,如果这时候你一不小心输入了错误的token,之后你就叫天天不应叫地地不灵了&#xf…

PPT技巧:如何合并PPT文件?

在工作与学习中,PPT(PowerPoint)演示文稿已成为信息传递、项目汇报、教育培训等领域不可或缺的工具。随着任务的累积,我们往往会积累大量单独的PPT文件,每个文件可能包含特定章节、项目阶段或是不同主题的内容。为了更…

安全见闻1-5

涵盖了编程语言、软件程序类型、操作系统、网络通讯、硬件设备、web前后端、脚本语言、病毒种类、服务器程序、人工智能等基本知识,有助于全面了解计算机科学和网络技术的各个方面。 安全见闻1 1.编程语言简要概述 C语言:面向过程,适用于系统…

k-近邻算法(K-Nearest Neighbors, KNN)详解:机器学习中的经典算法

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

LeetCode297.二叉树的序列化和反序列化

题目要求 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序…

蓝牙5.0模块助力闹钟升级,开启智能生活第一步

随着智能家居产业的快速发展,智能闹钟作为其中一个重要的品类,逐渐从单一的时间提醒功能演变为集音频播放、语音交互、智能控制等多种功能于一体的智能设备。而在这些功能的实现中,蓝牙音频模组扮演着核心角色。 1、蓝牙音频模组的功能概述 …

自己动手写Qt Creator插件

文章目录 前言一、环境准备1.先看自己的Qt Creator IDE的版本2.下载源码 二、使用步骤1.参考原本的插件2.编写自定义插件1.cmakelist增加一个模块2.同理,qbs文件也增加一个3.插件源码 三、效果总结 前言 就目前而言,Qt Creator这个IDE,插件比…

力扣经典面试题

1.本题的目标是判断字符串ransomNote是否由字符串magazine中的字符构成,且由magazine中的每个字符只能在ransomNote中使用一次 2.采用的方法是通过一个字典cahr_countl来统计magazine字符串中每个字符出现的次数 3.然后遍历ransomNote字符串,对于其中的…

Java开发人员从了学习ArkTs笔记(三)-数据结构与线程通信全解析

大家好,我是一名热爱Java开发的开发人员。目前,我正在学习ARKTS(Advanced Java Knowledge and Technology Stack),并将不断输出我的学习笔记。我将在这里分享我学习ARKTS的过程和心得,希望能够为其他开发人…

Java基础——预定义类/自定义类封装什么是Final类型

目录 预定义类——日历输出: 自定义类——在Java文件中: 什么是封装? 什么是final类型? 修饰变量: 修饰方法: 修饰类: 预定义类——日历输出: 例如:Math类、Date类…

spi 回环

///tx 极性0 (sclk信号线空闲时为低电平) /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

20241114软考架构-------软考案例16答案

每日打卡题案例16答案 16.【2017年真题】 难度:简单 阅读以下关于软件架构评估的叙述,在答题纸上回答问题1和问题2.(共25分) 【说明】 某单位为了建设健全的公路桥梁养护管理档案,拟开发一套公路桥梁在线管理系统。在系统的需求分析与架构设…

低成本出租屋5G CPE解决方案:ZX7981PG/ZX7981PM WIFI6千兆高速网络

刚搬进新租的房子,没有网络,开个热点?续航不太行。随身WIFI?大多是百兆级网络。找人拉宽带?太麻烦,退租的时候也不能带着走。5G CPE倒是个不错的选择,插入SIM卡就能直接连接5G网络,千…

Python学习小记3-传递任意数量的实参

1.形参名*toppings 中的星号让Python创建一个名为toppings 的空元组,不管调用语句提供了多少实参,这个形参会将它们统统收入囊中,即:无论几个小料 def make_pizza(size, *toppings):print(f"\n要制作一个{size}-inch的披萨&…

宝塔 docker 部署onlyoffice 服务

1.宝塔安装docker,直接下载安装就行 2.docker拉取onlyoffice镜像 docker pull onlyoffice/documentserver:5.3.1.26 5.4或更高的版本已经解决了连接数限制方法的Bug 3.创建容器 docker run -d --name onlyoffice --restartalways -p 暴露端口号:80 onlyoffice/documentserv…

【数据结构副本篇】顺序表 链表OJ

🏝️专栏:【数据结构实战篇】 🌅主页:f狐o狸x 学习其实和打游戏一样,当你觉得BOSS难打的时候就说明是你的等级和装备不够,此时就需要我们多去刷刷副本,增加一点经验,顺便爆点装备出…

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用: inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

AI风向标|算力与通信的完美融合,SRM6690解锁端侧AI的智能密码

当前,5G技术已经成为推动数字经济和实体经济深度融合的关键驱动力,进入5G发展的下半场,5G与AI的融合正推动诸多行业的数字化转型和创新发展,终端侧AI和端云混合式AI将广泛应用于各类消费终端和各行各业。 在推动5G和AI与各行业场…

封装一个省市区的筛选组件

筛选功能&#xff1a;只能单选&#xff08;如需多选需要添加show-checkbox多选框属性&#xff09;&#xff0c;选中省传递省的ID&#xff0c;选中市传递省、市的ID&#xff0c; 选中区传递省市区的ID 父组件&#xff1a; <el-form-item><div style"width: 240px;…

Liunx:共享内存

共享内存是实现进程间通信的又一个策略。 与管道在逻辑上相似&#xff0c;用户可以向OS申请&#xff0c;在物理内存中开辟一块空间&#xff0c;OS开辟并向上层返回这块空间的起始地址。需要通信的双方将这块空间通过页表映射&#xff0c;各自的挂载到自己进程地址空间的共享区。…