當前位置:首頁 » 操作系統 » semaphore源碼

semaphore源碼

發布時間: 2023-07-31 01:56:25

『壹』 代碼是什麼意思

代碼 含意
0 0x0000 作業完成。
1 0x0001 不正確的函數。
2 0x0002 系統找不到指定的檔案。
3 0x0003 系統找不到指定的路徑。
4 0x0004 系統無法開啟檔案。
5 0x0005 拒絕存取。
6 0x0006 無效的代碼。
7 0x0007 儲存體控制區塊已毀。
8 0x0008 儲存體空間不足,無法處理這個指令。
9 0x0009 儲存體控制區塊地址無效。
10 0x000A 環境不正確。
11 0x000B 嘗試載入一個格式錯誤的程序。
12 0x000C 存取碼錯誤。
13 0x000D 資料錯誤。
14 0x000E 儲存體空間不夠,無法完成這項作業。
15 0x000F 系統找不到指定的磁碟驅動器。
16 0x0010 無法移除目錄。
16 0x0010 無法移除目錄。
17 0x0011 系統無法將檔案移到 其它的磁碟驅動器。
18 0x0012 沒有任何檔案。
19 0x0013 儲存媒體為防寫狀態。
20 0x0014 系統找不到指定的裝置。
21 0x0015 裝置尚未就緒。
22 0x0016 裝置無法識別指令。
23 0x0017 資料錯誤 (cyclic rendancy check)
24 0x0018 程序發出一個長度錯誤的指令。
25 0x0019 磁碟驅動器在磁碟找不到 持定的扇區或磁軌。
26 0x001A 指定的磁碟或磁碟無法存取。
27 0x001B 磁碟驅動器找不到要求的扇區。
28 0x001C 列印機沒有紙。
29 0x001D 系統無法將資料寫入指定的磁碟驅動器。
30 0x001E 系統無法讀取指定的裝置。
31 0x001F 連接到系統的某個裝置沒有作用。
32 0x0020 The process cannot access the file because it is being
used by another process.
33 0x0021 檔案的一部份被鎖定, 現在無法存取。
34 0x0022 磁碟驅動器的磁碟不正確。 請將 %2 (Volume Serial
Number: %3) 插入磁碟機%1。
36 0x0024 開啟的分享檔案數量太多。
38 0x0026 到達檔案結尾。
39 0x0027 磁碟已滿。
50 0x0032 不支持這種網路要求。
51 0x0033 遠程計算機無法使用。
52 0x0034 網路名稱重復。
53 0x0035 網路路徑找不到。
54 0x0036 網路忙碌中。
55 0x0037 The specified network resource or device is no longer
available.
56 0x0038 The network BIOS command limit has been reached. 57
0x0039 網路配接卡發生問題。
58 0x003A 指定的伺服器無法執行要求的作業。
59 0x003B 網路發生意外錯誤。
60 0x003C 遠程配接卡不兼容。
61 0x003D 列印機隊列已滿。
62 0x003E 伺服器的空間無法儲存等候列印的檔案。
63 0x003F 等候列印的檔案已經刪除。
64 0x0040 指定的網路名稱無法使用。
65 0x0041 拒絕存取網路。
65 0x0041 拒絕存取網路。
66 0x0042 網路資源類型錯誤。
67 0x0043 網路名稱找不到。
68 0x0044 超過區域計算機網路配接卡的名稱限制。
69 0x0045 超過網路 BIOS 作業階段的限制。
70 0x0046 遠程伺服器已經暫停或者正在起始中。
71 0x0047 由於聯機數目已達上限,此時無法再聯機到這台遠程計算機。
72 0x0048 指定的列印機或磁碟裝置已經暫停作用。
80 0x0050 檔案已經存在。
82 0x0052 無法建立目錄或檔案。
83 0x0053 INT 2484 0x0054 處理這項要求的儲存體無法使用。
85 0x0055 近端裝置名稱已經在使用中。
86 0x0056 指定的網路密碼錯誤。
87 0x0057 參數錯誤。
88 0x0058 網路發生資料寫入錯誤。
89 0x0059 此時系統無法執行其它行程。
100 0x0064 無法建立其它的系統 semaphore。
101 0x0065 屬於其它行程專用的 semaphore.
102 0x0066 semaphore 已經設定,而且無法關閉。
103 0x0067 無法指定 semaphore 。
104 0x0068 在岔斷時間無法要求專用的 semaphore 。
104 0x0068 在岔斷時間無法要求專用的 semaphore 。
105 0x0069 此 semaphore 先前的擁有權已經結束。
106 0x006A 請將磁碟插入 %1。
107 0x006B 因為代用的磁碟尚未插入,所以程序已經停止。
108 0x006C 磁碟正在使用中或被鎖定。
109 0x006D Pipe 已經中止。
110 0x006E 系統無法開啟指定的 裝置或檔案。
111 0x006F 檔名太長。
112 0x0070 磁碟空間不足。
113 0x0071 沒有可用的內部檔案標識符。
114 0x0072 目標內部檔案標識符不正確。
117 0x0075 由應用程序所執行的 IOCTL 呼叫 不正確。
118 0x0076 寫入驗證參數值不正確。
119 0x0077 系統不支持所要求的指令。
120 0x0078 此項功能僅在 Win32 模式有效
121 0x0079 semaphore 超過逾時期間。
122 0x007A 傳到系統呼叫的資料區域 太小。
123 0x007B 文件名、目錄名稱或儲存體卷標語法錯誤。
124 0x007C 系統呼叫層次不正確。
125 0x007D 磁碟沒有設定卷標。
126 0x007E 找不到指定的模塊。
127 0x007F 找不到指定的程序。
128 0x0080 沒有子行程可供等待。
128 0x0080 沒有子行程可供等待。
129 0x0081 %1 這個應用程序無法在 Win32 模式下執行。
130 0x0082 Attempt to use a file handle to an open disk
partition for an operation other than raw disk I/O.
131 0x0083 嘗試將檔案指針移至檔案開頭之前。
132 0x0084 無法在指定的裝置或檔案,設定檔案指針。
133 0x0085 JOIN 或 SUBST 指令 無法用於 內含事先結合過的磁碟驅動器。
134 0x0086 嘗試在已經結合的磁碟驅動器,使用 JOIN 或 SUBST 指令。
135 0x0087 嘗試在已經替換的磁碟驅動器,使 用 JOIN 或 SUBST 指令。
136 0x0088 系統嘗試刪除 未連結過的磁碟驅動器的連結關系。
138 0x008A 系統嘗試將磁碟驅動器結合到已經結合過之磁碟驅動器的目錄。
139 0x008B 系統嘗試將磁碟驅動器替換成已經替換過之磁碟驅動器的目錄。
140 0x008C 系統嘗試將磁碟驅動器替換成已經替換過之磁碟驅動器的目錄。
141 0x00 系統嘗試將磁碟驅動器 SUBST 成已結合的磁碟驅動器 目錄。
142 0x008E 系統此刻無法執行 JOIN 或 SUBST。
143 0x008F 系統無法將磁碟驅動器結合或替換同一磁碟驅動器下目錄。
144 0x0090 這個目錄不是根目錄的子目錄。
145 0x0091 目錄仍有資料。
146 0x0092 指定的路徑已經被替換過。
147 0x0093 資源不足,無法處理這項 指令。
148 0x0094 指定的路徑這時候無法使用。
148 0x0094 指定的路徑這時候無法使用。
149 0x0095 嘗試要結合或替換的磁碟驅動器目錄,是已經替換過的的目標。
150 0x0096 CONFIG.SYS 文件未指定系統追蹤信息,或是追蹤功能被取消。
151 0x0097 指定的 semaphore事件 DosMuxSemWait 數目不正確。
152 0x0098 DosMuxSemWait 沒有執行;設定太多的 semaphore。
153 0x0099 DosMuxSemWait 清單不正確。
154 0x009A 您所輸入的儲存媒體標 元長度限制。
155 0x009B 無法建立其它的執行緒。
156 0x009C 接收行程拒絕接受信號。
157 0x009D 區段已經被舍棄,無法被鎖定。
158 0x009E 區段已經解除鎖定。
159 0x009F 執行緒識別碼的地址不正確。
160 0x00A0 傳到 DosExecPgm 的自變數字元串不正確。
161 0x00A1 指定的路徑不正確。
162 0x00A2 信號等候處理。
164 0x00A4 系統無法建立執行緒。
167 0x00A7 無法鎖定檔案的部份范圍。
170 0x00AA 所要求的資源正在使用中。
173 0x00AD 取消范圍的鎖定要求不明顯。
174 0x00AE 檔案系統不支持自動變更鎖定類型。
180 0x00B4 系統發現不正確的區段號碼。
182 0x00B6 操作系統無法執行 %1。
182 0x00B6 操作系統無法執行 %1。
183 0x00B7 檔案已存在,無法建立同一檔案。
186 0x00BA 傳送的旗號錯誤。
187 0x00BB 指定的系統旗號找不到。
188 0x00BC 操作系統無法執行 %1。
189 0x00BD 操作系統無法執行 %1。
190 0x00BE 操作系統無法執行 %1
191 0x00BF 無法在 Win32 模式下執行 %1。
192 0x00C0 操作系統無法執行 %1。
193 0x00C1 %1 不是正確的 Win32 應用程序。
194 0x00C2 操作系統無法執行 %1。
195 0x00C3 操作系統無法執行 %1。
196 0x00C4 操作系統無法執行 這個應用程序。
197 0x00C5 操作系統目前無法執行 這個應用程序。
198 0x00C6 操作系統無法執行 %1。
199 0x00C7 操作系統無法執行 這個應用程序。
200 0x00C8 程序代碼的區段不可以大於或等於 64KB。
201 0x00C9 操作系統無法執行 %1。
202 0x00CA 操作系統無法執行 %1。
203 0x00CB 系統找不到輸入的環境選項。\r
205 0x00CD 在指令子目錄下,沒有任何行程有信號副處理程序。
206 0x00CE 文件名稱或擴展名太長。
207 0x00CF ring 2 堆棧使用中。
207 0x00CF ring 2 堆棧使用中。
208 0x00D0 輸入的通用檔名字元 * 或 ? 不正確, 或指定太多的通用檔名字元。
209 0x00D1 所傳送的信號不正確。
210 0x00D2 無法設定信號處理程序。
212 0x00D4 區段被鎖定,而且無法重新配置。
214 0x00D6 附加到此程序或動態連結模塊的動態連結模塊太多。
215 0x00D7 Can』t nest calls to LoadMole.
230 0x00E6 The pipe state is invalid.
231 0x00E7 所有的 pipe instances 都在忙碌中。
232 0x00E8 The pipe is being closed.
233 0x00E9 No process is on the other end of the pipe.
234 0x00EA 有更多可用的資料。
240 0x00F0 作業階段被取消。
254 0x00FE 指定的延伸屬性名稱無效。
255 0x00FF 延伸的屬性不一致。
259 0x0103 沒有可用的資料。
266 0x010A 無法使用 Copy API。
267 0x010B 目錄名稱錯誤。
275 0x0113 延伸屬性不適用於緩沖區。
276 0x0114 在外掛的檔案系統上的延伸屬性檔案已經毀損。
277 0x0115 延伸屬性表格文件滿。
278 0x0116 指定的延伸屬性代碼無效。
278 0x0116 指定的延伸屬性代碼無效。
282 0x011A 外掛的這個檔案系統不支持延伸屬性。
288 0x0120 意圖釋放不屬於叫用者的 mutex。
298 0x012A semaphore 傳送次數過多。
299 0x012B 只完成 Read/WriteProcessMemory 的部份要求。
317 0x013D 系統找不到位於訊息文件 %2 中編號為 0x%1 的訊息。
487 0x01E7 嘗試存取無效的地址。
534 0x0216 運算結果超過 32 位。
535 0x0217 信道的另一端有一個行程在接送資料。
536 0x0218 等候行程來開啟信道的另一端。
994 0x03E2 存取延伸的屬性被拒。
995 0x03E3 由於執行緒結束或應用程序要求,而異常終止 I/O 作業。
996 0x03E4 重疊的 I/O 事件不是設定成通知狀態。
997 0x03E5 正在處理重疊的 I/O 作業。
998 0x03E6 對內存位置的無效存取。
999 0x03E7 執行 inpage 作業發生錯誤。
1001 0x03E9 遞歸太深,堆棧滿溢。
1002 0x03EA 窗口無法用來傳送訊息。
1003 0x03EB 無法完成這項功能。
1004 0x03EC 旗號無效。
1005 0x03ED 儲存媒體未含任何可辨識的檔案系統。 請確定以載入所需
的系統驅動程序,而且該儲存媒體並未毀損。
1006 0x03EE 儲存該檔案的外部媒體發出警告,表示該已開啟檔案已經無效。
1007 0x03EF 所要求的作業無法在全屏幕模式下執行。
1008 0x03F0 An attempt was made to reference a token that does
not exist.
1009 0x03F1 組態系統登錄資料庫毀損。
1010 0x03F2 組態系統登錄機碼無效。
1011 0x03F3 無法開啟組態系統登錄機碼。
1012 0x03F4 無法讀取組態系統登錄機碼。
1013 0x03F5 無法寫入組態系統登錄機碼。
1014 0x03F6 系統登錄資料庫中的一個檔案必須使用記錄或其它備份還
原。 已經還原成功。
1015 0x03F7 系統登錄毀損。其中某個檔案毀損、或者該檔案的 系統映
對內存內容毀損、會是檔案無法復原。
1016 0x03F8 系統登錄起始的 I/O 作業發生無法復原的錯誤。 系統登錄
無法讀入、寫出或更新,其中的一個檔案 內含系統登錄在內存中的內容。
1017 0x03F9 系統嘗試將檔案載入系統登錄或將檔案還原到系統登錄中,
但是,指定檔案的格式不是系統登錄文件的格式。
1018 0x03FA 嘗試在標示為刪除的系統登錄機碼,執行不合法的操作。
1018 0x03FA 嘗試在標示為刪除的系統登錄機碼,執行不合法的操作。
1019 0x03FB 系統無法配置系統登錄記錄所需的空間。
1020 0x03FC 無法在已經有子機碼或數值的系統登錄機碼建立符號連結。
1021 0x03FD 無法在臨時機碼下建立永久的子機碼。
1022 0x03FE 變更要求的通知完成,但信息 並未透過呼叫者的緩沖區傳
回。呼叫者現在需要自行列舉檔案,找出變更的地方。
1051 0x041B 停止控制已經傳送給其它服務 所依峙的一個服務。
1052 0x041C 要求的控制對此服務無效
1016 0x03F8 系統登錄起始的 I/O 作業發生無法復原的錯誤。 系統登錄
無法讀入、寫出或更新,其中的一個檔案 內含系統登錄在內存中的內容。
1017 0x03F9 系統嘗試將檔案載入系統登錄或將檔案還原到系統登錄中,
但是,指定檔案的格式不是系統登錄文件的格式。
1018 0x03FA 嘗試在標示為刪除的系統登錄機碼,執行不合法的操作。
1018 0x03FA 嘗試在標示為刪除的系統登錄機碼,執行不合法的操作。
1019 0x03FB 系統無法配置系統登錄記錄所需的空間。
1020 0x03FC 無法在已經有子機碼或數值的系統登錄機碼建立符號連結。
1021 0x03FD 無法在臨時機碼下建立永久的子機碼。
1022 0x03FE 變更要求的通知完成,但信息 並未透過呼叫者的緩沖區傳
回。呼叫者現在需要自行列舉檔案,找出變更的地方。
1051 0x041B 停止控制已經傳送給其它服務 所依峙的一個服務。
1052 0x041C 要求的控制對此服務無效
1052 0x041C 要求的控制對此服務無效
1053 0x041D The service did not respond to the start or control
request in a timely fashion. 1054 0x041E 無法建立服務的執行緒。
1055 0x041F 服務資料庫被鎖定。
1056 0x0420 這種服務已經在執行。
1057 0x0421 帳戶名稱錯誤或者不存在。
1058 0x0422 指定的服務暫停作用,無法激活。
1059 0x0423 指定循環服務從屬關系。
1060 0x0424 指定的服務不是安裝進來的服務。
1061 0x0425 該服務項目此時無法接收控制訊息。
1062 0x0426 服務尚未激活。
1063 0x0427 無法聯機到服務控製程序。
1064 0x0428 處理控制要求時,發生意外狀況。
1065 0x0429 指定的資料庫不存在。
1066 0x042A 服務傳回專屬於服務的錯誤碼。
1067 0x042B The process terminated unexpectedly.
1068 0x042C 從屬服務或群組無法激活。
1069 0x042D 因為登入失敗,所以沒有激活服務。
1070 0x042E 在激活之後,服務在激活狀態時當機。
1071 0x042F 指定服務資料庫鎖定無效。
1072 0x0430 指定的服務已經標示為刪除。
1073 0x0431 指定的服務已經存在。
1074 0x0432 系統目前正以上一次執行成功的組態執行。
1075 0x0433 從屬服務不存在,或已經標示為刪除。
1076 0x0434 目前的激活已經接受上一次執行成功的 控制設定。
1077 0x0435 上一次激活之後,就沒有再激活服務。
1078 0x0436 指定的名稱已經用於服務名稱或服務顯示 名稱。
1100 0x044C 已經到了磁帶的最後。
1101 0x044D 到了檔案標示。
1102 0x044E 遇到磁帶的開頭或分割區。
1100 0x044C 已經到了磁帶的最後。
1101 0x044D 到了檔案標示。
1102 0x044E 遇到磁帶的開頭或分割區。
1103 0x044F 到了檔案組的結尾。
1104 0x0450 磁帶沒有任何資料。
1105 0x0451 磁帶無法製作分割區。
1106 0x0452 存取多重容體的新磁帶時,發現目前 區塊大小錯誤。
1107 0x0453 載入磁帶時,找不到磁帶分割區信息。
1108 0x0454 無法鎖住儲存媒體退帶功能。
1108 0x0454 無法鎖住儲存媒體退帶功能。
1109 0x0455 無法解除載入儲存媒體。
1110 0x0456 磁碟驅動器中的儲存媒體已經變更。
1111 0x0457 已經重設 I/O 匯流排。
1112 0x0458 磁碟驅動器沒有任何儲存媒體。
1113 0x0459 目標 multi-byte code page,沒有對應 Unicode 字元。
1114 0x045A 動態鏈接庫 (DLL) 起始常式失敗。
1115 0x045B 系統正在關機。
1116 0x045C 無法中止系統關機,因為沒有關機的動作在進行中。
1117 0x045D 因為 I/O 裝置發生錯誤,所以無法執行要求。
1118 0x045E 序列裝置起始失敗,會取消載入序列驅動程序。
1119 0x045F 無法開啟裝置。這個裝置與其它裝置共享岔斷要求 (IRQ)。
至少已經有一個使用同一IRQ 的其它裝置已經開啟。
1120 0x0460 A serial I/O operation was completed by another
write to the serial port. (The IOCTL_SERIAL_XOFF_COUNTER reached zero.)
1121 0x0461 因為已經過了逾時時間,所以序列 I/O 作業完成。
(IOCTL_SERIAL_XOFF_COUNTER 不是零。)
1122 0x0462 在磁碟找不到任何的 ID 地址標示。
1123 0x0463 磁碟扇區 ID 欄位與磁碟控制卡追蹤地址 不符。
1124 0x0464 軟式磁碟驅動器控制卡回報了一個軟式磁碟驅動器驅動程序無法識別的錯誤。
1125 0x0465 軟式磁碟驅動器控制卡傳回與緩存器中不一致的結果。
1126 0x0466 存取硬碟失敗,重試後也無法作業。
1127 0x0467 存取硬碟失敗,重試後也無法作業。
1128 0x0468 存取硬碟時,必須重設磁碟控制卡,但是 連重設的動作也失敗。
1129 0x0469 到了磁帶的最後。
1130 0x046A 可用伺服器儲存空間不足,無法處理這項指令。
1131 0x046B 發現潛在的死鎖條件。
1132 0x046C 指定的基本地址或檔案位移沒有適當 對齊。
1140 0x0474 嘗試變更系統電源狀態,但其它的應用程序或驅動程序拒絕。
1141 0x0475 系統 BIOS 無法變更系統電源狀態。
1150 0x047E 指定的程序需要新的 Windows 版本。
1151 0x047F 指定的程序不是 Windows 或 MS-DOS 程序。
1152 0x0480 指定的程序已經激活,無法再激活一次。
1153 0x0481 指定的程序是為舊版的 Windows 所寫的。
1154 0x0482 執行此應用程序所需的鏈接庫檔案之一毀損。
1155 0x0483 沒有應用程序與此項作業的指定檔案建立關聯。
1156 0x0484 傳送指令到應用程序發生錯誤。
1157 0x0485 找不到執行此應用程序所需的鏈接庫檔案。
1200 0x04B0 指定的裝置名稱無效。
1201 0x04B1 裝置現在雖然未聯機,但是它是一個記憶聯機。
1202 0x04B2 嘗試記憶已經記住的裝置。
1203 0x04B3 提供的網路路徑找不到任何網路提供程序。
1203 0x04B3 提供的網路路徑找不到任何網路提供程序。
1204 0x04B4 指定的網路提供程序名稱錯誤。
1205 0x04B5 無法開啟網路聯機設定文件。
1206 0x04B6 網路聯機設定文件壞掉。
1207 0x04B7 無法列舉非容器。
1208 0x04B8 發生延伸的錯誤。
1209 0x04B9 指定的群組名稱錯誤。
1210 0x04BA 指定的計算機名稱錯誤。
1211 0x04BB 指定的事件名稱錯誤。
1212 0x04BC 指定的網路名稱錯誤。
1213 0x04BD 指定的服務名稱錯誤。
1214 0x04BE 指定的網路名稱錯誤。
1215 0x04BF 指定的資源共享名稱錯誤。
1216 0x04C0 指定的密碼錯誤。
1217 0x04C1 指定的訊息名稱錯誤。
1218 0x04C2 指定的訊息目的地錯誤。
1219 0x04C3 所提供的條件與現有的條件組發生沖突。
1220 0x04C4 嘗試與網路伺服器聯機,但是 與該伺服器的聯機已經太多。
1221 0x04C5 其它網路計算機已經在使用這個工作群組或網域名稱。

