课堂练习4.1:段式内存管理

4-1 课堂练习4.1:段式内存管理

段式内存管理以段为单位分配内存空间,段内连续,段间可以不连续。段可以很大,比如数据段、代码段、栈段等。本实训分析 Linux 0.11 的段式内存管理技术。

第1关1 号进程 mynext 变量的逻辑地址与线性地址

任务描述

本关任务调试版本 1.3 内核并回答问题:

  1. 1 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?
  2. 1 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?
  3. 1 号进程的进程控制块中的 ldt 数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?
  4. 1 号进程的 mynext 变量所在的线性地址是多少?

相关知识

为了完成本关任务,你需要掌握: 1.如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令; 2.如何计算 1 号进程的 mynext 变量的逻辑地址(段地址:段内偏移); 3.段寄存器值(如 ds )的含义是什么; 4.如何查看进程的 LDT ; 5.如何从段描述符的值计算出段的起始地址。

环境准备

本实训 5 个关卡全部使用版本 1.3 内核进行调试,内核文件存放在/data/workspace/myshixun/exp1下。

实验过程及答案

实验过程
ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

rm -rf cur
ln -s 1.3 cur
ls

cd 1.3/linux
make

cd ../..
./rungdb

另开一个终端

cd os/linux-0.11-lab
./mygdb

答案

第2关0号进程 mynext 变量的逻辑地址与线性地址

任务描述

本关任务调试版本 1.3 内核回答问题:

  1. 0 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?
  2. 0 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?
  3. 0 号进程的进程控制块中的ldt数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?
  4. 0 号进程的 mynext 变量所在的线性地址是多少?

相关知识

为了完成本关任务,你需要掌握:

  1. 如何查看 0 号进程的函数调用 output_char() 所对应的汇编指令;
  2. 如何计算 0 号进程的 mynext 变量的逻辑地址(段地址:段内偏移);
  3. 段寄存器值(如 ds )的含义是什么;
  4. 如何查看进程的 LDT ;
  5. 如何从段描述符的值计算出段的起始地址。

编程要求

根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第二关的答案填写在/data/workspace/myshixun/第二关.txt中。

  1. 0 号进程的函数调用 output_char() 所对应的第一条汇编指令的地址是多少?

  2. 0 号进程的 mynext 变量所在的段地址和段内偏移是多少?该段地址对应到几号描述符?存放在哪个段描述符表中(GDT/LDT)?

  3. 0 号进程的进程控制块中的 ldt 数组的起始地址是多少?其中 1 号和 2 号描述符里存放的段起始地址分别是多少?

  4. 0 号进程的 mynext 变量所在的线性地址是多少?

实验过程及答案

延用第一关配置,非必要不重新配置环境

实验过程
ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

rm -rf cur
ln -s 1.3 cur
ls

cd 1.3/linux
make

cd ../..
./rungdb

另开一个终端

cd os/linux-0.11-lab
./mygdb

答案

4-2 课堂练习4.1:段式内存管理

段式内存管理以段为单位分配内存空间,段内连续,段间可以不连续。段可以很大,比如数据段、代码段、栈段等。本实训分析 Linux 0.11 的段式内存管理技术。

第1关0号进程和1号进程的mynext变量的取值变化

任务描述

本关任务调试版本 1.3 内核回答问题:

  1. 1 号进程的 output_char 函数调用会执行几次?
  2. 每次调用时,1 号进程和 0 号进程的 mynext 变量的值分别是多少?

相关知识

为了完成本关任务,你需要掌握:

  1. 如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令;
  2. 在 gdb 中如何正确查看 1 号进程的 mynext 变量的值;
  3. 如何在断点被捕获时自动执行一组命令;
  4. 段寄存器值(如 ds )的含义是什么;
  5. 如何查看进程的 LDT 。

编程要求

根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第三关的答案填写在/data/workspace/myshixun/第三关.txt中。

  1. 1 号进程的 output_char 函数调用会执行几次?
  2. 每次调用时,1 号进程和 0 号进程的 mynext 变量的值分别是多少?

实验过程及答案

实验过程
ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

rm -rf cur
ln -s 1.3 cur
ls

cd 1.3/linux
make

cd ../..
./rungdb

另开一个终端

cd os/linux-0.11-lab
./mygdb

由前两关实验我们得到了0号进程和1号进程的线性地址

答案

第2关LDTR 寄存器

任务描述

本关任务调试版本 1.3 内核回答问题:

  1. 1 号进程(在用户态)运行时,LDTR 寄存器的值是多少?它指向 GDT 中的几号描述符?该段描述符内的段起始地址是多少?指向哪个进程的 ldt 数组?
  2. 0 号进程(在用户态)运行时,LDTR 寄存器的值是多少?它指向 GDT 中的几号描述符?该段描述符内的段起始地址是多少?指向哪个进程的 ldt 数组?

