久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

linux中系統調用的概念是什么

167次閱讀
沒有評論

共計 1626 個字符,預計需要花費 5 分鐘才能閱讀完成。

這篇文章主要講解了“linux 中系統調用的概念是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“linux 中系統調用的概念是什么”吧!

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

本教程操作環境:linux7.3 系統、Dell G3 電腦。

linux 中什么是系統調用

1. 什么是系統調用

系統調用,指的是操作系統提供給用戶程序調用的一組特殊接口,用戶程序可以根據這組接口獲得操作系統內核的服務。它規定了用戶進程陷入內核的具體位置,或者說規劃了用戶訪問內核的路徑,只能從固定位置進入內核。

2.linux 的系統調用

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

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

/*
** 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 系統調用實現

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

linux 系統調用使用軟中斷實現,在 x86 架構中調用 int $0x80 匯編指令,這條指令會產生向量為 128 的異常。而在 arm 架構中通過 SWI 指令進入內核空間,下面看下這條指令的格式:

SWI {cond} immed24; 其中 immed24 表示 24 位立即數 

SWI 異常中斷處理程序需要通過讀取引起軟件中斷的 SWI 指令,取得 24 位立即數。基本步驟是在 SWI 異常產生后,訪問 SPSR 寄存器判斷該指令是 ARM 指令還是 Thumb 指令,然后通過訪問 LR 寄存器得到整條指令地址,緊接著拿到該條指令,獲取最低 24 位立即數。

感謝各位的閱讀,以上就是“linux 中系統調用的概念是什么”的內容了,經過本文的學習后,相信大家對 linux 中系統調用的概念是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計1626字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 绵阳市| 武山县| 琼结县| 织金县| 盐源县| 兴山县| 华安县| 隆尧县| 贵定县| 许昌县| 晋江市| 都昌县| 神木县| 安岳县| 彩票| 合作市| 巩留县| 湘乡市| 边坝县| 星座| 马边| 马龙县| 嘉祥县| 遂昌县| 新巴尔虎左旗| 桦川县| 长兴县| 洪洞县| 裕民县| 罗城| 太仆寺旗| 隆尧县| 曲周县| 南宁市| 康定县| 鄱阳县| 淅川县| 红安县| 靖江市| 忻城县| 永年县|