一步步编写操作系统 32 linux内核获取内存容量的方法

操作系统是计算机硬件的管家,它不仅要知道自己的安装了哪些硬件,还得给出有效得当的管理措施,按照预定的一套管理策略使硬件资源得到合理的运用。但管理策略只是逻辑上的东西,是操作系统自圆其说的一套管理资源的方法,管理再漂亮,没有硬件支撑也无能为力,真正干活的都是底层。

保护模式最“大”的特点就是寻址空间“大”,在进入保护模式之后,我们将接触到虚拟内存、内存管理等。但这些和内存有关的概念都是建立在物理内存之上,无论理论概念说的多高大上,最终也要在物理内存上落实行动。为了在后期做好内存管理工作,咱们先得知道自己有多少物理内存才行。

在linux中有多种方法获取内存容量,如果一种方法失败,就会试用其它方法。比如在linux 2.6内核中,是用detect_memory函数来获取内存容量的。其函数在本质上是通过调用bios中断0x15实现的,分别是bios 中断0x15的3个子功能,子功能号要存放到寄存器EAX或AX中,如下:

  • EAX=0xE820:遍历主机上全部内存。
  • AX=0xE801: 分别检测低15MB和16M~4GB之间的内存,最大支持4GB。
  • AH=0x88:最多检测出64MB内存,实际内存超过此容量也按照64MB返回。

bios中断是实模式下的方法,只能在进入保护模式前调用。咱们效仿linux“不弃不舍”的精神,在实模式下也用这三种方法检测完内存容量后再进入保护模式。如果一种方法获取失败,尝试另一种方法,若三种方法都失败了,由于无法获取内存信息,后续程序无法加载,只好将机器挂起,停止运行。

bios中断可以返回已安装的硬件信息,由于bios及其中断也只是一组软件,它要访问硬件也要依靠硬件提供的接口,所以,获取内存信息,其内部是通过连续调用硬件的API(Application Program Interface,应用程序接口)来获取内存信息的。另外,由于每次调用bios中断都是有一定的代价的(比如至少要将程序的上下文保护起来以便从中断返回时可以回到原点继续向下执行),所以尽量在一次中断中返回足量的信息,由用户程序自己挑出重点内容。下面介绍的中断便是这方面的典范。

bios 0x15中断提供了丰富的功能,具体要调用的功能,需要在寄存器ax中指定。其中0xE8xx系列的子功能较为强大,0x15中断的子功能0xE820和0xE801都可以用来获取内存,区别是0xE820返回的是内存布局,信息量相对多一些,操作也相对复杂。而0xE801直接返回的是内存容量,操作适中,不繁不简。上面还提到了子功能0x88也能获取内存容量,这是最简单的用法,不过操作越简单,功能也就越薄弱。话说linux中的dmesg命令就与0xE820相关,可见其功能是很大的,之后就按照功能强弱的顺序逐一介绍用法。

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

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

相关文章

【HDU - 5489】Removed Interval(离散化,权值线段树,思维,最长上升子序列)

题干&#xff1a; Given a sequence of numbers Aa1,a2,…,aNAa1,a2,…,aN, a subsequence b1,b2,…,bkb1,b2,…,bk of AA is referred as increasing if b1<b2<…<bkb1<b2<…<bk. LY has just learned how to find the longest increasing subsequence (LI…

Apollo进阶课程㊳丨Apollo平台的快速入门

原文链接&#xff1a;进阶课程㊳丨Apollo平台的快速入门 Apollo是向汽车行业及自动驾驶领域的合作伙伴提供一个开放、完整、安全的软件平台&#xff0c;帮助他们结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的完整的自动驾驶系统。 上周阿波君为大家详细介绍了「进阶课…

一步步编写操作系统 33 利用bios中断0x15子功能0xe820获取内存

咱们先介绍0xE820子功能&#xff0c;这是最灵活的内存获取方式。 bios中断 0x15的子功能0xE820能够获取系统的内存布局&#xff0c;由于系统内存各部分的类型属性不同&#xff0c;bios就按照类型属性来划分这片系统内存&#xff0c;所以这种查询则呈迭代式&#xff0c;每次bio…

16.深度学习练习:Building your Recurrent Neural Network - Step by Step

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/Building your Recurrent Neural Network - Step by Step1 - Forward propagation for the basic Recurrent Neur…

【2019icpc徐州站】Random Access Iterator(概率dp,有坑,tricks)

题干&#xff1a; Recently Kumiko learns to use containers in C standard template library. She likes to use the std::vector very much. It is very convenient for her to do operations like an ordinary array. However, she is concerned about the random-access…

一步步编写操作系统 34 内核利用bios中断获取物理内存大小