相关知识

为了完成本关任务,你需要掌握:

  1. 在 bochsdbg 中如何跟踪到 1 号进程(在用户态)运行时;
  2. 如何查看 1 号进程的函数调用 output_char() 所对应的汇编指令;
  3. 在 bochsdbg 中如何查看 LDTR 的值?其含义是什么?
  4. 段寄存器值(如 DS )的含义是什么;
  5. 如何查看进程的 LDT ;
  6. 如何从段描述符的值计算出段的起始地址。

编程要求

根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第四关的答案填写在/data/workspace/myshixun/第四关.txt中。

  1. 1 号进程(在用户态)运行时,LDTR 寄存器的值是多少?它指向 GDT 中的几号描述符?该段描述符内存的段起始地址是多少?指向哪个进程的 ldt 数组?
  2. 0 号进程(在用户态)运行时,LDTR 寄存器的值是多少?它指向 GDT 中的几号描述符?该段描述符内存的段起始地址是多少?指向哪个进程的 ldt 数组?

实验过程及答案

延用第一关配置,非必要不重新配置环境

实验过程
ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

rm -rf cur
ln -s 1.3 cur
ls

cd 1.3/linux
make

cd ../..
./rundbg

答案

 第3关内核代码段和数据段的段基址

任务描述

本关任务调试版本 1.3 内核回答问题:

  1. 0 号进程执行到 sys_pause 时,默认数据段(CS)和默认数据段(DS)的值分别是多少?其基地址分别是多少?
  2. 1 号进程执行到 sys_pause 时,默认数据段(CS)和默认数据段(DS)的值分别是多少?其基地址分别是多少?

相关知识

为了完成本关任务,你需要掌握:

  1. 在 gdb 中如何查看全局描述符表;
  2. 在 Linux 0.11 中,内核程序运行时访问的线性地址空间是什么?;
  3. 在 bochsdbg 中如何查看 LDTR 的值?其含义是什么?;
  4. 段寄存器值(如 DS )的含义是什么;
  5. 如何从段描述符的值计算出段的起始地址。

编程要求

根据相关知识,修改版本 1.3 内核回答问题: 通过 gdb 调试查找答案,将第五关的答案填写在/data/workspace/myshixun/第五关.txt中。

1.0 号进程执行到 sys_pause 时,默认数据段(CS)和默认数据段(DS)的值分别是多少?其基地址分别是多少? 2.1 号进程执行到 sys_pause 时,默认数据段(CS)和默认数据段(DS)的值分别是多少?其基地址分别是多少?

实验过程及答案

延用第一关配置,非必要不重新配置环境

实验过程
ls /data/workspace/myshixun/exp1
cp /data/workspace/myshixun/exp1/1.3.tgz ~/os

cd os/linux-0.11-lab
tar -zxvf ../1.3.tgz 1.3

rm -rf cur
ln -s 1.3 cur
ls

cd 1.3/linux
make

cd ../..
./rungdb

另开一个终端

cd os/linux-0.11-lab
./mygdb

答案

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

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

相关文章

cache教程 3.HTTP服务器

上一节我们实现了单机版的缓存服务,但是我们的目标是分布式缓存。那么,我们就需要把缓存服务部署到多态机器节点上,对外提供访问接口。客户端就可以通过这些接口去实现缓存的增删改查。 分布式缓存需要实现节点间通信,而通信方法…

【面试经典150 | 二叉树】翻转二叉树

文章目录 写在前面Tag题目来源题目解读解题思路方法一:递归方法二:迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题…

4-SpringMVC

文章目录 项目源码地址回顾-MVC什么是MVC?MVC各部分组成 回顾-ServletMaven创建Web项目1、创建Maven父工程pom,并导入依赖2、用Maven新建一个Web Module3、代码:HelloServlet.java3、代码-hello.jsp3、代码-web.xml4、配置Tomcat5、浏览器测试…

github使用方法【附安装包】

如果你是一枚Coder,但是你不知道Github,那么我觉的你就不是一个菜鸟级别的Coder,因为你压根不是真正Coder,你只是一个Code搬运工。说明你根本不善于突破自己!为什么这么说原因很简单,很多优秀的代码以及各种…

高级系统架构设计师之路

前言:系 统 架 构 设 计 师 (System Architecture Designer)是项目开发活动中的众多角色之 一 ,它可 以是 一个人或 一个小组,也可以是一个团队。架构师 (Architect) 包含建筑师、设计师、创造 者、缔造者等含义,可以说&#xff0…

边缘计算系统设计与实践:引领科技创新的新浪潮

文章目录 一、边缘计算的概念二、边缘计算的设计原则三、边缘计算的关键技术四、边缘计算的实践应用《边缘计算系统设计与实践》特色内容简介作者简介目录前言/序言本书读者对象获取方式 随着物联网、大数据和人工智能等技术的快速发展,传统的中心化计算模式已经无法…

