亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發(fā)消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術(shù)支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

理解Linux的系統(tǒng)調(diào)用

添加時間:2010-12-10  添加: admin 

現(xiàn)在,您或許正在查看設(shè)備驅(qū)動程序,并感到奇怪:“函數(shù) foo_read() 是如何被調(diào)用的?”或者可能疑惑: “當我輸入 cat /proc/cpuinfo 時,cpuinfo() 函數(shù)是如何被調(diào)用的?”內(nèi)核完成引導后,控制流就從相對直觀的“接下來調(diào)用哪個函數(shù)?”改變?yōu)槿Q于系統(tǒng)調(diào)用、異常和中斷。

什么是系統(tǒng)調(diào)用?

字面上講,系統(tǒng)調(diào)用(也稱為“syscall”)就是一條類似于“add”或者“jump”的指令。從更高的層面上講,系統(tǒng)調(diào)用是用戶級程序要求操 作系統(tǒng)為它做某些事情的途徑。如果您正在編寫程序,需要讀取某個文件,那么要使用一個系統(tǒng)調(diào)用來要求操作系統(tǒng)為您讀取那個文件。

系統(tǒng)調(diào)用詳述

這里是系統(tǒng)調(diào)用的工作原理。首先,用戶程序為系統(tǒng)調(diào)用設(shè)置參數(shù)。其中一個參數(shù)是系統(tǒng)調(diào)用編號(稍后對此進行詳述)。注意,所有這些都是由庫函數(shù)自動 完成的,除非您是使用匯編編程。參數(shù)設(shè)置完成后,程序執(zhí)行“系統(tǒng)調(diào)用”指令。這個指令會導致一個異常:產(chǎn)生一個事件,這個事件會致使處理器跳轉(zhuǎn)到一個新的 地址,并開始執(zhí)行那里的代碼。

新地址的指令會保存程序的狀態(tài),計算出應該調(diào)用哪個系統(tǒng)調(diào)用,調(diào)用內(nèi)核中實現(xiàn)那個系統(tǒng)調(diào)用的函數(shù),恢復用戶程序狀態(tài),然后將控制權(quán)返還給用戶程序。系統(tǒng)調(diào)用是設(shè)備驅(qū)動程序中定義的函數(shù)最終被調(diào)用的一種方式。

這就是系統(tǒng)調(diào)用如何工作的一個簡短說明。接下來,我們將為那些對內(nèi)核事實上如何完成感到好奇的這些人提供詳盡的細節(jié)。不要擔心您是否完全理解所有細 節(jié) —— 只需要記住這是內(nèi)核中的函數(shù)最終被調(diào)用的一個途徑 —— 沒有任何神秘之處。您可以追蹤控制流在內(nèi)核中的全部歷程 —— 有時會有些困難,但是您可以做得到。

系統(tǒng)調(diào)用示例:1

這里非常適合于開始根據(jù)理論展示一些代碼。我們將研究 read() 系統(tǒng)調(diào)用的過程,首先從系統(tǒng)調(diào)用指令被執(zhí)行的時候開始。使用 PowerPC 體系結(jié)構(gòu)作為代碼體系結(jié)構(gòu)相關(guān)部分的示例。在 PowerPC 上,當執(zhí)行一個系統(tǒng)調(diào)用時,處理器跳轉(zhuǎn)到地址 0xc00。那個位置的代碼是在文件 arch/ppc/kernel/head.S 中定義的。類似如下:


/* System call */
. = 0xc00
SystemCall:
EXCEPTION_PROLOG
EXC_XFER_EE_LITE(0xc00, DoSyscall)

/* Single step - not used on 601 */
EXCEPTION(0xd00, SingleStep, SingleStepException, EXC_XFER_STD)
EXCEPTION(0xe00, Trap_0e, UnknownException, EXC_XFER_EE)

這段代碼所做的事情是,保存一些狀態(tài),然后調(diào)用另一個名為

DoSyscall

的函數(shù)。

EXCEPTION_PROLOG 是一個宏,負責從用戶空間到內(nèi)核空間的切換,這需要保存用戶進程的寄存器狀態(tài)。使用此例程的地址和函數(shù) DoSyscall 的地址來調(diào)用 EXC_XFER_EE_LITE。最后,某些狀態(tài)將會被保存,DoSyscall 將會被調(diào)用。后面的兩行在地址 0xd000xe00 保存兩個異常向量。

EXC_XFER_EE_LITE 類似如下:


#define EXC_XFER_EE_LITE(n, hdlr) \
EXC_XFER_TEMPLATE(n, hdlr, n+1, COPY_EE, transfer_to_handler, \
ret_from_except)

 

EXC_XFER_TEMPLATE 是另一個宏,代碼類似如下:


    #define EXC_XFER_TEMPLATE(n, hdlr, trap, copyee, tfer
    分享到:

    頂部 】 【 關(guān)閉
    版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
    聯(lián)系電話:(0757)22630313、22633833
    中華人民共和國增值電信業(yè)務經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
    網(wǎng)站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
    察察 工商 網(wǎng)安 舉報有獎  警警  手機打開網(wǎng)站

        <strike id="y3olq"><label id="y3olq"></label></strike>