《Linux內核原理與分析》第六周作業

課本:第五章 系統調用的三層機制(下)

  • 中斷向量0x80和system_call中斷服務程序入口的關系
    0x80對應著system_call中斷服務程序入口,在start_kernel函數中調用了trap_init函數,trap_init函數中調用了set_system_trap_gate函數,其中有系統調用的中斷向量0x80和system_call中斷服務程序入口的函數指針,system_call被聲明為一個函數,通過set_system_trap_gate函數綁定了中斷向量0x80和system_call中斷服務程序入口之后,一旦執行int 0x80,CPU就直接跳轉到system_call這個位置執行。
  • 系統調用用戶態接口和系統調用的內核處理函數是通過系統調用號匹配起來的
  • system_call中斷服務程序執行流程
    從entry(system_call)開始執行,根據系統調用號來查sys_call_table表中的位置,調用系統調用對應的處理函數,在syscall_exit里面判斷當前任務是否需要處理syscall_exit_work,進入syscall_exit_work,這是最常見的進程調度時機點。
    其中sys_call_table(,%eax,4)可以理解為,分派表中每個表項占4個字節,所以先把系統調用號(eax)乘以4,再加上sys_call_table分派表的起始地址,得到系統調用號對應的系統調用內核處理函數的指針。
    system_call的執行流程圖如下圖所示:
    1508801-20181118143836569-1441203302.png
    其中,cmpl部分是檢查系統調用號(應小于nr_syscalls),不合法即跳入syscall_badsys異常處理,movl部分是保存返回值到棧中,syscall_exit檢查是否有任務需要處理,有則進入syscall_exit_work,無則恢復現場。

    實驗:分析system_call中斷處理過程

    上周我進行實驗選擇的系統調用是38號rename,首先修改menu目錄下的test.c文件,添加Rename函數,并在main里menuconfig方法里調用,如下圖所示:
    1508801-20181118195021854-1866176104.png
    在進行make rootfs后,在qemu中的執行效果如下:
    1508801-20181118195107973-600043228.png
    后打開gdb,在gdb中調試,在start_kernel和rename的系統調用入口sys_rename兩個地方設置斷點,執行效果如下圖所示:
    1508801-20181118195457457-269264722.png
    在menuOS中執行rename指令后,斷點停在sys_rename系統調用入口處,如下圖所示:
    1508801-20181118195504542-728212522.png

對system_call的流程理解見上部分流程圖所示。

總結

本周實驗是了解系統調用在內核代碼中的處理過程,實驗實踐起來會比較容易,但真正了解其在內核代碼中的處理過程是十分困難的,在gdb環境下有些特殊的匯編代碼還無法跟蹤調試。使用 ALD(Assembly Language Debugger)這個匯編代碼調試器可以完成匯編代碼的調試,這會在以后進行實現。總統來說,進行本實驗之后對system_call的關鍵流程有了清晰的了解,具體的細節指令還有待研究。
本周的實驗遇到一個路徑問題。在LinuxKernel/menu目錄下直接執行init可執行文件,在menuOS下執行rename指令,發現指令返回提示成功,并成功更改文件名,如下圖所示:
1508801-20181118205014308-1992700209.png
后把文件名更改回原文件名,在qemu環境下啟動內核和menuOS,執行rename指令,指令返回error,并未成功更改文件名,如下圖所示:
1508801-20181118205238697-902808109.png
翻看rename函數源代碼,判斷應該是文件的路徑問題,源碼中使用的是相對路徑,更改文件路徑為絕對路徑依然不能成功更改文件名。就非常疑惑,qemu環境下運行menuOS默認的相對路徑到底在什么位置?
與同學討論,大多也遇到了這個問題。本來想使用mkdir系統調用指令來生成文件,后在shell中使用find指令查找此文件夾,但是遇到了訪問路徑權限不足的問題,升級到root權限也無濟于事。。。根據多個系統調用指令實驗初步猜想,qemu環境沒有默認的路徑,其直接從內存中讀寫文件。這只是猜想,還望了解此問題的同學、老師看到此博可以給予指導解答。

