Linux内核学习笔记

news2024/11/24 20:27:50

这个跟考试一毛钱关系没有 纯个人爱好 考试党划走

Linux 8086映像

3.1Intel 8086寄存器

在这里插入图片描述


INTEL处理器通常有十六个寄存器 他们之间可以相互做运算

在这里插入图片描述

在这里插入图片描述

3.2 8086的内存访问

内存的数据交换
内存和寄存器通过16根地址线建立数据的交换,数据线的宽度和寄存器的宽度相等

在这里插入图片描述

在这里插入图片描述


注意观察低地址和高地址的写法

在这里插入图片描述


取指令和执行指令

  • 第一条指令的操作码 A1代表这是一个传送的指令代表讲000C位置的数存放在AX寄存器中,
  • 第二条指令0306操作码代表是一个加法指令 第一个加数是AX中的值 结果也存放在AX中
  • 相加的结果是14C7所以AX的结果是14C7

    在这里插入图片描述

3.4 程序的重定位难题

为了能让处理器自动的取指令和执行指令,我们需要设立一个寄存器自动的跟踪程序的执行,我们把这个寄存器设为IPR,IPR是程序要执行下一条指令的地址,在程序开始之前我们需要将第一条指令的地址送人这个寄存器,也就有了上方的过程。IPR_next = IPR + 这条指令的长度。

在这里插入图片描述


但是如果程序的整体位置发生移动,那么IPR的值也要从开始发生变化如果继续寻址000C的话就会发生错误,我们需要设置一个良好的机制来对应浮动程序。

在这里插入图片描述


现代操作系统一个比较好的解决方式是采用分段机制。

3.5 段地址和偏移地址

上一节我们说到,如果采用物理的地址的话不利于运行上下浮动的程序。那么采用重定位的方法,具体的定位过程大家都在CSAPP学过具体内容不再赘述

3.6 8086内存访问的困境

8086系统有20根地址线 16根数据线也就是说他最多访问的数据是2MB,

在这里插入图片描述

在教材的第20页,CS确定段的位置然对于操作数给的是相对位置需要加上DS的内容才能真正找到操作数的地址。

在这里插入图片描述

3.7 8086地址选择策略

为什么采用这种方式,因为有20根地址线,但是寄存器只有16位这样可能不符合要求,所以我们总是选择最后一个地址为0的内存地址去掉0之后送入寄存器。也就是说只有以0结尾的地址才有可能称为段地址。

在这里插入图片描述

3.8 8086内存访问过程

接上边的内容,我们解决了分段的问题,但是想象一下这样的场景:在第一条指令执行完之前,需要将CS或者是PC的值修改为30CE3,但是由于内存地址是16为不能存放下最后一个3,总不能丢弃吧?

在这里插入图片描述


这个时候我们引入IP寄存器

在这里插入图片描述

在这里插入图片描述

这个IP = 7 的计算方法是将原有的指令长度3 加上第二条指令的长度4 也就是4+3 = 7

3.9逻辑地址和分段的灵活性

首先分段必须选用最后一位从0开始的地方。 

一个物理地址可以对应多个逻辑地址

 最大段地址和偏移地址计算方法和可逆过程如上图所示。

实战

4.0 bios开机启动原理

  • 操作系统进行一个热启动
  • 将CS 代码段寄存器置为FFFF 并将其他所有寄存器的值设置为0(包括段寄存器和通用寄存器)
  • CS << 4 + IP = 0xFFFF0传递给地址线,去这个位置取第一条指令

8086系统中一次可以访问1MB的内容,我们以为的0-fff是连续的 实际上并不一定是连续的,如下图所示,这些地址可能会被地址分配电路分配成几个独立的部分。
在这里插入图片描述

  • 从下到上依次是内存条,是由电容构成的,需要定时刷新,简称DRAM,外部设备的接口,ROM只读存储器(通过特殊方式写入的)可以将指令固化在ROM中
    在这里插入图片描述
    在这里插入图片描述
    如果没有跳转的话,对于指令是一条一条的执行的,8086系统每次会从内存中读取一条1MB的指令如图所示,EA代表跳转E05B和F000分别代表段地址和偏移地址。转化成汇编语言如下图所示。
    在这里插入图片描述
    在这里插入图片描述

  • 这个位置可能存放着有关开机诊断的一些代码之类的。
    在这里插入图片描述

  • 微指令执行就可以控制

4.1创建主引导扇区程序

因为采用低端字节序存放方式所以 C0 00 主引导扇区总长度是512字节,而这一条指令是八个字节,为了保证正确的阅读前面需要510个字节并且最后两个字节是55和AA        

 

逻辑块公式

LBA:正常情况下磁盘需要给出一个逻辑块的地址,采用C柱面 H磁头 S扇区 逻辑块地址

 

 将程序写入虚拟磁盘

