導航:首頁 > 編程系統 > linux管程

linux管程

發布時間:2021-10-25 21:59:09

A. linux適合編程嗎

如果只是從人工智慧的角度來說,linux的優勢並不大。我能想到的幾個可能的優勢有:

1) 包管理。比如你要用c++的一個庫opencv,linux下面直接apt-get install libopencv,然後在makefile裡面加上-I `pkg-config opencv`就好了。如果是(老版)visual studio裡面你要先打開瀏覽器,搜索opencv的網站,下載,解壓,記住路徑,回到vs右擊工程,點屬性,vc++ directories,點編輯,點添加,把路徑粘貼進去。蛋都要碎了。
但是!這個優勢只在vs2010發布以前有效。新版的vs你只需要右擊工程,點nu-get package manager,然後搜索opencv點確定就沒了。
2) 各種自動化。比如你寫了個訓練svm的程序,有1000個svm要訓練。在linux下面可以把這個訓練的程序編譯成可執行文件trainsvm,介面是類似./trainsvm input1.txt svm1.dat。然後在命令行下面seq 1 1000 | xargs -I{} -n 1 -P 12 bash -c './trainsvm input{}.txt svm{}.dat'一下就開了12個進程一塊訓練,某個進程訓練完了以後立馬會有下一個補上有木有。(就是管程的概念)我在windows下面用c#實現這樣的功能要將近100行,還沒有xargs靈活。批量處理超級方便啊。用parallel還可以在多台機器上分布式訓練。
但是!你在windows上裝個cygwin這些也全都有。。
3) 有時候數據量太大了需要去amazon租ec2並行計算。windows機器比linux貴啊摔。還有配置相對慢。linux弄個小腳本分分鍾就把環境都配好了(夾個私貨,比如這是我的ec2 linux配直腳本 https://github.com/grapeot/debianinit )。價格這個無解。。配置方面windows的非官方包管理器chocolatey還比較弱,如果有誰知道如何快速配置windows環境歡迎指教。
所以基本結論是,如果只是想日人工智慧,老老實實拱演算法先,哪個熟用哪個。如果蛋痛想折騰,linux可玩性和逼格都要更勝一籌。而且用熟了以後完成任務(get things done)的能力會加強不少。

B. linux 下如何使用管程

C. 進程同步與進程間的通信相比缺點是什麼

按照java的思想來說有原子變數、互斥(管程monitor)、鎖、條件變數、信號量。linux里還會有spinlock。

D. 基於Linux的進程同步與通信的模擬實現 求c或java代碼

這個不是生產者、消費者那個例子一樣的嗎。

E. 計算機等級考試三級嵌入式的題型是什麼

根據2014年的三級嵌入式考試,題型包括:1.選擇題,2.填空題,3.簡答題,4.名詞解釋題。具體考 試 范 圍 :
一、嵌入式系統的硬體
1. 嵌入式處理器
嵌入式微處理器(Embedded Microprocessor Unit, EMPU)、嵌入式微控制器(Microcontroller Unit, MCU)、嵌入式DSP 處理器(Embedded Digital Signal Processor, EDSP)、嵌入式片上系統(System On Chip)的定義與功能 。
2. 存儲器
只讀存儲器ROM(Read Only Memory)、隨機存儲器RAM(Random Access Memory)和快閃記憶體的定義與功能 。
3. 輸入輸出設備
液晶顯示屏(liquid crystal display:LCD)、觸摸屏、語音輸入輸出技術、鍵盤的功能 。4. 電源轉換與管理
電源IC 分類、電源IC 的特點 5. 介面技術
嵌入式系統介面的、並行介面、串口、USB、PCMCIA 和CF、紅外線介面 。
6. 匯流排
匯流排(匯流排的主要參數:匯流排的帶寬,匯流排的位寬,匯流排的工作時鍾頻率),I2C 匯流排,CAN 匯流排 。
二、嵌入式操作系統 1. 操作系統基本理論
a) 內存管理:內存管理功能,內存分割(固定分割(Fixed Partitioning)與動態分割(Dynamic Partitioning)),虛擬內存(分頁(Paging)與分段(Segmentation)),頁替換演算法;
b)進程與中斷管理:進程狀態與狀態轉換,進程描述,進程式控制制,並發,Dekker 演算法,Peterson 演算法,並發控制硬體方法,信號量,管程,消息傳遞,死鎖與死鎖處理,中斷及中斷處理 ;
c) 調度機制:調度類型,單處理器調度演算法(FCFS 演算法,循環執行演算法,SPN 演算法,SRT 演算法,HRRN 演算法,反饋演算法) ;
d) 實時調度:時鍾驅動調度,基於優先順序調度,速率單調演算法,EDF演算法,LST演算法,非周期實時調度演算法。
2. 嵌入式操作系統 ;
a) 嵌入式操作系統特點:實時性,小內核,可配置,易移植,高可靠性,低功耗;
b) 常見嵌入式操作系統:嵌入式Linux,Windows CE,Palm OS,QNX,uC/OS,VxWorks。
三、嵌入式Linux與開發環境
1.嵌入式Linux內核結構 嵌入式Linux的常見模塊,與標准Linux的差別(缺少MMU模塊);
2. 嵌入式Linux內存管理 內核載入的進程的地址空間,內存的分配和釋放,虛擬內存與內存頁面的換入與換出;
3. 嵌入式文件系統 Ext2fs,臨時文件系統tmpfs。

