各種電源狀態縮寫的意義
P-States:Performance States,效能狀態。
T-States:Throttling States。
S-States:Sleeping States,睡眠狀態。
G-States:Global States,全域狀態。
C-States:CPU States,處理器狀態。
正常運作 -> P-States
P-States 指的就是 CPU 處理器依據目前運算量負荷輕重,調整運作頻率的高低,譬如 1 顆 3.0GHz 的處理器在執行 Crysis 3 時以全速運作、上網時以 1.8GHz 運作、觀賞影片時以 800MHz 運作。
在 Intel 方面稱為 EIST(Enhanced Intel SpeedStep Technology),AMD 方面則是 CnQ(Cool’n’Quiet)和 Power Now!。通常 P0 指的就是處理器以最高頻率、最高運算量的狀態運作,接下來 P1、P2、P3……就依照運作效能的多寡、省電性由少至多依序排下去。
除了 P-States 之外還有個 T-States,不過 T-States 通常不會使用,唯有當處理器過熱或是超過我們所設定的溫度時才介入。
T-States 和 P-States 都是為了降低發熱量而被使用,但是運作方式有別。例如 1 顆 3.0GHz 的處理器被 P-States 要求運作在 50%,就是真的運作在 1.5GHz 之上,而 T-States 則是將 3.0GHz 切成一半,一半時脈不運作,一半時脈正常運作(調整處理器實際運作的占比)
S-States 與待機 / 休眠 / 睡眠關係式
S-States 則是指電腦系統狀態,S0~S5 共有 6 種,S0 指的就是系統正常開機運作的狀態,包含所有的 P 和 C 狀態。
S1 時透過時脈產生器將處理器關閉、系統記憶體內容被刷新(持續供電),S1 狀態也被稱為 power on suspend;
S2 則是處理器電源完全關閉、系統記憶體內容刷新,系統整體耗電量比起 S1 更低一些。
S3 一般也稱為 suspend to RAM 或是待命(Windows XP)、睡眠(Windows Vista 之後),除了系統記憶體還有少量供電以外,其餘大部分系統內的硬體電源均被關閉;
S4 則是所謂的 suspend to disk ,將系統記憶體內部的資料寫入硬碟之後,將電腦系統整體關閉,耗電量和關機一樣;
S5 就是關機狀態。
例外,有些人可能還有聽過 G-States 全域狀態,不過 G-States 僅是個抽象描寫系統目前的電源狀態(ACPI),要如何實作需額外定義。
一般來說 G0 為系統開機狀態、G1 為睡眠狀態、G2 為軟關機、G3 為硬體關機。
C-States
比較難理解的就是處理器待機狀態 C-States,因為這裡的電源管理比較複雜,會根據狀態的不同分別調降運作時脈或電壓,或者乾脆完全關閉。同時 C-States 也不斷的加入新成員,像是 C8~C10 就是僅在 Haswell ULT 系列才導入的 C-State。
C0:
包含在 S0 之下,旗下包含所有 P-States,也就是處理器內部電源全開的狀態,所有的 x86 處理器都支援這個狀態。
C1:
藉由軟體關閉處理器的時脈(stop internal clock)(送出 HLT 指令),但是匯流排介面和 APIC(Advanced Programmable Interrupt Controller)均運作在全速狀態,由 Intel 486DX4 和之後的處理器開始支援,離開時間 10ns。
C1E:
藉由軟體關閉處理器的時脈,以及降低處理器的輸入電壓,其餘的匯流排界面和 APIC 運作在全速狀態,LGA775 腳位之後的處理器都支援,離開時間 10ns;如果在 BIOS 中開啟 C1E 支援,則處理器就會進入 C1E 而非進入 C1 狀態。須注意 AMD 也使用 C1E 這個名詞在處理器上,不過卻是另外一回事,在 AMD 65 奈米之後的處理器,所有處理器核心進入 C1 狀態會讓處理器直接進入 C3 狀態。
C2:
藉由硬體關閉處理器的時脈(設定 STPCLK 處理器接腳),匯流排介面和 APIC 均運作在全速狀態,同樣是 Intel 486DX4 之後全部支援,離開時間100ns。
C2E:
藉由硬體關閉處理器的時脈,降低處理器的輸入電壓,其餘的匯流排界面和 APIC 運作在全速狀態,Intel Core 2 Duo 之後皆支援,但僅限 Intel 的處理器;同樣的,若在 BIOS 中將 C2E 支援開啟時,就會以 C2E 替代 C2 狀態,離開時間 100ns。
C3:
關閉處理器內部所有的時脈(包含匯流排界面和 APIC),將 L1 快取中的內容清空,Intel Pentium II 和 AMD Athlon 之後皆支援(除 Core 2 Duo E4000 和 E6000 系列不支援),此模式也稱為 sleep 模式,離開時間 50ms。C3 下還有個 deep sleep 模式,由 Pentium II 以上(Core 2 Duo E4000 和 E6000系列不支援)、Turion 64 以上所支援,除處理器內部時脈外,也可關閉外部時脈。
Intel 處理器可透過設定 SLP 或是 DSSLP 接腳進入 C3(在這之前處理器必須先進入C2),AMD 則是透過讀取 APCI 的暫存器和 STPCLK 的組合而定,如果讀取 PLVL_2 暫存器,則設定 STPCLK 之後會進入 C2;若讀取 PLVL_3 暫存器,則設定 STPCLK 之後會進入 C3。AMD 行動版 Turion 64 處理器還支援更進階的AltVID功能,可於進入 C3 的同時降低處理器電壓。
C4:
稱做 deeper sleep,不像 C1~C3 為關閉處理器的時脈,C4 更進一步降低處理器的電壓供應,並把部分的 L2 快取內容清空以便進一步降低能源消耗;C4 從 Intel Pentium M(不包含 Core 2 Duo E4000 和 E6000系列)和 AMD Turion 64 之後開始支援,離開時間至少需 200ms。
C4E:
將 C4 時的處理器 L2 快取完全清空並關閉,可進一步降低供應給處理器的電壓,此模式僅在部分處理器上出現(Core Solo、Duo、部分 45 奈米行動版 Core 2 Duo、部分 Atom)。
C6:
C6 狀態(deep power down)可以說是完全關閉了處理器,包含 L1 和 L2 快取。在此狀態下,處理器內部的狀態都會被寫入到 1 個具有獨立電力來源的靜態記憶體中(後來的處理器可使用 L3 快取做為目標寫入),處理器的電壓就能夠降到非常低,甚至是 0V 完全關閉,從 Intel 45 奈米行動版 Core 2 Duo 開始支援。C6 時的離開時間比較長,約是 C4 的 1.5 倍。
Intel 在 Nehalem 中導入了 1 個電源控制模組,處理器各個部分可使用不同的電壓,因此可讓某個閒置的處理核心進入 C6。
C7:
C7 在 C6 的基礎上增加了部分或者全部清空 L3 快取,被整合進去的北橋,現稱 System Agent 以最小的電壓保持啟動,外部電壓調整可從 1.8V 降至 1.6V,從 Sandy Bridge 開始導入。
C8:
最後 1 層 L3 快取被關閉,System Agent 以最小的電壓保持啟動,外部電壓調整可從 1.8V 降至 1.2V。
C9:
System Agent 電壓降至 0V,IO 關閉,外部電壓調整可降至0V。
C10:
外部電壓調整可降至 0V 或完全關閉(以上C8~C10目前僅在Haswell ULT版出現)。
Reference:
https://www.techbang.com/posts/17396-power-states-know-how-many-g-p-t-s-c-read
AH.
lifelong learning and ongoing creation
2019年11月13日 星期三
2019年9月25日 星期三
UEFI和Legacy BIOS的差異
Legacy BIOS
|
UEFI
|
|
發明年代
|
1975 by IBM
|
2002 by Intel
|
程式語言
|
組合語言
|
C語言
|
CPU mode
|
16-bit mode(Real mode)
|
32/64-bit
mode(Flat mode)
|
記憶體定址空間
|
~1 MB
|
>4 GB
|
支援硬碟分割格式
|
MBR
|
GPT
|
支援硬碟最大容量
|
~2 TB
|
~9 ZetaBytes
|
支援硬碟主分割區數量
|
4
|
128
|
Boot Speed
|
慢
|
快
|
Boot Manager
|
Boot loader
in MBR
|
Boot loaders
in ESP
|
硬體擴充方式
|
Option ROM
|
EFI driver
|
硬體資源控制
|
Interrupt
|
Protocol/Driver
|
安全機制
|
TPM
|
Secure Boot
|
VGA BIOS
|
VBIOS
|
GOP
|
Bootable
USB Flash drive
|
DOS
|
EFI Shell
|
2019年6月1日 星期六
磁碟陣列 ( RAID )
磁碟陣列 ( RAID )
磁碟陣列 ( Redundant Array of Inexpensive Disks,RAID )
把多個相對便宜的硬碟組合起來,成為一個硬碟陣列組,使性能達到甚至超過一個價格昂貴、容量巨大的硬碟
根據選擇的版本不同,RAID 比單顆硬碟有以下一個或多個方面的好處:增強資料整合度,增強容錯功能,增加處理量或容量
磁碟陣列對於電腦來說, 看起來就像一個單獨的硬碟或邏輯存儲單元,分為 RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50
RAID 把多個硬碟組合成為一個邏輯磁區,因此,作業系統只會把它當作一個硬碟,RAID 常被用在伺服器電腦上且常使用完全相同的硬碟作為組合
由於硬碟價格的不斷下降與 RAID 功能更加有效地與主機板整合,它也成為了玩家的一個選擇,特別是需要大容量儲存空間的工作
最初的 RAID 分成了不同的等級,每種等級都有其理論上的優缺點,不同的等級在兩個目標間取得平衡,分別是增加資料可靠性以及增加存儲器 ( 群 ) 讀寫效能
RAID 0
RAID 0 亦稱為帶區集 ,是將多個磁碟並列起來,成為一個大磁碟,在存放數據時,其將數據按磁碟的個數來進行分段,然後同時將這些數據寫進這些盤中,所以在所有的級別中,速度是最快的
RAID 0 沒有冗餘功能,如一個磁碟 ( 物理 ) 損壞,則所有的數據都會丟失 理論上越多的磁碟效能就等於 [ 單一磁碟效能 ] x [ 磁碟數 ],但實際上受限於匯流排 I / O 瓶頸及其它因素的影響,RAID 效能會隨邊際遞減
假設一個磁碟的效能是 50 MB 每秒,兩個磁碟的 RAID 0 效能約 96 MB 每秒,三個磁碟的 RAID 0 也許是 130 MB 每秒而不是 150 MB 每秒,所以兩個磁碟的 RAID 0 最能明顯感受到效能的提升
Size = 2 x min ( S1,S2 )
但如是以軟體方式來實作 RAID,則磁碟的空間則不見得受限於此 ( 例:Linux Software RAID ),透過軟體實作可經由不同的組合而善用所有的磁碟空間
Size = sum of all disk
RAID 1
RAID 1 就是鏡像,其原理為在主硬碟上存放數據的同時也在鏡像硬碟上寫一樣的數據
當主硬碟 ( 物理 ) 損壞時,鏡像硬碟則代替主硬碟的工作,因為有鏡像硬碟做數據備份,所以 RAID 1 的數據安全性在所有的 RAID 級別上來說是最好的
但無論用多少磁碟做 RAID 1,僅算一個磁碟的容量,是所有 RAID上 磁碟利用率最低的一個級別
兩組以上的 N 個磁碟相互作鏡像,在一些多執行緒作業系統中能有很好的讀取速度,另外寫入速度有微小的降低,除非擁有相同資料的主磁碟與鏡像同時損壞,否則只要一個磁碟正常即可維持運作,可靠性最高
Size = min ( S1,S2 )
RAID 5
RAID 5 使用的是 Disk Striping ( 硬碟分割 ) 技術
RAID 5 可理解為是 RAID 0 和 RAID 1 的折衷方案,是一種儲存性能、數據安全和存儲成本兼顧的存儲解決方案,可為系統提供數據安全保障,但保障程度要比鏡像低而磁碟空間利用率要比鏡像高
RAID 5 具有和 RAID 0 相近似的數據讀取速度,只是多了一個奇偶校驗信息,寫入數據的速度相當的慢,若使用 [ 回寫快取 ] 可讓效能改善不少,同時由於多個數據對應一個奇偶校驗信息
RAID 5 至少需要三顆硬碟,不對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成 RAID5 的各個磁碟上且奇偶校驗信息和相對應的數據分別存儲於不同的磁碟上
當 RAID5 的一個磁碟數據發生損壞後,利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據
Size = ( N - 1 ) x min ( S1,S2,.....,Sn )
RAID 10 / 01
RAID 10 / 01 細分為 RAID 1 + 0 或 RAID 0 + 1
效能上,RAID 0 + 1 比 RAID 1 + 0 有著更快的讀寫速度
可靠性上,當 RAID 1 + 0 有一個硬碟受損,其餘三個硬碟會繼續運作,RAID 0 + 1 只要有一個硬碟受損,同組 RAID 0 的另一硬碟亦會停止運作,只剩下兩個硬碟運作,可靠性較低
RAID 1 + 0
RAID 1+ 0 是先鏡射再分割資料,再將所有硬碟分為兩組,視為是 RAID 0 的最低組合,然後將這兩組各自視為 RAID 1 運作
RAID 0 + 1
RAID 0 + 1 是先分割再將資料鏡射到兩組硬碟,它將所有的硬碟分為兩組,變成 RAID 1 的最低組合,然後將兩組硬碟各自視為 RAID 0 運作
Reference:
http://www.cas.idv.tw/Documents/System/RAID/RAID.asp
磁碟陣列 ( Redundant Array of Inexpensive Disks,RAID )
把多個相對便宜的硬碟組合起來,成為一個硬碟陣列組,使性能達到甚至超過一個價格昂貴、容量巨大的硬碟
根據選擇的版本不同,RAID 比單顆硬碟有以下一個或多個方面的好處:增強資料整合度,增強容錯功能,增加處理量或容量
磁碟陣列對於電腦來說, 看起來就像一個單獨的硬碟或邏輯存儲單元,分為 RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50
RAID 把多個硬碟組合成為一個邏輯磁區,因此,作業系統只會把它當作一個硬碟,RAID 常被用在伺服器電腦上且常使用完全相同的硬碟作為組合
由於硬碟價格的不斷下降與 RAID 功能更加有效地與主機板整合,它也成為了玩家的一個選擇,特別是需要大容量儲存空間的工作
最初的 RAID 分成了不同的等級,每種等級都有其理論上的優缺點,不同的等級在兩個目標間取得平衡,分別是增加資料可靠性以及增加存儲器 ( 群 ) 讀寫效能
RAID 0
RAID 0 亦稱為帶區集 ,是將多個磁碟並列起來,成為一個大磁碟,在存放數據時,其將數據按磁碟的個數來進行分段,然後同時將這些數據寫進這些盤中,所以在所有的級別中,速度是最快的
RAID 0 沒有冗餘功能,如一個磁碟 ( 物理 ) 損壞,則所有的數據都會丟失 理論上越多的磁碟效能就等於 [ 單一磁碟效能 ] x [ 磁碟數 ],但實際上受限於匯流排 I / O 瓶頸及其它因素的影響,RAID 效能會隨邊際遞減
假設一個磁碟的效能是 50 MB 每秒,兩個磁碟的 RAID 0 效能約 96 MB 每秒,三個磁碟的 RAID 0 也許是 130 MB 每秒而不是 150 MB 每秒,所以兩個磁碟的 RAID 0 最能明顯感受到效能的提升
Size = 2 x min ( S1,S2 )
但如是以軟體方式來實作 RAID,則磁碟的空間則不見得受限於此 ( 例:Linux Software RAID ),透過軟體實作可經由不同的組合而善用所有的磁碟空間
Size = sum of all disk
RAID 1
RAID 1 就是鏡像,其原理為在主硬碟上存放數據的同時也在鏡像硬碟上寫一樣的數據
當主硬碟 ( 物理 ) 損壞時,鏡像硬碟則代替主硬碟的工作,因為有鏡像硬碟做數據備份,所以 RAID 1 的數據安全性在所有的 RAID 級別上來說是最好的
但無論用多少磁碟做 RAID 1,僅算一個磁碟的容量,是所有 RAID上 磁碟利用率最低的一個級別
兩組以上的 N 個磁碟相互作鏡像,在一些多執行緒作業系統中能有很好的讀取速度,另外寫入速度有微小的降低,除非擁有相同資料的主磁碟與鏡像同時損壞,否則只要一個磁碟正常即可維持運作,可靠性最高
Size = min ( S1,S2 )
RAID 5
RAID 5 使用的是 Disk Striping ( 硬碟分割 ) 技術
RAID 5 可理解為是 RAID 0 和 RAID 1 的折衷方案,是一種儲存性能、數據安全和存儲成本兼顧的存儲解決方案,可為系統提供數據安全保障,但保障程度要比鏡像低而磁碟空間利用率要比鏡像高
RAID 5 具有和 RAID 0 相近似的數據讀取速度,只是多了一個奇偶校驗信息,寫入數據的速度相當的慢,若使用 [ 回寫快取 ] 可讓效能改善不少,同時由於多個數據對應一個奇偶校驗信息
RAID 5 至少需要三顆硬碟,不對存儲的數據進行備份,而是把數據和相對應的奇偶校驗信息存儲到組成 RAID5 的各個磁碟上且奇偶校驗信息和相對應的數據分別存儲於不同的磁碟上
當 RAID5 的一個磁碟數據發生損壞後,利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據
Size = ( N - 1 ) x min ( S1,S2,.....,Sn )
RAID 10 / 01
RAID 10 / 01 細分為 RAID 1 + 0 或 RAID 0 + 1
效能上,RAID 0 + 1 比 RAID 1 + 0 有著更快的讀寫速度
可靠性上,當 RAID 1 + 0 有一個硬碟受損,其餘三個硬碟會繼續運作,RAID 0 + 1 只要有一個硬碟受損,同組 RAID 0 的另一硬碟亦會停止運作,只剩下兩個硬碟運作,可靠性較低
RAID 1 + 0
RAID 1+ 0 是先鏡射再分割資料,再將所有硬碟分為兩組,視為是 RAID 0 的最低組合,然後將這兩組各自視為 RAID 1 運作
RAID 0 + 1
RAID 0 + 1 是先分割再將資料鏡射到兩組硬碟,它將所有的硬碟分為兩組,變成 RAID 1 的最低組合,然後將兩組硬碟各自視為 RAID 0 運作
Reference:
http://www.cas.idv.tw/Documents/System/RAID/RAID.asp
2019年1月14日 星期一
Find 指令用法教學
筆記一下自己常用的 Find 指令
1. 找出 . 底下的 txt 檔
2. 找出 . 底下非 txt 的附檔名的檔案
3. 刪除 . 底下 txt 檔案,有兩種作法
4. 如何刪除 5 天前的資料呢?
5. 找出 5 天以內修改的資料
6. find 後只顯示目錄名稱不顯示路徑
7. find 後只顯示目錄名稱不顯示路徑,也不顯示第一個 . 目錄
8. 找尋所有檔案大小大於 50MB 的檔案
9. 找尋所有檔案大小小於 50MB 的檔案
10. 尋找超過 10 分鐘沒有被存取或修改過的檔案
11. 尋找曾經在 10 分鐘內被存取或修改過的檔案
12. 尋找檔案建立時間已超過 30 天的檔案
1. 找出 . 底下的 txt 檔
# find . -name "*.txt"
2. 找出 . 底下非 txt 的附檔名的檔案
# find . -not -name "*.txt"
3. 刪除 . 底下 txt 檔案,有兩種作法
# # 系統詢問之後才刪除 # 先把 -exec 後面的東西先清掉, 用 -print 來先確認輸出 , 或將以刪除資訊寫進log # rm 可以多用 -i 的參數來加以確認 find . -name "*.txt " -exec echo "Delete {}" \; -exec rm -i {} \; # #不用確認 find . -name "*.txt " -exec echo "Delete {}" \; -exec rm "{}" \; # # 系統直接刪除 find . -delete -name "*.txt " find . -name "*.txt " | xargs /bin/rm -rf
4. 如何刪除 5 天前的資料呢?
# find ${path_name} -type f -mtime +5 -exec rm "{}" \; find ${path_name} -type f -mtime +5 | xargs /bin/rm -rf find ${path_name} -delete -type f -mtime +5
5. 找出 5 天以內修改的資料
# find . -type f -mtime -5 -name "*.txt"
6. find 後只顯示目錄名稱不顯示路徑
# find . -maxdepth 1 -type d -exec basename {} \; find . -maxdepth 1 -type d | awk -F"/" '{print $NF}' find . -maxdepth 1 -type d | sed 's!.*\/\([^\/]*\).*!\1!g'
7. find 後只顯示目錄名稱不顯示路徑,也不顯示第一個 . 目錄
# find . -maxdepth 1 -mindepth 1 -type d -exec basename {} \;
8. 找尋所有檔案大小大於 50MB 的檔案
# find ${path_name} -type f -size +50M
9. 找尋所有檔案大小小於 50MB 的檔案
# find ${path_name} -type f -size -50M
10. 尋找超過 10 分鐘沒有被存取或修改過的檔案
# find ${path_name} -type f -amin +10
11. 尋找曾經在 10 分鐘內被存取或修改過的檔案
# find ${path_name} -type f -amin -10
12. 尋找檔案建立時間已超過 30 天的檔案
# find ${path_name} -type f -ctime +30
2018年10月10日 星期三
Vim 打造成 Source Insight
環境: Debian
vim是套在Linux上非常好用的編輯軟體,但在trace code的能力上卻比不上source insight或eclipse等,但我們可以另外安裝套件,讓vim接近於source insight的使用方式,
以下使用了ctags + cscope + taglist + nerdtree + srcexpl + trinity來達成此目標
◎ Install
進入程式目錄當中,若是多層的目錄則進到最上層的目錄,接著輸入
接著必須讓vim知道tags需要到哪裡找到,先用vim打開vimrc,之後把下面第二段的資訊加進去
用vim進到.c .h檔之後移到函式或變數上即可使用快捷鍵找到該函式或變數的定義,也可跳回到使用此函式的地方
二、cscope
cscope可以查詢函式或變數在哪些地方被使用過,或是函式當中使用了哪些函式
◎ Install
◎ Usage
進入程式目錄當中,若是多層的目錄則進到最上層的目錄,接著輸入
參數說明如下
1. R : 將目錄及子目錄底下的所有文件都建立索引
2. b : 僅建立關聯數據庫,不導入使用者介面
3. q : 建立cscope.in.out和cscope.po.out,可增快搜尋速度
4. k : 不搜尋預設會include進來的函式(/usr/include)
將以下設定加入vimrc
最後附上各指令的用途
1.:cs find s {name} : 找出C語言name的符號
2.:cs find g {name} : 找出name定義的地方
3.:cs find c {name} : 找出使用name的地方
4.:cs find t {name} : 找出name的字串
5.:cs find e {name} : 相當於egrep功能,但速度更佳
6.:cs find f {name} : 尋找檔案
7.:cs find i {name} : 尋找include此檔案的檔案
8.:cs find d {name} : 尋找name裡面使用到的函式
三、taglist
taglist可在切出一區塊,顯示此檔案裡的macro,global variable,函式等資訊,且會隨著瀏覽到哪個地方便以不同顏色標示
◎ Install
下載plugin file,下載地址如下,請自行選擇最新版本下載
http://sourceforge.net/projects/vim-taglist/files/vim-taglist
將plugin/taglist.vim複製到~/.vim/plugin/,doc/taglist.txt複製到~/.vim/doc
◎ Usage
可在~/.vimrc裡配置相關設定,其他配置選項請參考官網說明
1.nmap : 將F8設為開啟taglist的快捷鍵
2.Tlist_Show_One_File : 只顯示當下瀏覽檔案的func,不顯示之前瀏覽的檔案
3.Tlist_Exit_OnlyWindow : 如果taglist區塊是最後一個,則退出vim
4.ut=100 : taglist會標示目前在操作哪個function or variable,但更新速度很慢,這裡把更新速度設成100ms
四、nerdtree
NERD tree可切出一區塊,顯示根目錄開始的檔案結構,且可由list直接跳到選取的檔
◎ Install
下載plugin file,下載地址如下,請自行選擇最新版本下載
http://www.vim.org/scripts/script.php?script_id=1658
將plugin/NERD_tree.vim複製到~/.vim/plugin/,doc/NERD_tree.txt複製到~/.vim/doc
剩下的資料夾autoload, lib, nerdtree_plugin, syntax全部複製到~/.vim底下
◎ Usage
可在~/.vimrc裡配置相關設定,其他配置選項請參考官網說明
1.nmap: 將F9設為開啟nerdtree的快捷鍵
2.NERDTreeWinPos : 將nerdtree區塊放在右邊
五、SrcExpl(Source Explorer)
SrcExpl可以將當下function的定義顯示出來,或是將當下的變數宣告處顯示出來
◎ Install
將plugin/srcexpl.vim複製到~/.vim/plugin/,doc/srcexpl.txt複製到~/.vim/doc
◎ Usage
官方網站有詳細介紹在.vimrc可用的設定,這裡只列出我有用到的設定
1.nmap : 將F10設為開啟srcexpl的快捷鍵
2.若有安裝taglist or nerdtree則需輸入
六、 trinity
trinity用來整合taglist, nerdtree, srcexpl,使可以一鍵開啟三個plgin的功能
◎ Install
將plugin/trinity.vim複製到~/.vim/plugin/
◎ Usage
接著設定vimrc
1.nmap:將F7設為一次打開taglist, nerdtree, srcexpl的快捷鍵
References:
1. http://yuanfarn.blogspot.com/2013/02/srcexpl-vim-source-explorer.html
2. https://stackoverflow.com/questions/3196760/how-to-use-cscope-with-paths-that-contain-spaces
3. http://rickey-nctu.blogspot.com/2009/02/vim-srcexpl.html
vim是套在Linux上非常好用的編輯軟體,但在trace code的能力上卻比不上source insight或eclipse等,但我們可以另外安裝套件,讓vim接近於source insight的使用方式,
以下使用了ctags + cscope + taglist + nerdtree + srcexpl + trinity來達成此目標
一、ctags
ctags可以在函式、變數之間自由進行切換,例如某主函式call了func(),ctags可以直接跳到func的函式裡面、也可使用在變數上 ◎ Install
sudo apt-get install exuberant-ctags◎ Usage
進入程式目錄當中,若是多層的目錄則進到最上層的目錄,接著輸入
ctags -R
接著必須讓vim知道tags需要到哪裡找到,先用vim打開vimrc,之後把下面第二段的資訊加進去
vim ~/.vimrc set tags=./tags,./TAGS,tags;~,TAGS;~
用vim進到.c .h檔之後移到函式或變數上即可使用快捷鍵找到該函式或變數的定義,也可跳回到使用此函式的地方
"跳至該函式或變數定義 Ctrl + ] "跳回使用此函式或變數處 Ctrl + t
二、cscope
cscope可以查詢函式或變數在哪些地方被使用過,或是函式當中使用了哪些函式
◎ Install
sudo apt-get install cscope
◎ Usage
進入程式目錄當中,若是多層的目錄則進到最上層的目錄,接著輸入
cscope -Rbqk
參數說明如下
1. R : 將目錄及子目錄底下的所有文件都建立索引
2. b : 僅建立關聯數據庫,不導入使用者介面
3. q : 建立cscope.in.out和cscope.po.out,可增快搜尋速度
4. k : 不搜尋預設會include進來的函式(/usr/include)
將以下設定加入vimrc
set cscopetag set csto=0 if filereadable("cscope.out") cs add cscope.out elseif $CSCOPE_DB != "" cs add $CSCOPE_DB endif set cscopeverbose nmap zs :cs find s=expand(" ") nmap zg :cs find g =expand(" ") nmap zc :cs find c =expand(" ") nmap zt :cs find t =expand(" ") nmap ze :cs find e =expand(" ") nmap zf :cs find f =expand(" ") nmap zi :cs find i ^ =expand(" ") $ nmap zd :cs find d =expand(" ")
最後附上各指令的用途
1.:cs find s {name} : 找出C語言name的符號
2.:cs find g {name} : 找出name定義的地方
3.:cs find c {name} : 找出使用name的地方
4.:cs find t {name} : 找出name的字串
5.:cs find e {name} : 相當於egrep功能,但速度更佳
6.:cs find f {name} : 尋找檔案
7.:cs find i {name} : 尋找include此檔案的檔案
8.:cs find d {name} : 尋找name裡面使用到的函式
三、taglist
taglist可在切出一區塊,顯示此檔案裡的macro,global variable,函式等資訊,且會隨著瀏覽到哪個地方便以不同顏色標示
◎ Install
下載plugin file,下載地址如下,請自行選擇最新版本下載
http://sourceforge.net/projects/vim-taglist/files/vim-taglist
將plugin/taglist.vim複製到~/.vim/plugin/,doc/taglist.txt複製到~/.vim/doc
◎ Usage
可在~/.vimrc裡配置相關設定,其他配置選項請參考官網說明
nmap<F8>:TlistToggle let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 set ut=100
1.nmap : 將F8設為開啟taglist的快捷鍵
2.Tlist_Show_One_File : 只顯示當下瀏覽檔案的func,不顯示之前瀏覽的檔案
3.Tlist_Exit_OnlyWindow : 如果taglist區塊是最後一個,則退出vim
4.ut=100 : taglist會標示目前在操作哪個function or variable,但更新速度很慢,這裡把更新速度設成100ms
四、nerdtree
NERD tree可切出一區塊,顯示根目錄開始的檔案結構,且可由list直接跳到選取的檔
◎ Install
下載plugin file,下載地址如下,請自行選擇最新版本下載
http://www.vim.org/scripts/script.php?script_id=1658
將plugin/NERD_tree.vim複製到~/.vim/plugin/,doc/NERD_tree.txt複製到~/.vim/doc
剩下的資料夾autoload, lib, nerdtree_plugin, syntax全部複製到~/.vim底下
◎ Usage
可在~/.vimrc裡配置相關設定,其他配置選項請參考官網說明
nmap<F9>:NERDTreeFind let NERDTreeWinPos=1
1.nmap: 將F9設為開啟nerdtree的快捷鍵
2.NERDTreeWinPos : 將nerdtree區塊放在右邊
五、SrcExpl(Source Explorer)
SrcExpl可以將當下function的定義顯示出來,或是將當下的變數宣告處顯示出來
◎ Install
git clone https://github.com/wesleyche/SrcExpl
將plugin/srcexpl.vim複製到~/.vim/plugin/,doc/srcexpl.txt複製到~/.vim/doc
◎ Usage
官方網站有詳細介紹在.vimrc可用的設定,這裡只列出我有用到的設定
nmap<F10>:SrcExplTogglelet g:SrcExpl_pluginList = [ \ "__Tag_List__", \ "_NERD_tree_", \ "Source_Explorer" \ ]
1.nmap : 將F10設為開啟srcexpl的快捷鍵
2.若有安裝taglist or nerdtree則需輸入
六、 trinity
trinity用來整合taglist, nerdtree, srcexpl,使可以一鍵開啟三個plgin的功能
◎ Install
git clone https://github.com/wesleyche/Trinity
將plugin/trinity.vim複製到~/.vim/plugin/
◎ Usage
接著設定vimrc
nmap:TrinityToggleAll
1.nmap:將F7設為一次打開taglist, nerdtree, srcexpl的快捷鍵
References:
1. http://yuanfarn.blogspot.com/2013/02/srcexpl-vim-source-explorer.html
2. https://stackoverflow.com/questions/3196760/how-to-use-cscope-with-paths-that-contain-spaces
3. http://rickey-nctu.blogspot.com/2009/02/vim-srcexpl.html
2018年6月4日 星期一
Verilog - 7段顯示器(SEG7)
----a-----
| |
f b
| |
----g-----
| |
e c
| |
----d-----
當7段顯示器 燈號 active LOW
ex. 0 => a,b,c,d,e,f = 0 , g = 1
| |
f b
| |
----g-----
| |
e c
| |
----d-----
當7段顯示器 燈號 active LOW
ex. 0 => a,b,c,d,e,f = 0 , g = 1
module SEG7_LUT ( input [3:0] iDIG, output reg [6:0] oSEG ); always@(iDIG) begin case(iDIG) 4'h1: oSEG = 7'b1111001; // ---a---- 4'h2: oSEG = 7'b0100100; // | | 4'h3: oSEG = 7'b0110000; // f b 4'h4: oSEG = 7'b0011001; // | | 4'h5: oSEG = 7'b0010010; // ---g---- 4'h6: oSEG = 7'b0000010; // | | 4'h7: oSEG = 7'b1111000; // e c 4'h8: oSEG = 7'b0000000; // | | 4'h9: oSEG = 7'b0011000; // ---d---- 4'ha: oSEG = 7'b0001000; 4'hb: oSEG = 7'b0000011; 4'hc: oSEG = 7'b1000110; 4'hd: oSEG = 7'b0100001; 4'he: oSEG = 7'b0000110; 4'hf: oSEG = 7'b0001110; 4'h0: oSEG = 7'b1000000; endcase end endmodule
2018年6月2日 星期六
Cryptography
何謂密碼學?
密碼學為一種利用數學方法來對資料加密和解密的科學。密碼系統是由明文、加密演算法、金鑰、解密演算法及密文組合而成。
明文(Plaintext) →加密前的原始資料,為加密演算法的輸入,解密演算法的輸出。
密文(Ciphertext) →加密之後的資料,為加密演算法的輸出,解密演算法的輸入。
加密演演算法(Encryption Algorithm)
利用密鑰對明文進行加密的編碼動作的演算法。
解密演算法(Decryption Algorithm)
利用金鑰對密文進行解密的解碼動作的演算法。
解密(Decipher)
將密文還原為明文的過程。
密碼破解(Cryptanalysis)
不需經由加密金鑰或使用偽造金鑰即能夠將密文解原還為明文稱之。
※加密技術的強度指的是密碼破解所需要花費的時間與資源。加密技術強度的高低通常牽涉到下列的因素:
(1)演算法強度
(2)金鑰保護機制
(3)金鑰的長度
※密碼系統的安全與否的衡量標準在於破解者需要花費多少時間以及多少成本才能夠破解。
(1)破解所需要的成本高於該訊息的價值
(2)破解所需要的時間超過該金鑰的壽命
※密碼破解技術分為下列幾種:
(1)只知密文破解(Ciphertext
Only Attack)
破解者藉由蒐集所有可能的密文以找出明文或金鑰。
(2)已知明文破解(Known
Plaintext Attack)
破解者藉由已知的明文與其相對應的密文以找出金鑰。
(3)選擇明文破解(Chosen
Plaintext Attack)
攻擊者利用特殊方法將明文發送給傳送端,再由傳送者取得加密後的密文(即破解者可以控制明文與其相對應的密文) ,以找出加密金鑰。
(4)選擇密文破解(Chosen
Ciphertext Attack)
攻擊者利用特殊方法將密文發送給接收端,再由接收者取得解密後的明文(即破解者可以控制密文與其相對應的明文) ,以找出加密金鑰。
(5)暴力破解法(Brute-Force
Attack)
破解者嘗試所有可能的私密金鑰來攻擊密碼系統。
※非技術破解
(1)
社交工程(Social
Engineering)
利用人性的弱點達到密碼騙取。
(2)
身旁側視(Shoulder Surfing)
在身旁看使用者輸入密碼,成功機率很高。
密碼學系統通常可以根據三種不同的觀點來分類:
一、將明文轉換為密文所使用運算方法上的差異:
(1)取代(substitution)
(2)置換(transposition)
(3)相乘(product)
二、使用金鑰個數的差異:
(1)私密鑰匙(secret-key),或傳統加密系統
(2)非對稱性或公開鑰匙加密系統
(3)雜湊(HASH)
三、處理明文方法上的差異:
(1)資料區段加密法(block cipher)
(2)資料流加密法(stream cipher)
第一大類-運算方法上的差異
(1)取代(substitution)
取代指的是明文中的每一個元素都被對應到另一個元素。
(2)置換(transposition)
置換是將明文中的元素重新排列。
(3)相乘(Product)
以取代與置換為基礎構成的複雜組合,以達到更複雜的相乘效果。
第二大類-金鑰個數的差異
(1)對稱性密碼學
加密與解密使用同一把金鑰稱之,又稱為單一或私密鑰匙(secret-key),或傳統加密系統。
(2)非對稱性或公開鑰匙加密系統
加密與解密使用一對金鑰稱之
(3)不需要金鑰的加密技術稱為雜湊(HASH)
第三大類-處理明文方法的差異
(1)資料區段加密法(block cipher)
將明文分成數個n個字元或位元的區段,並且對每一個區段資料應用相同的演算法則和鑰匙,數學式表示為(M為明文,分割成M1、M2… Mn區段)
如E(M,K)=E(M1,K)E(M2,K)… ..E(Mn,K)
(2)資料流加密法(stream cipher)
資料流加密並不會將明文切分為區段,而是一次加密資料流的一個位元或是位元組。常見的作法是將較短的加密鑰匙延展成為無限長、近似亂碼的一長
串金鑰串流(keystream),再將金鑰串流和原始資料(plain text)經過XOR運算後,產生密文資料(cipher
text)。
比較對稱性密碼學與非對稱性密碼學
對稱性密碼學又稱為傳統或秘密金鑰(Symmetric Encryption)
(1)訊息的加密和解密採用相同的金鑰
(2)需要傳送和接收雙方均擁有相同的一把金鑰
優點:
1.較快速
2.如果使用足夠大的金鑰,將難以破解。
缺點:
1.需要有一個安全性機制將金鑰安全性的分送至交易的雙方。
2.提供私密性(Confidential)的安全性能力,無法提供不可否認的能力
非對稱性密碼學(Asymmetric Encryption)
每個使用者擁有一對金鑰-公開金鑰和私密金鑰(public
keyand a private key),訊息由其中一把金鑰加密後,必需由另一把金鑰予以解密,公開金鑰可以被廣泛的發佈,而私密金鑰必需隱密的加以保存。
優點:
1.公開鑰匙可以公開分送
2.提供私密性、驗證與不可否認性等服務
缺點:
1.效率較差
訂閱:
文章 (Atom)