『貳』 求救:xp 系統藍屏 錯誤代碼:0x0000008E

藍屏"的硬體原因及解決

"藍屏"現象多和內存大小、CPU頻率、光碟機、硬碟碎片等等關系密切......在計算機的使用過程中,經常會遇到藍屏的情況。對於初學者來講,好象就是一場電腦災難一樣,不知所措。其實只要了解了原因之後就不用怕了。造成計算機藍屏的原因有很多種,硬體方面的原因總體可以概括為以下幾種:

一、屏幕顯示系統忙,請按任意鍵繼續……

1、虛擬內存不足造成系統多任務運算錯誤
虛擬內存是WINDOWS系統所特有的一種解決系統資源不足的方法,其一般要求主引導區的硬碟剩餘空間是其物理內存的2-3倍。而一些發燒友為了充分利用空間,將自己的硬碟塞到滿滿的,忙記了WINDOWS這個苛刻的要求。結果導致虛擬內存因硬碟空間不足而出現運算錯誤,所以就出現藍屏。要解決這個問題好簡單,盡量不要把硬碟塞得滿滿的,要經常刪除一些系統產生的臨時文件、交換文件,從而可以釋放空間。或可以手動配置虛擬內存,選擇高級,把虛擬內存的默認地址,轉到其他的邏輯盤下。這樣就可以避免了因虛擬內存不足而引起的藍屏。

