首页 > 其他分享 >实模式和保护模式

实模式和保护模式

时间:2023-09-24 21:58:53浏览次数:30  
标签:保护模式 计算机 模式 内存 级别 操作系统

读源码时应该注意的事项

  • 在第一遍阅读源码时,已弄懂整体流程为主,至于具体的实现细节先简单的理清处过一遍,不用过于纠结。

  • 当梳理清楚全部的框架逻辑后,第二遍再深入的学习研究各个模块的实现,此时应该解决第一遍中的疑惑。

  • 第三遍可以跳出代码的实现,来看Linux的设计思路、编程艺术和演进之路。

实模式

x86架构计算机的一种工作模式,也是计算机启动时的初始工作模式。在实模式下,处理器访问物理内存的方式非常简单,但也非常受限,因此她通常用于启动计算机和加载操作系统的引导程序。

  • 16位寻址:在实模式下,处理器使用16位地址总线,因此最多可以寻址2^16(64K)个内存单元。这限制了系统的内存寻址能力。

  • 物理地址:实模式下,处理器直接使用物理内存地址进行内存访问,没有内存保护机制。这意味着一个程序程序可以访问系统中的任何内存位置,包括操作的关键数据结构,这可能导致系统不稳定。

  • 段寄存器:实模式使用段寄存器来定位内存中的数据,而不是使用线性地址。段寄存器包括CS(代码段)、DS(数据段)、ES(附加数据段)等。段寄存器的值与偏移量相结合,形成物理地址。

  • 实地址模式:在实模式下,段寄存器和偏移量以实地址模式下来计算物理地址。物理地址直接等于段寄存器左移4位后与偏移量相加。

  • 无保护模式:实模式没有内存保存机制和特权级别,所有代码都以最高特权级别运行。这意味着一个程序可以执行对系统有害的操作
    实模式通常用于计算机的启动过程,当计算机开机时,处理器会一开始处于模式下。在实模式下,计算机的引导程序(BIOS)负责加载操作系统的引导程序(Boot Loader),然后将处理器切换到更高级的保护模式,如保护模式或长模式,以便操作系统能够更好地管理内存和硬件资源。

总结

总之,实模式是x86架构计算机的一种工作模式,它具有简单的寻址方式和较低的特权级别,但也有一些显著的限制,因此在计算机启动后通常会切换到更高级别的模式来执行操作系统和应用程序。

保护模式(Protected Mode)

保护模式是x86架构计算机的一种工作模式,与实模式相对。保护模式提供了更高级别的内存保护和多任务支持,使得操作系统能够更好地管理系统资源,并确保不同程序之间的隔离。

  • 32位和64位寻址:

    保护模式支持32位和64位的线性地址,允许计算机访问更大的内存空间。这大大增加了系统的内存寻址能力。

  • 虚拟内存:

    保护模式引入了虚拟内存机制,允许操作系统将物理内存映射到不同的线性地址空间,提供了内存保护和隔离。每个程序都以自己的虚拟地址空间运行。不会其他程序。

  • 特权级别

    保护模式引入了特权级(PrivilegeLevels)概念,通常分为0至3级。特权级别0是最高特权级别0是最高特权级别,操作系统内核通常在这个级别上运行。较低的级别用于应用程序。不同特权级别之间有不同的权限和访问限制。

  • 分段

    保护模式中的段寄存器仍然存在,但它们的功能有所不同。段描述符包含了段的基址、大小、访问权限等信息,这样可以便灵活地管理内存。

  • 多任务支持

    保护模式允许操作系统管理多个任务或进程,通常时间轮转等调度算法来切换执行。每个任务都有自己虚拟地址空间。

  • 硬件保护

    保护模式提供硬件级别的内存保护,防止程序越界或破坏其他程序的内存。

  • 异常和中断处理:
    在保护模式下,操作系统可以捕获和处理各种异常和中断,包括硬件错误,系统调用请求等。

  • 分页
    分页机制允许操作系统将线性地址映射到物理地址的过程进行更细粒度的控制,提供了更高级别的内存管理。

