我已經看了四周,似乎無法找到我的問題的答案。我一直試圖圍繞信號量和實際實現它們的地方。我知道信號量是一種操作系統功能,但也可以用於應用程序級別的程序。我的問題是,當操作系統(我認爲)應該處理訪問問題時,爲什麼需要在應用程序中使用信號量?操作系統信號量
操作系統信號量
回答
應用程序是一組進程,全部執行不同的代碼。
假設有2個進程 - 應用程序中的A和B. A和B想要以另一種方式訪問特定文件 - 「play.txt」。我的意思是A先訪問然後B然後A等等。
操作系統不知道這個執行順序。 OS只知道內核進程,這就是爲什麼必須由用戶來實現的原因。用戶將在他的程序中使用信號量,操作系統將讀取這些信號以瞭解有關這兩個進程的所有信息。
信號量是一個變量或抽象數據類型,用於控制多進程訪問併發系統(如多進程程序操作系統)中的公共資源。
思考信號量的一種有用方法是記錄特定資源的可用單元數量,以及安全操作(即,沒有race conditions),因爲單元需要或變得自由時調整該記錄,以及如有必要,請等到資源的某個單元可用。信號量是預防競爭條件的有用工具;
旗語是通過其用於處理同步的OS提供的數據類型。
信號量有兩個原子操作(原子意味着要麼完全執行,要麼根本不執行)wait和signal.during這兩個操作上下文切換不會發生,因爲它們是原子的。
程序員必須執行這些操作,以便OS在某些重要操作期間不會切換上下文。 舉例讀寫器問題。
注:操作系統非常複雜,操作系統的概念讓我們對操作系統的工作有了一個想法。但是目前的系統工作可能與每十年一樣,操作系統和硬件方面的計算機系統升級.OS實現各種概念以保持運行並提供更好的CPU利用率。
sempahore用於保護對兩個獨立運行的線程或進程之間共享的數據結構的訪問。您可能會遇到信號量描述中使用的短語「關鍵區域」;忽略它。你不用信號保護代碼,你保護共享的數據結構。
假設你有這些變量:
int savings;
int house_payment;
,你想從儲蓄桶還可以將一些資金投入到house_payment桶。在發生這種情況時,另一個流程需要知道您的銀行餘額和貸款餘額。
流程A採取付款,從儲蓄減去價值。 過程A然後將該值添加到house_payment存儲桶。
現在假設流程B需要檢查負載平衡和您的儲蓄餘額。由於流程並未同步,因此流程B會在流程A從您的儲蓄中清除資金時查看這些值,但是流程A可以將付款添加到您的house_payment之前。
就流程B而言,儲蓄桶的資金太少,而house_payment桶的資源不足。您的房屋付款資金在途中丟失。如果過程B再次看起來,神奇的是,失蹤的錢出現在house_payment桶中。
爲了防止該窗口,使用信號量。流程A在轉移資金的同時佔用信號量,並在資金被置入house_payment存儲桶後釋放信號量。
進程B在訪問存儲和house_payment存儲區之前獲取信號量,並在完成時釋放信號量。
通過信號量守護訪問共享數據,兩個進程都不會看到由於在傳輸過程中檢查桶而導致的不一致狀態。
現在,操作系統不知道何時應用信號量守衛。這是應用程序必須管理的內容。
是的,操作系統應該考慮訪問問題和信號量只是幫助它做到這一點。 嘗試以這種方式瞭解它: 有一個鐵路,有4列火車(說,火車A,B,C,D)等待訪問鐵路。現在,條件是,在給定的情況下,只有一列火車可以訪問它。所以,車站大師所做的是給列車的每個司機一個燈泡。如果火車的燈泡(比如A列)開着,那就意味着列車A有權使用鐵路。當A正在使用道路時,列車B,C,D將等待(在等待隊列中)並關閉其燈泡。 協議是,一旦列車A使用道路完成,它關閉它的燈泡,並在隊列中的下一列火車(比如說火車B),打開燈泡並使用道路。這一直持續到隊列中的所有列車都有機會。
的燈泡是在這種情況下,信號量,所述火車的過程/工作 s,並且鐵路是臨界段(共享資源)。
- 1. 操作系統中的信號量
- 2. 如何在python程序中處理操作系統信號?
- 3. Glibmm應用程序捕獲操作系統信號
- 4. 用Postgresql獲取系統操作信息
- 5. iPhone操作系統/ SDK編程信息
- 6. 操作系統
- 7. 檢索系統和操作系統信息
- 8. 如何將guest操作系統中運行之間的主機操作系統與QEMU和主機操作系統傳輸信號
- 9. 操作系統 - TLB
- 10. 操作系統中
- 11. Linux操作系統
- 12. FASM操作系統
- 13. 如何使用文件系統作爲信號量
- 14. 線程和系統信號
- 15. Innodb:文件操作中的操作系統錯誤號碼1117
- 16. 硒當量爲Windows操作系統
- 17. 操作系統名稱變量
- 18. 輕量級Linux操作系統
- 19. 量角器 - 返回操作系統
- 20. 下來(信號量)和down_intterruptible(信號量)必須從系統調用中調用?
- 21. Android操作系統更新系統
- 22. jQuery - 檢測操作系統和操作系統版本
- 23. 預定義爲iPhone操作系統和Mac操作系統
- 24. 在MSWin32操作系統上的條款:: ReadKey :: GetTermialSize操作系統
- 25. 開放源代碼雲操作系統/操作系統架構
- 26. 在Windows操作系統中的pathos軟件包操作系統
- 27. 操作系統和操作系統如何更新自己?
- 28. 3.0 Android操作系統2.2 Android操作系統問題
- 29. Elasticsearch Marvel未收集Windows操作系統統計信息
- 30. 批量系統信息?