2、CPU超頻導致運算錯誤
超頻對於發燒友來說是常事,所以由超頻所引起的各種故障也就在所難免了。超頻,就本身而言就是在原有的基礎上完成更高的性能,但由於進行了超載運算,造成其內部運算過多,使CPU過熱,從而導致系統運算錯誤。有些CPU的超頻性能比較好,如INTEL的賽揚處理器和AMD-K6-2處理器還算較好的,但有時也會出現一些莫名其妙的錯誤。(例如:我曾試過將INTEL賽揚300A,在超頻到450時,軟碟機在沒有接受命令時,進行讀盤操作)。INTEL的低於200的CPU以及AMD-K5的超頻能力就不是那麼好。建議高檔的CPU要超頻時,那麼散熱工作一定要做好,最好裝一個大的風扇,再加上一些硅膠之類的散熱材料。至於一些低檔的CPU我建議你就最好不要超頻了,免得超頻達不到預想的效果反而經常出現藍屏影響計算機的正常速度。

二、內存條的互不兼容或損壞引起運算錯誤

這時個最直觀的現象,因為這個現象往往在一開機的時候就可以見到,根本啟動不了計算機,畫面提示出內存有問題,問你是否要繼續。造成這種錯誤是物理上的損壞內存或者內存與其它硬體不兼容所致。這時候只有換過另外的內存了。

三、光碟機在讀盤時被非正常打開所至

這個現象是在光碟機正在讀取數據時,由於被誤操作打開而導致出現藍屏。這個問題不影響系統正常動作,只要再彈入光碟或按ESC鍵就可以。
以上是我在維護計算機中碰到導致藍屏的幾種原因,或許還會有其他一些莫名其妙的問題導致計算機出現藍屏。不管怎樣,遇到這類問題後,應先仔細分析問題發生的原因,然後再著手解決。

四、硬體剩餘空間太小或碎片太多

由於Win9X運行時需要用硬碟作虛擬內存,這就要求硬碟必須保留一定的自由空間以保證程序的正常運行。一般而言,最低應保證100MB以上的空間,否則出現「藍屏」很可能與硬碟剩餘空間太小有關。另外,硬碟的碎片太多,也容易導致「藍屏」的出現。因此,每隔一段時間進行一次碎片整理是必要的。

五、系統硬體沖突

這種現象導致「藍屏」也比較常見。實踐中經常遇到的是音效卡或顯示卡的設置沖突。在「控制面板」→「系統」→「設備管理」中檢查是否存在帶有黃色問號或感嘆號的設備,如存在可試著先將其刪除,並重新啟動電腦,由Win9X自動調整,一般可以解決問題。若還不行,可手工進行調整或升級相應的驅動程序。

"藍屏"的軟體原因及解決

與硬體密切聯系的是軟體,有時軟體在"藍屏"現象中也"功不可沒",載入了過多的程序、注冊表有問題、軟硬不兼容、驅動程序有問題,相對於硬體原因來說要不易察覺些,可要多加註意.........

一、啟動時載入程序過多

不要在啟動時載入過多的應用程序(尤其是你的內存小於64MB),以免使系統資源消耗殆盡。正常情況下,Win9X啟動後系統資源應不低於90%。最好維持在90%以上,若啟動後未運行任何程序就低於70%,就需要卸掉一部分應用程序,否則就可能出現「藍屏」。

二、應用程序存在著BUG