轉載于:https://www.cnblogs.com/intoxication/p/9979516.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389194.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用C#調用外部Ping命令獲取網絡連接情況

使用C#調用外部Ping命令獲取網絡連接情況 以前在玩Windows 98的時候,幾臺電腦連起來,需要測試網絡連接是否正常,經常用的一個命令就是Ping.exe。感覺相當實用。 現在 .net為我們提供了強大的功能來調用外部工具,并通過重定向輸…

Codeforces Round 493

心情不好&#xff0c;被遣散回學校 &#xff0c;心態不好 &#xff0c;為什么會累&#xff0c;一直微笑就好了 #include<bits/stdc.h> using namespace std; int main() {freopen("in","r",stdin);\freopen("out","w",stdout);i…

android動畫筆記二

從android3.0&#xff0c;系統提供了一個新的動畫&#xff0d;property animation, 為什么系統會提供這樣一個全新的動畫包呢&#xff0c;先來看看之前的補間動畫都有什么缺陷吧1、傳統的補間動畫都是固定的編碼&#xff0c;功能是固定的&#xff0c;擴展難度大。比如傳統動畫只…

回歸分析檢驗_回歸分析

回歸分析檢驗Regression analysis is a reliable method in statistics to determine whether a certain variable is influenced by certain other(s). The great thing about regression is also that there could be multiple variables influencing the variable of intere…

是什么樣的騷操作讓應用上線節省90%的時間

優秀的程序員 總會想著 如何把花30分鐘才能解決的問題 在5分鐘內就解決完 例如在應用上線這件事上 通常的做法是 構建項目在本地用maven打包 每次需要clean一次&#xff0c;再build一次 部署包在本地ide、git/svn、maven/gradie 及代碼倉庫、鏡像倉庫和云平臺間 來回切換 上傳部…

QQ API

QQ API設計說明書目錄一、引言 31.1 編寫目的 31.2 更新時間 3二、總體設計 3三、注冊的系統消息 33.1 WM_QQAPI_REGISTER 33.2 WM_QQAPI_REGISTER_RESP 43.3 WM_QQAPI_AVAILABLE 4四、從設備到QQ的自定義事件 54.1 EVENT_QQAPI_SET_AUDIODEVICE …

Ubuntu 18.04 下如何配置mysql 及 配置遠程連接

首先是大家都知道的老三套&#xff0c;啥也不說上來就放三個大招&#xff1a; sudo apt-get install mysql-serversudo apt isntall mysql-clientsudo apt install libmysqlclient-dev 這三步下來mysql就裝好了&#xff0c;然后我們偷偷檢查一下 sudo netstat -tap | grep mysq…

數據科學與大數據技術的案例_主數據科學案例研究,招聘經理的觀點

數據科學與大數據技術的案例I’ve been in that situation where I got a bunch of data science case studies from different companies and I had to figure out what the problem was, what to do to solve it and what to focus on. Conversely, I’ve also designed case…

導致View樹遍歷的時機

遍歷View樹意味著整個View需要重新對其包含的子視圖分配大小并重繪&#xff0c;導致重新遍歷的原因主要有三個 1.視圖本身內部狀況變化引起重繪。 2.第二個是View樹內部添加或者刪除了View。 3.View本身的大小及可見性發生變化。 能引起View樹重新遍歷的操作&#xff0c;總…

什么是Hyperledger?Linux如何圍繞英特爾的區塊鏈項目構建開放平臺?

訪問區塊鏈會議并關注區塊鏈新聞時&#xff0c;不可避免地&#xff0c;您會遇到Linux基金會的Hyperledger。理解像比特幣、以太坊這樣的加密貨幣還算相對容易的&#xff0c;Hyperledger卻不然。但如果你多研究研究&#xff0c;你會發現一些令人興奮的非貨幣、工業區塊鏈的應用項…

