相信研究linux的大大都知道linux有实模式、保护模式、虚拟模式三种。

不多说,拷贝黏贴! 
80386开始,cpu有三种工作方式:实模式,保护模式和虚拟8086模式。只有在刚刚启动的时候是real-mode,等到linux操作系统运行起来以后就运行在保护模式。实模式只能访问地址在1M以下的内存称为常规内存,我们把地址在1M 以上的内存称为扩展内存。在保护模式下,全部32条地址线有效,可寻址高达4G字节的物理地址空间; 扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持; 支持多任务,能够快速地进行任务切换和保护任务环境; 4个特权级和完善的特权检查机制,既能实现资源共享又能保证代码和数据的安全和保密及任务的隔离; 支持虚拟8086方式,便于执行8086程序。

虚拟8086模式是运行在保护模式中的实模式,为了在32位保护模式下执行纯16位程序。它不是一个真正的CPU模式,还属于保护模式。

保护模式同实模式的根本区别是进程内存受保护与否。可寻址空间的区别只是这一原因的果。实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,系统程序和用户程序没有区别对待,而且每一个指针都是指向"实在"的物理地址。这样一来,用户程序的一个指针如果指向了系统程序区域或其他用户程序区域,并改变了值,那么对于这个被修改的系统程序或用户程序,其后果就很可能是灾难性的。为了克服这种低劣的内存管理方式,处理器厂商开发出保护模式。这样,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)要由操作系统转化为物理地址去访问,程序对此一无所知。

至此,进程(这时我们可以称程序为进程了)有了严格的边界,任何其他进程根本没有办法访问不属于自己的物理内存区域,甚至在自己的虚拟地址范围内也不是可以任意访问的,因为有一些虚拟区域已经被放进一些公共系统运行库。这些区域也不能随便修改,若修改就会有: SIGSEGV(linux 段错误);非法内存访问对话框(windows 对话框)。

CPU启动环境为16位实模式,之后可以切换到保护模式。但从保护模式无法切换回实模式 
     
     事实上,现在的64位奔腾4处理器,拥有三种基本模式和一种扩展模式, 
     基本模式: 
                 保护模式:纯32位保护执行环境。 
                 实模式:纯16位无保护执行环境。 
                 系统管理模式:当SMI引脚为有效进入系统管理模式,首先保存当前的CPU上下文。它有独立的地址空间,用来执行电源管理或系统安全方面的指令。 
     扩展模式: 
                 IA-32e模式: 64位操作系统运行在该模式。该模式有两种子模式: 
                                   1)兼容模式:该模式下,64位操作系统运行在32位兼容环境,能正常运行16,32位应用程序就像基本的保护模式一样, 
                                                        访问32位地址空间,但不能运行纯16位实模式程序(就是不能运行虚拟86模式程序了)。 
                                   2)64位模式:在该模式下,处理器完全执行64位指令,使用64位地址空间和64操作数,运行16,32位程序必须切换到兼容模式。 
                 IA-32e子模式的切换完全基于代码段寄存器。这样一来,运行在IA-32e模式中(64位)的OS完全可以无缝的运行所有16,32,64为应用程序, 
                 通过设置32位后的CS。

转载于:https://www.cnblogs.com/zsw-1993/p/4880021.html

linux扫盲之CPU模式相关推荐

  1. linux查看cpupower模式,Linux - cpupower调整CPU主频

    前言 linux内核支持调节CPU主频,降低功耗,已到达节能的效果.对于移动设备和笔记本来说,在没有接通电源的时候,续航是很重要的. 通过选择系统空闲状态不同的电源管理策略,可以实现不同程度降低服务器 ...

  2. linux怎么配置命令模式,Linux几种命令模式

    原标题:Linux几种命令模式 必须掌握的几个Linux命令 我们为什么要学习Linux的命令? 初学者上手Linux系统会很懵.不管你是否安装了图形化界面,或者去网上找一些教程.或者一些Linux的 ...

  3. linux命令查看cpu负载,怎么使用Linux命令查看CPU使用率

    在Linux系统操作中,有时需要查看cpu的使用率,这就需要用到Linux命令了,Linux查看cpu使用率的命令主要有4个,即top.vmstat.mpstat和prstat命令,一起来了解下吧. ...

  4. linux系统查看CPU使用含义、IO、内存、硬盘使用、负载

    一.Linux系统查看CPU使用率命令 在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况.而监控CPU的性能一般包括以下3点:运行队列.CPU使用率和上下文切换. 对于每 ...

  5. linux性能优化--cpu篇

    linux性能优化--cpu篇 前言 负载 CPU使用率 proc perf 一些链接 `perf list` 比较有用的event `perf stat` `perf record` Profili ...

  6. linux查看cpu缓存大小,如何在Linux中获取CPU Cache的大小

    对于运行Linux的ARM CPU(在具有Raspbian(32位)的Raspberry Pi 3B +上测试): "Arm®Cortex®-A53MPCore处理器技术参考手册" ...

  7. linux查看设备在哪个cpu上,如何在linux中查看cpu信息、机器硬件型号

    原标题:如何在linux中查看cpu信息.机器硬件型号 # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeon( ...

  8. 【Linux 性能优化系列】Linux 性能优化 -- CPU 性能篇(三) Linux 软中断

    [Linux 性能优化系列]Linux 性能优化 -- CPU 性能篇(三) Linux 软中断 [1]相关概念 [1.1]中断 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力:为了减少 ...

  9. i386 Linux内核进入保护模式引导流程

    在系统引导过程中,Bootloader将内核镜像加载到内存后,并将控制权转交给内核       ,通过长转移指令跳转到入口startup_32. 实际上进入startup_32入口前,CPU已经处于了 ...

最新文章

  1. 尚育鹏:Leetcode刷题总结(数组)
  2. ubuntu 下安装nginx
  3. vue中v-model原理
  4. python网页保存为图片_使用Python保存网页上的图片或者保存页面为截图
  5. java高性能序列化_Java最佳实践–高性能序列化
  6. [保存]C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
  7. Android 广播接收器注册与注销源码分析
  8. 不确定性原理的前世今生 · 数学篇(二)
  9. 最新隐马尔可夫模型HMM详解
  10. sql服务器的响应时间,如何解决:[Sql Server]超时时间已到。在操作完成之前超时时间已过或服务器未响应。...
  11. java gps解析_GPS经纬度可以用来Java解析
  12. Advertising on Instagram 如何在Instagram上发布广告 Lynda课程中文字幕
  13. 远程控制软件TeamViewer
  14. RTE 2020 实时互联网大会参会指南——明天我们线上见!
  15. linux中gimp命令截图,Linux利用GIMP截图
  16. 求一个n阶矩阵的转置矩阵
  17. 从0到1,搭建经营分析体系
  18. Web全栈工程师修养
  19. 2023 最新 抖音AI换脸表情包小程序变现玩法项目
  20. Marvin ,Java开发图像处理框架

热门文章

  1. 面试题 08.09. 括号
  2. leetcode - 139. 单词拆分
  3. 以企业面试讲解sql语句
  4. 由旋转矩阵计算欧拉角的方法
  5. 基于深度学习的文本分类3
  6. jni c 回调 java,JNI - 如何从C ++或C回调到Java?
  7. linux电脑管理员身份运行,在Ubuntu 20.04 LTS中添加“以管理员身份打开”
  8. labelme实例分割_GitHub:图像分割最全资料集锦
  9. python常见编程面试题_python面试题基础部分 80题
  10. 用深度强化学习玩atari游戏_(一)深度强化学习·入门从游戏开始