有些應用程序設計上存在著缺陷或錯誤,運行時有可能與Win9X發生沖突或爭奪資源,造成Win9X無法為其分配內存地址或遇到其保護性錯誤。這種BUG可能是無法預知的,免費軟體最為常見。另外,由於一些用戶還在使用盜版軟體(包括盜版Win9X),這些盜版軟體在解密過程中會破壞和丟失部分源代碼,使軟體十分不穩定,不可靠,也常常導致「藍屏」。

三、遭到不明的程序或病毒攻擊所至

這個現象只要是平時我們在上網的時候遇到的,當我們在沖浪的時候,特別是進到一些BBS站時,可能暴露了自己的IP,被"黑客"用一些軟體攻擊所至。對互這種情況最好就是在自己的計算機上安裝一些防禦軟體。再有就是登錄BBS要進行安全設置,隱藏自己IP。

四、版本沖突

有些應用程序需調用特定版本的動態鏈接庫DLL,如果在安裝軟體時,舊版本的DLL覆蓋了新版本的DLL,或者刪除應用程序時,誤刪了有用的DLL文件,就可能使上述調用失敗,從而出現「藍屏」。不妨重新安裝試一試。

五、注冊表中存在錯誤或損壞

很多情況下這是出現「藍屏」的主要原因。注冊表保存著Win9X的硬體配置、應用程序設置和用戶資料等重要數據,如果注冊表出現錯誤或被損壞,就很可能出現「藍屏」。如果你的電腦經常出現「藍屏」,你首先就應考慮是注冊表出現了問題,應及時對其檢測、修復,避免更大的損失。

六、軟硬體不兼容

新技術、新硬體的發展很快,如果安裝了新的硬體常常出現「藍屏」,那多半與主板的BIOS或驅動程序太舊有關,以致不能很好支持硬體。如果你的主板支持BIOS升級,應盡快升級到最新版本或安裝最新的設備驅動程序。

Windows 2000"藍屏"分析與解決篇

Win2000也許可以說得上是一個劃時代的操作系統,但是它仍然不能夠避免藍屏死機(Blue Screen of Death)問題,Win2000的"藍屏"(BSOD)和NT4以前的"藍屏"消息是完全不同的。最大的不同就是NT中的BSOD只包含一個通用的停止消息類型(就是實際的出錯代碼), 但是Win2000的BSOD包含有兩種消息類型:停止消息和硬體消息。停止消息是指,當win2000的內核發現一個它不能夠恢復的軟體錯誤時候產生的錯誤消息,它分為:常規停止消息、安裝停止消息、可執行程序安裝停止消息、軟體陷阱停止消息四種類型......針對Windows2000的藍屏,在上述概括的現象與對策基礎上,我們分兩方面來分析:

Windows 2000中藍屏死機之停止信息分析

簡介:什麼是藍屏死機(BSOD)問題?

BSOD就是顯示在藍色屏幕背景下的出錯信息。一般這種出錯信息嚴重到你的整個操作系統當機,你只有重新冷啟動的選擇。

刨析BSOD

BSOD可以分成獨立的幾部分,每部分包含有有價值的錯誤處理信息。這幾部分包括:

1、bug檢查部分:這是BSOD中包含實際出錯消息的位置。在這部分中,你應該注意的是出錯代碼(就是在單詞「Stop」後面的十六進制數字)和錯誤符號(就是緊跟在出錯代碼後的單詞)

2、推薦用戶採取行動部分:這部分經常包含一些一般的指導你如何糾正錯誤的步驟的消息。

3、調試埠信息部分:這部分包含有你應該如何設置你的內核調試器的信息。內核調試器是讓你可以通過手工連接到計算機並對進程進行調試的工具。

下面是一個具體的BSOD例子:

*** Stop: 0x0000001E (0xF24A447A, 0X00000001, 0X0000000)
KMODE_EXCEPTION_NOT_HANDLED
*** Address F24A447A base at f24A0000, DateStamp 35825ef8d - wdmaud.sys

If this is the first time you've seen this Stop error screen, restart your computer.
If this screen appears again, follow these steps:

Check to be sure you have adequate disk space. If a driver is identified in the
Stop message, disable the driver or check with the manufacturer for driver updates.
Try changing video adapters.

Check with your hardware vendor for any BIOS updates. Disable BIOS memory options
such as caching or shadowing. If you need to use Safe Mode to remove or disable
components, restart your computer, press F8 to select Advanced Startup Options,
and then select Safe Mode.

Refer to your Getting Started manual for more information on troubleshooting Stop errors.

Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate 19200)
Beginning mp of physical memory
Physical memory mp complete. Contact your system administrator or technical support group.

根據這個具體的例子,按照上面刨析的BSOD四個部分,下面一一介紹:

bug檢查部分:

這是BSOD中包含實際出錯消息的位置。它看上去就是下面的代碼:
*** Stop: 0x0000001E (0xF24A447A, 0X00000001, 0X0000000)
KMODE_EXCEPTION_NOT_HANDLED *** Address F24A447A base at f24A0000, DateStamp 35825ef8d - wdmaud.sys

其中錯誤代碼是一個緊跟在Stop後面的十六進制數,在這裡面它由其它四個數字組成。

而錯誤符號是指緊隨其後的KMODE_EXCEPTION_NOT_HANDLED.

在一些BSOD出錯信息中,一個內存位置和文件名出現在錯誤符號的後面。這個信息告訴了當錯誤發生的時候在內存中的位置和哪個文件導致了錯誤的發生。當然你是否能夠看到該信息是由哪種停止消息類型來決定的。在一些實際運用中,你只能夠看到上面的第一行。而這里通常是表示由顯示服務中導致的問題。 推薦用戶採取行動部分:

在上面的例子中推薦用戶採取行動部分如下:

If this is the first time you've seen this Stop error screen, restart your computer. If this screen appears again, follow these steps:
Check to be sure you have adequate disk space. If a driver is identified in the Stop message, disable the driver or check with the manufacturer for driver updates. Try changing video adapters.
Check with your hardware vendor for any BIOS updates. Disable BIOS memory options such as caching or shadowing. If you need to use Safe Mode to remove or disable components, restart your computer, press F8 to select Advanced Startup Options, and then select Safe Mode.
Refer to your Getting Started manual for more information on troubleshooting Stop errors.

推薦用戶採取行動部分通常是推薦用戶在遇到了出錯信息後應該採取的解決步驟。在消息中可以看到,解決一個BSOD也許只要重新啟動或則整理出足夠大的剩餘空間就能夠解決了。盡管這樣的方法偶爾會起到作用,但是實際上要解決BSOD經常要遠遠復雜得多。

調試埠信息部分:

這部分包含有你應該如何設置你的內核調試器的信息。我會在以後的網站裡面詳細介紹什麼是2000的內核調試器。在上面的例子中,這部分內容是:

Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate 19200)
Beginning mp of physical memory Physical memory mp complete. Contact your system administrator or technical support group.

停止信息的四種類型

當程序或則驅動程序發生了一個不能夠控制的錯誤消息或則試圖執行一個非法指令時,系統就會發生停止出錯信息。而這種信息通常由四種類型組成。

1、常規停止消息:在正常的使用win2000時發生的停止消息
常規停止消息通常是最難解決的出錯信息,因為有可能有無數的原因能夠導致錯誤的發生。

2、安裝停止消息:在安裝win2000過程中的停止消息,通常由你的系統中存在和2000不兼容的硬體設備引起的。

解決辦法是你查看系統中的硬體設備,找到沒有列出在2000兼容列表中的設備。然後和你的硬體設備廠商聯系看他們是否能夠給你提供該設備的驅動程序。如果他們不能,那你只好從你的系統中刪除該設備,並用其它的可以兼容的設備替換掉。
如果你的所有硬體都是兼容的,你也許是存在有兩個互相沖突的硬體設備。要解決這個問題,先移走任何不是必要的硬體設備,然後重新裝載2000,一旦2000裝載成功後,把所有移走的設備全部重新加入到系統中。這樣做,通常能夠解決這個問題,至少能夠告訴你哪些硬體是有沖突的。

3、可執行程序安裝停止消息:表示發生在2000安裝過程中第4個階段(執行程序部分)的停止消息。

安裝2000在可執行程序的安裝過程中有兩個階段。第一個階段是禁止硬體中斷同時裝載一些基本的組件,例如硬體提取層。第二個階段是初始化你系統中所有的硬體。如果你在安裝程序到了這個階段的時候收到了停止消息錯誤。需要再次運行診斷程序,來判斷你的硬體是否都工作正常。然後重新安裝2000。如果你仍然遇到這個出錯消息,那麼就需要和微軟技術支持部打交道了。

4、軟體陷阱停止消息:由於軟體中的錯誤陷阱並且當程序試圖執行一個非法指令的時候發生的停止消息。

由於軟體中的錯誤陷阱並且當程序試圖執行一個非法指令的時候發生的停止消息。例如,程序試圖向一個本來是保存數字的變數寫字元串的時候,這個錯誤就有可能發生。如果你遇到了這種類型的錯誤,需要記下出錯信息,是什麼軟體導致了錯誤,一般這些軟體都有新的版本來糾正這些錯誤的。