F. linux管程實驗報告 c 語言的

神馬東東?

G. 考計算機專業的研究生時考的操作系統是什麼系統,是windows、linux、還是unix啊

操作系統考研不針對具體系統,而是針對於操作系統理論知識,當然,可能會涉及到諸如linux和windows中的某些細微的機制。
例如2010年的考綱是這樣的:
【考查目標】
1、了解操作系統在計算機系統中的作用、地位、發展和特點。
2、理解操作系統的基本概念、原理,掌握操作系統設計方法與實現技術。
3、能夠運用所學的操作系統原理、方法與技術分析問題和解決問題。
一)操作系統概述
(一)操作系統的概念、特徵、功能和提供的服務
(二)操作系統的發展與分類
(三)操作系統的運行環境
二)進程管理
(一) 進程與線程
1、進程概念
2、進程的狀態與轉換
3、進程式控制制
4、進程組織
5、進程通信:共享存儲系統、消息傳遞系統和管道通信。
6、線程概念與多線程模型
(二)處理機調度
1、調度的基本概念
2、調度時機、切換與過程
3、調度的基本准則
4、調度方式
5、典型調度演算法:先來先服務調度演算法、短作業(短進程、短線程)優先調度演算法優先調度演算法、時間片輪轉調度演算法、優先順序調度演算法、高響應比優先調度演算法和多級反饋隊列調度演算法。
(三)進程同步
1、進程同步的基本概念
2、實現臨界區互斥的基本方法:軟體實現方法和硬體實現方法。
3、信號量
4、管程
5、經典同步問題:生產者-消費者問題、讀者-寫者問題、哲學家進餐問題。
(四)死鎖
1、死鎖的概念
2、死鎖處理策略
3、死鎖預防
4、死鎖避免:系統安全狀態(銀行家演算法)
5、死鎖檢測和解除
三)內存管理
(一)內存管理基礎
1、內存管理概念
程序裝入與鏈接;邏輯地址與物理地址空間;內存保護。
2、交換與覆蓋
3、連續分配管理方式
4、非連續分配管理方式
分頁管理方式;分段管理方式;段頁式管理方式。
(二)虛擬內存管理
1、虛擬內存基本概念
2、請求分頁管理方式
3、頁面置換演算法:最佳置換演算法(OPT)、先進先出置換演算法(FIFO)、最近最少使用置換演算法(LRU)、時鍾置換演算法(CLOCK)。
4、頁面分配策略
5、抖動:抖動現象、工作集。
6、請求分段管理方式
7、請求段頁式管理方式
四)文件管理
(一)文件系統基礎
1、文件概念
2、文件結構:順序文件、索引文件、索引順序文件。
3、目錄結構:文件控制塊和索引節點、單級目錄結構和兩級目錄結構、樹形目錄結構、圖形目錄結構。
4、文件共享
5、文件保護
(二)文件系統實現
1、文件系統層次結構
2、目錄實現
3、文件實現
(三)磁碟組織與管理
1、磁碟的結構
2、磁碟調度演算法
3、磁碟的管理
五)輸入輸出(I/O)管理
(一)I/O管理概述
1、I/O設備
2、I/O管理目標
3、I/O管理功能
4、I/O應用介面
5、I/O控制方式
(二)I/O核心子系統
1、I/O調度概念
2、高速緩存與緩沖區
3、設備分配與回收
4、假離線技術(SPOOLing)
5、出錯處理

