課堂練習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.pswp.cn/news/211323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211323.shtml
英文地址,請注明出處:http://en.pswp.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.編…

FPGA | Verilog基礎語法

這里寫自定義目錄標題 Case語句系統任務$dumpfile | 為所要創建的VCD文件指定文件名。$dumpvar | 指定需要記錄到VCD文件中的信號$fscanf$fread菜鳥教程連接 Case語句 case(case_expr)condition1 : true_statement1 ;condition2 : true_stat…

多線程(進階二:CAS)

目錄 一、CAS的簡單介紹 CAS邏輯(用偽代碼來描述) 二、CAS在多線程中簡單的使用 三、原子類自增的代碼分析 都看到這了,點個贊再走吧,謝謝謝謝謝 一、CAS的簡單介紹 CAS的全稱:“Compare And Swap”,字…

C語言——字符函數和字符串函數(一)

📝前言: 這篇文章對我最近學習的有關字符串的函數做一個總結和整理,主要講解字符函數和字符串函數(strlen,strcpy和strncpy,strcat和strncat)的使用方法,使用場景和一些注意事項&…

python常見庫的匯總

python常見庫 一、爬蟲二、界面開發三、圖片處理四、視頻處理、視頻剪輯五、音頻處理六、數據處理七、數據庫八、網頁開發九、神經學習、AI開發十、打包十一、Excel處理十二、微信十三、控制鼠標鍵盤十四、手柄十五、控制外設十六、郵箱十七、短信 一、爬蟲 Requests&#xff…

Java入門項目--螞蟻愛購

簡介 這是一個靠譜的Java入門項目實戰,名字叫螞蟻愛購。 從零開發項目,視頻加文檔,十天就能學會開發JavaWeb項目,教程路線是:搭建環境> 安裝軟件> 創建項目> 添加依賴和配置> 通過表生成代碼> 編寫Ja…

解鎖MySQL的威力:針對常見問題的快速解決指南

數據庫和表的創建 創建數據庫: CREATE DATABASE IF NOT EXISTS MyDatabase; USE MyDatabase;案例: 想象您要開始一個博客項目。首先,您需要一個地方來存儲所有的文章和用戶信息。上述命令幫助您創建了這樣一個存儲空間,名為MyDa…

Tomcat使用https方式連接

Tomcat使用https方式連接 攏共分兩步,第一步:生成密鑰。第二步:修改配置。 第一步:生成密鑰。 keytool -genkey -v -alias tomcat -keyalg RSA -validity 365 -keystore /usr/tomcat-8.5/conf/tomcat.keystore第二步&#xff1…

RocketMQ-源碼架構二

梳理一些比較完整,比較復雜的業務線 消息持久化設計 RocketMQ的持久化文件結構 消息持久化也就是將內存中的消息寫入到本地磁盤的過程。而磁盤IO操作通常是一個很耗性能,很慢的操作,所以,對消息持久化機制的設計,是…

華為機試真題 C++ 實現【字符串重新排列】

題目 給定一個字符串s,s包括以空格分隔的若干個單詞,請對s進行如下處理后輸出: 1、單詞內部調整:對每個單詞字母重新按字典序排序 2、單詞間順序調整: 1)統計每個單詞出現的次數,并按次數降序…

蒙特霍爾問題(選擇三扇門后的車與羊)及其貝葉斯定理數學解釋

1. 蒙特霍爾問題 有一個美國電視游戲節目叫做“Let’s Make a Deal”,游戲中參賽者將面對3扇關閉的門,其中一扇門背后有一輛汽車,另外兩扇門后是山羊,參賽者如果能猜中哪一扇門后是汽車,就可以得到它。 通常&#xf…

筆記68:Pytorch中repeat函數的用法

repeat 相當于一個broadcasting的機制 repeat(*sizes) 沿著指定的維度重復tensor。不同與expand(),本函數復制的是tensor中的數據。 import torch import torch.nn.functional as F import numpy as np a torch.Tensor(128,1,512) B a.repeat(1,5,1) print(B.s…