亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

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

    在linux中,系統(tǒng)調(diào)用是指操作系統(tǒng)提供給用戶程序調(diào)用的一組特殊接口,用戶程序可以根據(jù)這組接口獲得操作系統(tǒng)內(nèi)核的服務;系統(tǒng)調(diào)用規(guī)定了用戶進程陷入內(nèi)核的具體位置,或者說規(guī)劃了用戶訪問內(nèi)核的路徑,只能從固定位置進入內(nèi)核。

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

    本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。

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

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

    系統(tǒng)調(diào)用,指的是操作系統(tǒng)提供給用戶程序調(diào)用的一組特殊接口,用戶程序可以根據(jù)這組接口獲得操作系統(tǒng)內(nèi)核的服務。它規(guī)定了用戶進程陷入內(nèi)核的具體位置,或者說規(guī)劃了用戶訪問內(nèi)核的路徑,只能從固定位置進入內(nèi)核。

    2.linux的系統(tǒng)調(diào)用

    對于現(xiàn)代操作系統(tǒng)來說,系統(tǒng)調(diào)用是用戶空間和內(nèi)核通訊的普遍手段,linux也不例外。按照功能區(qū)域,linux系統(tǒng)調(diào)用大致分為進程控制,文件訪問,系統(tǒng)控制,存儲管理,網(wǎng)絡管理,進程通訊等,詳細說明可以通過man 2 syscalls命令查看manpage說明。

    系統(tǒng)調(diào)用,僅僅通過軟中斷機制向內(nèi)核提交請求,進入系統(tǒng)調(diào)用對應服務。linux提供的用戶編程接口遵循了POSIX標準,這套標準除了定義一些標準的C函數(shù)外,提供了一套封裝例程將系統(tǒng)調(diào)用封裝供用戶編程使用。不過封裝并非必須的,如果你愿意直接調(diào)用,linux內(nèi)核也提供了一個syscall()函數(shù)來實現(xiàn)調(diào)用。通過下面一個例子了解C庫調(diào)用和直接調(diào)用的區(qū)別。

    /* **  file: demo.c **  author: eric.xu **  date:   2016-02-25 */ #include <syscall.h> #include <unistd.h> #include <sys/types.h> #include <stdio.h> int main(void) {     long id1, id2;          /* system call no 20, __NR_getpid equal to SYS_getpid  */     id1 = syscall(__NR_getpid);     printf("sys_call getpid %ldn", id1);     /* libc getpid */     id2 = getpid();     printf("libc getpid %ldn", id2);     return 0; }

    編譯運行,可以看到兩者結果一致。

    sys_call getpid 2899 libc getpid 2899

    3.linux系統(tǒng)調(diào)用實現(xiàn)

    當用戶態(tài)的進程調(diào)用一個系統(tǒng)調(diào)用時,CPU切換到內(nèi)核態(tài)并開始執(zhí)行內(nèi)核函數(shù)。因為內(nèi)核中每個系統(tǒng)調(diào)用都有唯一的標號,所以用戶態(tài)調(diào)用必須傳遞一個系統(tǒng)調(diào)用號的參數(shù)來確定具體的系統(tǒng)調(diào)用函數(shù)。所有的系統(tǒng)調(diào)用函數(shù)都是整數(shù),在內(nèi)核中,整數(shù)和0表示系統(tǒng)調(diào)用成功結束,負數(shù)則表示出錯條件,而這個錯誤值會存放在errno變量中作為出錯碼返回給應用程序。

    linux系統(tǒng)調(diào)用使用軟中斷實現(xiàn),在x86架構中調(diào)用int $0x80匯編指令,這條指令會產(chǎn)生向量為128的異常。而在arm架構中通過SWI指令進入內(nèi)核空間,下面看下這條指令的格式:

    SWI {cond} immed24;其中immed24表示24位立即數(shù)

    SWI異常中斷處理程序需要通過讀取引起軟件中斷的SWI指令,取得24位立即數(shù)?;静襟E是在SWI異常產(chǎn)生后,訪問SPSR寄存器判斷該指令是ARM指令還是Thumb指令,然后通過訪問LR寄存器得到整條指令地址,緊接著拿到該條指令,獲取最低24位立即數(shù)。

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號