H. 操作系統的作品目錄

第1章 操作系統引論 1
1.1 操作系統的基本概念 1
1.2 操作系統的發展與類型 5
1.2.1 無操作系統的手工操作階段 5
1.2.2 單道批處理系統 6
1.2.3 多道批處理操作系統 7
1.2.4 分時操作系統 9
1.2.5 實時操作系統 10
1.3 操作系統的特徵與功能 11
1.3.1 操作系統的特徵 11
1.3.2 操作系統的功能 13
1.4 操作系統的結構設計 17
1.4.1 傳統操作系統的結構 17
1.4.2 微內核結構操作系統 19
本章小結 22
思考與練習 22
第2章 進程管理 24
2.1 進程的基本概念 24
2.1.1 程序的順序執行及其特性 24
2.1.2 程序的順序執行及其特性 25
2.1.3 進程的定義和特徵 25
2.1.4 進程式控制制塊及其組織 26
2.2 進程狀態及轉換 28
2.2.1 進程基本狀態及轉換 28
2.2.2 進程的創建狀態和終止狀態 29
2.2.3 進程掛起的狀態 29
2.3 進程式控制制 30
2.3.1 進程創建與終止 30
2.3.2 進程阻塞與喚醒 31
2.3.3 進程掛起與激活 31
2.4 進程同步 31
2.4.1 進程互斥與同步的基本概念 32
2.4.2 信號量機制 33
2.4.3 經典進程同步問題 37
2.4.4 管程 41
2.5 進程通信 44
2.5.1 進程通信的機制 44
2.5.2 直接消息傳遞系統 45
2.5.3 信箱通信 47
2.6 線程的基本概念 48
2.6.1 線程概念 48
2.6.2 線程的實現 50
2.6.3 線程模型 51
2.6.4 線程實例:Solaris 2 52
2.7 進程管理實例 53
2.7.1 Windows 的進程管理 53
2.7.2 Linux 的進程管理 55
本章小結 61
思考與練習 62
第3章 處理機調度與死鎖 63
3.1 處理機調度概述 63
3.1.1 調度的層次 63
3.1.2 調度隊列模型 64
3.1.3 調度基礎 66
3.2 調度演算法 69
3.2.1 先來現服務調度演算法 69
3.2.2 最短作業(進程)優先調度演算法 70
3.2.3 時間片輪轉調度演算法 71
3.2.4 基於優先權的調度演算法 71
3.2.5 多級反饋隊列調度演算法 71
3.3 死鎖 73
3.3.1 死鎖的概念和處理策略 73
3.3.2 死鎖預防 74
3.3.3 死鎖避免 75
3.3.4 死鎖檢測和解除 78
3.4 進程調度實例 80
3.4.1 Windows 的線程調度 80
3.4.2 Linux 的進程調度 82
本章小結 84
思考與練習 85
第4章 存儲器管理 86
4.1 概述 86
4.1.1 從源碼到運行 88
4.1.2 存儲管理的目的及分類 91
4.2 連續存儲管理 92
4.2.1 單一連續內存分配 92
4.2.2 固定分區內存分配 92
4.2.3 動態分區內存分配 93
4.2.4 可重定位分區分配 96
4.3 離散分配 97
4.3.1 分頁存儲管理 98
4.3.2 分段存儲管理 104
4.3.3 段頁式存儲管理 107
本章小結 109
思考與練習 110
第5章 虛擬內存管理 111
5.1 概述 112
5.1.1 虛擬存儲器的原理 112
5.1.2 虛擬存儲器的實現方法 113
5.2 分頁虛擬存儲管理 115
5.2.1 硬體支持 116
5.2.2 內存分配及頁面調入策略 118
5.2.3 頁面置換演算法 121
5.2.4 抖動及其處理 126
5.3 分段及段頁式虛擬存儲管理 128
5.3.1 請求分段虛擬存儲管理 128
5.3.2 請求段頁式內存管理 130
5.4 存儲管理實例 132
5.4.1 Windows 的內存管理 132
5.4.2 Linux 的內存管理 135
本章小結 138
思考與練習 139
第6章 文件管理 140
6.1 概述 140
6.1.1 文件及分類 141
6.1.2 文件系統及層次結構 143
6.1.3 文件操作 144
6.1.4 文件的存儲介質 144
6.2 文件的結構 145
6.2.1 文件的邏輯結構 145
6.2.2 文件的物理結構 147
6.2.3 存儲空間的管理 153
6.3 目錄管理 156
6.3.1 文件控制塊 156
6.3.2 索引節點 157
6.3.3 目錄結構 158
6.3.4 目錄操作 161
6.4 文件系統的安全與保護 162
6.4.1 文件的共享 162
6.4.2 影響安全性的因素 164
6.4.3 文件系統保護機制 164
6.5 磁碟空間管理 170
6.5.2 磁碟調度演算法 171
6.5.3 提供磁碟訪問速度的方法 173
6.6 文件系統實例 175
6.6.1 Windows 的文件系統 175
6.6.2 Linux 的文件系統 182
本章小結 192
思考與練習 193
第7章 設備管理 195
7.1 概述 195
7.1.1 設備及分類 195
7.1.2 設備管理的功能 196
7.2 I/O 系統結構 197
7.2.1 硬體結構及管理 198
7.2.2 I/O 系統的軟體層次結構 199
7.3 設備分配 201
7.3.1 I/O 系統的數據結構 201
7.3.2 邏輯設備與物理設備 202
7.3.3 設備分配的獨立性 203
7.3.4 虛擬設備的實現 204
7.4 設備處理 206
7.4.1 I/O 控制的方式 206
7.4.2 中斷服務處理 211
7.4.3 設備驅動程序 213
7.4.4 緩沖技術 214
7.5 設備管理實例 217
7.5.1 Windows 的設備管理 218
7.5.2 Linux 的設備管理 225
本章小結 230
思考與練習 231
第8章 操作系統介面 232
8.1 操作系統的介面類型 232
8.1.1 用戶介面 232
8.1.2 程序介面 234
8.2 聯機用戶介面 234
8.2.1 聯機命令介面的實現 234
8.2.2 Windows 的 GUI 236
8.3 系統調用 236
8.3.1 基本概念 236
8.3.2 系統調用的實現 239
8.4 Windows 和 Linux 系統調用 240
8.4.1 Windows 系統調用 240
8.4.2 Linux 系統調用 242
本章小結 248
思考與練習 249
第9章 常見的操作系統 250
9.1 操作系統縱覽 251
9.1.1 早期的操作系統 251
9.1.2 UNIX 家族史 254
9.1.3 微軟帝國 258
9.1.4 Mac OS 264
9.1.5 自由軟體聯盟 267
9.2 嵌入式操作系統 271
9.2.1 嵌入式操作系統概述 271
9.2.2 手機操作系統 272
9.2.3 其他嵌入式操作系統 279
9.2.4 嵌入式系統的應用及發展趨勢 281
9.3 分布式操作系統 282
9.3.1 分布式系統的引入 282
9.3.2 分布式系統的定義 282
9.3.3 分布式操作系統的特點 282
9.3.4 分布式系統的優點 283
9.4 網路操作系統 284
9.4.1 網路操作系統的定義 284
9.4.2 網路操作系統的特點 284
9.4.3 網路操作系統的功能 285
9.5 多處理機操作系統 285
9.5.1 多處理機操作系統的定義 285
9.5.2 多處理機操作系統的分類 285
9.5.3 多處理機操作系統的優點 287
本章小結 287
附錄 小型嵌入式實時操作系統開發實例 288
需求規格說明 290
概要設計說明 291
參考文獻 306

