freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

中斷、定時(shí)和系統(tǒng)調(diào)用-資料下載頁(yè)

2025-07-17 14:26本頁(yè)面
  

【正文】 ll()是所有系統(tǒng)調(diào)用的入口函數(shù),它根據(jù)調(diào)用號(hào)從 sys_call_table中調(diào)用相應(yīng)的系統(tǒng)調(diào)用服務(wù)程序。 ? 系統(tǒng)調(diào)用使用寄存器進(jìn)行參數(shù)傳遞 – 一般 C函數(shù)使用堆棧進(jìn)行參數(shù)傳遞 – 因?yàn)榧拇嫫鞯拇笮『蛿?shù)目都是有限的,因此系統(tǒng)調(diào)用的參數(shù)不能超過(guò)寄存器大小并且數(shù)目不能超過(guò) 6個(gè)。但可以使用其它技術(shù)傳遞更多參數(shù)。 ? 最終的系統(tǒng)調(diào)用服務(wù)程序由 C函數(shù)完成,因此調(diào)用參數(shù)仍然會(huì)被放到堆棧中。 系統(tǒng)調(diào)用相關(guān)源代碼析讀 .data ENTRY(sys_call_table) .long SYMBOL_NAME(sys_ni_syscall) /* 0, old setup() system call*/ .long SYMBOL_NAME(sys_exit) .long SYMBOL_NAME(sys_fork) .long SYMBOL_NAME(sys_read) .long SYMBOL_NAME(sys_write) .long SYMBOL_NAME(sys_open) /* 5 */ ... .long SYMBOL_NAME(sys_ni_syscall) /* 255 sys_epoll_ctl */ .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_wait */ .long SYMBOL_NAME(sys_ni_syscall) /* sys_remap_file_pages */ .long SYMBOL_NAME(sys_set_tid_address) arch/i386/kernel/: sys_call_table /* * Return to user mode is not as plex as all this looks, * but we want the default path for a system call return to * go as quickly as possible which is why some of this is * less clear than it otherwise should be. */ ENTRY(system_call) pushl %eax save orig_eax SAVE_ALL GET_CURRENT(%ebx) testb $0x02,tsk_ptrace(%ebx) PT_TRACESYS jne tracesys cmpl $(NR_syscalls),%eax jae badsys call *SYMBOL_NAME(sys_call_table)(,%eax,4) movl %eax,EAX(%esp) save the return value ENTRY(ret_from_sys_call) cli need_resched and signals atomic test cmpl $0,need_resched(%ebx) jne reschedule cmpl $0,sigpending(%ebx) jne signal_return restore_all: RESTORE_ALL arch/i386/kernel/: system_call asmlinkage ssize_t sys_write(unsigned int fd, const char * buf, size_t count) { ssize_t ret。 struct file * file。 ret = EBADF。 file = fget(fd)。 if (file) { if (filef_mode amp。 FMODE_WRITE) { struct inode *inode = filef_dentryd_inode。 ret = locks_verify_area(FLOCK_VERIFY_WRITE, inode, file, filef_pos, count)。 if (!ret) { ssize_t (*write)(struct file *, const char *, size_t, loff_t *)。 ret = EINVAL。 if (filef_op amp。amp。 (write = filef_opwrite) != NULL) ret = write(file, buf, count, amp。filef_pos)。 } } if (ret 0) dnotify_parent(filef_dentry, DN_MODIFY)。 fput(file)。 } return ret。 } 系統(tǒng)調(diào)用服務(wù)程序,以 sys_write為例 fs/: sys_write 在內(nèi)核中使用系統(tǒng)調(diào)用 ? 系統(tǒng)調(diào)用的接口是在庫(kù)函數(shù)中實(shí)現(xiàn)的 ? 內(nèi)核不能使用庫(kù)函數(shù) ? 內(nèi)核使用一系列 wrapper例程在內(nèi)核中實(shí)現(xiàn)系統(tǒng)調(diào)用接口 – 使用 7個(gè)宏簡(jiǎn)化接口定義 ? _syscall0, _syscall1, _syscall2, ... _syscall6 ? 每個(gè)宏在編譯時(shí)展開(kāi)成相應(yīng)的匯編函數(shù) ? 例: – _syscall3(int,write,int,fd,const char*,buf,unsigned int, count) 參考資料 ? 深入理解 Linux內(nèi)核 第二版 – 第四章,第六章,第九章
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1