隊列的鏈式存儲結構及其實現_了解隊列數據結構及其實現

隊列的鏈式存儲結構及其實現A queue is a collection of items whereby its operations work in a FIFO — First In First Out manner. The two primary operations associated with them are enqueue and dequeue.隊列是項目的集合&#xff0c;由此其操作以FIFO(先進先出)的方…

安裝

、添加一個新項目->選擇類庫模板->命名為DBCustomAction 2、單擊項目右鍵->添加新項->選擇安裝程序類(命名為DBCustomAction.cs) 3、在 服務器資源管理器中添加->連接到 數據庫->指定用戶密碼(選擇允許保存密碼)-> 數據庫選擇master 4、切換到DBCustomAct…

cad2016珊瑚_預測有馬的硬珊瑚覆蓋率

cad2016珊瑚What’s the future of the world’s coral reefs?世界珊瑚礁的未來是什么&#xff1f; In February of 2020, scientists at University of Hawaii Manoa released a study addressing this very question. The models they developed forecasted a 70–90% worl…

EChart中使用地圖方式總結(轉載)

EChart中使用地圖方式總結 2018年02月06日 22:18:57 來源&#xff1a;https://blog.csdn.net/shaxiaozilove/article/details/79274772最近在仿照EChart公交線路方向示例&#xff0c;開發表示排水網和污水網流向地圖&#xff0c;同時地圖上需要疊加排放口、污染源、污水處理廠等…

android mvp模式

越來越多人討論mvp模式&#xff0c;mvp在android應用開發中獲得更多的重視&#xff0c;這里說一下對MVP的簡單了解。 什么是 MVP? MVP模式使邏輯從視圖層分開&#xff0c;目的是我們在屏幕上怎么表現&#xff0c;和界面如何工作的所有事情就完全分開了。 View顯示數據&…

Node.js REPL(交互式解釋器)

2019獨角獸企業重金招聘Python工程師標準>>> Node.js REPL(交互式解釋器) Node.js REPL(Read Eval Print Loop:交互式解釋器) 表示一個電腦的環境&#xff0c;類似 Window 系統的終端或 Unix/Linux shell&#xff0c;我們可以在終端中輸入命令&#xff0c;并接收系統…

中國移動短信網關CMPP3.0 C#源代碼:使用示例

中國移動短信網關CMPP3.0 C#源代碼&#xff1a;使用示例 中國移動短信網關CMPP3.0 C#源代碼使用&#xff0c;在上一篇文章中我介紹過cmpp3.0,這段時間因為也做關于移動短信網關的開發&#xff0c;在這里給大家一個演示如何使用cmpp3.0開發移動短信網關。Using Tiray.SMS... Ti…

用python進行營銷分析_用python進行covid 19分析

用python進行營銷分析Python is a highly powerful general purpose programming language which can be easily learned and provides data scientists a wide variety of tools and packages. Amid this pandemic period, I decided to do an analysis on this novel coronav…

名稱

命名規則&#xff1a;Go中函數、變量、常量、類型、語句標簽和包的名稱都遵循一個規則&#xff0c;開頭是一個字母或下劃線&#xff0c;后面跟任意字符、數字和下劃線&#xff0c;并區分大小寫。例如&#xff1a;heapSort和HeapSort是不同名稱。關鍵字&#xff1a;Go有25個關鍵…

Alpha沖刺第二天

Alpha第二天 1.團隊成員 鄭西坤 031602542 &#xff08;隊長&#xff09; 陳俊杰 031602504陳順興 031602505張勝男 031602540廖鈺萍 031602323雷光游 031602319蘇芳锃 0316023302.項目燃盡圖 3.項目進展 時間工作內容11月18日UI設計、初步架構搭建11月19日UI設計、服務器的進一…