當你遇到了停止消息時候可能需要的解決問題的步驟:

首先判斷你最近是不是在系統中有任何的變動。如果你有,那麼這些變動經常是問題產生的根源。試圖刪除或者移走新的硬體或軟體,看是否能夠解決問題。檢查系統中的硬體,最好如果有硬體檢測程序的話,可以運行該程序進行檢測,同時重新插放你的內存卡和擴展卡。

如果你的停止信息是發生在啟動中或剛啟動的過程中,那麼這有可能是你的某個服務或則設備驅動程序中的問題。可以嘗試將機器啟動到安全模式。如果你的2000系統能夠啟動成功安全模式,那麼表示你的猜測是正確的。

同時要確保你的防病毒程序是設計成和win2000兼容的,並且隨時保持更新。如果錯誤仍然發生,那麼進入你的CMOS設置,禁止掉BIOS中的象緩存或則shadow之類的選項,然後重新啟動。
Windows 2000藍屏死機之STOP對"症"下葯

從理論上講,純32位的Windows 2000是不會出現死機的,但是這僅僅是理論上。病毒或硬體和硬體驅動程序不匹配等原因將造成Windows2000的崩潰,當Windows 2000出現死機時,顯示器屏幕將變為藍色,然後出現STOP故障提示信息。下面我們分別介紹通用的STOP故障處理方法和特殊的STOP故障排除。

通用STOP故障處理

1.首先使用新版殺毒軟體檢查計算機上是否有病毒。

2.如果Windows 2000可以啟動,請檢查「事件查看器」中的信息,以確定導致故障的設備或驅動程序。啟動「事件查看器」的方法是:「開始」\「設置」\「控制面板」\「管理工具」\「事件查看器」\「系統日誌」。

3.如果不能啟動計算機,試著用「安全模式」或「最後一次正確的配置」啟動計算機,然後刪除或禁用新安裝的附加程序或驅動程序。如果用「安全模式」啟動不了計算機,可使用修復控制台。修復控制台可以禁用一些服務、重新命名設備驅動程序、檢修引導扇區或主引導記錄。

4.拆下新安裝的硬體設備(RAM、適配卡、硬碟、數據機等等)。

5.確保已經更新了硬體設備的驅動程序,以及系統有最新的BIOS。

6.運行由計算機製造商提供的系統診斷工具,尤其是內存檢查。

7.檢查Microsoft兼容硬體列表(HCL),確保所有的硬體和驅動程序都與Windows2000兼容。Hcl.txt在Windows 2000 CD-ROM的\Support文件夾中。

8.在BIOS中禁用內存緩存功能。

9.重新啟動計算機,在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。(注:使用「最後一次正確的配置」的方式啟動計算機,計算機的所有設置被重置為最後一次成功啟動時的配置。)

10.如果能夠訪問Web,請進入http://www.microsoft.com/ntserver/,單擊「Support」/「Search Knowledge Base」,在「Type your keywords here」處,輸入「stop」和相應的號碼(如出現STOP消息「stop:0x0000000A」,可在此輸入「stop0x0000000A」),按Enter鍵,就可以找出所出現的STOP問題的解決方法。(E文)

部分STOP代碼

STOP消息 0x0000000A故障(剛加入新設備時)
通常原因 驅動程序使用了不正常的內存地址。

1.在安裝過程中,屏幕上提示「安裝程序正在檢查計算機硬體配置」時,按F5,根據提示選擇合適的計算機類型。例如,如果計算機是單處理器,請選擇「標准PC」。
2.在BIOS中禁用內存緩存功能。
3.拆下所有適配卡,並斷開所有不是啟動計算機所必需的硬體設備,再重新安裝Windows2000。
4.如果系統配有SCSI適配卡,請向適配卡銷售商索取最新的Windows2000驅動程序,禁用同步協商功能,檢查終結頭和設備的SCSI ID號。
5.如果系統配有IDE設備,設IDE埠為Primary。檢查IDE設備的Master/Slave/Only設置。除了硬碟,拆下其它所有的IDE設備。
6.運行由計算機製造商提供的系統診斷工具,尤其是內存檢查。
7.檢查Microsoft兼容硬體列表(HCL),確保所有的硬體和驅動程序都與Windows2000兼容。
8.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。

STOP消息 0x0000001E故障

1.檢查是否有充分的磁碟空間,尤其是新安裝。
2.禁用STOP消息中顯示的驅動程序和所有新安裝的驅動程序。
3.如果所使用的視頻驅動程序不是Microsoft提供的,試著切換到標准VGA驅動程序或者由Win2000支持的合適的驅動程序。
4.確保系統有最新的BIOS。
5.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。

STOP消息 0x00000023和0x00000024故障
通常原因 嚴重的驅動器碎片、超載的文件I/O、第三方的驅動器鏡像軟體或者一些防病毒軟體出錯。

1.禁用一些防病毒軟體或者備份程序,禁用所有碎片整理應用程序。
2.運行CHKDSK /f 檢修硬碟驅動器,然後重新啟動計算機。
3.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。

STOP消息 0x0000002E故障
通常原因 系統內存中的奇偶校驗錯誤。

1.運行由計算機製造商提供的系統診斷工具,尤其是內存檢查。
2.在BIOS中禁用內存緩存功能。
3.試著用「安全模式」啟動。如果「安全模式」可啟動計算機,試著更改為標准VGA驅動程序。如果這不能解決問題,可能須要用另外的視頻適配卡。「兼容硬體列表」中列出了兼容的視頻適配卡。
4.確保已經更新了硬體設備的驅動程序,以及系統有最新的BIOS。
5.拆下一些新安裝的硬體(RAM、適配器、硬碟、數據機等等)。
6.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。

STOP消息 0x0000003F故障
通常原因 驅動程序沒有被完全清除。

刪除一些新安裝的軟體,包括備份工具或磁碟工具,例如碎片整理和防病毒軟體。

STOP消息 0x00000058故障
通常原因 在容錯集的主驅動器中發生錯誤。

1.用Windows 2000引導軟盤,從鏡像(第二個)系統驅動器啟動計算機。
2.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。

STOP消息 0x0000007B故障
通常原因 在I/O系統的初始化過程中出現問題(通常是引導驅動器或文件系統)。

1.檢查計算機上是否有病毒。這個STOP消息通常在引導扇區有病毒時出現。
2.使用「修復控制台」來修復驅動器。
3.拆下新安裝的硬碟驅動器或控制卡。
4.如果系統配有SCSI適配卡,請向適配卡銷售商索取最新的Windows2000驅動程序,禁用同步協商功能,檢查終結頭和設備的SCSI ID號。
5.如果系統配有IDE設備,設IDE埠為Primary。檢查IDE設備的Master/Slave/Only設置。除了硬碟,拆下其它所有的IDE設備。
6.運行CHKDSK。如果Windows 2000不能啟動CHKDSK,則必須把硬碟拆下並連接到另一個Windows2000系統上,然後用CHKDSK命令檢查該硬碟。
7.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。

STOP消息 0x0000007F故障
通常原因 硬體或軟體問題;常見的原因是硬體失效。

1.運行由計算機製造商提供的系統診斷工具,尤其是內存檢查。這個STOP消息經常出現在錯誤或誤配內存的情況下。
2.在BIOS中禁用內存緩存功能。
3.試著拆下或替換硬體:RAM、控制器、適配器、數據機和其它外圍設備。
4.檢查Microsoft兼容硬體列表(HCL),確保所有的硬體和驅動程序都與Windows2000兼容。這個問題可能是由於不兼容的主板引起的。
5.重新啟動計算機。在啟動屏幕處,按F8進入「高級啟動選項」,然後選擇「最後一次正確的配置」。

解決藍屏之工具篇:

"兩手抓,兩手都要硬",針對 "藍屏"現象除了在硬體方面改善你的系統硬體環境外,"軟環境"的建設也不可忽視,就我們所知道的一些工具介紹給你,當然,可能還有更多的好工具,不妨平時多留意!

RAM Idle--讓藍屏消失

不管是曾經遠去的DOS時代,還是如日中天的Windows時代,作為系統資源中最重要的一項——內存資源,一直都是電腦愛好者們最為頭疼的事情。雖然現在主板上的內存插槽越來越多,內存的價錢也越來越低,但無論怎樣,還是有很多朋友的內存資源時常不夠用,以至於系統性能無法正常發揮。究其原因,主要是由於Windows操作系統不能有效地對內存資源進行管理,導致大量內存資源被白白佔用,從而使系統性能大幅度降低,造成程序鎖死、系統掛起等煩人的問題。因此,不少專門用來對內存資源進行管理的工具軟體也就應運而生,而今天要介紹的RAM Idle則是這類軟體中的佼佼者。

一、安裝

首先用Winzip等軟體將下載得到的壓縮解壓,然後點擊Setup.exe文件,在彈出的對話框中選擇【是】即可開始安裝RAM Idle(如圖1)。和大多數Windows應用程序一樣,RAM Idle的安裝過程很簡單,只需要一路點擊【Next】即可完成。

二、 使用