基于ssm人力资源管理系统论文

摘 要 随着企业员工人数的不断增多,企业在人力资源管理方面负担越来越重,因此,为提高企业人力资源管理效率,特开发了本人力资源管理系统。 本文重点阐述了人力资源管理系统的开发过程,以实际运用为开发背景&#xff0…

【大数据】Hudi 核心知识点详解(一)

Hudi 核心知识点详解(一) 1.数据湖与数据仓库的区别 ?1.1 数据仓库1.2 数据湖1.3 两者的区别 2.Hudi 基础功能2.1 Hudi 简介2.2 Hudi 功能2.3 Hudi 的特性2.4 Hudi 的架构2.5 湖仓一体架构 3.Hudi 数据管理3.1 Hudi 表数据结构3.1.1 .hoodie …

【C语言】位运算实现二进制数据处理及BCD码转换

文章目录 1.编程实验:按short和unsigned short类型分别对-12345进行左移2位和右移2位操作,并输出结果。2.编程实验:利用位运算实现BCD码与十进制数之间的转换,假设数据类型为unsigned char。3.编…

多线程(进阶二:CAS)

目录 一、CAS的简单介绍 CAS逻辑(用伪代码来描述) 二、CAS在多线程中简单的使用 三、原子类自增的代码分析 都看到这了,点个赞再走吧,谢谢谢谢谢 一、CAS的简单介绍 CAS的全称:“Compare And Swap”,字…

C语言——字符函数和字符串函数(一)

📝前言: 这篇文章对我最近学习的有关字符串的函数做一个总结和整理,主要讲解字符函数和字符串函数(strlen,strcpy和strncpy,strcat和strncat)的使用方法,使用场景和一些注意事项&…

Java入门项目--蚂蚁爱购

简介 这是一个靠谱的Java入门项目实战,名字叫蚂蚁爱购。 从零开发项目,视频加文档,十天就能学会开发JavaWeb项目,教程路线是:搭建环境> 安装软件> 创建项目> 添加依赖和配置> 通过表生成代码> 编写Ja…

解锁MySQL的威力:针对常见问题的快速解决指南

数据库和表的创建 创建数据库: CREATE DATABASE IF NOT EXISTS MyDatabase; USE MyDatabase;案例: 想象您要开始一个博客项目。首先,您需要一个地方来存储所有的文章和用户信息。上述命令帮助您创建了这样一个存储空间,名为MyDa…

RocketMQ-源码架构二

梳理一些比较完整,比较复杂的业务线 消息持久化设计 RocketMQ的持久化文件结构 消息持久化也就是将内存中的消息写入到本地磁盘的过程。而磁盘IO操作通常是一个很耗性能,很慢的操作,所以,对消息持久化机制的设计,是…

蒙特霍尔问题(选择三扇门后的车与羊)及其贝叶斯定理数学解释

1. 蒙特霍尔问题 有一个美国电视游戏节目叫做“Let’s Make a Deal”,游戏中参赛者将面对3扇关闭的门,其中一扇门背后有一辆汽车,另外两扇门后是山羊,参赛者如果能猜中哪一扇门后是汽车,就可以得到它。 通常&#xf…

javaee实验:文件上传及拦截器的使用

目录 文件上传ModelAttribute注解实验目的实验内容实验过程项目结构编写代码结果展示 文件上传 Spring MVC 提供 MultipartFile 接口作为参数来处理文件上传。 MultipartFile 提供以下方法来获取上传的文件信息:  getOriginalFilename 获取上传的文件名字&#x…

飞天使-linux操作的一些技巧与知识点2

TCP 的三次握手 第一次,客户端与服务端建立链接,需要发送请求连接的消息 第二次,服务端接口到数据后,返回一个确认的操作*(至此客户端和服务端链路建立成功) 第三次,服务端还需要发送要与客户端…

【Linux】探索Linux进程状态 | 僵尸进程 | 孤儿进程

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 目录 一、进程状态1.1运行状态1.2阻塞状态1.3挂起状态 二、具体L…

React中使用react-json-view展示JSON数据

文章目录 一、前言1.1、在线demo1.2、Github仓库 二、实践2.1、安装react-json-view2.2、组件封装2.3、效果2.4、参数详解2.4.1、src(必须) :JSON Object2.4.2、name:string或false2.4.3、theme:string2.4.4、style:object2.4.5、…

[ROS2] --- service

1 service介绍 1.1 service概念 话题通信是基于订阅/发布机制的,无论有没有订阅者,发布者都会周期发布数据,这种模式适合持续数据的收发,比如传感器数据。机器人系统中还有另外一些配置性质的数据,并不需要周期处理&…