保护模式

保护模式是现代操作系统的基础,它提供了更高级别的隔离和安全性,允许操作系统有效地管理多任务和资源。当计算机启动时,通常会从实模式切换到保护模式,这由计算机的引导加载程序(BootLoader)负责。例如,在x86架构的计算机上,操作系统通常在保护模式下运行,如Windows、Linux和macOS等。

标签:保护模式,计算机,模式,内存,级别,操作系统
From: https://www.cnblogs.com/doubleconquer/p/17726758.html

相关文章

  • 设计模式-享元模式
    享元模式模式定义运用共享技术有效的支持大量颗粒度的对象模式动机如果一个应用使用了大量的对象,而大量的对象造成了很大的存储开销时就应该考虑使用当对象的大多数状态为外部状态,如果删除对象的外部状态,那么可以用相对较少的共享内存对象取代很多组对象,此时可以考虑使用......
  • 工厂模式的三种姿态?
    在软件工程中常见的设计模式——工厂模式。工厂模式是一种有力的工具,用于创建对象实例的方式,可以帮助我们更好地组织代码和降低耦合性。在本文中,我将为大家详细介绍工厂模式的三种姿态,同时通过举例和代码演示来帮助大家更好地理解。工厂模式的三种姿态工厂模式是一种创建型设计模......
  • 工厂方法模式
    工厂方法模式总体代码//MySpider.h#pragmaMySpider.honce#include<memory>usingnamespacestd;classMySpider{public: virtualvoidCrawl()=0;};classMySpiderFactory{public: virtualshared_ptr<MySpider>CreateMySpider()=0;};//MyTextIma......
  • 单例模式(正式)
    当需要严格控制一个类在全局只有唯一一个实例,并且可以随时调用它的时候,就可以使用单例模式。单例模式可以以实例化时间分为懒汉式和饿汉式、以C实现方式分为C++98的实现以及C++11的实现。懒汉式c++11classSingleton{public:staticSingleton*getInstance(){ i......
  • 建造者模式
    建造者模式动机将一个复杂对象的创建过程及其表示分离,同一个创建过程可以创建不同的表示当需要创建一个包含多个部分或配置选项的复杂对象,并且需要将构建过程与表示分离时,建造者模式很有用帮助你灵活地构建不同配置的对象,同时保持构建过程的清晰性和可维护性经典Builder模......
  • 工厂模式(正式)
    抽象工厂模式及示例模式的动机提供一种接口,用于创建一系列相关或相互依赖的对象抽象工厂模式通过引入抽象工厂接口,允许客户端代码通过工厂接口创建产品,而不需要关心具体的产品类;使得客户端代码可以与特定产品的具体类解耦,实现了抽象和实现的分离模式的实现抽象的......
  • Kibana数据索引模式设计策略案例
    前言Kibana是一个非常流行的数据可视化工具,它可以帮助我们快速地对数据进行分析和展示。在使用Kibana的过程中,数据索引模式的设计非常重要,它直接影响到我们对数据的查询和分析效率。本文将介绍一些Kibana数据索引模式设计的策略案例,希望能够帮助大家更好地使用Kibana。策略一:尽量......
  • 代理模式
    工作场景:让用户根据接口查询系统各资源占用率优化用户性能传统代码:传统代码//main.cpp#include<iostream>#include"ServerInfoGetter.h"#include<chrono>#include<thread>intmain(){ ServerInfoGettergetter; ServerInfoinfo=getter.getInfo(); whil......
  • Redis搭建哨兵模式架构
    使用Docker安装因为配置太复杂,所以这里我们使用dockercompose来一键部署不使用内部网络搭建编写redis主从docker-compose.ymlversion:'3'services:master:image:rediscontainer_name:redis-masterrestart:alwayscommand:redis-server--requi......
  • 工厂模式
    工作场景:编写一个给用户发送短信的程序传统写法#include<stdio.h>#include<string>enumNotifMessageType{WUDI,FEITIAN};classNotifMessage{public:intsendMessage(longlonguserId,std::string&msg,NotifMessageTypetype){s......