发现和编译结果相同 

 今天先写这么多吧 明天正确把文字显示出来

补充 创建磁盘新磁盘的方法(转载)

在Ubuntu上添加一个虚拟磁盘,并对其进行分区、建立文件系统、格式化,给分区创建文件系统,实现挂载、自动挂载。

1.添加sdb磁盘

关机,菜单栏中找到虚拟机—设置,点击硬盘—添加,按步骤走就可以了,启动虚拟机,就有sdb了

2.查看硬盘信息

终端: ls /dev/sd*

可以看到有两块磁盘:第一块sda,另一个是sdb。

也可以终端:sudo fdisk -l


可以看出sdb硬盘分区表是空的,还没有分区和格式化

3.创建硬盘分区

终端: sudo fdisk /dev/sdb

 在分区过程中,一般先输入“m”,查看各个参数的说明

 然后通过“p”参数,查看硬盘的分区表信息

 可以看到sdb未分区,通过“n”参数新建分区,分区类型为主分区,分区编号为1,起始扇区默认为2048,最后扇区为8388608,分区大小为4GB

 按照上面步骤,在剩余硬盘空间上新建第二个分区,分区类型为主分区,分区编号为2,起始扇区默认为8388609,最后扇区为20971519,分区大小为6GB

 使用“p”参数查看分区表信息

 分区完成后,使用“w”参数保存并退出,否则之前分区无效

4.为各分区创建文件系统(实验要求做到这一步)

终端:sudo mkfs -t ext3 /dev/sdb1

 按照相同步骤对/dev/sdb2分区格式化

5.挂载磁盘分区

在挂载前,需要新建挂载点,在/mnt目录下新建两个目录,作为分区的挂载点

 使用mount命令将/dev/sdb1分区挂载到mnt/sdb1 ,/dev/sdb2分区挂载到mnt/sdb2

终端:sudo mount -t ext3 /dev/sdb1 /mnt/sdb1

 挂载分区之后,就可以使用该分区。此时再次查看硬盘分区表信息

终端:sudo fdisk -l

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

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

相关文章

最新ChatGPT网站系统源码+支持GPT4.0+支持AI绘画Midjourney绘画+支持国内全AI模型

一、SparkAI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&a…

博客无限滚动加载(html、css、js)实现

介绍 这是一个简单实现了类似博客瀑布流加载功能的页面&#xff0c;使用html、css、js实现。简单易懂&#xff0c;值得学习借鉴。&#x1f44d; 演示地址&#xff1a;https://i_dog.gitee.io/easy-web-projects/infinite_scroll_blog/index.html 代码 index.html <!DOCT…

Visual Code 开发web 的hello world

我以前做过&#xff0c;后来忘了怎么做了&#xff0c;所以还是要做个记录。 本文介绍visual code 开发web 的hello world 参考&#xff1a; Exercise - Set up the structure of your web app - Training | Microsoft Learn 打开Visual Code &#xff0c; 打开目录Open fol…

skywalking源码本地编译运行经验总结

前言 最近工作原因在弄skywalking&#xff0c;为了进一步熟悉拉了代码下来准备debug&#xff0c;但是编译启动项目我就费了老大劲了&#xff0c;所以准备写这篇&#xff0c;帮兄弟们少踩点坑。 正确步骤 既然是用开源的东西&#xff0c;那么最好就是按照人家的方式使用&…

算法-位运算-数字范围按位与

算法-位运算-数字范围按位与 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/bitwise-and-of-numbers-range/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 逐个按位与运算 2.1 思路 最简单的就是直接挨个做与运算&#xff0c;…

华为云智能化组装式交付方案 ——金融级PaaS业务洞察及Web3实践的卓越贡献

伴随信息技术与金融业务加速的融合&#xff0c;企业应用服务平台&#xff08;PaaS&#xff09;已从幕后走向台前&#xff0c;成为推动行业数字化转型的关键力量。此背景下&#xff0c;华为云PaaS智能化组装式交付方案闪耀全场&#xff0c;在近日结束的华为全联接大会 2023上倍受…

DTDX991A 61430001-UW 自由IOT引入人工智能功能

DTDX991A 61430001-UW 自由IOT引入人工智能功能 人工智能功能可以在不利的机器和过程条件发生灾难性后果之前通知用户和其他系统。 这个被广泛采用的软件平台的最新版本还包括一个强大的自助视频库。这使用户能够在闲暇时浏览所有的特性和功能&#xff0c;同时促进整个工厂用…

redis系列之——高可用(主从、哨兵)

redis系列之——高可用&#xff08;主从、哨兵、集群&#xff09; 所谓的高可用&#xff0c;也叫HA&#xff08;High Availability&#xff09;&#xff0c;是分布式系统架构设计中必须考虑的因素之一&#xff0c;它通常是指&#xff0c;通过设计减少系统不能提供服务的时间。…

