# 計概錯題訂正 ![S__3096602](https://hackmd.io/_uploads/Hyde378E6.jpg) ![S__3096604](https://hackmd.io/_uploads/B1sMnmLV6.jpg) ![S__3096605](https://hackmd.io/_uploads/BkAe3QUVT.jpg) ### I/O subsystem 控制I/O device的方法 ![BCC58D4C-5BED-4405-8408-5E46105326AF](https://hackmd.io/_uploads/B1OpXl6Kp.jpg) ### OS 責任 ![S__3096595](https://hackmd.io/_uploads/SyuWsQLN6.jpg) ### Continuous memory allocation 可能造成問題 ![D00AA5BF-792F-4205-B94B-8CF499154108](https://hackmd.io/_uploads/S1tLWxpta.jpg) ![8C05A32A-360A-4A16-AA5C-EAFB02CB4843](https://hackmd.io/_uploads/S1KOWlTFa.jpg) #### 常錯題 ![S__3465219](https://hackmd.io/_uploads/H1SF-eatp.jpg) ### Memory management ![S__3096599](https://hackmd.io/_uploads/Sks4jm846.jpg) ## 實現Virtual Memory 技術 ![A859DE99-6255-412E-9665-E2F1426B64E0](https://hackmd.io/_uploads/ByfwEgpK6.jpg) ![6A8E1D12-539F-46DA-80E4-697C2B34513D](https://hackmd.io/_uploads/Hk2wEeTYT.jpg) ### 影響Page fault發生頻率因素 ![S__3096601](https://hackmd.io/_uploads/rJXBjmUEa.jpg) ### Page Replacement 法則(挑選犧牲頁面) ![F500AA2F-699D-4B82-AD0A-2715B4F60BA2](https://hackmd.io/_uploads/BJV8im84a.jpg) ## Disk scheduling ![88A21603-74A0-4B79-ACE7-8D239AAC1C1F](https://hackmd.io/_uploads/rk4c4xpYa.jpg) ### Deadlock prevention & avoidance ![9D9DD940-E12F-47D0-B2C7-366E0622351B](https://hackmd.io/_uploads/BkL4SgaFp.jpg) 1. Confusion matrix: > 是分類問題常用的指標 > ![6657D701-409E-4740-AF30-0F2D069EB39E (1)](https://hackmd.io/_uploads/S1590BRK6.jpg) > 衡量負類別的正確率指標:特異度(Specificity) >> 所有實際為負的樣本中,被正確預測為負的比例 ![image](https://hackmd.io/_uploads/HkGkYdUq6.png) ![image](https://hackmd.io/_uploads/HyQqTU0ta.png) #### Q : 92%的準確率是好是壞?我們如何得到這個性能水平的有意義評估?(7%) [台大108MIS] > 評估一個模型的92%準確率是好還是壞,以及如何得到這個性能水平的有意義評估,取決於幾個關鍵因素: 1. **問題的性質和應用領域:** - 對於某些應用,如預測罕見疾病或欺詐檢測,92%的準確率可能不夠高,因為錯過任何一個正例(如未檢測到的疾病案例)可能都有嚴重後果。 - 對於其他應用,如一般的圖像分類或推薦系統,92%的準確率可能被視為非常好的表現。 2. **基準水平(Baseline)和性能比較:** - 需要將這個準確率與基準模型或業界標準比較。如果大多數現有模型的準確率在80%左右,那麼92%可以被視為優秀。 - 另一方面,如果大多數競爭模型的準確率都在95%以上,則92%可能就不夠好。 3. **數據集的平衡性:** - 在不平衡的數據集中,即使一個簡單的模型也可能達到很高的準確率,僅僅通過預測最常見的類別。在這種情況下,92%的準確率可能不夠好。 - 在更平衡的數據集中,92%的準確率可能是一個非常強的結果。 4. **其他性能指標:** - 單獨的準確率指標可能不足以全面評估模型性能。應該考慮其他指標,如召回率、精確度和F1分數,特別是在處理不平衡數據集時。 5. **成本與效益分析:** - 在某些情況下,提高準確率可能會帶來額外的成本(如計算資源、時間或金錢)。因此,需要衡量這一準確率的提升是否具有成本效益。 ![image](https://hackmd.io/_uploads/ByogsURYT.png) > Minho加入了一家大型IT公司的一個團隊,這家公司開發客製化的數據分析解決方案給他們的客戶。在他的第一個項目中,他的同事收集了數十萬條數據點,並開發了一個模型,可以預測客戶是否會在下一個會議中購買產品。開發者聲稱使用標準的十折交叉驗證,預測準確率為92%。請回答以下問題: > #### (a) 預測準確率的定義是什麼?除了預測準確率外,還有哪些有用的性能衡量指標可以幫助我們評估預測性能?(6%) >A: 預測準確率的定義是指模型正確預測的百分比。除了預測準確率外,還有其他性能指標如精確度(Precision)、召回率(Recall)、F1分數(F1 Score)以及ROC曲線下面積(AUC)等,這些指標可以幫助我們從不同的角度評估模型的預測性能。 #### (b) 92%的準確率是好是壞?我們如何得到這個性能水平的有意義評估?(7%) > (b) 一個模型的準確率是否良好,需根據應用場景和基準模型的表現來判斷。92%的準確率可能在某些情境下非常優秀,例如在高度不平衡的數據集中。獲得這個性能水平的有意義評估,我們需要比較該模型與其他模型或業界標準的表現,並考慮其他性能指標如精確度、召回率等,以及成本效益分析。 #### © 開發者使用卷積神經網絡(CNN)來學習預測模型。他認為這是最先進的方法,並且沒有其他方法能有更好的表現。你同意他的看法嗎?為什麼?(6%) > (c) 卷積神經網絡(CNN)確實是當前深度學習領域的一種先進技術,特別是在處理圖像數據時。然而,是否沒有其他方法可以勝過CNN,則需要具體問題具體分析。有時,更簡單的模型在特定條件下可能會有更好的性能,或者結合多種模型的集成學習方法可能會有更優的結果。因此,我們不能一概而論地認為CNN總是最佳的。 #### (d) 如果客戶對預測性能不滿意,我們如何改善預測性能?(6%) > (d) 改善預測性能可以從多個方面著手,包括數據前處理、特徵工程、模型選擇和調整、集成學習方法以及後處理策略等。若客戶對當前模型的預測結果不滿意,我們可以從理解客戶的具體需求開始,優化數據集以更好地反映這些需求,重新評估並調整模型的複雜性,或者採用更加適合問題的模型。同時,通過持續的測試和反饋循環,不斷迭代模型以達到更好的預測效果。 --- #### 檔案壓縮類型 | 檔案類型 | 擴展名 | 是否壓縮 | 壓縮類型 | |----------|-------|----------|------------| | 文字文檔 | .txt | 否 | N/A | | Microsoft Word 文檔 | .doc/.docx | 部分(.docx 是壓縮的) | 部分無損 | | PDF | .pdf | 部分(可以壓縮) | 可無損或有損 | | JPEG 圖片 | .jpeg/.jpg | 是 | 有損 | | PNG 圖片 | .png | 是 | 無損 | | GIF | .gif | 是 | 無損 | | TIFF | .tiff | 部分(可以壓縮) | 可無損或有損 | | MP3 音頻 | .mp3 | 是 | 有損 | | WAV 音頻 | .wav | 否 | N/A | | AAC 音頻 | .aac | 是 | 有損 | | FLAC 音頻 | .flac | 是 | 無損 | | AVI 視頻 | .avi | 否 | N/A | | MP4 視頻 | .mp4 | 是 | 可無損或有損 | | MKV 視頻 | .mkv | 是 | 可無損或有損 | | ZIP 壓縮檔 | .zip | 是 | 可無損或有損 | | RAR 壓縮檔 | .rar | 是 | 可無損或有損 | | 7z 壓縮檔 | .7z | 是 | 可無損或有損 | ### 圖像文件格式 | 文件格式 | 擴展名 | 特點 | 常見用途 | |---------|-------|------|---------| | JPEG (Joint Photographic Experts Group) | .jpeg, .jpg | 有損壓縮,小文件大小,廣泛支持 | 網絡圖像,攝影 | | PNG (Portable Network Graphics) | .png | 無損壓縮,支持透明度 | 網絡圖像,高品質圖形 | | GIF (Graphics Interchange Format) | .gif | 支持動畫,有限的顏色 | 簡單動畫,網絡圖形 | | TIFF (Tagged Image File Format) | .tiff | 高品質圖像,無損壓縮 | 專業攝影,圖像存檔 | | BMP (Bitmap) | .bmp | 無壓縮,高品質 | 未壓縮的原始圖像數據 | | SVG (Scalable Vector Graphics) | .svg | 矢量格式,可無限放大 | 網絡圖形,圖標,打印 | ### 視頻文件格式 | 文件格式 | 擴展名 | 特點 | 常見用途 | |---------|-------|------|---------| | MP4 (MPEG-4 Part 14) | .mp4 | 廣泛支持,有損壓縮 | 數字視頻,流媒體 | | AVI (Audio Video Interleave) | .avi | 早期的視頻格式,靈活 | 早期視頻文件 | | MOV (QuickTime File Format) | .mov | 蘋果公司開發,高品質 | 蘋果設備上的視頻 | | WMV (Windows Media Video) | .wmv | 微軟開發,適合流媒體 | Windows平台上的視頻 | | MKV (Matroska Video) | .mkv | 支持多種編碼,可存儲字幕 | 高清視頻,藍光影片 | | FLV (Flash Video) | .flv | 用於在網絡上傳輸視頻 | 在線視頻(如YouTube) | ### 推薦系統 ![9F880B07-9B3C-45A5-9284-A765F8CF10D1](https://hackmd.io/_uploads/H1hYIUAYp.jpg) ![BBE7F0B9-A98F-444B-A013-6FEDEB1B46CC](https://hackmd.io/_uploads/HJuC8URK6.jpg) - 多臂老虎机(Multi-Armed Bandit, MAB) > 是一種決策優化算法,用於在不確定性環境中trade-off探索(尋找新機會)與利用(使用已知信息)的策略,以最大化總體回報或效益。 #### 應用領域 1. A/B 測試:在網站優化、產品設計等領域,用於有效地評估不同的設計或策略。 2. 強化學習:MAB作為一種簡化模型,幫助理解和實現學習策略。 3. 個性化推薦:如新聞推薦、廣告投放等,根據用戶的反應來調整推薦策略。 ![S__3489796](https://hackmd.io/_uploads/H1LRGEXc6.jpg) | 特性 / 概念 | 多臂老虎机 (MAB) | 強化學習 (RL) | |-------------------|------------------------------------------------|----------------------------------------------------| | **狀態依賴性** | 無狀態依賴:每次決策與過去或未來的狀態無關。 | 有狀態依賴:決策受到當前狀態影響,且影響未來狀態。 | | **決策過程** | 每次決策是獨立的。 | 一系列的決策相互依賴,形成決策路徑。 | | **學習目標** | 最大化或優化單次決策的即時回饋。 | 最大化長期獎勵,考慮整個決策過程的總回饋。 | | **回饋結構** | 回饋通常是即時的,基於單次決策。 | 回饋可以是即時的也可以是延遲的,依賴於一連串的決策。 | | **探索與利用的平衡** | 是主要關注點,尋找最佳臂。 | 同樣重要,但更複雜,因為要在狀態空間內做出平衡。 | | **問題複雜性** | 相對簡單,只需選擇最佳選項。 | 較複雜,涉及狀態評估、行動選擇及可能的狀態轉移。 | | **應用範圍** | 限於狹窄範圍,如A/B測試、廣告投放等。 | 廣泛應用於各類問題,如遊戲、機器人導航、序列決策等。 | | **策略評估** | 主要基於回饋的統計性質。 | 依賴於狀態值函數和/或行動值函數的估計。 | | **時間依賴性** | 無時間依賴性:每次選擇被視為獨立事件。 | 有時間依賴性:過去的決策影響未來的結果。 | | **環境動態性** | 通常假設環境是靜態的或變化較慢。 | 可以處理動態變化快速的環境。 | ### 軟體開發 & 測試 ![S__3465222](https://hackmd.io/_uploads/BJ_zDICt6.jpg) ![C8A28700-9EBE-406F-ABEF-BC063C0F1D7A](https://hackmd.io/_uploads/SyZ1DL0K6.jpg) ![S__3465225](https://hackmd.io/_uploads/Bk5vvLCKp.jpg) ![A43FB74E-C7CA-4F63-93B8-015F79E7F249](https://hackmd.io/_uploads/rysoILRYa.jpg) #### V-model ![image](https://hackmd.io/_uploads/r1VydLRY6.png) 參考文章 : https://builtin.com/software-engineering-perspectives/v-model ![S__3465224](https://hackmd.io/_uploads/Sk1UDU0Fp.jpg) ## 網際網路 ![AAB58E08-43D5-4281-9F96-3A69626219C3](https://hackmd.io/_uploads/r1STUU0t6.jpg) 2. Mining (挖礦) 區塊鏈術語,意旨驗證交易(validate transaction)的行為 3. Machine instruction cycle 描述指令在計算機中處理的程序 ![](https://hackmd.io/_uploads/H1fTbr8Ma.png =70%x) ![](https://hackmd.io/_uploads/ryRk7HLza.png) 1. IF(Instruction Fetch,指令擷取): >CU會根據 PC(Programming Counter)此Register內容去memory中擷取指令,再放入IR(Instruction Register)中 2. DE(Decode,解碼): >CU負責將指令解碼,解譯此指令的OP-code(Operation code,操作碼),決定該指令功用 - 若OP-code佔n bits,代表此CPU最多有2^n條機器指令 3. EXE(Execute,執行): >CU會通知ALU執行對應指令運作 4. FO (Fetch operands,擷取運算元) >根據指令的addressing mode,去擷取相對應的operands,可能來自 指令本身 or Registers or Memory 5. WB(write back) >運算完的結果,寫回memory或存入registers #### Q: 是否會發生Memory Access? | Column 1 | Ans | 補充 | | -------- | ------------ | --- | | IF | Yes | | | DE | NO | | | EXE | NO | | | FO | 可能(不一定) | 若指令本身就是operand or operand已經存放在registers,就不需要memory access | | WB | 可能(不一定) | 有可能只寫回到registers,不一定都會寫回memory | - control unit stores the instructions received by the instruction fetch stage in the instruction register. >這句話是對的。當指令被取出(fetch)時,它通常被存放在指令寄存器(instruction register)中,以供後續的解碼和執行。 - Decode stage is executed in the control unit. >對的。解碼階段確實是在控制單元(control unit)中執行的,用於理解或解碼取出的指令。 - The fetch operand stage may not have memory access. >對的。取運算元階段通常涉及到從記憶體中取得運算元,但這不是每次都需要的。例如,如果運算元已經在寄存器中,那麼就不需要再從記憶體中取得它。所以這句話也是對的。 - Write back stage does not always have memory access. >對的。寫回階段可能涉及將結果寫回到記憶體,但也可能只是寫入到CPU的寄存器中,並不一定每次都會訪問記憶體。 - 控制單元(Control Unit) - 負責指揮、協調、控制各單元間的運作,負責機器指令週期的完成,負責IF、DE 4. CIA Triad(資安鐵三角) ![](https://hackmd.io/_uploads/r1cSELLG6.png) >是資訊安全架構的基石,有三原則: >1. 機密性(Confidentiality) >對數據進行保密,要去限制未經授權的資料之訪問與修改權,除了確保隱密性,也降低機密資料陷入威脅的機率。 >>>eg. 為了保護資訊的機密性,常見的對策包含:將數據分類或標籤化,對資料存取者進行身份驗證、對傳輸中的數據進行加密,提供相關課程提高資安意識。 >2. 完整性(Integrity) >指數據沒有遭受未經授權者篡改,以確保資料在整個生命週期內的一致性與精確性。 >>>eg. 銀行需要確保銀行存戶的帳戶金額的準確性與即時性,無論是透過ATM、網銀轉帳,該餘額都無法被有心人士修改。 >>>完整性會因為篡改入侵檢測系統或修改系統log而直接受到損害,也可能是人為疏忽或編碼錯誤而造成資安的完整性受到威脅。 >>>常見的保護措施包含:電子文件導入數位簽章、獲取具公信力機構發行認證的安全性證書等。 >3. 可用性(Availability) >意味著已啟動或正在運行的程序,授權者能夠即時地訪問這些資源,假如某系統、應用程式或數據無法即時讓授權用戶進行使用時,那麼資訊就無法為企業產生最大化的價值。 >>>許多情況都會危及可用性,包括軟硬體故障、電源故障、自然災害和人為疏失,電腦病毒也會直接衝擊可用性,常採取的應對策略包括:定期軟體修補與系統升級、備份等保護解決方案。 - ISO/IEC 27001 >是一套完整的資訊安全管理國際標準,也是目前國際上最廣泛使用,且最為完整的ISMS資安管理系統標準 #### Zero Trust (零信任安全性) >是一種安全性模型,在網路內部或外部預設沒有任何人受到信任,而且每個嘗試存取網路上資源的使用者都需要進行驗證 >傳統的 IT 網路安全會信任網路內部的所有人員與內容。Zero Trust 架構不會信任任何人員與內容 > [主要原則] 1. 持續監控和驗證(Continuous monitoring and validation) >背後的理念假設網路內部和外部都有攻擊者,因此不應自動信任任何使用者或機器。Zero Trust 驗證使用者身分和權限以及裝置身分和安全性。在登入和建立連線後,經過一段時間就會逾時,迫使使用者和裝置不斷重新驗證。 2. 最低權限(Least privilege) >僅向user提供最低權限存取。 3. 裝置存取控制(Device access control) >Zero Trust也要求對存取裝置進行嚴格控制。Zero Trust 系統需要監控有多少不同的裝置正在嘗試存取其網路,確保每個設備都獲得授權,並評估所有裝置以確保它們沒有受到入侵。如此可進一步減少網路的攻擊面。 4. 微分段(Microsegmentation) >將安全性周邊劃分為小型區域,以分別維護對網路各部分之存取的做法。 >>eg.將檔案存放在利用微分段的單個資料中心的網路可能包含數十個單獨的安全區域。未經單獨授權,有權存取其中一個區域的個人或程式將無法存取任何其他區域。 5. 防止橫向移動(Preventing lateral movement) >「橫向移動」是指攻擊者在獲得網路存取權限後在網路內移動。即使發現了攻擊者的進入點,也很難偵測到橫向移動,因為攻擊者將繼續入侵網路的其他部分。 Zero Trust 旨在遏制攻擊者,使他們無法橫向移動。由於 Zero Trust 存取是分段的並且必須定期重新建立,因此攻擊者無法移動到網路中的其他微分段。一旦偵測到攻擊者的存在,就可以隔離受感染的裝置或使用者帳戶,切斷進一步的存取。 5. 多重要素驗證 (MFA,Multi-factor authentication) >意味著需要多個證據來驗證使用者;僅輸入密碼不足以獲得存取權限。 >>MFA常見應用是在 Facebook 和 Google 等線上平台上使用的雙重驗證 (2FA)。除了輸入密碼外,為這些服務啟用 2FA 的使用者還必須輸入傳送到另一台裝置(例如手機)的代碼,從而提供兩項證據證明他們是他們所聲稱的身分。 - Spanning Tree > Q: > if T is spanning tree of G, and e is an edge of G that is not in T, then adding e to T will not create a cycle. > 如果T是G的生成樹,且e是G的一條邊,但e不在T中,則將e加入T不會產生迴圈。 >> 錯,T是spanning Tree,已經找出所有相連不會產生cycle的edge了,若再從G中剩下的edge挑一個加入,因為是原先被過濾掉的,所以一定會產生cycle - 高等排序 1. Quick Sort、Merge Sort、Heap Sort Average case 皆O(n logn) 2. Merge Sort 需要額外空間,Space Complexity:O(n) 3. Merge 是not Sorting in place(需額外空間儲存),但用空間換來了stable的優點 Q: If you're tasked with creating a text editor and want to add a "undo" feature, you can use stack. A: True - 物件導向式(Object-Oriented Programming, OOP)和功能性編程(Functional Programming, FP) - 當然可以!以下是一個簡單的比較表,概述了面向對象編程(Object-Oriented Programming, OOP)和功能性編程(Functional Programming, FP)的主要特點: | 比較項目 | 物件導向式 (OOP) | 功能性編程 (FP) | |-------------------------|-------------------------------------------------------|---------------------------------------------------------------| | **基本概念** | 基於"對象"的概念,將資料和行為(方法)包裝到一起。 | 基於數學中的函數概念,優先考慮資料的變換和狀態的不變性。 | | **主要特點** | 繼承、封裝、多型 | 高階函數(High order function)、純函數、不繼承、recursion、Lazy Evalution(惰性求值) | | **狀態管理** | 對象可以有狀態,可以隨著時間而改變。 | 傾向於避免使用可變狀態,優先考慮不變資料結構。 | | **數據和功能** | 通常結合在一起成為"對象"。 | 資料和功能是分開的,函數是第一級公民。 | | **使用場景** | 大型系統、用戶介面、遊戲等 | 數據分析、並行和並行處理、邏輯問題等 | | **代碼組織** | 通常使用類和對象來組織代碼。 | 使用函數和模組來組織代碼。 | | **常見語言** | Java、C++、Python、C# | Haskell、Erlang、Lisp、Clojure、部分的 JavaScript 和 Python | | **側重點** | 提供一種以對象為中心的方法來組織和管理複雜系統。 | 提供一種方式來編寫不產生副作用的代碼,並且鼓勵使用不變的資料結構。 | - Lazy Evaluation(懶惰求值) >是一種評估策略,它延遲表達式的求值直到真正需要其結果。這可以提高效率,特別是在處理大型數據結構或無窮數據流時 - Higher-order function(高階函數) > 可以接收一個或多個參數 --- ## Fog computing vs edge computing ## ![](https://hackmd.io/_uploads/HykwIhDza.png =90%x) ![](https://hackmd.io/_uploads/ByTfw3wzp.png =70%x) 考古題:P.47 (13) 當然可以!以下是一個比較 Fog Computing 和 Edge Computing 的表格: | 比較項目 | Fog Computing | Edge Computing | |-------------------------------|-------------------------------------------------------------|---------------------------------------------------------| | **定義** | 將計算、儲存和網絡功能分散到本地設備,但比 Edge Computing 更靠近數據中心。 | 將計算和儲存資源放在接近數據來源的地方,例如 IoT 設備或網絡邊緣。| | **位置** | 在雲端和邊緣設備之間,例如在地方數據中心或更大的路由器。 | 直接在邊緣設備或其非常接近的位置。 | | **延遲** | 通常比雲計算要低,但可能比 Edge Computing 稍高。 | 由於處理是在數據源或非常靠近數據源的地方完成的,所以延遲非常低。 | | **適用情境** | 需要快速反應但不需要即時處理的應用,例如智能城市的某些功能。 | 需要即時反應的應用,例如自動駕駛車或某些工業自動化系統。 | | **資料處理量** | 可以處理較大量的資料,因為它可以使用更強大的區域設備。 | 由於計算資源可能有限,所以通常針對小型或特定的資料集。 | | **管理和控制** | 通常有集中式的管理和控制,但更分散比純粹的雲計算。 | 計算和處理通常是分散的,並且更靠近實際設備。 | | **與雲端的互動** | 可能需要與雲端進行更多的互動,因為 Fog 設備仍然與雲端相對較近。| 通常最小化與雲端的互動,將更多的處理保留在邊緣。 | ## 去整理 1. https://www.markreadfintech.com/p/053?utm_source=post-email-title&publication_id=838858&post_id=138480375&utm_campaign=email-post-title&isFreemail=true&r=2m1s5r&utm_medium=email 2. https://medium.com/it-digital-%E4%BA%92%E8%81%AF%E7%B6%B2/%E9%9B%B2%E8%A8%88%E7%AE%97%E4%B9%8B%E4%B8%8A%E9%82%84%E6%9C%89%E9%9C%A7%E8%A8%88%E7%AE%97-%E9%9C%A7%E8%A8%88%E7%AE%97%E7%9A%84%E5%85%A5%E9%96%80-fog-computing-3eab52996c71 ### CPU 構成 ![](https://hackmd.io/_uploads/H1rzKYqzT.png) ### Storage-Device Hierarchy ![](https://hackmd.io/_uploads/HkUUbTizT.jpg) ### Von Neumann architecture ![](https://hackmd.io/_uploads/BJjifpoMp.png) ### Von Neumann bottleneck (瓶頸) >指Memory 存取效能與bus的傳輸速率,會嚴重影響電腦整體效能。 >由於CPU速度遠大於記憶體讀寫速度及bus傳輸速度,故CPU在記憶體資料輸入或輸出時被迫等待or閒置,此即為bottleneck ### 量詞單位 ![](https://hackmd.io/_uploads/Sk9pBTiGa.jpg) ##### CPU速度單位: GHz ### Asymptotic notation 漸進式符號 ![5754CCE7-FB7E-45DD-9F2F-AC4EE4288097](https://hackmd.io/_uploads/HyAymMV_p.jpg) ![S__3358725](https://hackmd.io/_uploads/Hy8T7zVup.jpg) ### 成長速度 ![1336E89D-DDC4-40A7-AE7B-D071B482C038](https://hackmd.io/_uploads/rym1NfV_p.jpg) ![602FA5F0-07A7-4040-B1DC-7B713E545A24](https://hackmd.io/_uploads/HJn1VMV_6.jpg) ### Master Theory ![S__3358726](https://hackmd.io/_uploads/H1dfNGNup.jpg) ![9A0E7CFE-AE59-48CC-B186-9CB52E623DC1](https://hackmd.io/_uploads/Bk-QNfVuT.jpg) ### 數位邏輯 ![2AF8E84A-3CA4-43B5-8577-42E6B96D5C58](https://hackmd.io/_uploads/SJKbxWtua.jpg) ##### NAND (Not-AND) > 將AND的輸出給予否定 >USB 隨身碟或 SD 卡,就是快閃記憶體(flash memory)的產品,也稱為 NAND 快閃記憶體 ![](https://hackmd.io/_uploads/Hk4NnpsMa.png) ##### XOR ![](https://hackmd.io/_uploads/ryKRfAsMa.png) ### TLU (Threshold Logic Units,閾值邏輯單元) >是早期神經網絡中的一個基本概念 > ![](https://hackmd.io/_uploads/HyKXSRozp.png) ![](https://hackmd.io/_uploads/BJOVrCszp.png) ![](https://hackmd.io/_uploads/Hyr_YRiMT.png) ### Pipeline >管線技術是現代處理器設計中用來提高效能的技術,它通過重疊指令的執行來達到這一目的。 ![](https://hackmd.io/_uploads/SJJygAsGp.png) ### Pipeline Hazards (管線障礙) >然而,管線可能會引入一些情況,使得下一條指令不能在下一個週期立即執行。這些情況被稱為管線障礙 > > 主要有三種類型的障礙:數據障礙(Data Hazard)、控制障礙(Control Hazard)和結構障礙(Structure Hazard) >1. Structure Hazard >由於硬體資源不足。這些障礙是由於訪問可用資源時的衝突而產生的。 > >例如,如果只有一個記憶體訪問單元,而兩條指令(Instruction Fetch與 Fetch Operands)同時需要訪問記憶體。由於只有一個可以訪問它,所以其他指令必須等待,這會導致管線停滯。 > >2. Data Hazard >由於指令之間的數據相依性(Data dependency)而產生的 >eg. 管線中某條指令需要用到前一階段的指令但尚未產生結果 >3. Control Hazard >也稱為分支障礙,是由於程序控制流的不確定性而產生的 >eg. 當branch指令尚未決定是否分支,但後續指令已進入管線執行,故執行順序發生錯誤 >eg. 有jump指令,從第2行跳到了第9行,但3、4、5、6行已經開始pipeline [112 台大資管] ## Memory-Mapped I/O(記憶體映射輸入輸出)vs. Port-Mapped I/O(端口映射輸入輸出) ![image](https://hackmd.io/_uploads/H1vfX407T.png) ### Memory-Mapped I/O(記憶體映射輸入輸出) - **地址空間共享**:Memory-Mapped I/O使用與普通記憶體相同的地址空間來訪問I/O設備。這意味著CPU訪問特定地址時,可能是在訪問物理記憶體,也可能是在訪問某個I/O設備的記憶體或寄存器。 - **寄存器映射**:I/O設備的寄存器和記憶體被映射到特定的地址值。因此,當CPU訪問這些地址時,實際上是在與這些I/O設備的寄存器或記憶體進行交互。 - **使用標準指令**:因為I/O設備使用的是與記憶體相同的地址空間,所以CPU可以使用普通的記憶體訪問指令(如MOV)來與這些設備進行通信。 - **地址預留**:為了能夠讓I/O設備使用這種方法,系統必須為這些設備在CPU的地址空間中預留出特定範圍的地址。這些地址不能被用於普通的物理記憶體。 > uses the same address space to address both memory and I/O devices. The memory and registers of the I/O devices are mapped to (associated with) address values. So when an address is accessed by the CPU, it may refer to a portion of physical RAM or to memory and registers of the I/O device. > Thus, the CPU instructions used to access the memory(eg. MOV ...) can also be used for accessing devices. Each I/O device either monitors the CPU's address bus and responds to any CPU access of an address assigned to that device, connecting the system bus to the desired device's hardware register or uses a dedicated. > > To accommodate the I/O devices,some areas of the addresses used by the CPU must be reserved for I/O and must not be available for normal physical memory.The range of addresses uese for I/O devices is determined by the hardware. The reservation may be permanent or temporary. ### Port-Mapped I/O(端口映射輸入輸出) - **獨立的地址空間**:與Memory-Mapped I/O不同,Port-Mapped I/O為I/O設備提供了一個與主記憶體完全分離的地址空間。 - **專用指令**:CPU使用專門為I/O操作設計的指令來訪問這些地址,如x86架構中的IN和OUT指令。 - **I/O端口**:每個I/O設備都會被分配一個或多個特定的I/O端口。CPU通過這些端口來與設備進行通信,這些端口可以支援不同大小的數據傳輸(例如一次傳輸一個字節、兩個字節或四個字節)。 - **隔離I/O**:因為I/O的地址空間與主記憶體地址空間是隔離的,所以這種方法有時被稱為隔離I/O。這種隔離可以通過CPU的物理接口上的額外“I/O”引腳或者一個專門用於I/O的匯流排來實現。 總結來說,Memory-Mapped I/O和Port-Mapped I/O都是CPU與外圍設備進行通信的方法,但它們在地址空間的使用、指令的使用以及如何與I/O設備的寄存器交互上有所不同。 >often uses a special class of CPU instructions designed specifically for performing I/O, such as the `in` and `out` instructions found on microprocessors based on the x86 and x86-64 architectures. Different forms of these two instructions can copy one, two or four bytes (`outb`, `outw` and `outl`, respectively) between the EAX register or one of that register's subdivisions on the CPU and a specified I/O port which is assigned to an I/O device. I/O devices have a separate address space from general memory, either accomplished by an extra "I/O" pin on the CPU's physical interface, or an entire bus dedicated to I/O. Because the address space for I/O is isolated from that for main memory, this is sometimes referred to as isolated I/O. ### Memory-Mapped I/O vs. Port-Mapped I/O比較 | 特性 | Memory-Mapped I/O | Port-Mapped I/O | |----|--------------------------------|----------------------------| | **定義** | 使用相同的地址空間來地址化記憶體和I/O設備 | 通過特殊的CPU指令來進行I/O操作 | | **地址空間** | 記憶體和I/O設備共享地址空間 | I/O設備擁有與主記憶體分離的獨立地址空間 | | **CPU 指令** | 使用常規記憶體訪問指令(例如MOV) | 使用專門的I/O指令(如in和out指令) | | **I/O 設備訪問** | CPU訪問地址時可能指向physical memory或I/O device 的memory和register | I/O device通過指定的I/O port訪問 | | **地址分配** | 需要為I/O設備預留特定的地址範圍 | I/O地址空間與主記憶體地址空間分離 | | **適用情況** | 適合需要大量數據交換的設備。 | 適合小型數據交換的設備。 | | **register使用** | register被映射到CPU的地址空間 | 是的,透過指定的I/O端口訪問register | | **指令共用性** | 是,使用與memory相同的指令訪問I/O設備 | 否,使用專門的I/O指令,與記憶體訪問指令不同 | ### 中斷服務例程(ISR)與 Context Switch 1. **中斷服務例程(ISR, Interrupt Service Routine)**: - 當一個中斷發生時,CPU會暫停當前執行的程序,並跳轉到對應的中斷服務例程來處理中斷。 - 在這個過程中,CPU會保存當前程序的某些狀態,如程序計數器(Program Counter, PC)和其他必要的寄存器,以便中斷處理完畢後可以恢復。 - ISR的執行通常較短,專注於處理特定的中斷事件。 2. **上下文切換(Context Switch)**: - 在多任務操作系統中,上下文切換發生在切換從一個進程(或線程)到另一個進程時。 - 上下文切換涉及保存當前進程的完整狀態(包括所有寄存器和程序計數器)到其進程控制塊(Process Control Block, PCB)中,並加載另一個進程的上下文到CPU中。 - 這是一個更為全面的狀態保存和恢復過程,通常比ISR的處理要複雜和耗時。 ### 相同點與不同點 - **相同點**:兩者都涉及到保存和恢復程序的狀態,以確保程序可以在中斷或其他程序後繼續執行。 - **不同點**: - **目的不同**:ISR是為了快速響應和處理中斷,而上下文切換是為了進程間的公平和高效的時間共享。 - **範圍不同**:ISR通常只保存必要的狀態,而上下文切換需要保存進程的完整狀態。 - **觸發條件不同**:ISR由硬體中斷觸發,而上下文切換通常由操作系統的調度器觸發,作為時間共享和進程管理的一部分。 ### 硬體中斷 > An external device interrupts the processor by triggering an interrupt signal to the processor > 一個外部設備通過向處理器觸發一個中斷信號來中斷處理器 > 1. 外部設備:這指的是計算機外圍的任何設備,比如鍵盤、鼠標、打印機或網絡接口。 >2. 中斷處理器:當外部設備準備好交換數據或需要注意時,它會發送一個信號給中央處理單元(CPU)。 >3. 觸發中斷信號:這個信號實際上是一個中斷請求(IRQ),它告訴CPU暫時中止當前的工作流程,並轉而處理與該設備相關的事務。 >4. 對CPU的影響:當CPU接收到這個中斷信號時,它會暫停當前正在進行的任務,保存當前的狀態(比如正在運行的程序的進度),並執行一個特定的操作,稱為中斷服務例程(ISR),來響應這個中斷。一旦ISR執行完畢,CPU通常會恢復原先被中斷的任務。 --- ### Distributed System ![image](https://hackmd.io/_uploads/SJ5cr807T.png) ### 集群 (Cluster) 與分散式系统 (Distributed System) 比較 | 考量因素 | 集群 | 分布式系统 | |------------|-----------------------------------------------------|-------------------------------------------------------| | **定義** | 使用多部小型電腦,透過區域網路或廣域網路「合體」成為較大型的分散式運算架構電腦 | 由多台独立的计算机组成,这些计算机协作工作,对用户来说像是一个连贯的系统。 | | **节点管理** | 通常由集中式软件进行控制和调度,每个节点执行相同或类似的任务。 | 节点管理更为分散,每个节点可能执行不同的任务,根据需要相互协作。 | | **任务执行** | 集中在提高特定应用或服务的性能,例如高性能计算或数据库查询处理。 | 旨在分散处理多样化的工作负载,例如不同的节点可能负责处理不同的服务请求。 | | **硬件与操作系统** | 节点往往配备相同或兼容的硬件和操作系统,以简化管理和维护。 | 硬件和操作系统可能各不相同,每个节点可根据其具体的功能需求来配置。 | | **网络** | 通常使用高速局域网络(LAN)连接节点,以实现高效的数据交换和通信。 | 可能使用广域网络(WAN)或互联网来连接各地的节点,以支持远程通信。 | | **应用场景** | 适用于需要大量计算资源的场合,如科学研究、图像处理或模拟场景。 | 应用范围广泛,包括云服务、大数据处理、在线交易处理等多种业务。 | | **容错能力** | 集群通过冗余设计和故障转移机制提高系统的可用性,当某个节点出现故障时,其他节点可以接管任务。 | 分布式系统强调分区容忍性和最终一致性,即使部分节点失效,整个系统仍能继续运作。 | | **可扩展性** | 通过增加节点数量来实现水平扩展,提高集群的计算能力和容错能力。 | 可通过增加节点实现水平扩展,或通过增强单个节点性能实现垂直扩展。 | | **成本** | 相比单台计算机,集群提供了成本更有效的方式来提升性能和可靠性。 | 成本因规模和复杂性而异,大型分布式系统可能因管理和维护的复杂性而成本较高。 | ### 網格計算(Grid Computing) >著重於跨區域網路的大規模資源共享,動態整合分散各地的電腦或叢集系統,提高整體資源使用率。 ![image](https://hackmd.io/_uploads/SyMgDURXp.png) 叢集運算(Cluster Computing) >在區域網路中,連結多台同質電腦,並利用「平行性」技術的優勢,加速解決問題,共同達成單一目標。 ## Computer Cluster >是一組鬆散或緊密連接在一起工作的電腦。由於這些電腦協同工作,在許多方面它們可以被視為單個系統。與網格電腦不同,電腦叢集將每個節點設定為執行相同的任務,由軟體控制和排程。 > >叢集的組件通常通過快速區域網路相互連接,每個節點(用作伺服器的電腦)執行自己的作業系統實例。在大多數情況下,所有節點使用相同的硬體[1]和相同的作業系統 >電腦叢集依賴於一種集中管理方法,該方法把節點用作協調的共享伺服器。它不同於其他方法(比如對等計算或網格計算),後者也使用許多節點,但具有更多的分散式特性 #### 優點 >叢集的設計主要考慮效能,但實際使用中還涉及許多其他因素,包括容錯(能夠容許系統繼續使用故障節點)能力、可延伸性、高效能、不需要頻繁執行維護程式、資源整合(如RAID)和集中管理。 > >叢集的優點包括在發生災難時啟用資料恢復、提供並列資料處理和高計算能力。 > >在可伸縮性方面,叢集提供了水平添加節點的能力。這意味著可以向叢集中添加更多的電腦,以提高其效能、冗餘和容錯。與在叢集中擴充單個節點相比,添加節點是一個既節省成本,又可以使叢集獲得更高的效能的解決方案。電腦叢集的這一大特性允許大量效能較低的電腦執行較大的計算負載。 > >向叢集添加新節點時,可靠性也會增加,這是因為進行維護的時候不需要停下整個叢集,只需停下單個節點維護,叢集的其餘節點承擔該節點的負載即可。 > >如果叢集包含大量的電腦,那麼可以使用分散式檔案系統和RAID,這兩種方法可以大大提高叢集的可靠性和速度 https://en.wikipedia.org/wiki/Computer_cluster --- ### Source code、Intermediate Code、Object Code 比較 | 特性 | 描述 | 主要用途 | 優點 | 缺點 | |-----------------------------|------------------------------------------------------------------------------------------------------------|----------------------------------------------------------|------------------------------------|-------------------------------------| | 源代碼 (Source Code) | 是用高階語言(如C++, Java, Python等)編寫的原始程序代碼。是人類可讀的,且具有高階語言的所有特性,如變量、函數、類別等。Source code是編寫程序的起點,需要通過compile過程轉換成機器可以執行的形式。 | 程序開發和維護的基礎。需透過compiler轉換以便計算機能夠執行。 | 易於理解和維護;可移植性高。 | 執行效率低於低階代碼。 | | 中間碼 (Intermediate Code) | 介於高階語言和機器語言之間的代碼。相較於source code更接近機器語言,但比機器碼更為抽象。用於compile過程中,便於進行跨平台的代碼優化和轉換。例如,Java中的Bytecode就是一種中間碼。 | 提供跨平台的代碼優化和轉換的中介層。便於實現語言的可移植性。 | 提高代碼的可移植性;便於進行優化。 | 需要進一步轉換才能執行。 | | 目標代碼 (Object Code) | 是Compiler將source code或Intermediate code轉換成的機器語言代碼。是針對特定的硬體平台和操作系統設計的,通常是二進制格式,直接由CPU執行。object code是compile過程的最終產物,可以直接在計算機上執行。 | 讓計算機硬體能夠執行程序代碼的最終形式。 | 執行效率高;直接由硬體執行。 | 非人類可讀;低可移植性。 | --- ### Interpreter > 一行一行執行去翻譯source code且執行CPU對應的機器指令 > 1. 不會有Intermediate code、object code產生 > 2. 也不會有object code最佳化 > 3. 下次程式重新執行時,仍須再解譯一次 > 4. 程式執行時,Interpreter也必須待在memory中 > 5. 強調翻譯speed fast、Easy debug > eg. BASIC、Lisp、Java、Python ### Assembler、Interpreter、Compiler 比較表 [112 政大] | | Compiler | Interpreter | Assembler | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | | 原始程式語言種類 | 高階語言 | 高階語言 | 低階語言 | | 產出物 | Object code | 中間碼。且沒有保留儲存。翻完即丟 | Object code | | source code(目的碼)最佳化 | 1. Intermediate Code 最佳化 (與機器無關的) 2. Source code 最佳化 (與機器相關的) (編譯器在編譯階段有時間進行深入分析執行複雜的最佳化技術,如迴圈展開、死程式碼消除、內聯函數等。此過程在程式運行之前就發生,所以compiler可花更多時間進行最佳化,且不會影響程式的運行時間) | 沒有最佳化 (目標是快速翻譯和執行程式碼,而不是深入優化) | 與機器相關的目的碼最佳化 | | 執行效益 | 程式執行效益較佳 | 執行效益較差 | | | 程式未修改下要重新執行? | 不須再邊譯 | 需要重新編譯 | 不須再組譯 | | 翻譯速度 | 慢 | 快 | 中 | | 除錯(debug) | 不易 | 容易 | 不易 | | 例子 | C、C++、PASCAL、FORTRAN | BASIC、LISP、JAVA、Python | Intel 系列的組合語言 | | 運行速度 | 快(編譯型語言產生的機器碼直接由硬體執行,無需在運行時進行額外的翻譯,因此運行速度快。) | 慢(在運行時需要逐行或逐塊被直譯器翻譯,這會增加額外的運行時開銷,導致執行速度變慢) | | - Compiled programs run faster than Interpreted programs --- ### Compiler >其實就是把一種語言(source code)轉換成另一種語言(object code)的工具,只是說「通常」這個轉換的目標語言都會是比較低階的語言,可以給機器直接執行的: eg. >1. C compiler 編譯出的目標碼就是組合語,給實體機器執行。 >2. Java Compiler (javac) 目標碼是 Java Byte Code,然後就可以在各個機器上的 Java 虛擬機器 JVM 執行。 --- >一般而言,有7個steps: >1. Lexical Analysis (詞彙分析) >辨識各種Token (語彙單元) 建立identifer tabel,Literal table等 > >2. Syntax Analysis (語法分析) >Parsing (剖析)各敘述是否符合文法描述,如正確,建立Parsing Tree or Syntax Tree,否則輸出Syntax error > >3. Semantic Analysis (語意分析) >確認各個identifier(屬性 attribute)及值,同時呼叫semantic routine,以產生中間碼or目的碼 >4. 中間碼之最佳化 or (與machine-independence code optimization) >目的要加速未來程式執行(減少exec time)及節省空間 >eg. 常數先前計算、迴圈不變量最佳化、Booling式子最佳化,刪除共同之運算式 >5. 儲存體配置(Storage Allocation) >Compiler 做"Static" storage allocation,即配置常數,變量所需空間 >[Note]: Dynamic Storage Allocation (eg. Stack Heap Memory)是execution time,才由OS配置 >6. 產生Assemble code 針對特定CPU >執行與機器相關之目的碼最佳化 >7. 呼叫內建的assembler, 將上述的組合語言翻成對應的機器、目的碼並輸出,保存於Disk中 >eg. Pascal,C,Fortran,C++ > >[Note]: >1. (1)~(4) 與特定CPU無關,(5)~(7)與特定CPU相關 >2. (1)~(3)與特定程式語言相關 >3. 有些simple compiler (1)(2)(3) >4. 直接產生目的碼 #### Process of translating a program >![image](https://hackmd.io/_uploads/HyUsKFkNT.png) EX. Assembler takes as input the assembly code and translates it into relocatable machine code 組譯器將組合語言作為輸入並將其轉換為可重定位的機器碼。 對還錯? > 對。 當組譯器將組合語言轉換為可重定位的機器代碼時,它實際上是在創建一種可以在記憶體中靈活移動而不會影響程序正確運行的機器代碼 Q: 解釋machine codes,assembly language and high-level languages 關聯 > High-level language 經過compiler(內含assembler)編譯後先產生特定CPU的assembly language(組合語言碼),再經由Assembler 組譯成machine code ,之後再 CPU上執行machine code ![image](https://hackmd.io/_uploads/ryj9_-W4p.png) 寫程式時,軟體使用順序: Editor (編輯器) ---> Cimpiler ---> Linker(連結程式) ---> Loader (載入程式) --- ### Dynamic Linking vs. Static Linking 比較 ![C03BB96C-8AFC-4B73-A77E-C9D356EBA3EE](https://hackmd.io/_uploads/H1iDTbUVT.jpg) ![FE55FF79-6323-4A13-9B25-1EDF402ADEF0](https://hackmd.io/_uploads/HJ-uT-8N6.jpg) | 特性/類型 | Dynamic Linking | Static Linking | |------------------|-----------------------------------------------------|------------------------------------------------------| | **定義** | 在執行時才會與其依賴的庫連接起來。 | 在編譯時就會將程式碼與其依賴的庫連接起來,生成一個獨立的可執行文件。 | | **執行文件大小** | 通常較小,因為共享庫在多個程序間共享。 | 通常較大,因為所有必要的程式碼都被包含在每個可執行文件中(重複)。 | | **記憶體使用** | 低,多個程序可以共享同一份庫的副本。 | 高,每個程序都有自己的一份庫的副本。 | | **依賴庫更新** | 更新依賴庫後,所有使用該庫的程序都能受益,無需重新編譯。 | 需要重新編譯程序以使用更新後的庫。 | | **執行時間依賴** | 慢。需要在執行時找到並連接所需的庫,可能會導致額外的啟動延遲。 |快。無需在執行時加載或查找庫,啟動時間通常較快。 | | **跨平台兼容性** | 需要確保運行環境中有正確版本的庫。 | 程序更加獨立,不需要特定的庫就可以在任何支持其二進制格式的平台上運行。| | **安全性與穩定性** | 依賴於外部庫,若庫有問題,可能影響程序。 | 因為所有必要的代碼都包含在內,所以相對較為穩定。 | | **分發和安裝** | 程序較小,分發和下載更快,但需要確保用戶系統上有所需的庫。 | 程序較大,但包含所有必要的依賴,易於分發和安裝。 | --- [112台大] ## OS responsibility(責任) >![S__3088387](https://hackmd.io/_uploads/SyOP_c1Vp.jpg) ### Memory layout >當記憶體分配給程序(process)時,會由幾個區段(segments)組成 ![image](https://hackmd.io/_uploads/S1idtc1V6.png) ![7EB11D49-8D96-4244-A32D-E75B7155B24B](https://hackmd.io/_uploads/HkUbYzBca.jpg) ![100D658C-6C6A-42B9-B691-80E653F4A30A](https://hackmd.io/_uploads/HySWtzHqp.jpg) ![9A9847D6-1903-4314-A67A-2BBF9D3D2C0E](https://hackmd.io/_uploads/SJ8bYMS56.jpg) ### 描述OSI 7層 ![image](https://hackmd.io/_uploads/rkkSCKNVa.png) 1. Physical layer >用來定義網路設備裝置之間的位元資料傳輸。規範了如纜線規格、傳輸速度及資料傳輸的電壓值。 2. Data Link layer > 主要在網路間建立邏輯連結,並且在傳輸過程中處理流量控制及錯誤偵測,讓資料傳送與接收更穩定。 > - Data Frame(資料訊框): 由Data Link Layer 將physical layer 的數位訊號封裝成一組符合邏輯的傳輸資料。 > - Frame 包含MAC address (是一組獨一無二的裝置序號,可讓設備在溝通時辨別彼此) > - Protocol: > ATM(非同步模式,Asynchronous Transfer Mode,ATM)、PPP(點對點協定,Point-to-Point Protocol) > >eg. 第二層設備: Switch 3. Network layer > 定義網路路由及定址功能,讓資料能在網路間傳遞。透過主要的網際網路協定(Internet Protocol,IP),在資料傳輸時,該協定會將IP address 加入傳輸資料中,並將資料組成封包(packet)。 - Packet:指想傳輸的資料加上address後。即可知道來源與目的地。 > >eg. 第三層設備:Router 4. Transport layer > 主要負責電腦整體的資料傳輸及控制,可將大資料切割成多個適合傳輸的資料。 > - TCP/IP (Transmission Control Protocol,傳輸控制協定) > >> 在傳輸資料內加入了驗證碼,當對方收到,就會依此驗證,回傳對應的確認訊息(ACK),若對方未能及時回應,資料就會重傳,確保資料傳輸的完整性。 5. Session layer > 負責建立網路連線,等完成再中斷。 6. Presentation layer > 可將從應用層接收的資料,透過展示層轉換表達方式 > eg. 將ASCII編碼轉換成應用層可使用的資料、資料加解密,也是在展示層處理 7. Application layer > 主要處理應用程式,進而提供使用者網路應用服務。 > - 常見通訊協定:DHCP、FTP、HTTP、POP3 > - 應用服務: web browser、mail等 --- ### CAP定理(Consistency, Availability, Partition theorem) > 也稱為布魯爾定理(Brewer's theorem),它指出對一個分散式系統,不可能同時滿足以下三點。這三個特性只能同時滿足兩個。也就是說,我們必須要做出取捨(trade-off): > 1. 一致性(Consistency):(所有節點)使用者讀到的”總是”最新的資料 > 2. 可用性(Availability):使用者的請求”總是”可以獲得回應,但不保證獲取的是最新的data >3. 分區容錯性(Partition tolerance):就算網路出現問題導致資料分區,整個系統仍然要可以繼續運作 --- ### 網絡虛擬化(Network Virtualization) > 是一種技術,允許將單一的物理網絡分割成多個獨立、隔離的虛擬網絡。這種技術可以提高網絡資源的利用率、增強靈活性和簡化網絡管理。核心概念: 1. **資源抽象**:網絡虛擬化將物理網絡資源(如交換機、路由器、帶寬)抽象化,創建獨立的虛擬網絡,這些虛擬網絡彼此隔離,但共享同一組物理硬件。 2. **隔離和多租戶支持**:虛擬網絡彼此隔離,確保安全性和穩定性,這對於多租戶環境(例如雲計算平台)來說非常重要。 3. **網絡功能虛擬化(NFV)**:這是網絡虛擬化的一個特殊方面,涉及將傳統的網絡功能(如路由、防火牆、負載平衡器)從專用硬件轉移到虛擬化環境中。 4. **軟件定義網絡(SDN)**:SDN是與網絡虛擬化密切相關的一種技術,它通過軟件來集中控制網絡資源,使網絡管理更加靈活和自動化。SDN可以看作是網絡虛擬化實現的一種手段。 5. **靈活性和可擴展性**:網絡虛擬化使得網絡的擴展和調整變得更加容易,可以快速應對不同的業務需求和網絡負載變化。 6. **成本效益**:通過共享物理網絡資源,網絡虛擬化有助於降低設備成本和維護成本,同時提高資源利用率。 網絡虛擬化在數據中心、雲計算、企業網絡和服務提供商的網絡環境中有廣泛的應用,它為現代網絡設計和運營提供了更高的靈活性和效率。 --- ### Liveness (活性) > 系統必須確保processes在他們執行生命週期是有進展的 ### Livelock = Liveness Failure (持續性失敗) > 發生在彼此競爭但都願意讓步的情況 > > eg. 當我們走在行人道遇到對向的行人,兩個人都想讓路給對方卻又很剛好的站到同一邊,在電腦中,這樣看似有在執行卻毫無進展的情況就是 Livelock > - 不同於deadlock地方,因為deadlock都是在waiting state 但livelock都是同時在running的。但deadlock還是算Livelock的一種 > eg. Infinite loop、Deadlock、Priority inversion(優先權反轉: 高優先權等很久時間直到低優先權釋放共享變數or 資源存取權) ![S__22233090](https://hackmd.io/_uploads/HknJw0EEp.jpg) --- #### Program Counter (Register) > 記錄下一個指令執行的起始位置 #### Limit Register > 紀錄process 間的起始位置 #### Stack Pointer Register (堆疊指標暫存器) > 用於指示堆疊(Stack)在記憶體中的位置。在程序執行時用於處理臨時數據和函數呼叫。 #### Spooling > 把Disk 當緩衝區 (慢) #### buffer > 把memory 當緩衝區 (快) ### Convoy effect(護衛效應) >許多process都在等待,需要花長時間的process完成工作,才有機會取得CPU,造成average waiting time 大幅增加及low I/O utilization problem ### Round-Robin scheduling > OS會替每個process制定使用CPU time 的quantum大小,再利用硬體:Timer機制,當process 取得CPU後,Timer的初值就設為Time quantum 值,隨著process執行時間增加,Timer會遞減,直到變為0時,Timer會發出"Time-out" interrupt 去通知OS強迫 執行中的process放掉CPU,並回ready queue等待下一輪取得CPU再繼續執行。 > 優缺點: > 當small quantum: > 優:response time小,對user回應較快 > 缺:context switch次數多,overhead 大 ### Context Switch > 當CPU 要從一個process 切換到另一個process時執行時,必須要先保留舊有process的process state 和register value到該process 的 PCB,並載入另一個新的process的state和registers 從它的PCB 中 ### ISR (Interrupt Service Routine) > 當中段發生後,OS必須找到該中斷的ISR位址 (or CPU直接跳到ISR起始位置),並執行此ISR,以便執行此中斷的後續處理程序。每一個中斷都有對應的中斷處理副程式 ### Thrashing (猛移現象) > 當process 分配到的frame 數不夠時,則page fault會經常發生,就必須要執行page replacement。若OS使用的是global replacement策略,OS可能會去挑其他process的frame使用,造成其他process也page fault,彼此互搶造成幾乎所有process都page fault。 > > 此時,所有process皆在等待page的swap out/in 、I/O 運作完成,而此時ready queue為空,CPU利用率極低,此時系統會企圖提高multiprogramming degree,引入更多的process,但memory 原先就不足,引入更多process就會使系統更加惡化。此一再的調整循環發生,形成了Thrashing in virtual memory現象。 > [可能發生原因] > 1. 因程式要求的memory太多,必須使用disk作為Virtual Memory,造成CPU額外的等待時間 >解決/預防Thrashing 方法: > 1. 當Thrashing發生,降低Multiprogramming Degree,才能提高CPU utilization > > 2. 利用Page Fault Frequency Control機制來防止Thrashing ![S__3096587](https://hackmd.io/_uploads/BJtFDlUNa.jpg) ![S__3096589](https://hackmd.io/_uploads/ryxKKvlUV6.jpg) > 3. 利用Working Set Model技術,去預估process在不同時期所需的frame數,並以此分配process enough frames,以避免Thrashing > ![AABC84D0-2173-45F8-8707-BEB4E782ADF7](https://hackmd.io/_uploads/HkgdDYgIN6.jpg) ![EBF9BECA-2BCF-42C3-8BFD-F4CEF427F7A0](https://hackmd.io/_uploads/SJ1OtlLET.jpg) ### TLB(轉譯後備緩衝區,Translation-Lookside buffer) >是一種高速的Associate memory (HW 一種硬體,類似cache),用於保存分頁表中經常被用到的Page No 及Frame No,完整的Page Table仍保存於memory >[公式] > - TLB reach = 透過TLB所能存取到的memory size > =TLB entry 數目 * page size > > - ![S__3096586](https://hackmd.io/_uploads/H16ZOkLNp.jpg) ### Message Passing vs. Shared Memory | | Message Passing | Shared Memory | | ---------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | | 適用 | 少量資料交換 | 大量資料交換 | | 通訊速度 | 慢(須OS支援,執行kernel mode,會用到System call) | 快 | | Distributed System下 | 適合 | 不適合 | | 共享變數存取之互斥控制 | 不需要 | 需要(防止Race condition) | | 是OS or Programmer責任? | OS (須提供相關的system calls) | Programmer (負責防止race condition) | | 缺點 | | 有deadlock問題 | | 缺點 | | 可能發生process間的同步問題 | | 優點 | | 只有在一開始建立shared memory regions才需要system calls,之後所有的存取都視為routine memory access,不需要kernel 任何協助 | ![E01FEAFA-EEB3-4467-A157-303709A20834](https://hackmd.io/_uploads/Sy9mC18V6.jpg) ### Thread 共享&私有 | Shared | Private | | --------------------------------- | ------------------------- | | Data section (放Global variables) | Programming Counter | | Code Section | Stack (放local variables) | | Heap memory | Registers | | static local variables | | | other OS resources | | ### Spinlock (自旋鎖) = Busy Waiting > 是一種同步機制,用於Multi-Thread環境中控制對共享資源的訪問。它防止多個thread同時訪問單一資源,從而確保數據的一致性和防止race condition。process 透過程式語言的loop敘述,達到讓process等待的效果 > eg. While(條件式): 當條件式維持True,process無法離開while,形成waiting效果 > [缺點]: > 如果process因同步條件卡住的時間過久(超過兩次Context Switch)則不利,尤其在Single-CPU 環境,因為waiting process 會與其他process爭奪CPU time,將他用於無進展的loop 測試上 > ![image](https://hackmd.io/_uploads/BkVkr-IEp.png) [解決]: >>不要用 Busy-Waiting,改用Non-Busy-Waiting (Block()、Sleep()及Wakeup() system call) >> >![image](https://hackmd.io/_uploads/Hk2IrZ8Ea.png) >[優點]: >如果process卡住的時間很短(<2次Context Switch),則spinlock 十分有利 ### Paging 計算 (分頁記憶體管理) ![image](https://hackmd.io/_uploads/HyRJgdsNp.png) ## DMA (Direct Memory Access) >> 藉由一個hardware,協助Process進行大量資料搬移,進而提升處理速度及降低CPU工作量 ## SSD (Solid State Drive) >> 常用的讀寫排成演算法:FCFS(First-come,First served) ### CPU與I/O device之間運作/溝通方法: 1. Programming I/O(又稱Polling I/O、Busy Waiting I/O) > CPU在指令執行期間,會不斷的去查詢(Polling),以確認I/O運作是否完成 2. Interrupted I/O > 當I/O Complete後,I/O device controller 會發送一個"I/O Complete"interrupt通知CPU,CPU會暫停目前的process,並跳到memory中固定位址,由kernel 去查"Interrupt vector"(中斷向量表),確認是何種interrupt後,執行對應的ISR(Interrupt Service Routime,對應服務程式) 3. DMA(Direct Memory Access) I/O > DMA controller(是一個硬體),負責資料在I/O與Memory間的傳輸工作,此過程完全不需要CPU參與監督 ## Interrupt發生: 正確敘述 1. CPU的動作是先將machine code instruction處理完,再處理中斷訊號,而非立即處理中斷訊號 2. 中斷訊號可能來自硬體電路or軟體程式 | Signal | Trap | | ------------ | ---------- | | 硬體所產生的 | 軟體產生的 | | eg. I/O complete、I/O error、machine time-out by timer | arithemetic error (重大錯誤 如除與0)、User process 執行時需要OS服務會發trap通知OS (就是System call) 如I/O request | ## Page Fault > 若一個要被使用的虛擬記憶體位址未對應到一個實體記憶體位址,則會發生Page Fault ## Multithreaded Programming 好處: 1. Responsiveness (回應時間快) 2. Resource Sharing (資源共享) 3. Economy 4. Scalability 缺點:須提供互斥存取機制=> 防止Data不正確 error ## 社群雲(Community Cloud) >是由幾個組織共享的雲端基礎設施 ## Dynamic Memory Allocation: > 若系統沒有先對可用的記憶體區塊利用link list依區塊大小進行排序,則利用First-fit(最先適合)可讓系統花在記憶體配置時間較小 Q: Which of the following kinds of devices are servers connected to a network with the sole purpose of providing storage? 在一個網路中,哪種設備類型的伺服器(連接到網路的設備)是專門用來提供儲存的?其唯一的目的是提供儲存空間,用於存放資料、檔案等 A: 1. 網路儲存伺服器(Network Attached Storage, NAS): > 這是一種專用的文件儲存伺服器,連接到網絡,提供資料儲存和檔案共用服務。 NAS設備使網路中的使用者可以透過網路存取和儲存數據,常用於家庭網路、小型辦公室或企業環境。 2. 儲存區域網路(Storage Area Network, SAN): > SAN是一個專門的高速網絡,連接各種儲存設備,如磁碟陣列、磁帶庫等。它允許多個伺服器存取共享的儲存資源,通常用於大型企業環境中,提供高效能和高可靠性的儲存解決方案。 --- ![image](https://hackmd.io/_uploads/Sklz2BkrT.png) > C > 解釋: > (B) 在FCFS中,長進程可能導致後面的短進程等待很長時間,但這更多是指「不公平」而非飢餓現象。飢餓現像是指某些過程因資源競爭而不斷被延後,永遠得不到服務。 FCFS演算法不會導致飢餓現象,因為每個行程最終都會被服務 > > (C)透過將process指派到不同的queue,並根據它們的行為(如執行時間)動態調整它們的優先權,從而實現類似於最短作業優先(Shortest Job First, SJF)的效果。這個描述是正確的 > > (D) 實際上,這種演算法有兩個主要的限制: 運行時間的不確定性:在實際應用中,很難(或幾乎不可能)提前準確知道每個進程的運行時間。 飢餓問題:更長的進程可能會被不斷地推遲,特別是如果持續有短進程到來的話,這可能導致這些長進程永遠不會被執行,這就是所謂的飢餓問題。 > 因此,雖然從理論上講,非搶佔式SJF在理想條件下可以得到最小的平均等待時間,但由於現實中的這些限制,這個描述可能在某些情況下不完全準確。 ![image](https://hackmd.io/_uploads/HJYbaByS6.png) >(A) 累加器:累加器是一個暫存器,用來儲存中間的算術和邏輯運算結果。這個描述是正確的。 > >(B) 程式計數器暫存器:程式計數器指示電腦在程式序列中的位置。它通常儲存下一條要執行的指令的位址。這個描述也是正確的。 > >(C) 指令暫存器:指令暫存器儲存從記憶體中取出的指令,以便進行解碼和執行。這個描述也是正確的。 > >(D) 快取記憶體:快取記憶體確實是基於局部性原理工作的。局部性原理指的是程式傾向於存取最近已存取的資料或鄰近的資料。這個描述是正確的。 > >(E) 算術邏輯單元(ALU):ALU負責進行算術和邏輯運算,但它並沒有指導處理器的運作,也不告訴電腦的記憶體、算術/邏輯單元、輸入輸出設備如何回應程式指令。這個角色通常是由控制單元(Control Unit)負責的,而不是ALU。因此,這個描述是不正確的。 ### BGAN (Broadband Global Area Network) > 是一種衛星網路服務,主要用於提供遠端地區的互聯網和電話接入 - BGAN 與 Starlink 的比較表格: | 特點 | BGAN (寬帶全球區域網絡) | Starlink | |--------------|------------------------------------|----------| | **提供商** | Inmarsat (英國衛星通信公司) | SpaceX (美國航天製造商和太空運輸服務公司) | | **技術類型** | 地球靜止軌道衛星 | 低地球軌道(LEO)衛星 | | **覆蓋範圍** | 全球覆蓋,特別適合偏遠地區 | 初始重點是不穩定或無網絡地區,計劃全球覆蓋 | | **主要服務** | 語音通話和中等速度互聯網數據連接 | 高速互聯網連接 | | **目標用戶** | 記者、緊急服務、遠程野外作業 | 廣泛的消費者和商業市場,包括住宅和企業 | | **設備特點** | 便攜式終端,小巧易設置 | 相對較大的衛星碟,需要固定安裝和清晰的天空視野 | | **應用場景** | 專業領域如軍事、緊急救援、野外科考 | 廣泛用於住宅和商業環境,特別適合缺乏寬帶基礎設施的地區 | ### Virtual Private Network (虛擬私有網絡,VPN) > VPN透過建立加密的連線(通常被稱為「channel」),允許使用者安全地透過公共網路存取私有網路。這種方式使得遠端使用者可以安全地存取他們的公司網絡,就像他們直接連接到公司的內部網路一樣。 Q: Which of the following extends a private network across a public network and enables users to send and receive data across shared or public networks as if their computing devices were directly connected to the private network? A: VPN ### Extranet (外部網路): > 外部網路是建在企業的內部網路基礎上,透過網路技術向企業外部使用者提供存取權限的網絡 ### Intranet (內部網路): > 內部網路是一個僅限於組織內部員工存取的私人網路。它用於內部通訊和資訊共享 ### 混合雲 (Hybrid Cloud): > 混合雲是一種計算環境,它結合了公共雲和私有雲,允許在兩者之間共享數據和應用程序。當一家公司使用自己的基礎設施(私有雲)以及像AWS這樣的公共雲服務時,它符合混合雲的定義 ### 分布式雲 (Distributed Cloud): > 分布式雲涉及到將公共雲服務分布到不同的物理位置,但服務的運營、治理和發展仍由原始公共雲提供商負責。它更多關於地理分布,而不是私有和公共基礎設施的結合。 ## 處理Deadlock方法: 有兩種: 1. Deadlock Prevention: > 要讓死結發生的四個必要條件(mutual exclusion,hold and wait,no preemption,circular waiting)其一不成立,則可保證死結不會發生。而mutual exclusion是無法打破的(因為這是大多數的resource與生俱來的性質),其他條件皆可破除。如將no preemption改成preemption即可破除 2. Deadlock Detection & Recovery > 提供死結偵測機制,透過定期或當系統存取效能偏低時,啟動死結偵測演算法。若目前系統有死結,可採取recovery去消除死結,如kill all process in deadlock cycle ### CAP 理論 1. Consistency 一致性 : 保證在各個有儲存資料的分區都一定拿得到最新版本的資料。 2. Availability 可用性:當存取資料庫時一定可以拿到資料,不會出錯(不會出現拿不到資料的狀況,但拿到的資料不保證是最新版本。) 3. Partitioning Tolerance 分區容忍:文章前段有提及,即使任一節點發生錯誤,整個系統還是能正常運作。 ![image](https://hackmd.io/_uploads/BJa0k9x8p.png) > 三者無法同時達成!! #### 幾種 CAP 的組合 - AP Database — 犧牲一致性的分散式資料庫 > 在分區容忍的前提下(因為都已經採用分散式架構了),犧牲一致性來提高可用性(盡可能每次都得到回應),不過雖然犧牲了一致性,卻仍可以達到最終一致性(Eventual Consistency,例如總統大選開票時每家新聞台的即時票數都不一致,但在選舉結束後的票數還是會達成一致。),適合在需要快速讀寫,但資料對於一致性的需求較低的場景,例如臉書或各大媒體平台的按讚系統。 >>例如:Amazon DynamoDB - CP Database — 犧牲可用性的分散式資料庫 > 在分區容忍的前提下,依然可以得到最新版本的資料,常用於貼文系統、訊息系統等不能犧牲一致性的系統。 >>例如:Google BigTable、MongoDB、分散式的 RDBMS - CA Database — 犧牲分區容忍性的資料庫 >這樣就違反了分散式架構的初衷,因此基本上不會存在於分散式系統中。 >> 例如:單機或是經過 Sharding 的資料庫(不能承受單機損壞)。 ### UML(Unified Modeling Language,統一建模語言) > 是一種直觀地表示複雜軟體系統的架構、設計和實現的方法。編寫代碼時,應用程式中有數千行代碼,很難跟蹤軟體系統中的關係和層次結構。UML 圖將該軟體系統劃分為元件和子元件。 ![S__3399702](https://hackmd.io/_uploads/ry2kJAQK6.jpg) ![S__3399701](https://hackmd.io/_uploads/By8o06XY6.jpg) #### What are the types of UML diagrams? > UML標準確定了13種類型的圖,這些圖分為兩組,定義如下。 ### Structural UML diagrams (結構UML圖) > 結構UML圖顯示了系統的結構,包括系統中的類別、物件、封裝、元件等以及這些元素之間的關係。 1. Class diagram 類別圖 2. Component diagram 元件圖 3. Deployment diagram 部署圖 4. Composite structure diagram 5. Object diagram 物件圖 6. Package diagram 封裝圖 7. Profile diagram 剖面圖 ### Behavioral UML diagrams (行為UML圖) >這些 UML 圖可視化了系統的行為方式以及與自身以及與使用者、其他系統和其他實體的互動方式 1. Interaction overview diagram (交互概述圖) 2. Communication diagram 通訊圖 3. State diagram 狀態圖 4. Use case diagram 用例圖 5. Sequence diagram 時序圖 6. Activity diagram 活動圖 https://www.lucidchart.com/blog/types-of-UML-diagrams ### Spooling > In computing, spooling is a specialized form of multi-programming for the purpose of copying data between different devices. In contemporary systems,it is usually used for mediating between a computer application and a slow peripheral, such as a printer. Spooling allows programs to "hand off" work to be done by the peripheral and then proceed to other tasks, or to not begin until input has been transcribed. A dedicated program, the spooler, maintains an orderly sequence of jobs for the peripheral and feeds it data at its own rate. Conversely, for slow input peripherals, such as a card reader, a spooler can maintain a sequence of computational jobs waiting for data, starting each job when all of the relevant input is available; see batch processing. The spool itself refers to the sequence of jobs, or the storage area where they are held. In many cases, the spooler is able to drive devices at their full rated speed with minimal impact on other processing. > > 在計算領域中,Spooling 是一種特殊的多程式設計技術,用於在不同裝置間複製數據。在當今的系統中,它通常用於介於計算機應用程式和慢速周邊設備之間,如印表機。Spooling 允許程式將工作“交給”慢速周邊設備去完成,然後繼續執行其他任務,或者等到輸入已經被轉錄之後再開始執行。一個專門的程式,即Spooler,為慢速周邊設備維護一個有序的作業隊列,並以該設備自身的速率來餵食數據。相對地,對於輸入速度慢的周邊設備,如卡片讀取器,Spooler 可以維護一系列等待數據的計算作業,當所有相關的輸入都可用時再開始每一個作業;這被稱為批次處理。Spool 本身指的是作業隊列,或者存儲它們的存儲區域。在許多情況下,Spooler 能夠在對其他處理影響最小的情況下,以設備的全額定速度運行。 --- ## 資料庫-相依性 ![S__3416083](https://hackmd.io/_uploads/ryIsRHBKp.jpg) ![S__3416076](https://hackmd.io/_uploads/HJM1RrBYp.jpg) ![S__3416078](https://hackmd.io/_uploads/BJfk0HHt6.jpg) > 關聯表R中的X若為Primary key(or Candidate key),則R中的所有其他Attribute(column)必功能相依於X >> 即Primary key(or Candidate key)可以決定所有其他欄位 ![S__3416079](https://hackmd.io/_uploads/ryXkArrKT.jpg) ![S__3416080](https://hackmd.io/_uploads/rkGkCSHFp.jpg) ![S__3416081](https://hackmd.io/_uploads/SyGyAHHFT.jpg) ![S__3416082](https://hackmd.io/_uploads/HyfyRrHYT.jpg) ![image](https://hackmd.io/_uploads/H1EEyIrKT.png) #### 完全功能相依 ![image](https://hackmd.io/_uploads/By4HJLrYa.png) #### 部分功能相依 ![image](https://hackmd.io/_uploads/BJgUJ8BYp.png) #### 遞移相依 ![image](https://hackmd.io/_uploads/BJ98JUHYp.png) --- ### 功能相依性(Functional Dependency,FD)的推導法則 ![S__3416070](https://hackmd.io/_uploads/rJIWmHrYT.jpg) ![S__3416072](https://hackmd.io/_uploads/S1IbmHHKp.jpg) ![S__3416073](https://hackmd.io/_uploads/SJ8-7rBKT.jpg) ![S__3416087](https://hackmd.io/_uploads/S1Ys_xLYT.jpg) ## 資料庫-正規化(Normalization) > 正規化主要是對表格作分割動作,將Attribute之間的關係,分散到不同表格 > 目的: > 1. 避免資料重複儲存情況,因為同一份表格內的所有Attribute之間,有許多不同類型的功能相依性(Functional Dependence,FD)存在,所以會做切割並分散到不同表格 > 2. 避免資料在Insert、Delete、Update動作時產生異常(Anomalies)情形 ![image](https://hackmd.io/_uploads/SJZhssUPp.png) ![image](https://hackmd.io/_uploads/BkOuojLw6.png) ![image](https://hackmd.io/_uploads/S1z9ji8P6.png) ![image](https://hackmd.io/_uploads/SJKeniLPp.png) | 正規形式 | 專有名詞解釋 | 白話解釋 | 功用 | 例子 | |-----------------|-------------|---------|------|------| | 第一正規形式 (1NF) | 表中的每個欄位值都必須是Atomic的,不能再分割成更小的單位。不允許出現重複組合的列,也就是說,每一個實體都應該是唯一的。 | 想象你在用Excel表格記錄東西,每一個格子裡面只能寫一樣東西,不能把多樣東西塞在一起。 | 確保數據庫結構的基礎,使得每個欄位的數據都是單一的值,方便存取和管理數據。 | “聯絡方式”欄位裡不能同時包含“電話”和“郵件”,應該拆分成兩個欄位。 | | 第二正規形式 (2NF) | 必須先滿足第一正規形式。表中的每個非主鍵屬性都必須完全依賴於全部的主鍵,而非主鍵的一部分(對於複合主鍵而言)。 | 如果表格用多個欄位來確定一行(比如「學號+課程名稱」),那麼其他的信息(比如學生姓名)應該只和「學號」有關,而不是和「學號+課程名稱」兩者都有關。 | 進一步減少數據冗餘,保證數據完整性,確保每一筆數據都是依賴於整個主鍵而非其部分。 | 學生表中,學生的“姓名”不應該依賴於“學號+課程名稱”這個複合主鍵中的“課程名稱”。 | | 第三正規形式 (3NF) | 必須先滿足第二正規形式。表中的每個非主鍵屬性都不能依賴於其他非主鍵屬性,也就是說,非主鍵屬性之間不能有依賴關係。 | 所有的詳細信息(比如學生的地址)都應該直接和主鍵(學生ID)掛鉤,而不是依賴於其他的信息(比如學生所在的學院名稱)。 | 避免非主鍵屬性依賴於其他非主鍵屬性,減少冗餘,並使得數據庫更新更加高效,減少更新異常。 | 如果“客戶名稱”依賴於“客戶ID”,那麼在訂單表中,“客戶名稱”應該直接和“客戶ID”相關,而不是通過“訂單ID”間接關聯。 | #### 1NF ![S__3416088](https://hackmd.io/_uploads/Sy0BjeLYp.jpg) ![S__3416090](https://hackmd.io/_uploads/SJ_Log8Fa.jpg) ![image](https://hackmd.io/_uploads/BkIuixUt6.png) ![image](https://hackmd.io/_uploads/Hy79oeUta.png) #### 2NF ![image](https://hackmd.io/_uploads/By8ioxIKp.png) ![S__3416091](https://hackmd.io/_uploads/BJXAil8Fp.jpg) ![image](https://hackmd.io/_uploads/SJ9g2xIFa.png) ![image](https://hackmd.io/_uploads/B1Kz2x8tp.png) #### 3NF ![S__3416092](https://hackmd.io/_uploads/SydXnlItp.jpg) ![S__3416093](https://hackmd.io/_uploads/SyQ42gUKa.jpg) ![image](https://hackmd.io/_uploads/Hk7UheLKa.png) ## 交易管理 ### 交易(Transaction) ![image](https://hackmd.io/_uploads/rJ36asIP6.png) ![image](https://hackmd.io/_uploads/rkWkCo8wT.png) #### 交易管理目標 ![image](https://hackmd.io/_uploads/B1XZ0sUPT.png) ### 交易管理四大特性:ACID (Atomicity,Consistency,Isolation,Durability) ![image](https://hackmd.io/_uploads/B1eBAiIDp.png) ![image](https://hackmd.io/_uploads/S1oBAjUDa.png) ![image](https://hackmd.io/_uploads/ByoLRjIwT.png) ### 交易狀態 ![image](https://hackmd.io/_uploads/SJKnCjLDp.png) ![image](https://hackmd.io/_uploads/SJQy128vp.png) #### DDL、DCL指令對交易的影響 ![image](https://hackmd.io/_uploads/S1zMyhUPp.png) 1. 資料定義語言:DDL(Data Definition Language) > 用來定義資料庫、資料表、檢視表、索引、預存程序、觸發程序、函數等資料庫物件。可以用來建立、更新、刪除 table,schema,domain,index,view >常見的指令 > CREATE 建立資料庫的物件 > ALTER 變更資料庫的物件的結構 > DROP 刪除資料庫的物件 > TRUNCATE 清除資料庫表格內的資料 2. 資料操作語言:DML(Data Manipulation Language) > 用來處理資料表裡的資料。 > 常見的指令 > UPDATE 更改資料表中的資料 > DELETE 刪除資料表中的資料 3. 資料控制語言:DCL(Data Control Language) > 用來控制資料表、檢視表之存取權限,提供資料庫的安全性。 > 常見的指令有: > GRANT 賦予使用者使用權限 > REVOKE 取消使用者的使用權限 > COMMIT 完成交易作業 > ROLLBACK 交易作業異常,將已變動的資料回復到交易前的狀態 4. 資料查詢語言:DQL(Data Query Language) > 負責進行資料查詢,不會對資料本身進行修改的語句用來查詢資料表裡的資料。 > 指令只有一個:SELECT 選取資料庫中的資料 > 輔助指令:SELECT,FROM,WHERE,GROUP BY,ORDER BY ### 系統日誌(System log、System journal) ![image](https://hackmd.io/_uploads/S13zx38P6.png) ![image](https://hackmd.io/_uploads/B1VEehUDp.png) > 若在交易執行過程中,遇到系統故障情況,我們可以檢查system log,可使用兩種回復技術: Redo、Undo ![image](https://hackmd.io/_uploads/Sydagh8PT.png) ![image](https://hackmd.io/_uploads/BJIgZhUwa.png) ### Commit Point (確認點) ![image](https://hackmd.io/_uploads/SyYQZnLw6.png) ![image](https://hackmd.io/_uploads/SJGw-3Uwp.png) ### 系統日誌強迫寫入 (System Log Force - writing) > 當交易尚未到達Commit Point前,因某些原因而將位於主記憶體中的日誌寫入硬碟,即稱為系統日誌強迫寫入。 > > 正常而言,在主記憶體中會保留一個區塊(Block),做為交易 進行時記載資料異動操作的日誌記錄,並於交易Committed (交易到達確認點)時,將其寫入到硬碟內的系統日誌。 可能原因: > 1. Memory 中存放的block滿了 > 2. 到達檢查點(Check Point) > > 當系統故障時,只需考慮那些被寫入硬碟的系統日誌記錄 ![image](https://hackmd.io/_uploads/S1Xuz2IvT.png) ### Check Point (檢查點) > 1. 由DBMS定期(週期性)發動的system log force writing,並將一個Check Poing強迫寫入到system log中 > 2. 同時,也會把system log中,於Check Point前所有已確認(Commit)的交易所產生的動作(eg.write)結果,寫入真正資料庫(eg. Disk中的DB)中 ![image](https://hackmd.io/_uploads/rywS72Uva.png) [Check Point運作方式]: ![image](https://hackmd.io/_uploads/Sk3Km3Lwp.png) ![image](https://hackmd.io/_uploads/HynsQn8wT.png) ### ANSI/SPARC Architecture >Three-Schema ![image](https://hackmd.io/_uploads/By94RewDT.png) ![S__3325959](https://hackmd.io/_uploads/HJqT1-Dwa.jpg) ![image](https://hackmd.io/_uploads/S1BikWPP6.png) ![image](https://hackmd.io/_uploads/HJn5yZvD6.png) ![image](https://hackmd.io/_uploads/rJRJgZDPp.png) ![image](https://hackmd.io/_uploads/S17eeWDPa.png) ![image](https://hackmd.io/_uploads/HkwleZPPp.png) ### 快照(Snapshot)。 > 提供了一個來源資料庫的唯讀、靜態視圖,這通常用於保護資料免受錯誤、卸載報告等。快照可以在特定時間點捕獲資料庫的狀態,並可用來回溯到那個時間點的資料,這在資料庫的災難恢復和資料分析中非常有用。 ![image](https://hackmd.io/_uploads/HkDewMS56.png =70%x) ### 模型評估指標 #### Classification、Regression 的評估指標(Evaluation indicators): | 評估類型 | 指標 | 描述 | | --------------------- | ------------------ | ------------------------------------------ | | 分類 (Classification) | 準確率 (Accuracy) | 正確預測的比例。 | | | 精確率 (Precision) | 正確預測為正的比例。 | | | 召回率 (Recall) | 真正類別為正的樣本中,被正確預測的比例。 | | | F1 分數 (F1 Score) | 精確率和召回率的調和平均值。 | | | AUC-ROC | 曲線下面積,評估分類器區分正負類別的能力。 | | | Confusion Matrix(混淆矩陣) | 利用混淆矩陣,可以計算各種性能指標,如準確率(Accuracy)、精確率(Precision)、召回率(Recall)和F1分數等。這些指標可以幫助評估和改善分類模型的性能。混淆矩陣尤其在處理不平衡數據集時非常有用,因為它能顯示出分類器在各個類別上的表現。 | | 回歸 (Regression) | 均方誤差 (MSE) | 預測值與實際值差異的平方的平均值。 | | | 均方根誤差 (RMSE) | 均方誤差的平方根。 | | | 平均絕對誤差 (MAE) | 預測值與實際值差異的絕對值的平均值。 | | | R平方 (R²) | 模型可解釋變異的比例,越接近1越好。 | >> 要記住和理解這些分類(Classification)和回歸(Regression)評估指標,可以通過以下方式來幫助記憶和深入理解: ### 分類評估指標 1. **準確率 (Accuracy)**: - **概念**: 正確預測的總數佔所有預測的比例。 - **記憶法**: 「準確」直觀地反映了「多少是對的」。 - **使用場景**: 當各類別平衡時使用較為合適。 2. **精確率 (Precision)**: - **概念**: 正確預測為正(Positive)的比例。 - **記憶法**: 「精確」意味著「我說的正的,確實是正的」。 - **使用場景**: 當假陽性(False Positives)的代價很高時重要。 3. **召回率 (Recall)**: - **概念**: 在所有實際為正的樣本中,被正確預測為正的比例。 - **記憶法**: 「召回」意味著「我能找回多少真正的正樣本」。 - **使用場景**: 當錯過真陽性(True Positives)的代價很高時重要。 4. **F1 分數 (F1 Score)**: - **概念**: 精確率和召回率的調和平均。 - **記憶法**: 「F1」代表兩者(精確率和召回率)的平衡。 - **使用場景**: 當精確率和召回率同等重要時使用。 5. **AUC-ROC**: - **概念**: 衡量分類器區分正負類別的能力。 - **記憶法**: 「AUC」是面積概念,較大的面積意味著更好的區分能力。 - **使用場景**: 當需要評估在不同閾值下的分類性能時。 ### 回歸評估指標 > 幾乎都跟甚麼error的有關 1. **均方誤差 (MSE)**: - **概念**: 預測值與實際值之差的平方的平均。 - **記憶法**: 「均方」就是「平均的平方差」。 - **使用場景**: 當需要重視大誤差時。 2. **均方根誤差 (RMSE)**: - **概念**: MSE的平方根。 - **記憶法**: 「均方根」就是MSE的「根號」,更接近原始數據的尺度。 - **使用場景**: 當需要一個與原始數據單位一致的誤差指標時。 3. **平均絕對誤差 (MAE)**: - **概念**: 預測值與實際值之差的絕對值的平均。 - **記憶法**: 「平均絕對」意味著「平均的絕對差距」。 - **使用場景**: 當各個誤差等同重要時。 4. **R平方 (R²)**: - **概念**: 表示模型可解釋的變異比例。 - **記憶法**: 「R平方」像是「相關性的度量」。 - **使用場景**: 當需要評估模型對數據變化的解釋能力時。 ### Confusion Matrix ![S__3325966](https://hackmd.io/_uploads/rkjeWgdva.jpg) ![S__3325968](https://hackmd.io/_uploads/SJilZxuPa.jpg) ### 串流技術(Streaming Technology) > 是一種在不完全下載檔案的情況下,即時傳送和接收數據的技術。這種技術廣泛應用於視頻和音頻的傳輸,例如在線音樂服務和視頻播放平台。以下是串流技術的一些核心概念和特點: ### 基本原理 1. **即時數據傳輸**:串流允許用戶在數據(如視頻或音頻檔案)被完全傳輸到用戶設備之前就開始播放。數據以連續的數據流的形式傳送。 2. **緩衝區(Buffering)**:串流時,數據先被暫時存儲在客戶端的緩衝區中。當緩衝區中有足夠的數據時,播放就會開始。這有助於平滑播放,減少因網絡波動導致的中斷。 3. **分段傳輸**:串流通常將大型媒體檔案分割成小片段進行傳輸。這樣可以根據網絡條件動態調整質量,例如自動選擇合適的分辨率。 ### 技術特點 1. **網絡依賴性**:串流質量高度依賴於網絡連接的穩定性和帶寬。不穩定或速度慢的連接可能導致緩衝或降低播放質量。 2. **適應性串流**:許多串流服務採用適應性串流技術(如HLS、DASH),能夠根據用戶的網絡狀況自動調整視頻質量。 3. **即時性與互動性**:串流技術不僅用於傳輸預先錄製的內容,也廣泛用於直播。此外,它支持一定程度的用戶互動,如即時評論或選擇視角。 ### 應用場景 1. **媒體消費**:串流是在線視頻(如Netflix、YouTube)和音樂(如Spotify、Apple Music)服務的基礎。 2. **直播傳輸**:串流技術使得實時直播(如Twitch直播、新聞直播)成為可能。 3. **遠程教育和會議**:串流技術同樣被應用於遠程教育、網絡研討會和視頻會議。 ### Horizontal Scaling vs. Vertical Scaling | 特點 | 水平擴展(Horizontal Scaling)又稱Scale Out | 垂直擴展(Vertical Scaling) 又稱Scale Up| | --- | --- | --- | | **定義** | 增加更多的節點(服務器、實例)以提高性能和容量 | 增加單一節點的資源(如CPU、RAM)以提高性能和容量 | | **擴展性** | 高,可以通過添加更多硬件輕鬆擴展 | 有限,受單一節點硬件上限的限制 | | **成本** | 初期投資較低,但運營成本隨節點增加而增加 | 初期投資較高,尤其是對於高端硬件 | | **容錯性** | 高,單個節點故障不太可能影響整個系統 | 低,單點故障可能導致整個系統不可用 | | **管理複雜度** | 高,需要負載均衡和分佈式系統管理 | 低,管理相對簡單 | | **彈性** | 高,可以根據需要動態添加或移除資源 | 低,升級通常需要停機和物理更換部件 | | **適用性** | 適用於需要高可擴展性和高可用性的大型應用 | 適合需求穩定、不頻繁變動的小型到中型應用 | ### H.264 > 進階視訊編碼(AVC),是當今使用的最常見的視訊壓縮標準。AVC/H.264 能夠以比舊壓縮標準更低的位元速率編碼高品質視訊(「位元速率」是視訊每秒必須處理的資訊單位數)。 > > 藍光和各種串流服務,包括點播和直播電視,都使用 H.264。儘管它的使用有時需要向擁有專利的組織支付版稅,但超過 90% 的視訊行業使用 H.264。 ### SQL、NoSQL [NCCU 109] | Aspect | SQL Databases | NoSQL Databases | |--------|---------------|-----------------| | **Definition** | SQL databases, or relational databases, are based on a structured schema, use SQL (Structured Query Language) for defining and manipulating data. | NoSQL databases, or non-relational databases, have dynamic schemas for unstructured data, and can store data in many ways, including document-oriented, key-value pairs, wide-column stores, or graphs. | | **Scalability** | Typically, SQL databases are scaled vertically, meaning you scale by adding more power (CPU, RAM, SSD) to an existing machine. | NoSQL databases are designed to scale out horizontally, meaning you scale by adding more servers into your pool of resources. | | **Structure** |SQL databases use a schema that defines tables, columns, and the relationship between tables. They are suited to handle complex queries and join operations. | NoSQL databases have a flexible schema. Document databases use JSON documents, key-value stores use a simple key-value pair, wide-column stores contain columns stored together, and graph databases store entities and relationships. | | **Best Used For** | SQL is best for complex queries and where data integrity is crucial. Ideal for applications where the schema is unlikely to change frequently. | NoSQL is best for large sets of distributed data and is ideal for rapid development and for applications where the schema can evolve over time. | | Aspect | SQL Databases | NoSQL Databases | | ------ | ------------- | --------------- | | **Type of Data Model** | Relational, table-based | Non-relational, can be document-based, key-value, graph, or wide-column stores | | **Schema** | Fixed, rigid schema | Flexible, schema-less | | **Scalability** | Vertically scalable (increase server capacity) | Horizontally scalable (add more servers) | | **Complex Queries** | Excellent for complex queries (JOINs, etc.) due to powerful query language (SQL) | Not as strong as SQL for complex queries; suited for specific types of queries depending on the NoSQL database type | | **Transactions** | ACID compliant (Atomicity, Consistency, Isolation, Durability) which is crucial for transactional data | Varies; some offer ACID compliance, but many prioritize performance and scalability over strict transactional consistency | | **Use Cases** | Ideal for applications that require complex transactions and have a clear schema definition, like financial systems | Suited for large data sets with no clear schema, rapid development, and for applications that require flexibility and scalability, like big data applications and content management systems | ### Unix指令 | fork() | exec() | | -------- | -------- | | 是一個system call,用於創造child process。若fork失敗,會回傳負值給爸爸,若成功,回傳0給此child process和傳一個正值給爸爸(此值即代表child PID(process identifier)) | 是一個system call,用於將程式碼載入到記憶體時執行 | ### CPU bound vs. I/O bound | CPU bound | I/O bound | | -------- | -------- | | process 花更多時間在CPU burst time上,而I/O的需求很少,其效能大多受限於CPU速度。eg. 氣象預估、基因序列比對 | process 花更多時間在I/O operations上,對於CPU time的需求很少,其效能大多受限於I/O速度。eg.DBMS | #### Q: SJF algo有辦法實際執行在OS上嗎? > 無法,雖然排班效益最佳(Average Waiting Time,Turnaround Time 最小),但因為他必須知道未來的CPU 去執行每個 process的burst time(執行時間)。無法精準去評估,所以此方法不可行。 ![image](https://hackmd.io/_uploads/SyX_gXWda.png) > True ![image](https://hackmd.io/_uploads/HkHtl7Z_T.png) > False, 在Multiprocessor system下,即便使用多個User-threads 效能也不會比Single Processor好,因為無法將一個processor內的不同User-threads 平行在不同CPU上。 > 相反,若是在Kernel mode的Threads,則會比較好。 ![image](https://hackmd.io/_uploads/HJmDQXW_6.png) ![image](https://hackmd.io/_uploads/H1OzBSZO6.png) >(a). 1. 打破已存在死結: > 利用Deadlock Recovery method:如砍掉死結中全部的process即可 > 2. Deadlock prevent:打破四個必要條件其中一個即可。如改成可preemption > (b). 如十字路口塞車,因而產生traffic deadlock。Process:汽車、Resource:路口行駛權。即四個必要條件:Mutual exclusion、Hold and Wait、Circular Waiting、No Preemption皆滿足 Q:下列何種技術不是利用80/20則來提升計算機系統的效能? (A) 硬碟快取 (B) 管線處理 (C) 虛擬記憶體 (D) 網頁代理伺服器 > Ans: (B),管線處理是透過將指令的執行過程分割成多個階段,並行處理以提高效率,這與80/20規則關聯不大 ### Relation Database 關聯式資料庫 ![image](https://hackmd.io/_uploads/B1YPGW-dp.png) ![image](https://hackmd.io/_uploads/S1o9fZZda.png) ![image](https://hackmd.io/_uploads/SkqoG-bup.png) ![S__3342420](https://hackmd.io/_uploads/Bkd-mW-_T.jpg) ![image](https://hackmd.io/_uploads/HJm7XW-OT.png) #### 關聯的特性(Characteristics of Relations) > 1. Tuple(每個row)之間沒有次序性(order) > 2. Attribute(每個column)之間沒有次序性(order) > 3. 所有Attribute值皆為Atomic Value(基元值:不可再分解or分解後無意義的值。又稱Simple Value(簡單值)、Scalar Value(純量值)) > 4. 一個relations中,不含重複的tuple(row) ![image](https://hackmd.io/_uploads/Bk_d4WZua.png) #### 鍵值 (Key Value)種類 ![image](https://hackmd.io/_uploads/BkDjEbbdp.png =40%x) #### 1. Super key(超鍵) > 由關聯中的一個或多個Attribute所構成,具有唯一識別性的屬性集合 > - 唯一識別性: 靠它就能與其他區分,可以靠Super key去把Relations中想要的該筆資料抓出來,其他不相關的不會取出。 > >> eg. 我只想看表格中的學號欄位,那我抓出來只會看到"學號",其餘欄位:如學生姓名、生日都不會看到 > - 最小的Super key: 可以是單一屬性 eg. 只有學號or 身分證字號 > - 最大的Super key: 可以是所有屬性集合 eg.也可以是整張完整表格 > ![image](https://hackmd.io/_uploads/r1-wwZbOT.png) > ![S__3342422](https://hackmd.io/_uploads/rkiqw--Op.jpg) #### 2. Candidate key (候選鍵) > 具有所少Attribute集合的Super key > 即能唯一識別表格中不同Tuple資料的最少屬性集合 > eg. 學號、身分證字號 ![image](https://hackmd.io/_uploads/rJ4juW-Oa.png) ![S__3342423](https://hackmd.io/_uploads/SJcUF--OT.jpg) > 此Table的Primary key有一個,但是由三個columns:{姓名,生日,戶籍地}所構成 #### 3. Primary key (主鍵) ![S__3342424](https://hackmd.io/_uploads/Sk6-jWb_p.jpg) ![S__3342426](https://hackmd.io/_uploads/rypWsbZda.jpg) ![S__3342430](https://hackmd.io/_uploads/ry6Wj-WOT.jpg) #### 4. Alternative key(替代鍵) ![S__3342427](https://hackmd.io/_uploads/Hyp-oZWuT.jpg) #### 5. Foreign key (外來鍵) ![S__3342428](https://hackmd.io/_uploads/rkp-oWWua.jpg) ![S__3342429](https://hackmd.io/_uploads/HkaWoWbup.jpg) ![messageImage_1705832452239](https://hackmd.io/_uploads/S1aG3dcF6.jpg) [政大112] >>> 選擇候選鍵時,我們需要考慮到能夠完全覆蓋所有屬性的最小屬性集合。 > (1): a → b, a → c 在這個函數依賴中: a → b 表示屬性 a 的值唯一地決定了屬性 b 的值。 a → c 表示屬性 a 的值唯一地決定了屬性 c 的值。 由於 a 能夠確定其他所有屬性,因此 a 是這個關係的一個候選鍵。 >> 候選鍵: {a} -------------------------------------------------------- > (2): c → a 在這個函數依賴中:c → a 表示屬性 c 的值唯一地決定了屬性 a 的值。然而,這裡沒有提供足夠的信息來確定屬性 b 的值。因此,c 單獨不能作為候選鍵。我們需要找出能夠一起確定所有三個屬性(a, b, c)的最小屬性組合。在這種情況下,這個組合是 {b, c}。 > > c → a,這意味著 c 的值能夠確定 a 的值。然而,這個函數依賴並沒有涉及 b 屬性。在決定一個關係的候選鍵時,我們需要確保所選擇的屬性集合能夠唯一地確定關係中的所有其他屬性。換句話說,候選鍵必須能夠對關係中的每一行進行唯一的標識。 > > 考慮到這一點,雖然 c → a 能夠讓我們從 c 的值推導出 a 的值,但我們仍然沒有信息可以從 c 或 a 推導出 b 的值。 因此,c 單獨不足以作為候選鍵,因為它不能確定所有三個屬性(a, b, c)。 > > 為了確定所有屬性,我們需要一個屬性集合,這個集合除了包含 c 之外,還要包括 b(因為 b 沒有被其他任何屬性所確定)。 因此,在小題 (2) 中,{b, c} 成為了一個可以確定整個關係的候選鍵。 >> 候選鍵: {b, c} -------------------------------------------------------- > 小題 (3): bca → a, a → b 在這個函數依賴中: bca → a 是多餘的,因為 a 已經包含在左側,所以它不會提供新的信息。 > > a → b 表示屬性 a 的值唯一地決定了屬性 b 的值。 但是,這裡沒有提供足夠的信息來確定屬性 c 的值。因此,a 單獨不能作為候選鍵。同樣地,我們需要找出能夠一起確定所有三個屬性(a, b, c)的最小屬性組合。在這種情況下,這個組合是 {a, c}。 > > > 候選鍵: {a, c} --- # NoSQL > refer to any non-relational database,NoSQL databases allow developers to store huge amounts of unstructured data, giving them a lot of flexibility. - 因應當前需求: 1. 數據增長快速 2. 事前定義資料型態困難 3. 靈活度要高 - 現有的NoSQL皆具備: 1. Flexible schemas 靈活的架構 2. Horizontal scaling 水平縮放 3. Fast queries due to the data model 由於數據模型而實現的快速查詢 4. Ease of use for developers 開發人員的易用性 #### Types of NoSQL databases 1. Document databases : > store data in documents similar to JSON (JavaScript Object Notation) objects. Each document contains pairs of fields and values. The values can typically be a variety of types including things like strings, numbers, booleans, arrays, or objects. 2. Key-value > databases are a simpler type of database where each item contains keys and values. > > use an associative array, also known as a dictionary or map, as their data model. 3. Wide-column > stores store data in tables, rows, and dynamic columns. eg. Matrix 4. Graph databases > store data in nodes and edges. Nodes typically store information about people, places, and things, while edges store information about the relationships between the nodes. --- - CAP定理是NoSQL在用的,RDBMS要用ACID來看 > RDBMS(像是MySQL、PostgreSQL),必須要同時滿足ACID四種特性來提供一種稱為交易(transaction)的操作。所以RDBMS和ACID常一起出現。NoSQL則大多不保證同時滿足這四種特性,也不支援傳統上的交易操作,來換取像是擴展性、可用性等等。 > 由於NoSQL大多在最初就是用分散式的架構去設計的,而CAP定理就是在探討分散式系統的抉擇,這也是為什麼CAP定理常和NoSQL一起出現。 > > 簡而言之,CAP定理和ACID的關係就是沒什麼關係! ### 分散式系統架構的Database > 分散式系統之挑戰:網路問題導致的資料分區(Partition) > 可能有天資料庫之間的網路連線出了問題。導致資料在傳輸過程中丟失或是網路斷線等等。總之彼此沒有辦法正常同步資料 ![image](https://hackmd.io/_uploads/HJiPHNAYp.png) > 當兩個地區的資料庫內容不再一致,這就是網路因素導致的資料分區(Data Partition)問題。CAP定理(CAP theorem)就是在探討這個議題 ### CAP(Consistency、Availability、Partition tolerance) > 是下列三個單字的首字縮寫: 1. 一致性(Consistency):使用者讀到的”總是”最新的資料 2. 可用性(Availability):使用者的請求”總是”可以獲得回應,也就是可以正常讀寫(回傳錯誤訊息並不算滿足可用性) 3. 分區容錯性(Partition tolerance):就算網路出現問題導致資料分區(失去任意節點間通信的情況),整個系統仍然要可以繼續運作 > CAP定理告訴我們,在分散式系統中,這三個特性只能同時滿足兩個。也就是說,我們必須要做出取捨(trade-off)。 一定要考慮網路問題(所以P:分區容錯性(Partition tolerance)一定要有、不能捨棄 #### CP vs. AP > 這個前提下,我們接著在C(一致性)和A(可用性)之間做抉擇。 1. #### 滿足CP(一致性、分區容錯性) > 使用者連線到其中一個資料庫,想要讀取或寫入資料。若此時發現無法與另一個資料庫同步,使用者的請求就會失敗! - 沒有任何一個資料庫會片面地改變資料的狀態 - 保證了資料的C(一致性) - 但犧牲了使用者總是能得到回應的A(可用性)。 ![image](https://hackmd.io/_uploads/H1zSP40ta.png) 2. #### 滿足AP(可用性、分區容錯性) > 使用者連線到其中一個資料庫想要更新資料,此時該資料庫無法同步另一個資料庫。但它仍然更新了這筆資料並告知使用者更新成功。 - 若很不幸地,下次使用者連線到另一個資料庫想要拿資料,就會拿到舊的資料! - 保證了系統的A(可用性),讓使用者總是能得到回應 - 但犧牲了資料的C(一致性)。 ![image](https://hackmd.io/_uploads/r15TDNAYa.png) ## 權衡 鬆綁(C、A)兩者 ### 強一致性(strong consistency) > 適合處理像是金錢、付款這種對資料同步高度要求的任務。但相對的,擴展性、可用性就會比較侷限(想像一下,若資料庫的數量持續地增加,同步所有資料的成本也會不斷上升)。 ### 最終一致性(eventually consistency) > 與強一致性相對。當使用者更新某筆資料時,也許因為網路暫時中斷或延遲,沒有即時同步到另一個資料庫。我們還是讓其他使用者可以繼續存取資料(不是最新的也沒關係),但最終,我們保證這筆資料一定會同步(最後的結果還是對的)。 > - 最終一致性是一種很務實的做法,適合資料更新可以有一點延遲的場合,例如文章的新留言、影片總共觀看人數等等。 --- ### DataBase System 開發流程 ![S__3342431](https://hackmd.io/_uploads/BkW-abZ_p.jpg) ### E-R Model ![S__3342434](https://hackmd.io/_uploads/SkBu6bZd6.jpg) - Entity(個體): > 真實世界獨立存在的事物(像是在定義column名稱) eg. 學生、課程 > - 以長方形表示 > - Entity中的每筆record皆稱為Instance(實例) > eg. 學生此欄位下,有個人叫小明,即為"學生"的一個instance ![Uploading file..._h98e71w4p]() - Attributes > 描述Entity的性質(property) > - 以橢圓表示 ![image](https://hackmd.io/_uploads/r1vakz-da.png) - Relationship > 指不同Entity間的一種結合(Association)或關係集合(Relationship Set),表達了不同Entity間所隱含的關聯性 ![S__3342435](https://hackmd.io/_uploads/SkLAJzb_T.jpg) ![S__3342433](https://hackmd.io/_uploads/r1ll-T--OT.jpg) ### SQL語法 ![S__3358749](https://hackmd.io/_uploads/BJ53xXFu6.jpg) ![S__3358751](https://hackmd.io/_uploads/Hy92lmKua.jpg) ![S__3358752](https://hackmd.io/_uploads/Bk52lXKdp.jpg) ![S__3358753](https://hackmd.io/_uploads/Sk5hgQFOa.jpg) #### 練習: [NCCU 112] ![image](https://hackmd.io/_uploads/BJbUJNtO6.png) ``` CREATE TABLE employee ( id INT PRIMARY KEY, last_name VARCHAR(100), MBTI VARCHAR(4), salary INT, supervisor_id INT ); ``` ``` INSERT INTO employee (id, last_name, MBTI, salary, supervisor_id) VALUES (3, 'Hsu', 'INTJ', 78010, 7), (52, 'Lin', 'ENFJ', 78000, 7), (6, 'Kim', 'ESTP', 78000, 7), (19, 'Weng', 'ENTJ', 72050, 1), (2, 'Zheng', 'ISFJ', 78010, 3), (4, 'Chuang', 'ISFP', 83040, 7), (5, 'Chou', 'INFP', 78200, 7), (30, 'Lee', 'ESFP', 72050, 2), (22, 'Chao', 'ENFJ', 78000, 7), (8, 'Shi', 'INFJ', 78000, 7); ``` ![image](https://hackmd.io/_uploads/ryg0JVYu6.png =80%x) ![S__3358755](https://hackmd.io/_uploads/B1oIeEKuT.jpg) ``` SELECT last_name, MBTI, salary FROM employee WHERE supervisor_id = 7 AND MBTI LIKE 'E%' AND salary = ( SELECT MAX(salary) FROM employee WHERE supervisor_id = 7 AND MBTI LIKE 'E%' ) ORDER BY last_name ASC; ``` ![image](https://hackmd.io/_uploads/r1VlgVtu6.png =60%x) https://medium.com/web-design-zone/mysql%E8%B3%87%E6%96%99%E5%BA%AB%E7%9A%84%E5%AE%89%E8%A3%9D%E8%88%87%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-f36a079afd85 https://medium.com/web-design-zone/sql-table%E8%B3%87%E6%96%99%E8%A1%A8%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-b7c0f830c60f ### Process Control Block (PCB)、Process Table 比較表: | 特徵 | Process Control Block (PCB) | Process Table | |--------|---------------------------------------------------------------------------------------------------------------|------------------------------------------------------| | 定義 | 一個包含process所有相關信息的數據結構。 | 所有PCB集合,包含所有process相關資訊 | | 目的 | 管理和維護單個進程的運行狀態。 | 快速訪問系統中所有進程的控制信息,以便進行進程管理和排程。 | | 包含內容 | 進程標識符(PID)、程序計數器、CPU寄存器、CPU排程信息、記憶體管理信息、IO狀態信息等。 | 系統中所有活躍進程的PCB集合。 | | 使用時機 | 在進程創建時初始化,在進程結束時銷毀。用於進程切換和進程管理。 | 在操作系統運行期間持續維護,隨著進程的創建和結束而更新。 | ### COOP (Continuity of Operation Plan) 1. Cold Site 冷備援場所:只有基本設備如電源及空調,沒有電腦硬體。 2. Hot Site 熱備援場所:擁有完整硬體軟體的工作環境。 3. Warm Site 溫備援場所 :有部分硬體設備或軟體安裝,但是沒有完整設備或軟體,仍須一些時間準備。 ![image](https://hackmd.io/_uploads/ryiA8P9d6.png) ### Association classes > 在UML中,Association class(關聯類別)是用於描述兩個class之間的關係,也可用於紀錄該關係背後的額外資訊 ![image](https://hackmd.io/_uploads/Hk3X3w9dT.png) > eg. 有兩個class:學生、課程,可以再創建一個class:"學期成績" 去連結這兩個關聯類別並提供額外資訊 #### IBM給的def: > In UML diagrams, an association class is a class that is part of an association relationship between two other classes. > > 在UML圖中,關聯類是屬於其他兩個類之間關聯關係的類。 > You can attach an association class to an association relationship to provide additional information about the relationship. An association class is identical to other classes and can contain operations, attributes, as well as other associations. > > 可以將關聯類附加到關聯關係,以提供有關該關係的其他資訊。關聯類與其他類相同,可以包含操作、屬性以及其他關聯。 > For example, a class called Student represents a student and has an association with a class called Course, which represents an educational course. The Student class can enroll in a course. An association class called Enrollment further defines the relationship between the Student and Course classes by providing section, grade, and semester information related to the association relationship. > > 例如,名為“Student”的類表示學生,並與名為“Course”的類相關聯,該類表示教育課程。學生班級可以註冊課程。名為 Enrollment 的關聯類通過提供與關聯關係相關的分區、年級和學期資訊,進一步定義了 Student 和 Course 類之間的關係。 > As the following figure illustrates, an association class is connected to an association by a dotted line. > > 如下圖所示,關聯類通過虛線連接到關聯 ![image](https://hackmd.io/_uploads/rJ9OvwcdT.png) ### CPU vs. GPU ![CamScanner 01-12-2024 12.03_2](https://hackmd.io/_uploads/B1S2qEC_a.jpg) ![CamScanner 01-12-2024 12.03_1](https://hackmd.io/_uploads/SJra54CdT.jpg) ### IoT Architecture layers ![image](https://hackmd.io/_uploads/S1D39IRuT.png) ### Alpha-beta pruning (Alpha-beta剪枝) > 是一種搜索演算法優化技術,主要用於減少在遊戲樹(如國際象棋或圍棋)搜索中需要評估的節點數量。用於兩人零和遊戲中的決策過程。Alpha-beta pruning 能夠有效地忽略那些不會影響最終決策的搜索路徑,從而提高搜索的效率。 --- ### 程序式程式設計(英語:Procedural programming) > 主要要採取過程呼叫或函數呼叫的方式來進行流程控制。流程則由包涵一系列運算步驟的過程(Procedures),常式(routines),子程序(subroutines), 方法(methods),或函式(functions)來控制。在程序執行的任何一個時間點,都可以呼叫某個特定的程序。任何一個特定的程序,也能被任意一個程序或是它自己本身呼叫。 ### 指令式程式設計(英語:Imperative programming) > 是一種描述電腦所需作出的行為的程式設計範式。幾乎所有電腦的硬體都是指令式工作;幾乎所有電腦的硬體都是能執行機器語言,而機器碼是使用指令式的風格來寫的。較高階的指令式程式語言使用變數和更複雜的語句,但仍依從相同的典範。菜譜和行動清單,雖非電腦程式,但與指令式程式設計有相似的風格:每步都是指令。因為指令式程式設計的基礎觀念,不但概念上比較熟悉,而且較容易具體表現於硬體,所以大部分的程式語言都是指令式的。 ### 差分隱私(Differential Privacy) > 是一種隱私保護 (Privacy-Preserving) 的演算法,可以在收集群體資料的同時能夠保護單體用戶的 Data。從應用領域來說,DP 不能保護用戶的數據不被看見,但是 DP 能做到的是保護「數據與單個用戶的關聯」。 > DP的概念很簡單,就是加入隨機性。如果匿名數據裡面包含的數據是經過隨機處理的,那就很難通過其他線索來反推回個人數據。以 Netflix Prize Data 的例子中,DP 的隨機性可以加入在用戶評分或是評分日期中,甚至可以稍微擾亂電影 ID。只要用戶評價的數據有稍微的隨機性,就很難透過 IMDB 之類的第三方數據反推回用戶 ID。 > 加入隨機性的程度會影響隱私保護的程度。通常隨機性參數會用符號 ε (epsilon) 來表示,因此也被稱為 ε- Differential Privacy。在 DP 中,「隱私保護」與「數據可用性」往往是一個 Trade-off,因此選擇適當的 ε 也是至關重要。 #### Differential Privacy 的適用時機 > Differential Privacy 是一種應用層面很廣的隱私保護方法。在實務中,DP 幾乎是另用領域最廣的隱私保護演算法,因為他的方法足夠簡單,在各種任務中都可以順利應用,例如:推薦演算法、趨勢預測、用戶分群等等。 > 但是 DP 對於數據無可避免的傷害也限制了他的可用性,因此對於一些對於數據要求較高的機器學習演算法,例如機器視覺,就不太能夠直接使用。 https://u9534056.medium.com/apple-%E6%80%8E%E9%BA%BC%E5%AE%89%E5%85%A8%E7%9A%84%E8%92%90%E9%9B%86%E6%88%91%E5%80%91%E7%9A%84%E9%9A%B1%E7%A7%81-498aad2d9460 https://machinelearning.apple.com/research/learning-with-privacy-at-scale?source=post_page-----498aad2d9460-------------------------------- ### k means clustering vs. Hierarchical clustering ##### k means clustering ![image](https://hackmd.io/_uploads/B1MafMIYa.png) ##### Hierarchical clustering ![image](https://hackmd.io/_uploads/HkmifzLFa.png) | 特性 | K-means聚類 | 層次聚類 | | --- | --- | --- | | 算法過程 | 隨機選擇k個中心點,進行點的分配和中心更新,直到收斂或達到迭代次數。 | 逐步合併或分割數據點,構建聚類樹(樹狀圖) | | 確定性 | 非確定性的(因為初始中心的隨機選擇) | 確定性的(給定相同數據集合,每次產生相同結果) | | 可視化 | 通過散點圖展示聚類結果,不直接提供聚類結構的可視化 | 通過樹狀圖可視化數據點之間的層次關係 | | 靈活性 | 對球形或圓形聚類效果好,不規則形狀聚類效果差 | 能捕捉多層次和複雜的數據結構,對各種形狀聚類有較好適應性 | | 計算復雜性 | 在大數據集上計算高效 | 計算復雜性高,特別是對大數據集 | | 應用場景 | 市場細分、文檔分類等,需要快速結果的場景 | 需要詳細了解數據層次結構的場景,如生物信息學的物種親緣關係分析 | ### Cohesion (內聚) 用白話文解釋,把執行某個功能所需用到的程式與資料都塞在某一個模組(function, class, package, etc)之中,使得該模組可被視為一個單獨的個體執行,那麼這個模組的 cohesion 就愈高。內聚,內聚,顧名思義就是把程式,資料這些有的沒的東西都『聚在一起』打包起來。 ### Coupling (耦合) 如果某個模組跟『其他人(另一個模組)』有關係(例如,使用 global variables 或是接受其他模組傳入的參數)那麼這兩個模組就彼此耦合。 ### MVC(Model-View-Controller) >是軟體工程中的一種軟體架構模式,把軟體分成:Model、View、Controller - 模型(Model) - 程式設計師編寫程式應有的功能(實現演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實現具體的功能)。 - 視圖(View) - 介面設計人員進行圖形介面設計。 - 控制器(Controller)- 負責轉發請求,對請求進行處理 ### MTV(Model-Template-View) > Django 採用的是類似 MVC 的 MTV (Model-Template-View) 架構: ![image](https://hackmd.io/_uploads/Hy_diQZ5T.png) - M (Model,模型): 封裝與資料庫的訪問,處理對資料庫的增刪改查(CRUD)。 - T (Template,模板):同上的 View (2)生成頁面展現給使用者的部分,也就是我們看見的前端 HTML、CSS、JavaScript 的部分。 - V (Views,視圖):同上的 View (1)處理業務邏輯、封裝結果的部分,負責處理 URL 與 callback 函式之間的關係,每一個view都代表一個簡單的Python function。 - C (Controller,控制器)的部分如果要對應的話為 Django 本身。 ### Difference between 32-bits and 64-bits operating systems (32 位和64位操作系統之間的區別) ![image](https://hackmd.io/_uploads/Bys7AaE9p.png) ## NP問題 ![S__3538947](https://hackmd.io/_uploads/HJC1H__c6.jpg)