I. 進程間和線程間的協作區別在哪為什麼需要內核實現通信與同步

進程間和線程間的協作區別:
進程互斥、同步的概念

進程互斥、同步的概念是並發進程下存在的概念,有了並發進程,就產生了資源的競爭與協作,從而就要通過進程的互斥、同步、通信來解決資源的競爭與協作問題。
下面是根據《操作系統教程》3.1.4 中的介紹,整理的進程互斥、同步的概念。
在多道程序設計系統中,同一時刻可能有許多進程,這些進程之間存在兩種基本關系:競爭關系和協作關系。
進程的互斥、同步、通信都是基於這兩種基本關系而存在的,為了解決進程間競爭關系(間接制約關系)而引入進程互斥;為了解決進程間鬆散的協作關系( 直接制約關系)而引入進程同步;為了解決進程間緊密的協作關系而引入進程通信。
第一種是競爭關系
系統中的多個進程之間彼此無關,它們並不知道其他進程的存在,並且也不受其他進程執行的影響。例如,批處理系統中建立的多個用戶進程, 分時系統中建立的多個終端進程。由於這些進程共用了一套計算機系統資源,因而, 必然要出現多個進程競爭資源的問題。當多個進程競爭共享硬設備、存儲器、處理器 和文件等資源時,操作系統必須協調好進程對資源的爭用。
資源競爭出現了兩個控制問題:一個是死鎖 (deadlock )問題,一組進程如果都獲得了部分資源,還想要得到其他進程所佔有的資源,最終所有的進程將陷入死鎖。另一個是飢餓(starvation )問題,這是指這樣一種情況:一個進程由於其他進程總是優先於它而被無限期拖延。
操作系統需要保證諸進程能互斥地訪問臨界資源,既要解決飢餓問題,又要解決死鎖問題。
進程的互斥(mutual exclusion )是解決進程間競爭關系( 間接制約關系) 的手段。 進程互斥指若干個進程要使用同一共享資源時,任何時刻最多允許一個進程去使用,其他要使用該資源的進程必須等待,直到佔有資源的進程釋放該資源。
第二種是協作關系
某些進程為完成同一任務需要分工協作,由於合作的每一個進程都是獨立地以不可預知的速度推進,這就需要相互協作的進程在某些協調點上協 調各自的工作。當合作進程中的一個到達協調點後,在尚未得到其夥伴進程發來的消息或信號之前應阻塞自己,直到其他合作進程發來協調信號或消息後方被喚醒並繼續執行。這種協作進程之間相互等待對方消息或信號的協調關系稱為進程同步。
進程間的協作可以是雙方不知道對方名字的間接協作,例如,通過共享訪問一個緩沖區進行鬆散式協作;也可以是雙方知道對方名字,直接通過通信機制進行緊密協作。允許進程協同工作有利於共享信息、有利於加快計算速度、有利於實現模塊化程序設計。
進程的同步(Synchronization)是解決進程間協作關系( 直接制約關系) 的手段。進程同步指兩個以上進程基於某個條件來協調它們的活動。一個進程的執行依賴於另一
個協作進程的消息或信號,當一個進程沒有得到來自於另一個進程的消息或信號時則需等待,直到消息或信號到達才被喚醒。
不難看出,進程互斥關系是一種特殊的進程同步關系,即逐次使用互斥共享資源,也是對進程使用資源次序上的一種協調。
進程通信的概念
下面是根據《操作系統教程》3.5 中的介紹,整理的進程通信的概念。
並發進程之間的交互必須滿足兩個基本要求:同步和通信。
進程競爭資源時要實施互斥,互斥是一種特殊的同步,實質上需要解決好進程同步問題,進程同步是一種進程通信,通過修改信號量,進程之間可建立起聯系,相互協調運行和協同工作。但是信號量與PV操作只能傳遞信號,沒有傳遞數據的能力。有些情況下進程之間交換的信息量雖很少,例如,僅僅交換某個狀態信息,但很多情況下進程之間需要交換大批數據,例如,傳送一批信息或整個文件,這可以通過一種新的通信機制來完成,進程之間互相交換信息的工作稱之為進程通信IPC (InterProcess Communication)(主要是指大量數據的交換)。進程間通信的方式很多,包括:
信號(signal )通信機制;
信號量及其原語操作(PV、讀寫鎖、管程)控制的共享存儲區(shared memory )通信機制;
管道(pipeline)提供的共享文件(shared file)通信機制;
信箱和發信/ 收信原語的消息傳遞(message passing )通信機制。
其中前兩種通信方式由於交換的信息量少且效率低下,故稱為低級通信機制,相應地可把發信號/ 收信號及PV之類操作稱為低級通信原語,僅適用於集中式操作系統。消息傳遞機制屬於高級通信機制,共享文件通信機制是消息傳遞機制的變種,這兩種通信機制,既適用於集中式操作系統,又適用於分布式操作系統。
進程同步的方法
前面提到,進程互斥關系是一種特殊的進程同步關系,下面給出常見的進程同步的方法,實際上也可用於進程的互斥(個人理解)。
在何炎祥的《計算機操作系統》 3.2 節,將進程同步的機制與解決進程互斥方法看做是一樣的,的明確指出互斥的軟體解決方法為Dekker演算法與Peterson演算法,互斥的硬體解決方法為中斷方法、以及使用機器指令的方法,後面又給出了信號量、管程、消息傳遞三種方法。
實際應用中,不同的系統有不同的進程同步方法,CSDN帖子http://bbs.csdn.net/topics/80156687中有一些討論,Linux 與Windows的主要同步、通信機制如下:
Linux 下:
Linux 下常見的進程同步方法有:SysVIPC 的 sem(信號量)、file locking / record locking(通過 fcntl 設定的文件鎖、記錄鎖)、futex(基於共享內存的快速用戶態互斥鎖)。針對線程(pthread)的還有 pthread_mutex 和 pthread_cond(條件變數)。