【RV1103】RTL8723bs (SD卡形状模块)驱动开发

文章目录 前言硬件分析Luckfox Pico的SD卡接口硬件原理图LicheePi zero WiFiBT模块总结 正文Kernel WiFi驱动支持Kernel 设备树支持修改一&#xff1a;修改二&#xff1a; SDK全局配置支持 wifi全局编译脚本支持编译逻辑拷贝rtl8723bs的固件到文件系统的固定目录里面去 上电后手…

网络安全人才发展史

1958年&#xff0c;我国第一台电子数字计算机诞生 1994年&#xff0c;互联网正式进入中国 网络安全工程师从此诞生 在6到14岁的懵懂孩童阶段&#xff0c;他们开始逐渐了解这个世界&#xff0c;接触网络生活。他们对于未知的世界充满了好奇但又对诸多危险因素没有正确判断能力。…

Java8实战-总结36

Java8实战-总结36 重构、测试和调试调试查看栈跟踪使用日志调试 小结 重构、测试和调试 调试 调试有问题的代码时&#xff0c;程序员的兵器库里有两大老式武器&#xff0c;分别是&#xff1a; 查看栈跟踪输出日志 查看栈跟踪 程序突然停止运行&#xff08;比如突然抛出一个…

Win10 cmd如何试用tar命令压缩和解压文件夹

环境&#xff1a; Win10 专业版 Microsoft Windows [版本 10.0.19041.208] 问题描述&#xff1a; Win10 cmd如何试用tar命令压缩和解压文件夹 C:\Users\Administrator>tar --help tar(bsdtar): manipulate archive files First option must be a mode specifier:-c Cre…

ElementUI之首页导航+左侧菜单->mockjs,总线

mockjs总线 1.mockjs 什么是Mock.js 前后端分离开发开发过程当中&#xff0c;经常会遇到以下几个尴尬的场景&#xff1a; - 老大&#xff0c;接口文档还没输出&#xff0c;我的好多活干不下去啊&#xff01; - 后端小哥&#xff0c;接口写好了没&#xff0c;我要测试啊&#x…

知识图谱(6)基于KG构建问答系统

问答系统概述 问答系统是人类从机器中获取数据与知识的主要形式&#xff0c;问答系统包括NLP的多种应用&#xff1a;语义理解&#xff0c;知识图谱&#xff0c;推理&#xff0c;文本生成。问答系统是检验机器智能的一种方式&#xff08;图灵测试&#xff09;。 图灵测试&#…

C++ 继承详解

目录 C 继承介绍 继承中的特点 public 继承 protected 继承 private 继承 在类里面不写是什么类型&#xff0c;默认是 private 的 如果继承时不显示声明是 private&#xff0c;protected&#xff0c;public 继承&#xff0c;则默认是 private 继承&#xff0c;在 struct …

【每日一题】递枕头

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;模拟方法二&#xff1a; O ( 1 ) O(1) O(1) 解法 写在最后 Tag 【模拟】【 O ( 1 ) O(1) O(1) 公式】【2023-09-26】 题目来源 2582. 递枕头 题目解读 编号从 1 到 n 的 n 个人站成一排传递枕头。最初&#xff0c;排…

知识工程---neo4j 5.12.0+GDS2.4.6安装

&#xff08;已安装好neo4j community 5.12.0&#xff09; 一. GDS下载 jar包下载地址&#xff1a;https://neo4j.com/graph-data-science-software/ 下载得到一个zip压缩包&#xff0c;解压后得到jar包。 二. GDS安装及配置 将解压得到的jar包放入neo4j安装目录下的plugi…

thinkphp5 如何模拟在apifox里面 post数据接收

tp5里面控制器写的方法想直接apifox里面请求接受 必须带上这个参数 header里面 X-Requested-With&#xff1a;XMLHttpRequest

ThreeJS-3D教学一:基础场景创建

Three.js 是一个开源的 JS 3D 图形库&#xff0c;用于创建和展示高性能、交互式的 3D 图形场景。它建立在 WebGL 技术之上&#xff0c;并提供了丰富的功能和工具&#xff0c;使开发者可以轻松地构建令人惊叹的 3D 可视化效果。 Three.js 提供了一套完整的工具和 API&#xff0…

DAMO-YOLO训练KITTI数据集

1.KITTI数据集准备 DAMO-YOLO支持COCO格式的数据集&#xff0c;在训练KITTI之前&#xff0c;需要将KITTI的标注转换为KITTI格式。KITTI的采取逐个文件标注的方式确定的&#xff0c;即一张图片对应一个label文件。下面是KITTI 3D目标检测训练集的第一个标注文件&#xff1a;000…