接上文&#xff0c;另一个获取内存容量的方法是bios 0x15中断的子功能0xE801。 此方法虽然简单&#xff0c;但功能也不强大&#xff0c;最大只能识别4G内存&#xff0c;不过这对咱们32位地址总线足够了。稍微有点不便的是&#xff0c;此方法检测到的内存是分别存放到两组寄存器…

【HDU - 5777】domino(贪心)

题干&#xff1a; Little White plays a game.There are n pieces of dominoes on the table in a row. He can choose a domino which hasnt fall down for at most k times, let it fall to the left or right. When a domino is toppled, it will knock down the erect dom…

17.深度学习练习:Character level language model - Dinosaurus land

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ 文章目录1 - Problem Statement1.1 - Dataset and Preprocessing1.2 - Overview of the model2 - Building blo…

Apollo进阶课程㊴丨Apollo安装过程概述

原文链接&#xff1a;进阶课程㊴丨Apollo安装过程概述 Apollo是一个自动驾驶的平台&#xff0c;推荐的参考运行环境为&#xff1a;ThinkPAD X240、CPU&#xff1a;i5 、四核 、内存 8G、 硬盘容量40G以上。 上周阿波君为大家详细介绍了「进阶课程㊳丨Apollo平台的快速入门」。 …

【HDU - 6574】Rng(概率,古典概型)

题干&#xff1a; Avin is studying how to synthesize data. Given an integer n, he constructs an interval using the following method: he first generates a integer r between 1 and n (both inclusive) uniform-randomly, and then generates another integer l betw…

UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

继承、实现、依赖、关联、聚合、组合的联系与区别 分别介绍这几种关系&#xff1a; 继承 指的是一个类&#xff08;称为子类、子接口&#xff09;继承另外的一个类&#xff08;称为父类、父接口&#xff09;的功能&#xff0c;并可以增加它自己的新功能的能力&#xff0c;继…

CS231n(1):图片分类笔记与KNN编程作业

声明&#xff1a;本博客笔记部分为CS231n官网笔记&#xff0c;这里对其进行引用&#xff0c;在此表示感谢。 课程官网地址为&#xff1a;http://vision.stanford.edu/teaching/cs231n/syllabus.html 本次课程对应B站教学视频为&#xff1a; https://www.bilibili.com/video/av5…

【HDU - 6557】Justice(思维,模拟,套路,SETset)

题干&#xff1a; On the table there are n weights. On the body of the i-th weight carved a positive integer kiki , indicating that its weight is 12ki12ki gram. Is it possible to divide the n weights into two groups and make sure that the sum of the weight…

Apollo进阶课程㊵丨Azure仿真平台使用

原文链接&#xff1a;进阶课程㊵丨Azure仿真平台使用 Azure是一种灵活和支持互操作的平台&#xff0c;它可以被用来创建云中运行的应用或者通过基于云的特性来加强现有应用。它开放式的架构给开发者提供了Web应用、互联设备的应用、个人电脑、服务器、或者提供最优在线复杂解决…

java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

对java的泛型特性的了解仅限于表面的浅浅一层&#xff0c;直到在学习设计模式时发现有不了解的用法&#xff0c;才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1. 概述 泛型在java中有很重要的地位&#xff0c;在面向对象编程及各种设计模式…

【HDU - 6558】The Moon(期望dp)

题干&#xff1a; Random Six is a FPS game made by VBI(Various Bug Institution). There is a gift named "Beta Pack". Mr. K wants to get a beta pack. Here is the rule. Step 0. Let initial chance rate qq 2%. Step 1. Player plays a round of the game…

动手学无人驾驶(3):基于激光雷达3D多目标追踪

上一篇博客介绍了无人驾驶中的车辆检测算法&#xff08;YOLO模型&#xff09;&#xff0c;该检测是基于图像进行的2D目标检测。在无人驾驶环境感知传感器中还有另一种重要的传感器&#xff1a;激光雷达。今天就介绍一篇无人驾驶中基于激光雷达目标检测的3D多目标追踪论文&#…

【HDU - 6237】A Simple Stone Game(贪心,思维,素因子分解,数学)

题干&#xff1a; After he has learned how to play Nim game, Bob begins to try another stone game which seems much easier. The game goes like this: one player starts the game with NN piles of stones. There is aiai stones on the iith pile. On one turn, the …

换种方法学操作系统,轻松入门Linux内核

计算机已成为现代人日常工作、学习和生活中必不可少的工具。操作系统是计算机之魂&#xff0c;作为用户使用计算机的接口&#xff0c;它负责调度执行各个用户程序&#xff0c;使计算机完成特定的任务&#xff1b;作为计算机硬件资源的管理者&#xff0c;它负责协调计算机中各类…

Apollo进阶课程㊶丨Apollo实战——本机演示实战

原文链接&#xff1a;进阶课程㊶丨Apollo实战——本机演示实战 Apollo是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 上周阿波君为大家详细介绍了「进阶课程㊵丨A…