Linux 下常見的進程通信的方法有 :pipe(管道),FIFO(命名管道),socket(套接字),SysVIPC 的 shm(共享內存)、msg queue(消息隊列),mmap(文件映射)。以前還有 STREAM,不過現在比較少見了(好像)。
Windows下:
在Windwos中,進程同步主要有以下幾種:互斥量、信號量、事件、可等計時器等幾種技術。
在Windows下,進程通信主要有以下幾種:內存映射、管道、消息等,但是內存映射是最基礎的,因為,其他的進程通信手段在內部都是考內存映射來完成的。
線程的同步/通信與進程的同步/通信有區別嗎?
對於該問題,教材上沒有明確的回答,教材上給出的一般是進程而非線程的同步、通信方式。但網路上很多說法將兩者混為一談。根據教材,以及網上的說法,個人的理解為:
同步機制:
信號量、管程、互斥是進程的同步機制,而信號量、互斥也可用於線程的同步,但管程只在進程同步中被用到;
線程的同步除了信號量、互斥外,還有臨界區、事件,沒有看到教材上將這兩種方式作為進程的同步方式;
通信機制:
管道、FIFO、消息隊列、信號量、共享內存是進程的同步機制,教材上沒有線程的通信機制這樣的說法,但可以肯定這幾種方法是進程的通信方式,且其中的信號量既可用於進程的同步,又可用於進程的通信,在網路上還有說可以用於線程同步的。
管道與管程是不同的,管程是進程同步的方式,而管道則是進程通信的方式。
進程的同步/通信
下面是常見的線程之間的同步方式的詳細介紹。
(註:下面轉自網路,下面的同步、通信方式對於進程與線程分的不是很清楚,關於進程還是線程的解釋見上面——線程的同步/通信與進程的同步/通信有區別嗎?)
一、進程/線程間同步機制。
臨界區、互斥區、事件、信號量四種方式
臨界區(Critical Section)、互斥量(Mutex)、信號量(Semaphore)、事件(Event)的區別
1、臨界區:通過對多線程的串列化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。
在任意時刻只允許一個線程對共享資源進行訪問,如果有多個線程試圖訪問公共資源,那麼在有一個線程進入後,其他試圖訪問公共資源的線程將被掛起,並一直等到進入臨界區的線程離開,臨界區在被釋放後,其他線程才可以搶占。
2、互斥量:採用互斥對象機制。
只有擁有互斥對象的線程才有訪問公共資源的許可權,因為互斥對象只有一個,所以能保證公共資源不會同時被多個線程訪問。互斥不僅能實現同一應用程序的公共資源安全共享,還能實現不同應用程序的公共資源安全共享 .互斥量比臨界區復雜。因為使用互斥不僅僅能夠在同一應用程序不同線程中實現資源的安全共享,而且可以在不同應用程序的線程之間實現對資源的安全共享。
3、信號量:它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目 .
信號量對象對線程的同步方式與前面幾種方法不同,信號允許多個線程同時使用共享資源,這與操作系統中的PV操作相同。它指出了同時訪問共享資源的線程最大數目。它允許多個線程在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大線程數目。
PV操作及信號量的概念都是由荷蘭科學家E.W.Dijkstra提出的。信號量S是一個整數,S大於等於零時代表可供並發進程使用的資源實體數,但S小於零時則表示正在等待使用共享資源的進程數。
P操作申請資源:
(1)S減1;
(2)若S減1後仍大於等於零,則進程繼續執行;
(3)若S減1後小於零,則該進程被阻塞後進入與該信號相對應的隊列中,然後轉入進程調度。