RAM Idle的主要功能是在系統空閑的時候按照用戶設置自動釋放回收一定數量的內存,從而避免因Windows系統不足而造成的內存資源枯竭問題,並大幅提高系統性能與穩定性。
俗話說:工欲善其事,必先利其器,使用RAM Idle也是一樣,只有設置合理,它才能更好的對內存資源進行管理。下面就請大家點擊【開始】-【程序】-【RAM Idle】-【Configuration】打開RAM Idle設置界面(如圖2)和我一起認識下RAM Idle的設置選項

1. 【Main】選項卡:為軟體的主要設置部分,包括以下幾個內容:
·Target Free RAM:設置到達最小剩餘內存時,RAM Idle所要嘗試恢復的內存數量。
·Minimum Free RAM:設置最小剩餘內存數量,當達到這個數值的時候,RAM Idle將會自動恢復內存資源。
·Disable the CPU usage detection:選中此項後,RAM Idle恢復內存的時候將不再檢測CPU佔用率,不過只是在你的CPU佔用率總是顯示100%的時候才需要選中。一般情況下我們不用選中該項,【Recover RAM if only……】中可以設置恢復內存時的最高CPU佔用率,也就是說只有CPU佔用率低於設定數值時,RAM Idle才可以恢復內存,否則,不予恢復。
·Free up……if free RAM below 50%:設置剩餘內存少於總內存50%的時候,每隔多少時間恢復多少數量的內存。
·Pop up menu free……:設置彈出菜單中手動恢復內存部分的三個恢復數值。

2. 【Options】選項卡:主要包括總在最前面、隨Windows啟動而啟動、隱藏系統托盤圖標等一些常規設置。

3. 【Gator】選項卡:一個填表軟體的簡要介紹和下載鏈接。

4. 【About】選項卡:顯示當前系統的內存資源信息(如圖3)

RAM Idle釋放內存共有兩種方法,一種是當剩餘內存少於總內存50%的時候,按照設置每隔一段時間自動釋放一定數量的內存(設置方法見上);一種是在系統托盤的RAM Idle圖標上點擊滑鼠右鍵,使用彈出菜單(如圖4)中的三個選項快速手動釋放一定數量的內存(設置方法見上)。

三、 小結

與同類軟體相比,RAM Idle基本綜合了該類軟體的所有精華,具有無可比擬的強大內存管理能力。首先RAM Idle可以自動釋放內存資源,並且優化時間快,效率高。其次RAM Idle設置方便,功能齊備,並且佔用系統資源少,可在系統較為空閑的時候運行。另外,該軟體還具有多種方便且實用的小功能,如重新啟動,關機,掛起等。

雖然MemMAX、FREERAM、RAMFIX等軟體也各有特色,但由於這樣或者那樣的缺點,比如不能自動優化、佔用系統資源太高、優化效率低下、使用繁瑣等,使得它們很難超越RAM Idle。

如果你正在為你的內存資源的管理而發愁的話,那麼我建議你一定要試試RAM Idle,以它的實力相信一定不會讓你失望!

打贏一場藍屏殲滅戰

藍屏到底是怎麼產生的呢?我們可以從軟、硬兩方面來解釋藍屏現象產生的原因。從硬體方面來說,超頻過度是導致藍屏的一個主

『叄』 藍屏代碼 0x0000007b 救命

0x007B檔名、目錄名稱或儲存體標簽語法錯誤。

Windows藍屏錯誤代碼一覽表,請需要的人自己查看.
數 值 敘 述
0 0x0000作業完成。
1 0x0001不正確的函數。
2 0x0002系統找不到指定的檔案。
3 0x0003系統找不到指定的路徑。
4 0x0004系統無法開啟檔案。
5 0x0005拒絕存取。
6 0x0006無效的代碼。
7 0x0007儲存體控制區塊已毀。
8 0x0008儲存體空間不足,無法處理這個指令。
9 0x0009儲存體控制區塊位址無效。
10 0x000A環境不正確。
11 0x000B嘗試載入一個格式錯誤的程式。
12 0x000C存取碼錯誤。
13 0x000D資料錯誤。
14 0x000E儲存體空間不夠,無法完成這項作業。
15 0x000F系統找不到指定的磁碟機。
16 0x0010無法移除目錄。
17 0x0011系統無法將檔案移到 其他的磁碟機。
18 0x0012沒有任何檔案。
19 0x0013儲存媒體為防寫狀態。
20 0x0014系統找不到指定的裝置。
21 0x0015裝置尚未就緒。
22 0x0016裝置無法識別指令。
23 0x0017資料錯誤 (cyclic rendancy check)
24 0x0018程式發出一個長 度錯誤的指令。
25 0x0019磁碟機在磁碟找不到 持定的磁區或磁軌。
26 0x001A指定的磁碟或磁片無法存取。
27 0x001B磁碟機找不到要求的磁區。
28 0x001C印表機沒有紙。
29 0x001D系統無法將資料寫入指定的磁碟機。
30 0x001E系統無法讀取指定的裝置。
31 0x001F連接到系統的某個裝置沒有作用。
32 0x0020 The process cannot access the file because it is being used
by another process.
33 0x0021檔案的一部份被鎖定,現在無法存取。
34 0x0022磁碟機的磁片不正確。 請將 %2 (Volume Serial Number: %3) 插入磁
碟 機%1。
36 0x0024開啟的分享檔案數量太多。
38 0x0026到達檔案結尾。
39 0x0027磁碟已滿。
50 0x0032不支援這種網路要求。
51 0x0033遠端電腦無法使用。
52 0x0034網路名稱重復。
53 0x0035網路路徑找不到。
54 0x0036網路忙碌中。
55 0x0037 The specified network resource or device is no longer
available.
56 0x0038 The network BIOS command limit has been reached.
57 0x0039網路配接卡發生問題。
58 0x003A指定的伺服器無法執行要求的作業。
59 0x003B網路發生意外錯誤。
60 0x003C遠端配接卡不相容。
61 0x003D印表機佇列已滿。
62 0x003E伺服器的空間無法儲存等候列印的檔案。
63 0x003F等候列印的檔案已經刪除。
64 0x0040指定的網路名稱無法使用。
65 0x0041拒絕存取網路。
66 0x0042網路資源類型錯誤。
67 0x0043網路名稱找不到。
68 0x0044超過區域電腦網路配接卡的名稱限制。
69 0x0045超過網路BIOS作業階段的限制。
70 0x0046遠端伺服器已經暫停或者正在起始中。
71 0x0047由於連線數目已達上限,此時無法再連線到這台遠端電腦。
72 0x0048指定的印表機或磁碟裝置已經暫停作用。
80 0x0050檔案已經存在。
82 0x0052無法建立目錄或檔案。
83 0x0053 INT 24 失敗
84 0x0054處理這項要求的儲存體無法使用。
85 0x0055近端裝置名稱已經在使用中。
86 0x0056指定的網路密碼錯誤。
87 0x0057叄數錯誤。
88 0x0058網路發生資料寫入錯誤。
89 0x0059此時系統無法執行其他行程。
100 0x0064無法建立其他的系統semaphore。
101 0x0065屬於其他行程專用的semaphore 。
102 0x0066 semaphore已經設定,而且無法關閉。
103 0x0067無法指定semaphore 。
104 0x0068在岔斷時間無法要求專用的semaphore 。
105 0x0069此semaphore先前的擁有權已經結束。
106 0x006A請將磁片插入 %1。
107 0x006B因為代用的磁片尚未插入,所以程式已經停止。
108 0x006C磁碟正在使用中或被鎖定。
109 0x006D Pipe已經中止。
110 0x006E系統無法開啟指定的 裝置或檔案。
111 0x006F檔名太長。
112 0x0070磁碟空間不足。
113 0x0071沒有可用的內部檔案識別字。
114 0x0072目標內部檔案識別字不正確。
117 0x0075由應用程式所執行的IOCTL呼叫 不正確。
118 0x0076寫入驗證叄數值不正確。
119 0x0077系統不支援所要求的指令。
120 0x0078此項功能僅在Win32模式有效。
121 0x0079 semaphore超過逾時期間。
122 0x007A傳到系統呼叫的資料區域 太小。
123 0x007B檔名、目錄名稱或儲存體標簽語法錯誤。
124 0x007C系統呼叫層次不正確。
125 0x007D磁碟沒有設定標簽。
126 0x007E找不到指定的模組。
127 0x007F找不到指定的程序。
128 0x0080沒有子行程可供等待。
129 0x0081 %1這個應用程式無法在Win32模式下執行。
130 0x0082 Attempt to use a file handle to an open disk partition for
an operation other than raw disk I/O.
131 0x0083嘗試將檔案指標移至檔案開頭之前。
132 0x0084無法在指定的裝置或檔案,設定檔案指標。
133 0x0085 JOIN或SUBST指令 無法用於 內含事先結合過的磁碟機。
134 0x0086嘗試在已經結合的磁碟機,使用JOIN或SUBST指令。
135 0x0087嘗試在已經替換的磁碟機,使 用JOIN或SUBST指令。
136 0x0088系統嘗試刪除 未連結過的磁碟機的連結關系。
137 0x0089系統嘗試刪除 未替換過的磁碟機的替換關系。
138 0x008A系統嘗試將磁碟機結合到已經結合過之磁碟機的目錄。
139 0x008B系統嘗試將磁碟機替換成已經替換過之磁碟機的目錄。
140 0x008C系統嘗試將磁碟機替換成已經替換過之磁碟機的目錄。
141 0x00系統嘗試將磁碟機SUBST成已結合的磁碟機 目錄。
142 0x008E系統此刻無法執行JOIN或SUBST。
143 0x008F系統無法將磁碟機結合或替換同一磁碟機下目錄。
144 0x0090這個目錄不是根目錄的子目錄。
145 0x0091目錄仍有資料。
146 0x0092指定的路徑已經被替換過。
147 0x0093資源不足,無法處理這項 指令。
148 0x0094指定的路徑這時候無法使用。
149 0x0095嘗試要結合或替換的磁碟機目錄,是已經替換過的的目標。
150 0x0096 CONFIG.SYS檔未指定系統追蹤資訊,或是追蹤功能被取消。
151 0x0097指定的semaphore事件DosMuxSemWait數目不正確。
152 0x0098 DosMuxSemWait沒有執行;設定太多的semaphore。
153 0x0099 DosMuxSemWait清單不正確。
154 0x009A您所輸入的儲存媒體標 元長度限制。
155 0x009B無法建立其他的執行緒。
156 0x009C接收行程拒絕接受信號。
157 0x009D區段已經被舍棄,無法被鎖定。
158 0x009E區段已經解除鎖定。
159 0x009F執行緒識別碼的位址不正確。
160 0x00A0傳到DosExecPgm的引數字串不正確。
161 0x00A1指定的路徑不正確。
162 0x00A2信號等候處理。
164 0x00A4系統無法建立執行緒。
167 0x00A7無法鎖定檔案的部份范圍。
170 0x00AA所要求的資源正在使用中。
173 0x00AD取消范圍的鎖定要求不明顯。
174 0x00AE檔案系統不支援自動變更鎖定類型。
180 0x00B4系統發現不正確的區段號碼。
182 0x00B6作業系統無法執行 %1。
183 0x00B7檔案已存在,無法建立同一檔案。
186 0x00BA傳送的旗號錯誤。
187 0x00BB指定的系統旗號找不到。
188 0x00BC作業系統無法執行 %1。
189 0x00BD作業系統無法執行 %1。
190 0x00BE作業系統無法執行 %1。
191 0x00BF無法在Win32模式下執行 %1。
192 0x00C0作業系統無法執行 %1。
193 0x00C1 %1不是正確的Win32應用程式。
194 0x00C2作業系統無法執行 %1。
195 0x00C3作業系統無法執行 %1。
196 0x00C4作業系統無法執行 這個應用程式。
197 0x00C5作業系統目前無法執行 這個應用程式。
198 0x00C6作業系統無法執行 %1。
199 0x00C7作業系統無法執行 這個應用程式。
200 0x00C8程式碼的區段不可以大於或等於64KB。
201 0x00C9作業系統無法執行 %1。
202 0x00CA作業系統無法執行 %1。
203 0x00CB系統找不到輸入的環境選項。 \r
205 0x00CD在指令子目錄下,沒有任何行程有信號副處理程式。
206 0x00CE檔案名稱或副檔名太長。
207 0x00CF ring 2堆疊使用中。
208 0x00D0輸入的通用檔名字元 * 或 ? 不正確, 或指定太多的通用檔名字元。
209 0x00D1所傳送的信號不正確。
210 0x00D2無法設定信號處理程式。
212 0x00D4區段被鎖定,而且無法重新配置。
214 0x00D6附加到此程式或動態連結模組的動態連結模組太多。
215 0x00D7 Can''t nest calls to LoadMole.
230 0x00E6 The pipe state is invalid.
231 0x00E7所有的pipe instances都在忙碌中。
232 0x00E8 The pipe is being closed.
233 0x00E9 No process is on the other end of the pipe.
234 0x00EA有更多可用的資料。
240 0x00F0作業階段被取消。
254 0x00FE指定的延伸屬性名稱無效。
255 0x00FF延伸的屬性不一致。
259 0x0103沒有可用的資料。
266 0x010A無法使用Copy API。
267 0x010B目錄名稱錯誤。
275 0x0113延伸屬性不適用於緩沖區。
276 0x0114在外掛的檔案系統上的延伸屬性檔案已經毀損。
277 0x0115延伸屬性表格檔滿。
278 0x0116指定的延伸屬性代碼無效。
282 0x011A外掛的這個檔案系統不支援延伸屬性。
288 0x0120意圖釋放不屬於叫用者的mutex。
298 0x012A semaphore傳送次數過多。
299 0x012B只完成Read/WriteProcessMemory的部份要求。
317 0x013D系統找不到位於訊息檔 %2中編號為0x%1的訊息。
487 0x01E7嘗試存取無效的位址。
534 0x0216運算結果超過32位元。
535 0x0217通道的另一端有一個行程在接送資料。
536 0x0218等候行程來開啟通道的另一端。
994 0x03E2存取延伸的屬性被拒。
995 0x03E3由於執行緒結束或應用程式要求,而異常終止I/O作業。
996 0x03E4重疊的I/O事件不是設定成通知狀態。
997 0x03E5正在處理重疊的I/O作業。
998 0x03E6對記憶體位置的無效存取。
999 0x03E7執行inpage作業發生錯誤。

