日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第五章 系統調用

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第五章 系統調用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 系統調用的作用

  • 爲用戶空間提供了一種硬件的抽象接口。如Linux的“萬物皆文件”的思想,APP讀取文件不用關心磁盤或者文件系統的類型

  • 保證系統的穩定和安全。因爲內核是作爲Hardware跟APP之間的中間人,可以避免APP不正確地使用Hardware,竊取其他進程的資源,或其他危害系統的事情。

  • 實現多任務和虛擬內存的需要

2. 在Linux中,系統調用是除了異常和陷入之外,用戶空間訪問kernel的唯一手段。

3. 系統調用在出現錯誤的時候C庫會把錯誤碼寫入errno全局變量。通過調用perror()庫函數,可以把變量翻譯成用戶可以理解的錯誤字符串。

4. 在include/linux/syscalls.h中列出了一些列定義系統調用時用到的宏,如:

  • #define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
  • #define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
  • #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
  • #define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
  • #define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
  • #define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
  • #define SYSCALL_DEFINEx(x, sname, ...) \
  • SYSCALL_METADATA(sname, x, __VA_ARGS__) \
  • __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
  • 如open系統調用的定義 (fs/open.c中):

  • SYSCALL_DEFINE3(open,constchar __user *, filename,int, flags,umode_t, mode)
  • {
  • if(force_o_largefile())
  • flags |= O_LARGEFILE;
  • return do_sys_open(AT_FDCWD, filename, flags, mode);
  • }
  • 5. 在定義系統調用是會使用asmlinkage限定詞,目的是告訴編譯器僅從棧中提取該函數的參數。

    6. 每一個系統調用都被賦予一個系統調用號,獨一無二。用戶空間的進程執行系統調用時會將系統調用號傳遞給kernel,kernel據此判斷需要執行那個系統調用。

    在arm架構的kernel代碼,系統調用表如下,其中在表中的號就是系統調用號。

    ?

  • arch/arm/kernel/entry-common.S中:
  • .type sys_call_table,#object
  • ENTRY(sys_call_table)
  • #include "calls.S"
  • arch/arm/kernel/call.S中:
  • /*0*/ CALL(sys_restart_syscall)
  • CALL(sys_exit)
  • CALL(sys_fork)
  • CALL(sys_read)
  • CALL(sys_write)
  • /*5*/ CALL(sys_open)
  • CALL(sys_close)
  • CALL(sys_ni_syscall)/* was sys_waitpid */
  • CALL(sys_creat)
  • ......
  • 在arm64架構的kernel代碼中如下:

  • arch/arm64/kernel/sys.c中:
  • #undef __SYSCALL
  • #define __SYSCALL(nr, sym) [nr] = sym,
  • /*
  • *The sys_call_table array must be 4K aligned to be accessible from
  • * kernel/entry.S.
  • */
  • void *sys_call_table[__NR_syscalls] __aligned(4096)={
  • [0... __NR_syscalls -1]= sys_ni_syscall,
  • #include <asm/unistd.h>
  • };
  • arch/arm64/include/asm/unistd32.h中:
  • #define __NR_restart_syscall 0
  • __SYSCALL(__NR_restart_syscall, sys_restart_syscall)
  • #define __NR_exit 1
  • __SYSCALL(__NR_exit, sys_exit)
  • #define __NR_fork 2
  • __SYSCALL(__NR_fork, sys_fork)
  • #define __NR_read 3
  • __SYSCALL(__NR_read, sys_read)
  • #define __NR_write 4
  • __SYSCALL(__NR_write, sys_write)
  • #define __NR_open 5
  • __SYSCALL(__NR_open, compat_sys_open)
  • #define __NR_close 6
  • __SYSCALL(__NR_close, sys_close)
  • /*7 was sys_waitpid */
  • __SYSCALL(7, sys_ni_syscall)
  • #define __NR_creat 8
  • __SYSCALL(__NR_creat, sys_creat)
  • ......
  • 7. Linux內核通過軟中斷引發一個異常來促使系統切換到內核態去執行異常處理程序,在該異常處理程序中會或獲得用戶傳給的系統調用號和其他參數,根據系統調用號決定執行那個系統調用處理程序。對於arm架構是通過svc軟中斷指令實現的。

    8. copy_to_user()和copy_from_user()

    在內核空間接受一個用戶空間的指針的時候,需要做如下檢查:

    • 指針指向的內存區域屬於用戶空間

    • 指針指向額內存區域在進程的地址空間裏

    • 如果是讀,該內存應被標記爲可讀;?如果是寫,該內存應被標記爲可寫;?如果是可執行,該內存應被標記爲可執行;

    上述的兩個方法在完成了必須的檢查和內核空間和用戶空間之間數據拷貝?。需要注意的是返回值的含義:

    • 如果執行失敗,返回沒能完成拷貝的數據的字節數

    • 成功的話,返回0

    • 如果在檢查用戶空間指針合法性時出錯,返回 -EFAULT

    此外,當包含用戶數據的頁被換出到硬盤上而不是在物理內存上時,這個兩函數都會引起阻塞,此時進程會休眠,知道缺頁處理程序將頁從硬盤重新換回到物理內存。

    9. 內核執行系統調用的時候處於進程上下文,current指針指向當前任務,即引發系統調用的那個進程

    10. 在進程上下文,內核可以睡眠並且可以被搶佔。

    11. 必須保證系統調用是可衝入的。

    12. 下面是執行系統調用的連鎖反應:陷入內核,傳遞系統調用號和參數,執行正確的系統調用函數,並把返回值帶回到用戶空間

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?



    來自為知筆記(Wiz)



    總結

    以上是生活随笔為你收集整理的第五章 系統調用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久久网址| 日本a区| 国产人成一区二区三区影院 | 少妇一级淫片免费观看 | 日韩av一区二区在线观看 | 亚洲人成无码网站久久99热国产 | 国产一区免费观看 | 国内9l自拍 | 色视频综合 | 性欧美又大又长又硬 | 日本xxxx免费 | 国产精品天美传媒入口 | 超鹏在线视频 | 99国产精品免费视频 | 黄色大片a级 | 香蕉视频最新网址 | 欧美精品不卡 | 成人日韩 | 精品视频第一页 | 中文婷婷| 国产精品日韩无码 | 亚洲欧美在线成人 | 欧美日韩精品一区 | 成人app在线 | 视频1区| 一个色在线视频 | 在线一区二区观看 | 国产免费观看久久黄av片 | 爱情岛亚洲论坛入口 | 色婷婷综合久久久久中文一区二区 | 青青草在线视频免费观看 | 全部免费毛片在线播放一个 | 五月天一区二区三区 | 色婷婷电影网 | 先锋资源中文字幕 | 色欲AV无码精品一区二区久久 | 日韩欧美一区二区三区久久婷婷 | 在线观看中文字幕一区二区 | 老头吃奶性行交 | 美女爆乳18禁www久久久久久 | 亚洲经典在线观看 | 欧美 日本 国产 | 欧美性教育视频 | 隔壁邻居是巨爆乳寡妇 | 国产91精品高潮白浆喷水 | 97超碰人人澡人人爱学生 | 国产高清小视频 | 红桃视频一区二区三区免费 | 九色蝌蚪91 | 日本成人精品在线 | 成人啪啪网站 | 黄色a毛片| 国内精品视频在线 | 精品人妻一区二区免费视频 | 欧美性色黄大片手机版 | 国产剧情一区在线 | 成人免费观看视频大全 | 熊猫成人网 | www.在线观看av| 亚洲一区二三区 | 黄片毛片av | 久久亚洲中文字幕无码 | 女人av| 亚洲乱码国产乱码精品精大量 | 国产美女无遮挡网站 | 两个女人互添下身爱爱 | 欧美性第一页 | 欧美国产三级 | 国产成人亚洲欧洲在线 | 日本黄色一区 | 俺去俺来也在线www色官网 | 日韩精品在线观看一区二区三区 | 中文字幕一区二区三区在线播放 | 亚洲一区第一页 | 婷婷五月情 | 韩国三级做爰高潮 | 国产一区二区三区四区五区美女 | 国产一区在线不卡 | 久久久999国产精品 天堂av中文在线 | 看片日韩 | av线上免费观看 | 天天综合在线视频 | 日韩精品中文字幕在线 | 在线观看网址你懂的 | 国产黄色片在线免费观看 | 玩偶姐姐在线看 | 日本公妇乱淫免费视频一区三区 | 欧美一级二级片 | 婷婷亚洲综合五月天小说 | 国产网站在线免费观看 | 久久九九热 | 欧美大片a| 国内毛片毛片毛片毛片毛片 | 国产性在线 | 亚洲成人一级 | 麻豆视频在线观看免费 | 国产精品第二十页 | 天天摸夜夜操 | 国产午夜精品免费一区二区三区视频 |