兩個行程open同一個memory device且都mmap到logical address來作讀寫,會產生問題嗎?

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

兩個行程open同一個memory device且都mmap到logical address來作讀寫,會產生問題嗎?

文章hillvskobe » 週一 3月 01, 2010 10:58 am

如題~
我有兩個行程A和B,各自都會產生一個while(1) thread,而thread都會open同一個
memory device且mmap到logical address來作讀寫,以下為我的程式碼的"示意"寫法:

int process_A()
{
pthread_create(thread_A);

pthread_join(); //wait thread_A terminate

}

void thraed_A()
{
int fd;
unsigned int *addr;

fd = open("/dev/mem_dev", O_RDWR);
addr = mmap(0, 0x1000000, PROT_WRITE, MAP_SHARED, fd, 0)

while(1)
{
if(Condition == TRUE)
{
read/write on addr;
}

}
}

int process_B()
{
pthread_create(thread_B);

pthread_join(); //wait thread_B terminate

}

void thraed_B()
{
int fd;
unsigned int *addr;

fd = open("/dev/mem_dev", O_RDWR);
addr = mmap(0, 0x1000000, PROT_WRITE, MAP_SHARED, fd, 0)

while(1)
{
if(Condition == TRUE)
{
read/write on addr;
}

}
}

兩個行程open同一個memory device且都mmap到logical address來作讀寫,會產生不可預知的問題嗎?

在我的測試中,其中一個process好像都會被莫名的kill掉,甚至還會出現page fault?
但若關掉其中一個,另一個都能*正常*執行!!!

請問各位大大,若兩個while(1)行程都到open同一個memory device且mmap到logical address作讀寫,
有地方需要注意的嘛?還是根本不行同時open同一個memory device且mmap到logical address作讀寫???


謝謝!!!
hillvskobe
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週五 3月 28, 2008 11:15 am

Re: 兩個行程open同一個memory device且都mmap到logical address來作讀寫,會產生問題

文章ashindenise » 週四 4月 15, 2010 6:56 am

沒同步?
no give up , no fail
ashindenise
可愛的小學生
可愛的小學生
 
文章: 2
註冊時間: 週三 12月 24, 2008 7:58 am

Re: 兩個行程open同一個memory device且都mmap到logical address來作讀寫,會產生問題

文章hillvskobe » 週四 4月 15, 2010 9:26 pm

不是資料不同步的問題,是其中一個行程會被莫名殺掉???
hillvskobe
可愛的小學生
可愛的小學生
 
文章: 12
註冊時間: 週五 3月 28, 2008 11:15 am


回到 embedded system

誰在線上

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