對計(jì)算機(jī)考研操作系統(tǒng)考點(diǎn)還不熟悉的同學(xué)們趕緊看過來吧!小編以“哲學(xué)家進(jìn)餐問題”為例,為大家整理了有關(guān)2024計(jì)算機(jī)考研操作系統(tǒng)考點(diǎn)的內(nèi)容,具體如下:
2024計(jì)算機(jī)考研操作系統(tǒng)高頻考點(diǎn)“哲學(xué)家進(jìn)餐問題”
  一、哲學(xué)家進(jìn)餐問題
  哲學(xué)家進(jìn)餐問題是典型的同步問題。該問題是描述有五個(gè)哲學(xué)家共用一張圓桌,分別坐在周圍的五張椅子上,在圓桌上有五只筷子分別放在哲學(xué)家左右,他們的生活方式是交替地進(jìn)行思考和進(jìn)餐。平時(shí),一個(gè)哲學(xué)家進(jìn)行思考,饑餓時(shí)便試圖取用其左右最靠近他的筷子,只有在他拿到兩只筷子時(shí)才能進(jìn)餐。進(jìn)餐完畢,放下筷子繼續(xù)思考。
  經(jīng)分析可知,哲學(xué)家進(jìn)餐問題是一個(gè)并發(fā)控制問題,要求多個(gè)進(jìn)程之間分配多個(gè)資源且不會(huì)出現(xiàn)死鎖或饑餓問題。放在桌子上的筷子是臨界資源,在一段時(shí)間內(nèi)只允許一位哲學(xué)家使用。為了實(shí)現(xiàn)對筷子的互斥使用,可以用一個(gè)信號(hào)量表示一只筷子,由這五個(gè)信號(hào)量構(gòu)成信號(hào)量數(shù)組。其描述如下:
  semaphore chopstick[5]={1,1,1,1,1};//信號(hào)量初始化
  所有信號(hào)量均被初始化為1,第i位哲學(xué)家的活動(dòng)可描述為:
  Pi(){//第i位哲學(xué)家進(jìn)程
  while(1){
  wait(chopstick<i>);//取左手筷子
  wait(chopstick[(i+1)%5]);//取右手筷子
  ……//進(jìn)餐
  signal(chopstick<i>);//放回左手筷子
  signal(chopstick[(i+1)%5]);//放回右手筷子
  ……}//思考
  }
  在以上描述中,當(dāng)哲學(xué)家饑餓時(shí),總是先去拿他左邊的筷子,執(zhí)行wait(chopstick<i>);成功后,再去拿他右邊的筷子,即執(zhí)行wait(chopstick[(i+1)%5]);又成功后便可進(jìn)餐。進(jìn)餐完畢,又先放下他左邊的筷子,然后再放右邊的筷子。
  雖然,上述解法可保證不會(huì)有兩個(gè)相鄰的哲學(xué)家同時(shí)進(jìn)餐,但有可能引起死鎖。假如五位哲學(xué)家同時(shí)饑餓而各自拿起左邊的筷子時(shí),就會(huì)使五個(gè)信號(hào)量chopstick均為0;當(dāng)他們再試圖去拿右邊的筷子時(shí),都將因無筷子可拿而無限期地等待。對于這樣的死鎖問題,可采取以下幾種解決方法:
  (1)僅當(dāng)哲學(xué)家的左、右兩只筷子均可用時(shí),才允許他進(jìn)餐。
  (2)至多只允許有四位哲學(xué)家同時(shí)去拿左邊的筷子,最終能保證至少有一位哲學(xué)家能夠進(jìn)餐,并在用畢時(shí)能釋放出他用過的兩只筷子,從而使更多的哲學(xué)家能夠進(jìn)餐。
  (3)規(guī)定奇數(shù)號(hào)哲學(xué)家先拿他左邊的筷子,然后再去拿右邊的筷子,而偶數(shù)號(hào)哲學(xué)家則相反。
  僅當(dāng)哲學(xué)家的左、右兩只筷子均可用時(shí),才允許他進(jìn)餐,哲學(xué)家進(jìn)餐問題的算法描述如下:
  semaphore chopstick[5]={1,1,1,1,1};
  semaphore mutex=1;//臨界區(qū)互斥信號(hào)量
  do{
  wait(mutex);
  wait(chopstick<i>);
  wait(chopstick[(i+1)%5]);
  signal(mutex);
  ……//eat;
  signal(chopstick<i>);
  signal(chopstick[(i+1)%5]);
  ……//think;
  }while(TRUE);
  二、相關(guān)試題
  (2019-43)有n(n≥3)位哲學(xué)家圍坐在一張圓桌邊,每位哲學(xué)家交替地就餐和思考。在圓桌中心有m(m≥1)個(gè)碗,每兩位哲學(xué)家之間有1根筷子。每位哲學(xué)家必須取到一個(gè)碗和兩側(cè)的筷子之后,才能就餐,進(jìn)餐完畢,將碗和筷子放回原位,并繼續(xù)思考。為使盡可能多的哲學(xué)家同時(shí)就餐,且防止出現(xiàn)死鎖現(xiàn)象,請使用信號(hào)量的P、V操作(wait()、signal()操作)描述上述過程中的互斥與同步,并說明所用信號(hào)量及初值的含義。
  三、參考答案
  解析:
  semaphore bowl;//用于協(xié)調(diào)哲學(xué)家對碗的使用
  semaphore chopsticks[n];//用于協(xié)調(diào)哲學(xué)家對筷子的使用
  for(int i=0;i
  chopsticks<i>.value=1;//設(shè)置兩個(gè)哲學(xué)家之間筷子的數(shù)量
  bowl.value=min(n-1,m);//bowl.value≤n-1,確保不死鎖
  CoBegin
  while(TRUE){//哲學(xué)家i的程序
  思考;
  P(bowl);//取碗
  P(chopsticks<i>)//取左邊鎮(zhèn)子
  P(chopsticks[(i+1)MOD n]);//取右邊筷子
  就餐;
  V(chopsticks<i>):
  V(chopsticks[(i+1)MOD n]);
  V(bowl);
  }
  Coend
  本文內(nèi)容整理于網(wǎng)絡(luò),僅供參考。
  關(guān)于2024計(jì)算機(jī)考研操作系統(tǒng)高頻考點(diǎn)“哲學(xué)家進(jìn)餐問題”的內(nèi)容,小編就給大家簡單介紹到這里了。如果還有其他考研考試相關(guān)內(nèi)容想要了解的,就請登錄高頓考研頻道看看吧。
  小編為2024考研的小伙伴們準(zhǔn)備了豐富的學(xué)習(xí)資料,點(diǎn)擊下方藍(lán)色圖片即可領(lǐng)取哦~
考研備考資料