各位前輩,當代碼執行一個系統調用fork()后,為什麼如果共享頁設置了寫時拷貝位,在父進程之前調度子進程將具有優越性?內核怎麼能使子進

tags:    時間:2013-12-26 04:00:18
各位前輩,當代碼執行一個系統調用fork()后,為什麼如果共享頁設置了寫時拷貝位,在父進程之前調度子進程將具有優越性?內核如何能使子進
各位前輩,當代碼執行一個系統調用fork()后,為什麼如果共享頁設置了寫時拷貝位,在父進程之前調度子進程將具有優越性?內核如何能使子進程先運行?

謝謝各位的幫助!!!!

------解決方案--------------------
父進程調用fork后,進入系統調用 從系統調用返回前可能會接受調度。所以。父子進程誰先返回到用戶空間是不確定的,不過,一般來說。父進程在可執行隊列的前邊,所以先運行的可能較大,如果想要讓子進程先返回到用戶空間,可以在進入系統調用的時候。設置標誌位VFORK
這樣,父進程在調用後會進入睡眠,直到子進程退出或者調用exeve()
------解決方案--------------------
因為子進程通常在fork之後會執行execv,載入另外一個鏡像,而拋棄原來和父進程共享的內存。而父進程如果先執行,其會修改共享內存的內容從而造成不必要的複製操作。

通過將子進程放在隊列的前面做到。

推薦閱讀文章

Bookmark the permalink ,來源:互聯網