問一個傳遞參數的問題

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

問一個傳遞參數的問題

文章rz600000 » 週一 6月 09, 2008 1:46 am

1055 struct file_operations {

......
1067 int (*mmap) (struct file *, struct vm_area_struct *);
.....
1085 };

以上 kernel source code 中file_operation 的 mmap proto type

而從user space 呼叫的 proto type

void *mmap (void *__addr, size_t __len, int __prot,
int __flags, int __fd, __off_t __offset) __THROW;
-------------------------------------------------------------
(問題一) user space 所 call 的mmap 應該是一個由glibc 中的一個function call 之後會透過 system call 再轉到 kernel sapce 去 call kernel 的mmap call 是這樣嗎

如: user space mmap -> system call-> kernel space mmap
是這樣的流程嗎

(問題二)
user space 中所傳遞過去的參數中 並沒有struct file *, struct vm_area_struct * 這兩個參數 這兩個參數是由kernel幫忙傳遞嗎

還有就是我有抓glibc 的 source code 我找不到 他查詢要呼叫哪個system call的地方 還有到kernel 的mmap時 是哪裡幫忙傳遞 file 跟 vma 這兩個參數的

感謝各位~~~
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm

文章tomjpsun » 週一 6月 09, 2008 10:37 am

(問題一) user space mmap -> system call-> kernel space mmap
是這樣的流程嗎 ?
yes
(問題二)
struct file *, struct vm_area_struct * 這兩個參數 這兩個參數是由kernel幫忙傳遞嗎
yes
/usr/include/bits/syscall.h #define SYS_mmap NR_mmap
/usr/include/bits/syscall.h #define SYS_mmap2 NR_mmap2
對應到 kernel source 裡的是
do_mmap( )
tomjpsun
可愛的小學生
可愛的小學生
 
文章: 82
註冊時間: 週一 1月 03, 2005 2:40 pm

文章rz600000 » 週一 6月 09, 2008 10:43 am

可以請問樓上那位強者..

在 glibc中的 mmap裡 哪裡有找出對應哪個system call的 code

還有感恩回答問題 謝謝
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm

文章tomjpsun » 週一 6月 09, 2008 1:14 pm

好像是由 __mmap() 呼叫組語, 假設以 x86 的 source 來看:
mmap.S :
svc SYS_ify(mmap)
其中 SYS_ify(mmap) macro 展開即為 mmap system call number

只是抓 source 來找而已。

另外,我很好奇 NR_mmap 與 NR_mmap2 到底不同在哪裡?
tomjpsun
可愛的小學生
可愛的小學生
 
文章: 82
註冊時間: 週一 1月 03, 2005 2:40 pm

文章rz600000 » 週二 6月 10, 2008 1:26 am

感恩 我也去研究一下
rz600000
可愛的小學生
可愛的小學生
 
文章: 44
註冊時間: 週日 10月 22, 2006 10:18 pm


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客