『肆』 java並發包源碼怎麼讀

1. 各種同步控制工具的使用

1.1 ReentrantLock

ReentrantLock感覺上是synchronized的增強版,synchronized的特點是使用簡單,一切交給JVM去處理,但是功能上是比較薄弱的。在JDK1.5之前,ReentrantLock的性能要好於synchronized,由於對JVM進行了優化,現在的JDK版本中,兩者性能是不相上下的。如果是簡單的實現,不要刻意去使用ReentrantLock。

相比於synchronized,ReentrantLock在功能上更加豐富,它具有可重入、可中斷、可限時、公平鎖等特點。

首先我們通過一個例子來說明ReentrantLock最初步的用法:

package test;

import java.util.concurrent.locks.ReentrantLock;public class Test implements Runnable{ public static ReentrantLock lock = new ReentrantLock(); public static int i = 0;

@Override public void run() { for (int j = 0; j < 10000000; j++)
{ lock.lock(); try
{
i++;
} finally
{ lock.unlock();
}
}
}
public static void main(String[] args) throws InterruptedException {
Test test = new Test();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(i);
}

}

有兩個線程都對i進行++操作,為了保證線程安全,使用了ReentrantLock,從用法上可以看出,與synchronized相比,ReentrantLock就稍微復雜一點。因為必須在finally中進行解鎖操作,如果不在finally解鎖,有可能代碼出現異常鎖沒被釋放,而synchronized是由JVM來釋放鎖。

那麼ReentrantLock到底有哪些優秀的特點呢?

1.1.1 可重入

單線程可以重復進入,但要重復退出

lock.lock();
lock.lock();try{
i++;

}
finally{
lock.unlock();
lock.unlock();
}

由於ReentrantLock是重入鎖,所以可以反復得到相同的一把鎖,它有一個與鎖相關的獲取計數器,如果擁有鎖的某個線程再次得到鎖,那麼獲取計數器就加1,然後鎖需要被釋放兩次才能獲得真正釋放(重入鎖)。這模仿了synchronized的語義;如果線程進入由線程已經擁有的監控器保護的 synchronized 塊,就允許線程繼續進行,當線程退出第二個(或者後續)synchronized塊的時候,不釋放鎖,只有線程退出它進入的監控器保護的第一個synchronized塊時,才釋放鎖。

public class Child extends Father implements Runnable{ final static Child child = new Child();//為了保證鎖唯一
public static void main(String[] args) { for (int i = 0; i < 50; i++) { new Thread(child).start();
}
}
public synchronized void doSomething() {
System.out.println("1child.doSomething()");
doAnotherThing(); // 調用自己類中其他的synchronized方法
}
private synchronized void doAnotherThing() { super.doSomething(); // 調用父類的synchronized方法
System.out.println("3child.doAnotherThing()");
}
@Override
public void run() {
child.doSomething();
}
}class Father { public synchronized void doSomething() {
System.out.println("2father.doSomething()");
}
}

我們可以看到一個線程進入不同的synchronized方法,是不會釋放之前得到的鎖的。所以輸出還是順序輸出。所以synchronized也是重入鎖

輸出:

1child.doSomething()
2father.doSomething()
3child.doAnotherThing()
1child.doSomething()
2father.doSomething()
3child.doAnotherThing()
1child.doSomething()
2father.doSomething()
3child.doAnotherThing()
...

1.1.2.可中斷

與synchronized不同的是,ReentrantLock對中斷是有響應的。中斷相關知識查看[高並發Java 二] 多線程基礎

普通的lock.lock()是不能響應中斷的,lock.lockInterruptibly()能夠響應中斷。

我們模擬出一個死鎖現場,然後用中斷來處理死鎖