V操作 釋放資源:
(1)S加1;
(2)若相加結果大於零,則進程繼續執行;
(3)若相加結果小於等於零,則從該信號的等待隊列中喚醒一個等待進程,然後再返回原進程繼續執行或轉入進程調度。
4、事 件: 通過通知操作的方式來保持線程的同步,還可以方便實現對多個線程的優先順序比較的操作 .
總結:
1. 互斥量與臨界區的作用非常相似,但互斥量是可以命名的,也就是說它可以跨越進程使用。所以創建互斥量需要的資源更多,所以如果只為了在進程內部是用的話使用臨界區會帶來速度上的優勢並能夠減少資源佔用量。因為互斥量是跨進程的互斥量一旦被創建,就可以通過名字打開它。
2. 互斥量(Mutex),信號燈(Semaphore),事件(Event)都可以被跨越進程使用來進行同步數據操作,而其他的對象與數據同步操作無關,但對於進程和線程來講,如果進程和線程在運行狀態則為無信號狀態,在退出後為有信號狀態。所以可以使用WaitForSingleObject來等待進程和線程退出。
3. 通過互斥量可以指定資源被獨占的方式使用,但如果有下面一種情況通過互斥量就無法處理,比如現在一位用戶購買了一份三個並發訪問許可的資料庫系統,可以根據用戶購買的訪問許可數量來決定有多少個線程/進程能同時進行資料庫操作,這時候如果利用互斥量就沒有辦法完成這個要求,信號燈對象可以說是一種資源計數器。
二、進程間通信方式
由於比較容易混淆,我們把進程間通信方法也列在這里做比較。
進程通信也就是所謂的IPC問題,主要是指進程間交換數據的方式。進程通信包括高級通信與低級通信,其中進程同步與互斥屬於低級通信,主要用於插U農地控制信號;高級通信包括三種:共享存儲系統(有的地方稱作共享內存區)、消息傳遞系統(有的地方稱作消息隊列)、管道。
信號量是進程同步與互斥的常用方法,也可以作為低級的進程通信方法,用於傳遞控制信號。
簡而言之,進程間通信方式主要包括管道、FIFO、消息隊列、信號量、共享內存。
1.管道,還有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用於父子進程通訊,命名管道可用於非父子進程,命名管道就是FIFO,管道是先進先出的通訊方式
2.消息隊列,是用於兩個進程之間的通訊,首先在一個進程中創建一個消息隊列,然後再往消息隊列中寫數據,而另一個進程則從那個消息隊列中取數據。需要注意的是,消息隊列是用創建文件的方式建立的,如果一個進程向某個消息隊列中寫入了數據之後,另一個進程並沒有取出數據,即使向消息隊列中寫數據的進程已經結束,保存在消息隊列中的數據並沒有消失,也就是說下次再從這個消息隊列讀數據的時候,就是上次的數據!!!!
3.信號量,它與WINDOWS下的信號量是一樣的,所以就不用多說了
4.共享內存,類似於WINDOWS下的DLL中的共享變數,但LINUX下的共享內存區不需要像DLL這樣的東西,只要首先創建一個共享內存區,其它進程按照一定的步驟就能訪問到這個共享內存區中的數據,當然可讀可寫
以上幾種方式的比較:
1.管道:速度慢,容量有限,只有父子進程能通訊
2.FIFO:任何進程間都能通訊,但速度慢
3.消息隊列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完數據的問題
4.信號量:不能傳遞復雜消息,只能用來同步
5.共享內存區:能夠很容易控制容量,速度快,但要保持同步,比如一個進程在寫的時候,另一個進程要注意讀寫的問題,相當於線程中的線程安全,當然,共享內存區同樣可以用作線程間通訊,不過沒這個必要,線程間本來就已經共享了同一進程內的一塊內存
本質上,信號量是一個計數器,它用來記錄對某個資源(如共享內存)的存取狀況。一般說來,為了獲得共享資源,進程需要執行下列操作:
(1)測試控制該資源的信號量;
(2)若此信號量的值為正,則允許進行使用該資源,進程將進號量減1;
(3)若此信號量為0,則該資源目前不可用,進程進入睡眠狀態,直至信號量值大於0,進程被喚醒,轉入步驟(1);
(4)當進程不再使用一個信號量控制的資源時,信號量值加1,如果此時有進程正在睡眠等待此信號量,則喚醒此進程。
套接字通信並不為Linux所專有,在所有提供了TCP/IP協議棧的操作系統中幾乎都提供了socket,而所有這樣操作系統,對套接字的編程方法幾乎是完全一樣的
三、進程/線程同步機制與進程間通信機制比較
很明顯2者有類似,但是差別很大
同步主要是臨界區、互斥、信號量、事件
進程間通信是管道、內存共享、消息隊列、信號量、socket
共通之處是,信號量和消息(事件)
小結:
進程互斥、同步與通信的關系:進程競爭資源時要實施互斥,互斥是一種特殊的同步,實質上需要解決好進程同步問題,進程同步是一種進程通信,由此看來,進程互斥、同步都可以看做進程的通信;
信號量是進程同步與互斥的常用方法,也可以作為低級的進程通信方法,用於傳遞控制信號;
管道與管程是不同的,管程是進程同步的方式,而管道則是進程通信的方式;

