日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

西电Pintos操作系统课程设计 实验四

發布時間:2023/12/10 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 西电Pintos操作系统课程设计 实验四 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗四:Priority Scheduling—Donation for Locks

一、實驗目的
解決由lock造成的優先級反轉問題。

二、實驗方案
使用優先級捐贈(Priority Donation)來解決由lock造成的優先級反轉問題。
優先級捐贈是指高優先級的線程將自身優先級捐給與其競爭資源的低優先級線程,以促使其盡快釋放資源,進而保證自身能盡快得到運行所需資源的策略。
優先級捐贈主要分以下幾種情況:
1.簡單捐贈,這是最為平常和簡單的一種捐贈情況。lock、優先級流動及線程執行時間順序如下圖所示:

2.遞歸捐贈,這是一種較為復雜的情況。lock、優先級流動及線程執行時間順序如下圖所示:

3.多重捐贈,這種情況也較為復雜。lock、優先級流動及線程執行時間順序如下圖所示:
三、詳細實現

  • 修改數據結構
    (1) 修改thread結構體,新增三個量,一個base_priority記錄線程的初始優先級,一個locks記錄線程當前擁有的鎖(多個),一個lock_waiting用來記錄線程等待被釋放的鎖。
    (2) 修改lock結構體,新增兩個量,一個elem記錄優先級捐贈的列表元素,一個max_priority記錄請求鎖的所有線程的最大優先級。
  • 修改函數
    (1) 修改init_thread()函數,實現對thread結構體中新增變量base_priority和lock_waiting的初始化。
    (2) 修改lock_acquire()函數,在獲取鎖之前循環更新所有參與嵌套的線程的優先級,即在P操作之前解決遞歸捐贈的情況。然后在線程被喚醒之后讓該線程持有該鎖。
    (3) 定義函數thread_hold_the_lock實現將一個鎖資源賦給線程。
    (4) 定義函數thread_donate_priority實現較高優先級線程將優先級捐贈給某一持有鎖的較低優先級的線程。這里的優先級捐贈是通過修改鎖的最高優先級, 然后調用thread_update_priority ()更新被捐贈線程的當前優先級實現的。
    (5) 定義函數thread_update_priority ()實現線程優先級的更新。該函數一方面被thread_donate_priority()函數調用以實現優先級捐贈操作,另一方面考慮到當某線程釋放鎖之后,該線程的優先級可能發生變化,可用thread_update_priority()函數來處理這個邏輯。
    (6) 定義函數lock_cmp_priority()實現鎖隊列的排序。
    (7) 定義函數thread_remove_lock()實現線程釋放鎖時進行的操作,該函數將被synch.c中的lock_release()函數調用。
    (8) 在lock_release()函數中添加相應的語句調用(6)中的thread_remove_lock()函數。
    (9) 在lock_release()函數中添加相應的語句調用(6)中的thread_remove_lock()函數。
    (10) 修改thread_set_priority()函數。如果沒有鎖,那么優先級捐贈的情況不用考慮,直接更新;如果更新的優先級大于當前線程的優先級,則更新當前線程優先級。總之,base_priority一定要在該函數中得到更新。
    (11) 修改sema_up()和seme_down()函數,將信號量的wait_list實現為優先級隊列,即將wait_list中的線程按優先級降序排列,該過程在實驗三中已經完成過一遍。
    (12) 定義cond_sema_cmp_priority()函數實現條件變量wait_list中線程的優先級比較,便于(12)中使用該函數作為list_sort()排序函數的參數。
    (13) 修改 cond_signal()函數,將條件變量的wait_list也改成優先級隊列,其中list_sort()排序函數使用(11)中的定義的比較函數作為參數。
    四、實驗結果
  • 總結

    以上是生活随笔為你收集整理的西电Pintos操作系统课程设计 实验四的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。