package test;import java.lang.management.ManagementFactory;import java.lang.management.ThreadInfo;import java.lang.management.ThreadMXBean;import java.util.concurrent.locks.ReentrantLock;public class Test implements Runnable{ public static ReentrantLock lock1 = new ReentrantLock(); public static ReentrantLock lock2 = new ReentrantLock(); int lock; public Test(int lock)
{ this.lock = lock;
} @Override
public void run()
{ try
{ if (lock == 1)
{
lock1.lockInterruptibly(); try
{
Thread.sleep(500);
} catch (Exception e)
{ // TODO: handle exception
}
lock2.lockInterruptibly();
} else
{
lock2.lockInterruptibly(); try
{
Thread.sleep(500);
} catch (Exception e)
{ // TODO: handle exception
}
lock1.lockInterruptibly();
}
} catch (Exception e)
{ // TODO: handle exception
} finally
{ if (lock1.isHeldByCurrentThread())
{
lock1.unlock();
} if (lock2.isHeldByCurrentThread())
{
lock2.unlock();
}
System.out.println(Thread.currentThread().getId() + ":線程退出");
}
} public static void main(String[] args) throws InterruptedException {
Test t1 = new Test(1);
Test t2 = new Test(2);
Thread thread1 = new Thread(t1);
Thread thread2 = new Thread(t2);
thread1.start();
thread2.start();
Thread.sleep(1000); //DeadlockChecker.check();
} static class DeadlockChecker
{ private final static ThreadMXBean mbean = ManagementFactory
.getThreadMXBean(); final static Runnable deadlockChecker = new Runnable()
{ @Override
public void run()
{ // TODO Auto-generated method stub
while (true)
{ long[] deadlockedThreadIds = mbean.findDeadlockedThreads(); if (deadlockedThreadIds != null)
{
ThreadInfo[] threadInfos = mbean.getThreadInfo(deadlockedThreadIds); for (Thread t : Thread.getAllStackTraces().keySet())
{ for (int i = 0; i < threadInfos.length; i++)
{ if(t.getId() == threadInfos[i].getThreadId())
{
t.interrupt();
}
}
}
} try
{
Thread.sleep(5000);
} catch (Exception e)
{ // TODO: handle exception
}
}

}
};
public static void check()
{
Thread t = new Thread(deadlockChecker);
t.setDaemon(true);
t.start();
}
}

}

上述代碼有可能會發生死鎖,線程1得到lock1,線程2得到lock2,然後彼此又想獲得對方的鎖。

我們用jstack查看運行上述代碼後的情況

下面舉個例子:

package test;import java.util.concurrent.CyclicBarrier;public class Test implements Runnable{ private String soldier; private final CyclicBarrier cyclic; public Test(String soldier, CyclicBarrier cyclic)
{ this.soldier = soldier; this.cyclic = cyclic;
} @Override
public void run()
{ try
{ //等待所有士兵到齊
cyclic.await();
dowork(); //等待所有士兵完成工作
cyclic.await();
} catch (Exception e)
{ // TODO Auto-generated catch block
e.printStackTrace();
}

} private void dowork()
{ // TODO Auto-generated method stub
try
{
Thread.sleep(3000);
} catch (Exception e)
{ // TODO: handle exception
}
System.out.println(soldier + ": done");
} public static class BarrierRun implements Runnable
{ boolean flag; int n; public BarrierRun(boolean flag, int n)
{ super(); this.flag = flag; this.n = n;
} @Override
public void run()
{ if (flag)
{
System.out.println(n + "個任務完成");
} else
{
System.out.println(n + "個集合完成");
flag = true;
}

}

} public static void main(String[] args)
{ final int n = 10;
Thread[] threads = new Thread[n]; boolean flag = false;
CyclicBarrier barrier = new CyclicBarrier(n, new BarrierRun(flag, n));
System.out.println("集合"); for (int i = 0; i < n; i++)
{
System.out.println(i + "報道");
threads[i] = new Thread(new Test("士兵" + i, barrier));
threads[i].start();
}
}

}

列印結果:

集合

士兵5: done士兵7: done士兵8: done士兵3: done士兵4: done士兵1: done士兵6: done士兵2: done士兵0: done士兵9: done10個任務完成

1.7 LockSupport

提供線程阻塞原語

和suspend類似

LockSupport.park();
LockSupport.unpark(t1);

與suspend相比不容易引起線程凍結

LockSupport的思想呢,和Semaphore有點相似,內部有一個許可,park的時候拿掉這個許可,unpark的時候申請這個許可。所以如果unpark在park之前,是不會發生線程凍結的。

下面的代碼是[高並發Java 二] 多線程基礎中suspend示例代碼,在使用suspend時會發生死鎖。

而使用LockSupport則不會發生死鎖。

另外

park()能夠響應中斷,但不拋出異常。中斷響應的結果是,park()函數的返回,可以從Thread.interrupted()得到中斷標志。

在JDK當中有大量地方使用到了park,當然LockSupport的實現也是使用unsafe.park()來實現的。

public static void park() { unsafe.park(false, 0L);
}

1.8 ReentrantLock 的實現

下面來介紹下ReentrantLock的實現,ReentrantLock的實現主要由3部分組成:

  • CAS狀態

  • 等待隊列

  • park()

  • ReentrantLock的父類中會有一個state變數來表示同步的狀態

  • /**

  • * The synchronization state.

  • */

  • private volatile int state;

  • 通過CAS操作來設置state來獲取鎖,如果設置成了1,則將鎖的持有者給當前線程

  • final void lock() { if (compareAndSetState(0, 1))

  • setExclusiveOwnerThread(Thread.currentThread()); else

  • acquire(1);

  • }

  • 如果拿鎖不成功,則會做一個申請

  • public final void acquire(int arg) { if (!tryAcquire(arg) &&

  • acquireQueued(addWaiter(Node.EXCLUSIVE), arg))

  • selfInterrupt();

  • }

  • 首先,再去申請下試試看tryAcquire,因為此時可能另一個線程已經釋放了鎖。

    如果還是沒有申請到鎖,就addWaiter,意思是把自己加到等待隊列中去

    其間還會有多次嘗試去申請鎖,如果還是申請不到,就會被掛起

  • private final boolean parkAndCheckInterrupt() {

  • LockSupport.park(this); return Thread.interrupted();

  • }

  • 同理,如果在unlock操作中,就是釋放了鎖,然後unpark,這里就不具體講了。

    2. 並發容器及典型源碼分析

    2.1ConcurrentHashMap

    我們知道HashMap不是一個線程安全的容器,最簡單的方式使HashMap變成線程安全就是使用Collections.synchronizedMap,它是對HashMap的一個包裝

  • public static Map m=Collections.synchronizedMap(new HashMap());

  • 同理對於List,Set也提供了相似方法。

    但是這種方式只適合於並發量比較小的情況。

    我們來看下synchronizedMap的實現

    它會將HashMap包裝在裡面,然後將HashMap的每個操作都加上synchronized。

    由於每個方法都是獲取同一把鎖(mutex),這就意味著,put和remove等操作是互斥的,大大減少了並發量。

    下面來看下ConcurrentHashMap是如何實現的

    在ConcurrentHashMap內部有一個Segment段,它將大的HashMap切分成若干個段(小的HashMap),然後讓數據在每一段上Hash,這樣多個線程在不同段上的Hash操作一定是線程安全的,所以只需要同步同一個段上的線程就可以了,這樣實現了鎖的分離,大大增加了並發量。

    在使用ConcurrentHashMap.size時會比較麻煩,因為它要統計每個段的數據和,在這個時候,要把每一個段都加上鎖,然後再做數據統計。這個就是把鎖分離後的小小弊端,但是size方法應該是不會被高頻率調用的方法。

    在實現上,不使用synchronized和lock.lock而是盡量使用trylock,同時在HashMap的實現上,也做了一點優化。這里就不提了。

    2.2BlockingQueue

    BlockingQueue不是一個高性能的容器。但是它是一個非常好的共享數據的容器。是典型的生產者和消費者的實現。

『伍』 Linux 中編程的 semaphore結構體在哪個頭文件中

semaphore.h定義的是內核里用semaphore,用戶態程序用的sem_t也在名叫semaphore.h的文件里定義,不過應該在系統的include目錄下,而不是在內核源代碼了

熱點內容
柱頂要加密 發布:2025-03-14 21:16:11 瀏覽:852
魔聲藍牙耳機怎麼在安卓顯示電量 發布:2025-03-14 21:15:32 瀏覽:617
智慧易店伺服器地址是啥 發布:2025-03-14 20:57:49 瀏覽:886
小米ID密碼忘記了有什麼危害 發布:2025-03-14 20:45:28 瀏覽:610
大麥路由器怎麼改密碼 發布:2025-03-14 20:35:42 瀏覽:87
資料庫片語 發布:2025-03-14 20:27:21 瀏覽:248
角色卡演算法 發布:2025-03-14 20:08:48 瀏覽:650
linux伺服器安全加固 發布:2025-03-14 19:59:21 瀏覽:779
android系統資料庫 發布:2025-03-14 19:44:27 瀏覽:237
beats安卓手機怎麼彈窗 發布:2025-03-14 19:33:38 瀏覽:222