J. Linux是干什麼用的

Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。

Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻游戲控制台、台式計算機、大型機和超級計算機。嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU工程各種工具和資料庫的操作系統。

(10)linux管程擴展閱讀:

Linux操作系統的主要特性;

1、完全免費並且開放

Linux是一款免費的操作系統,用戶可以通過網路或其他途徑免費獲得,並可以任意修改其源代碼。這是其他的操作系統所做不到的。

2、完全兼容POSIX1.0標准

這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。

3、多用戶、多任務

Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時並獨立地運行。

閱讀全文

與linux管程相關的資料

熱點內容
午馬電影推薦1001午馬電影推薦 瀏覽:265
數模混合模擬工具 瀏覽:160
在線把pdf文件變小 瀏覽:994
都市言情txt超肉 瀏覽:177
泰國帶女兒打泰電影大全 瀏覽:31
歐美做鴨電影 瀏覽:504
遍歷本地文件內容 瀏覽:610
大數據互聯網測試 瀏覽:233
首營供應商提供哪些資料文件 瀏覽:386
經典風月影視 瀏覽:666
生孩子電影 瀏覽:667
iphone中音樂怎麼刪除 瀏覽:542
關於愛情韓劇電影免費觀看 瀏覽:941
無保qq申訴上保 瀏覽:215
蘋果6splussd卡 瀏覽:802
庫樂隊app顯示19是什麼意思 瀏覽:701
言言直播的官方網站是多少 瀏覽:340
啄木鳥十大電影女同天堂 瀏覽:507
iris女主扮演者 瀏覽:144
51自學網cor視頻教程 瀏覽:243

友情鏈接