Linux内核学习笔记

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

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.xdnf.cn/news/142886.html

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

相关文章

【MySQL】数据类型(一)

文章目录 前言一. tinyint等整型二. bit位字段类型三. float浮点型四. decimal浮点型结束语 前言 MySQL也有数据类型&#xff0c;其中一些与C/C/Java是一样的&#xff0c;但也有一些数据类型不同&#xff0c;更有新的独有的数据类型 一. tinyint等整型 MySQL将整型按照字节分成…

WPF Frame content binding page(Using MVVM)

前言 这个binding问题困扰了我几天时间了&#xff0c;弄了好的demo试了又试。之前老是认为是ItemsControl中数据模版DataTemplate中绑定Command问题&#xff0c;根据测试没问题。一直在考虑是否是绑定DataContext对象没指明同一个上下文对象问题。最后在MainWindow.xaml文件中F…

buildroot中将编译好的库(Qt,tslib)放入嵌入式linux文件系统

首先交叉编译想使用版本的Qt源码&#xff0c;还有tslib库&#xff0c;编译好之后 再次编译buildroot&#xff0c;再编译好的buildroot中会出现output文件夹&#xff0c;然后output文件夹下有target文件夹&#xff0c;这个target文件夹就是将要打包的文件系统&#xff0c;目标目…

SMOKE-CMAQ实践技术应用

大气污染物排放是空气污染的源头&#xff0c;气象因素是影响污染程度的重要因素&#xff0c;因此空气质量模式要求气象资料和污染物排放清单作为输入&#xff0c;其中由于大气污染源复杂性、数据滞后性、动态变化、规律性不明显等特点&#xff0c;使得大气污染源排放清单输入准…

今天聊一聊高性能系统架构设计是什么样的

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 今天聊一聊大家常听到的高性能系统架构。 高性能系统架构&#xff0c;主要包括两部分内容&#xff0c;性能测试与性能优化。性能优化又可以细分为硬件优化、中间件优化、架构优化及代码优化&#xff0c;知识架构图如…

【数据结构与算法】链表的实现以及一些基本算法

目录 单选链表的基本实现 有序列表的合并&#xff08;双指针法&#xff09; 链表的反转 链表实现两数之和 判定链表是否有环 单选链表的基本实现 public class LinkedList1 {//头节点Node first;//尾节点Node last;//大小int size 0;//头插法public void addFirst(int…

什么才是物联网领域最好的开发语言?

什么才是物联网领域最好的开发语言&#xff1f; 最好&#xff01;运行最快&#xff1f;开发最高效&#xff1f;最容易学习&#xff1f; 各有特点&#xff01; 采用C/C语言&#xff0c;运行最快&#xff0c;一般采用厂家提供的底层驱动支持包BSP&#xff0c;所有MCU都支持。如…

selenium自动化测试+OCR-获取图片页面小说

随着爬虫技术的发展&#xff0c;反爬虫技术也越来越高。 目前有些网站通过自定义字体库的方式实现反爬&#xff0c;主要表现在页面数据显示正常&#xff0c;但是页面获取到的实际数据是别的字符或者是一个编码。 这种反爬需要解析网站自己的字体库&#xff0c;对加密字符使用字…

Leetcode算法二叉树—117. 填充每个节点的下一个右侧节点指针 II(层序遍历/队列)

目录 117. 填充每个节点的下一个右侧节点指针 II - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 代码&#xff1a; 运行结果&#xff1a; ​编辑 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指…

2023-09-21 buildroot linux 查看应用的log打印信息,命令cat /var/log/messages

一、应用会调用syslog 把打印信息输出到串口&#xff0c;debug 串口会打印kernel的log和上层应用的的log。 二、linux 命令cat /var/log/messages查看应用log

【常用代码15】文字单词超出强制分割换行,word-break: break-all;和word-wrap: break-word;的区别

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 文件上传后显示文件名&#xff0c;名称过长&#xff0c;超出div 有些文件名如下图 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 一般图片上传&#xff0c;要展示文件名&#x…

基于Springboot实现毕业生信息招聘平台管理系统演示【项目源码+论文说明】分享

基于Springboot实现毕业生信息招聘平台管理系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台&#xff0c;主要的模块包括查看管理员&#xff1b;首页、个人中心、企…

预制菜行业数据分析(京东数据挖掘)

最近一段时间&#xff0c;关于预制菜进校园事件的讨论热度高涨。而这两天&#xff0c;核酸大王“张核子”转行开预制菜公司卖方便米饭的消息又被传出&#xff0c;直接让预制菜市场饱受关注。 “预制菜是近两年的风口”&#xff0c;这个结论鲸参谋早在以往的内容中专门讨论过&a…

自学WEB后端03-Node.js 语法

学习后端路线&#xff1a; JavaScript 基础语法 Node,js 内置 API 模块 (fs、 path、 http等) 第三方 API 模块 (express、mysql等) 今天主要回顾下Node.js 语法 Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它提供了一种能够在服务器端运行 JavaScr…

前端求职指南

简历求职指南 为什么没有面试&#xff1f; 1、简历写的不好 2、简历投递不好 简历的定义是什么&#xff1f; 是求职者向未来雇主展示自己专业技能和职业素养的自我推销工具&#xff0c;以找到工作为目的。 什么时候改简历&#xff1f; 每半年或一年更新一次工作中的成长 再工…

Open3D 进阶(12)PCA拟合平面

目录 一、算法原理二、代码实现三、结果展示四、优秀博客本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 本文实现基于主成分分析方法的最小二乘拟合平面。原理如下: 针对整个点云 P = { p i }

torch.sum()——dim参数

dim指在dim的这个维度上&#xff0c;对tesnor 进行求和&#xff0c;如果keepdim&#xff08;保持维度&#xff09;False&#xff0c;返回结果会删去dim所指的这个维度。以下面的例子分析dim的参数~ torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print(…

如何兼顾性能+实时性处理缓冲数据?

们经常会遇到这样的数据处理应用场景&#xff1a;我们利用一个组件实时收集外部交付给它的数据&#xff0c;并由它转发给一个外部处理程序进行处理。考虑到性能&#xff0c;它会将数据存储在本地缓冲区&#xff0c;等累积到指定的数量后打包发送&#xff1b;考虑到实时性&#…

Linux Ubuntu配置Git的方法

本文介绍在Linux操作系统的Ubuntu版本中&#xff0c;配置分布式开源版本控制系统Git&#xff0c;随后基于Git克隆GitHub中项目的代码的详细方法。 在之前的文章分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法&#xff08;https://blog.csdn.net/zhebushib…