GUID (Globally unique identifiers):
是一組用來定義包含電腦、程式元件、設備…等物件的唯一數值。
這些物件通常都包含了名稱,即使是這兩個物件有相同的名稱,或者是他們經過名稱變更…等,他們的GUID都仍是唯一的。
換句話說,一個物件的GUID與安全性原則中的SID是類似的。GUID遍佈在登錄檔當中,所以,你必須熟悉並且習慣他們。
所有的GUID,都有著相同有趣的格式,他們是16-byte,以8、4、4、4、及12為群組的16進位制數值(即0到9及A到F)。而每個群組值間以-及分隔,並以{}符號包裹。
如{645FF040-5081-101B-9F08-00AA002F954E}即為一組GUID數值,它代表在桌面上你可以看到的資源回收筒物件。
GUID {127A89AD-C4E3-D411-BDC8-001083FDCE08}則代表在我實驗室裡的一台電腦。
程式設計人員通常都會使用名為Guidgen.exe的工具來製造GUID值,但是Windows XP本身也會製造它們。不管來源為何,Microsoft都保證GUID是全球唯一的值。
不管Guidgen.exe或者是Windows XP產生GUID多少次,結果都是唯一(unique)。
而這也是為什麼用GUID來驗證如電腦、裝置及任何東西的原因。
Author: 常世勳
2008年9月24日 星期三
Preemptive & Non-preemptive , Cooperative Multitasking
Author: 常世勳
先佔式多工(Preemptive Multitasking)
也就是所謂「優先權式多工」或是「先佔式多工」。
在這種模式底下,每個程式的執行時間係由「作業系統」來分配,一個程式的時間使用完之後,系統就會將CPU分配給下一個程式(這種動作稱為context switching),沒有一個程式能獨佔CPU。
這類作業系統較常見的有Windows NT、OS/2,而Windows 95則無法對於16-bit的應用程式做到優先權式多工,至於32-bit應用程式,則不一定是哪種多工模式。
Cooperative Multitasking, Cooperative Multitasking, OS 協同式多工:
一種多工 (multitasking) 的作業方式,每一個行程 (process) 必須提供其他行程使用處理器 (processor) 的機會,使每一個程式都能被處理器執行來達到多工的作業,作業系統 (OS) 在這種方式下扮演的角色只是輔助管理與分配程式間的處理器使用時間,若是一個程式佔據處理器時間不放,則其他程式包括作業系統都沒有機會來執行,且一個當掉或設計有問題的程式可能會使得整個系統當掉。
相對於協同式多工,先佔式多工 (Preemptive Multitasking) 則由作業系統主動分配執行時間給行程或程式,不管行程是否發生問題都能夠維持其他程式不被影響,作業系統並能夠有機會解決有問題的程式。
以JAVA執行緒的時間排程為例:
可奪取優先權 ( preemptive ) :
所有的執行緒皆被給定固定的執行時間, 執行時間使用完畢, 便暫停執行緒的執行。 排成器從等待執行的執行緒中, 挑出優先權最高的執行緒, 將其恢復執行。
不可奪取優先權 ( non-preemptive ) :
執行緒擁有所有 CPU 的執行時間, 任由其個別使用。 只有在呼叫成員方法 yield ( ) 等才可以強制排成器 ( scheduler ) 更換下一個執行緒使用 CPU 時間。
先佔式多工(Preemptive Multitasking)
也就是所謂「優先權式多工」或是「先佔式多工」。
在這種模式底下,每個程式的執行時間係由「作業系統」來分配,一個程式的時間使用完之後,系統就會將CPU分配給下一個程式(這種動作稱為context switching),沒有一個程式能獨佔CPU。
這類作業系統較常見的有Windows NT、OS/2,而Windows 95則無法對於16-bit的應用程式做到優先權式多工,至於32-bit應用程式,則不一定是哪種多工模式。
Cooperative Multitasking, Cooperative Multitasking, OS 協同式多工:
一種多工 (multitasking) 的作業方式,每一個行程 (process) 必須提供其他行程使用處理器 (processor) 的機會,使每一個程式都能被處理器執行來達到多工的作業,作業系統 (OS) 在這種方式下扮演的角色只是輔助管理與分配程式間的處理器使用時間,若是一個程式佔據處理器時間不放,則其他程式包括作業系統都沒有機會來執行,且一個當掉或設計有問題的程式可能會使得整個系統當掉。
相對於協同式多工,先佔式多工 (Preemptive Multitasking) 則由作業系統主動分配執行時間給行程或程式,不管行程是否發生問題都能夠維持其他程式不被影響,作業系統並能夠有機會解決有問題的程式。
以JAVA執行緒的時間排程為例:
可奪取優先權 ( preemptive ) :
所有的執行緒皆被給定固定的執行時間, 執行時間使用完畢, 便暫停執行緒的執行。 排成器從等待執行的執行緒中, 挑出優先權最高的執行緒, 將其恢復執行。
不可奪取優先權 ( non-preemptive ) :
執行緒擁有所有 CPU 的執行時間, 任由其個別使用。 只有在呼叫成員方法 yield ( ) 等才可以強制排成器 ( scheduler ) 更換下一個執行緒使用 CPU 時間。
Rundll32.exe
Author: 常世勳
在Windows中使用了許多動態連接庫, 這樣就使得所有Windows程序都可共享這些動態連接庫中的函數, 許多應用程式都通過 Windows API 來操作這些函數,
但實際上是透過 Windows 資料夾下的 rundll32.exe 程序來啟動對應的函數。它的用法是:「rundll32.exe 動態連接庫名,函數名,參數名」
Control Panel:
rundll32.exe shell32.dll,Control_RunDLL
Display:
rundll32.exe shell32.dll,Control_RunDLL desk.cpl
Keyboard:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
Keyboard Tab 2:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,1
Printer:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
Font:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
Input for 95/98:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
Input for NT:
rundll32.exe shell32.dll,Control_RunDLL cime.cpl
Regional and Language:
rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,2
Accessibility:
rundll32.exe shell32.dll,Control_RunDLL Access.cpl
Add / Remove Program:
rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl
Display:
rundll32.exe shell32.dll,Control_RunDLL Desk.cpl
Internet:
rundll32.exe shell32.dll,Control_RunDLL Intetcpl.cpl
Regional and Language:
rundll32.exe shell32.dll,Control_RunDLL Intl.cpl
Game Controller:
rundll32.exe shell32.dll,Control_RunDLL Joy.cpl
Mouse:
rundll32.exe shell32.dll,Control_RunDLL Main.cpl
Sounds and Audio Device:
rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl
Modem:
rundll32.exe shell32.dll,Control_RunDLL Modem.cpl
Network:
rundll32.exe shell32.dll,Control_RunDLL Netcpl.cpl
32-bit ODBC:
rundll32.exe shell32.dll,Control_RunDLL Odbccp32.cpl
Password:
rundll32.exe shell32.dll,Control_RunDLL Password.cpl
System:
rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl
Date / Time:
rundll32.exe shell32.dll,Control_RunDLL Timedate.cpl
Add Hardware:
rundll32.exe shell32.dll,Control_RunDLL Hdwwiz.cpl
Network Connection:
rundll32.exe shell32.dll,Control_RunDLL Ncpa.cpl
User Account:
rundll32.exe shell32.dll,Control_RunDLL Nusrmgr.cpl
Power:
rundll32.exe shell32.dll,Control_RunDLL Powercfg.cpl
在Windows中使用了許多動態連接庫, 這樣就使得所有Windows程序都可共享這些動態連接庫中的函數, 許多應用程式都通過 Windows API 來操作這些函數,
但實際上是透過 Windows 資料夾下的 rundll32.exe 程序來啟動對應的函數。它的用法是:「rundll32.exe 動態連接庫名,函數名,參數名」
Control Panel:
rundll32.exe shell32.dll,Control_RunDLL
Display:
rundll32.exe shell32.dll,Control_RunDLL desk.cpl
Keyboard:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
Keyboard Tab 2:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,1
Printer:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
Font:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
Input for 95/98:
rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
Input for NT:
rundll32.exe shell32.dll,Control_RunDLL cime.cpl
Regional and Language:
rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,2
Accessibility:
rundll32.exe shell32.dll,Control_RunDLL Access.cpl
Add / Remove Program:
rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl
Display:
rundll32.exe shell32.dll,Control_RunDLL Desk.cpl
Internet:
rundll32.exe shell32.dll,Control_RunDLL Intetcpl.cpl
Regional and Language:
rundll32.exe shell32.dll,Control_RunDLL Intl.cpl
Game Controller:
rundll32.exe shell32.dll,Control_RunDLL Joy.cpl
Mouse:
rundll32.exe shell32.dll,Control_RunDLL Main.cpl
Sounds and Audio Device:
rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl
Modem:
rundll32.exe shell32.dll,Control_RunDLL Modem.cpl
Network:
rundll32.exe shell32.dll,Control_RunDLL Netcpl.cpl
32-bit ODBC:
rundll32.exe shell32.dll,Control_RunDLL Odbccp32.cpl
Password:
rundll32.exe shell32.dll,Control_RunDLL Password.cpl
System:
rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl
Date / Time:
rundll32.exe shell32.dll,Control_RunDLL Timedate.cpl
Add Hardware:
rundll32.exe shell32.dll,Control_RunDLL Hdwwiz.cpl
Network Connection:
rundll32.exe shell32.dll,Control_RunDLL Ncpa.cpl
User Account:
rundll32.exe shell32.dll,Control_RunDLL Nusrmgr.cpl
Power:
rundll32.exe shell32.dll,Control_RunDLL Powercfg.cpl
#if #define if
#if ............. For preposser(前置處理器)
#end if
#define JAVA 300 ...... For preposser(前置處理器)
if ............. For compiler
例:
#define DEBUG
#if DEBUG
printf("hello");
#endif
Author: 常世勳
#end if
#define JAVA 300 ...... For preposser(前置處理器)
if ............. For compiler
例:
#define DEBUG
#if DEBUG
printf("hello");
#endif
Author: 常世勳
2008年9月22日 星期一
CPU C3 and C4之進入及離開
作者: 常世勳
C3 (Deep Sleep):
Entry Method:STPCLK# , SLP#, DPSLP# asserted
Exit method:Chipset break event
C4 (Deeper Sleep):
Entry Method:STPCLK# , SLP#, SPSLP# assertedLower power voltage
Exit method:Chipset break event
C3 (Deep Sleep):
Entry Method:STPCLK# , SLP#, DPSLP# asserted
Exit method:Chipset break event
C4 (Deeper Sleep):
Entry Method:STPCLK# , SLP#, SPSLP# assertedLower power voltage
Exit method:Chipset break event
How to get current CPU Microcode ID
作者: 常世勳
Sample code:
Mov ecx, 08Bh
Xor eax, eax
Xor edx, edx
WRMSR
Mov eax, 1
CPUID
Mov ecx, 08Bh
RDMSR
Will be place in EDX.
If there is an update currently active in the processor, it’s update revision is
returned in the EDX register after RDMSR instruction has completed.
Sample code:
Mov ecx, 08Bh
Xor eax, eax
Xor edx, edx
WRMSR
Mov eax, 1
CPUID
Mov ecx, 08Bh
RDMSR
Will be place in EDX.
If there is an update currently active in the processor, it’s update revision is
returned in the EDX register after RDMSR instruction has completed.
訂閱:
文章 (Atom)