2024-2025-1 20241328 《計算機基礎與程式設計》第貳周學習總結

Eureka23662發表於2024-10-06

2024-2025-1 20241328 《計算機基礎與程式設計》第貳周學習總結

作業資訊

課程 2024-2025-1-計算機基礎與程式設計
作業要求 2024-2025-1計算機基礎與程式設計第二週作業
這個作業的目標 數字化,資訊保安,自學教材,電腦科學概論(第七版)第1章並完成雲班課測試,《C語言程式設計》第1章並完成雲班課測試,參考上面的學習總結模板,把學習過程透過部落格(隨筆)發表,部落格標題“學年 學號 《計算機基礎與程式設計》第二週學習總結”,部落格(隨筆)要透過作業提交,截至時間本週日 23:59。
作業正文 2024-2025-1 20241328 《計算機基礎與程式設計》第貳周學習總結

教材學習內容總結

  • 在《電腦科學概論》第一章中,透過學習,我對通用的計算機術語有了初步的認識和了解,瞭解了計算機系統的分層,對計算機的發展歷史也有了認識。
  • 《C語言程式設計》第1章學習後,我知道了為什麼要學習程式設計:隨著時代的發展,於資訊接軌是我們的必須,無論未來在哪個行業,是否從事計算機相關的技術工作,掌握計算思維都是大有裨益,甚至是必須的,而學習程式設計是瞭解和檢修計算思維的最佳途徑。

教材學習中的問題和解決過程

  • 問題1:閱讀《c語言》第一章,對課後習題產生疑問:“總結目前排名前十的程式語言各自的特點和主要應用領域。”

  • 問題1解決方案:向ai提問得出結果:
    一、Python
    (一)特點
    易學:語法極其簡單1。
    免費、開源:屬於FLOSS(自由/開放原始碼軟體)1。
    高層語言:編寫程式時無需考慮記憶體管理等底層細節1。
    可移植性強:被移植到眾多平臺,如Linux、Windows等多種系統1。
    解釋性:可直接從原始碼執行,先轉換為位元組碼中間形式再譯為機器語言1。
    物件導向:支援程序導向和麵向物件程式設計1。
    可擴充套件性:部分程式能用其他語言(如C/C++)編寫1。
    可嵌入型:可嵌入到C/C++程式中提供指令碼功能1。
    豐富的庫:標準庫龐大,可處理正規表示式、文件生成等多種工作1。
    (二)主要應用領域
    WEB開發:有很多免費資料函式庫、網頁模板系統和與伺服器互動的庫,可搭建web框架1。
    桌面軟體
    網路程式設計
    爬蟲開發
    雲端計算開發
    人工智慧
    自動化運維
    金融分析:用於量化交易、金融分析,在金融工程領域使用最多且重要性逐年提高,擅長策略回測,語言結構清晰簡單、庫豐富、科學計算和統計分析能力強,生產效率高於C、C++、Java等1。
    科學計算、資料分析
    遊戲開發:比Lua有更高階抽象能力,用較少程式碼描述遊戲業務邏輯,適合編寫1萬行以上專案,PyGame模組可用於編寫遊戲1。
    二、C
    (一)特點
    簡潔緊湊、靈活方便:關鍵字少,程式書寫自由,將高階語言結構語句與低階語言實用性結合,主要用小寫字母表示1。
    運算子豐富:共有34個運算子,把括號、賦值、強制型別轉換等作為運算子處理,運算型別和表示式型別多樣化1。
    資料結構豐富:有整型、實型等多種資料型別,能實現複雜資料型別運算,引入指標概念使程式效率更高,圖形功能強大,計算和邏輯判斷功能強1。
    結構式語言:程式碼及資料分隔化,程式各部分除必要資訊交流外彼此獨立,以函式形式提供給使用者,函式呼叫方便,有多種迴圈、條件語句控制程式流向,使程式完全結構化1。
    語法限制不太嚴格、程式設計自由度大
    允許直接訪問實體地址、可直接對硬體進行操作
    程式生成程式碼質量高、執行效率高
    適用範圍大、可移植性好
    (二)主要應用領域
    系統軟體開發:用於開發作業系統(如Windows、Linux、Unix)、驅動系統(主機板驅動、顯示卡驅動)、資料庫(DB2、Oracle、sql)等1。
    應用軟體開發:如辦公軟體(WPS)、圖形影像多媒體(ACD)、嵌入式軟體開發(智慧手機)等1。
    三、Java
    (一)特點
    簡單性
    物件導向
    分散式
    健壯性
    安全性
    體系結構中立
    可移植性
    解釋型
    高效能
    多執行緒
    動態性
    (二)主要應用領域
    嵌入式領域
    大資料技術
    軟體工具
    網站應用
    金融服務行業的伺服器應用
    交易系統
    J2ME Apps
    高頻交易領域
    科學應用
    安卓Apps
    四、C++
    (一)特點
    儘量相容C
    支援物件導向的方法
    語言簡潔靈活
    運算子和資料結構豐富
    具有結構化控制語句
    程式執行效率高
    同時具備高階語言和組合語言的優點
    (二)主要應用領域
    系統軟體開發:在作業系統、驅動開發等方面有應用。
    應用軟體開發:在多種應用場景下發揮作用。
    五、JavaScript
    (一)特點
    指令碼語言:可以直接嵌入到HTML頁面中,無需編譯就可在瀏覽器中執行。
    動態型別:變數的資料型別在執行時確定。
    基於物件:以物件為基礎,所有事物都可以被視為物件。
    事件驅動:透過響應事件來執行操作,例如使用者點選按鈕等事件。
    跨平臺性:可在多種瀏覽器和平臺上執行。
    (二)主要應用領域
    前端開發:用於建立互動式的網頁介面,如網頁特效、表單驗證等。
    後端開發:藉助Node.js 等技術也可用於伺服器端開發。
    移動應用開發:可用於混合式移動應用開發。
    六、C#
    (一)特點
    簡單易學:語法相對簡單,與Java等語言有相似之處。
    物件導向:具有類、物件、繼承、多型等物件導向特性。
    型別安全:在編譯時進行型別檢查,減少執行時錯誤。
    自動垃圾回收:不需要程式設計師手動管理記憶體回收。
    整合開發環境友好:在Visual Studio等開發環境下有很好的開發體驗。
    (二)主要應用領域
    Windows應用開發:開發Windows桌面應用程式。
    遊戲開發:用於開發基於Windows平臺的遊戲。
    企業級應用開發:在企業內部的業務系統開發中有廣泛應用。
    七、Swift
    (一)特點
    安全:具有多種安全特性,可避免常見的程式設計錯誤。
    快速:效能較好,編譯和執行速度較快。
    現代語法:語法簡潔、易讀,支援很多現代程式設計概念。
    與Objective - C相容:可與Objective - C程式碼互動使用,方便在蘋果平臺的開發。
    (二)主要應用領域
    iOS應用開發:是開發iOS應用的主要語言。
    macOS應用開發:用於開發蘋果Mac電腦上的應用程式。
    八、Kotlin
    (一)特點
    簡潔:語法簡潔,減少樣板程式碼。
    與Java相容:可以和Java程式碼無縫整合,可呼叫Java類庫。
    函數語言程式設計支援:支援函數語言程式設計特性。
    空安全:有良好的空指標處理機制。
    (二)主要應用領域
    Android開發:逐漸成為Android開發的熱門語言。
    九、Ruby
    (一)特點
    簡潔優雅:語法簡潔,程式碼編寫起來較為輕鬆。
    動態型別:變數型別在執行時確定。
    物件導向:一切皆物件的程式設計思想。
    豐富的庫和框架:有很多實用的庫和框架,如Ruby on Rails用於快速Web開發。
    (二)主要應用領域
    Web開發:特別是使用Ruby on Rails框架進行高效的Web開發。
    指令碼編寫:可用於編寫各種指令碼任務。
    十、Go
    (一)特點
    簡潔高效:語法簡潔,程式碼編寫高效。
    併發性好:有強大的併發程式設計支援,可輕鬆處理多工。
    編譯型語言:編譯速度快,生成的可執行檔案執行效率高。
    記憶體管理自動:有自動的記憶體管理機制。
    (二)主要應用領域
    網路程式設計:適合編寫網路服務、網路工具等。
    雲端計算:在雲平臺開發中有廣泛應用。
    分散式系統:構建分散式應用程式。

  • 問題2:同上:“程式在計算機內部是如何執行的。”

  • 問題2解決方案:同上得出結果
    一、程式執行的基礎架構:馮諾依曼體系結構
    程式執行基於馮諾依曼儲存程式式體系結構,該體系結構包含控制器、運算器、儲存器、輸入裝置、輸出裝置這幾個主要部分,其中儲存器是程式執行的關鍵要素2。
    (一)儲存器的分類
    暫存器(CPU內部):用於存放待運算元和結果。暫存器是CPU內部非常小、非常快速的儲存部件,其容量有限。例如,32位的CPU每個暫存器一般能儲存32位(4個位元組)的資料,64位的CPU每個暫存器一般能儲存64位(8個位元組)的資料。現代CPU內建幾十個甚至上百個暫存器,在程式執行過程中有多種重要功能,如完成數學運算、控制迴圈次數、控制程式執行流程、標記CPU執行狀態等。像EIP(ExternInstructionPointer)暫存器的值是下一條指令的地址,CPU執行完當前指令後會根據EIP的值找到下一條指令,改變EIP的值就能改變程式的執行流程;CR3暫存器儲存著當前程序頁目錄的實體地址,切換程序時會改變CR3的值;EBP、ESP暫存器用來指向棧的底部和頂部,函式呼叫會改變EBP和ESP的值1。
    快取記憶體(通常在CPU內部):用作資料緩衝區。雖然記憶體讀取速度較快,但與CPU相比仍有很大差距,為避免每次從記憶體讀取資料拖慢CPU執行速度(這會使CPU經常處於等待狀態),在CPU內部設定快取。快取可將使用頻繁的資料暫時讀取進來,當需要同一地址上的資料時,可直接從快取讀取而無需再訪問記憶體。不過快取容量有限,CPU只能從快取讀取部分資料,對於使用不頻繁的資料會繞過快取直接從記憶體讀取,這就涉及到快取命中率的概念,即能夠從快取中讀取就命中,否則就沒命中,關於哪些資料保留在快取有複雜演算法1。
    記憶體:是程式執行時存放指令和資料的地方,但不能在記憶體中直接完成計算功能。例如計算
    a
    =
    b

c
a=b+c,必須將
a
a、
b
b、
c
c都讀取到CPU內部才能進行加法運算1。
外存:如硬碟等,用於長期儲存資料。
二、指令集與程式執行
(一)指令集的概念
要讓CPU工作,必須藉助特定的指令,這些指令的集合就是CPU的指令集,是用來計算和控制計算機系統的一套指令。典型的有IntelX86指令集和ARM指令集。不同型號的CPU支援的指令集會有所差異,但絕大部分是相同的2。

(二)指令執行示例
例如
a
d
d
add用於加法運算,
s
u
b
sub用於減法運算,
c
m
p
cmp用於比較兩個數的大小。在具體的指令執行中,會把宏觀層次的命令轉換為滿足指令集要求的二進位制程式碼,然後才能在計算機上執行。如組合語言中的指令
a
d
d
e
a
x
,
p
t
r
[
b
]
addeax,ptr[b]表示把
e
a
x
eax和
p
t
r
[
a
]
ptr[a]中的數值相加,並把結果放在
e
a
x
eax中,但組合語言還要經過簡單轉換才能成為CPU指令1。

三、程式執行中的作業系統管理
在程式執行的過程中,作業系統會對程式進行多方面的管理。

記憶體管理:負責分配和管理程式執行時所需的記憶體空間。
程序管理:包括程序的建立、排程、切換等操作。例如,程序切換時CR3暫存器的值會改變,因為CR3暫存器儲存著當前程序頁目錄的實體地址1。
執行緒管理:如果程式是多執行緒的,作業系統會對執行緒進行管理,協調執行緒之間的資源分配和執行順序等。
四、程式執行中的特殊操作
(一)函式呼叫
函式呼叫能提高程式碼可複用性。在函式呼叫過程中,會改變如EBP、ESP等暫存器的值,這些暫存器用來指向棧的底部和頂部1。

(二)系統呼叫
系統呼叫能讓程式設計師向作業系統發起請求,透過作業系統提供的系統呼叫(systemcall)介面,程式在執行過程中可以獲取作業系統的服務,如讀寫檔案、申請記憶體等操作

基於ai的學習

我:在學習計算機基礎相關知識,請進行蘇格拉底式提問
AI: 那你能先告訴我,在你目前學習的計算機基礎知識裡,你覺得最難以理解的部分是什麼呢?

我:目前還沒有
AI: 那你能給我講講你對計算機硬體組成部分的理解嗎?

我:計算機硬體是構成計算機系統的物理部分,它負責執行計算機程式中的指令,處理資料,以及儲存和檢索資訊
AI: 那你能詳細說說在這些硬體中,你認為哪個硬體對於計算機整體效能的影響最大呢?

我:cpu
AI: 那你能解釋一下為什麼你覺得CPU對計算機整體效能的影響最大呢?

我:cpu是計算機的整體控制單元,能協調各部分之間的協調工作
AI: 那你能具體說說CPU是透過哪些方式來協調計算機各部分工作的呢?

我:不會
AI: 那你有沒有想過透過查閱哪些資料或者進行哪些實驗來弄清楚這個問題呢?

我:請解答我的疑惑
AI: 那我來給你講講。CPU透過控制匯流排來協調各部分工作。它可以向記憶體傳送地址訊號,以獲取需要處理的資料,這就像是指揮家告訴樂手要演奏哪個音符一樣。同時,CPU還能控制輸入輸出裝置,比如告訴硬碟何時讀取或寫入資料,指揮顯示卡進行影像的渲染等。而且,CPU內部的指令集也在協調工作中起到關鍵作用,不同的指令能讓CPU對不同的硬體元件發出不同的操作指令,從而讓計算機各部分有條不紊地協同工作。那現在你對這個過程是不是有了更清晰的理解呢?

我:是
AI: 那你能再思考一下,CPU的效能指標,比如主頻、快取等,是如何影響它協調各部分工作的效率的呢?

我:cpu的頻率決定了它的工作效率,快取決定了它的處理容量
AI: 那你能進一步解釋一下,CPU頻率具體是怎樣影響它協調各部分工作的效率的呢?

我:CPU頻率決定了CPU每秒鐘能夠執行多少條指令。頻率越高,意味著CPU在單位時間內能夠完成更多的計算週期,從而更快地執行程式指令。當CPU處理複雜任務時,如大型遊戲、高畫質影片編輯、圖形渲染等,高頻CPU能夠更快地響應使用者的操作和計算需求,提高整體工作效率。

AI: 那你能思考一下,在多核心CPU的情況下,頻率和核心數之間是如何相互影響來協調計算機各部分工作的呢?

我:透過將任務分給不同的核,完成後統一彙總,提高工作效率
AI: 那你能詳細說說,CPU是根據什麼標準來把任務分配給不同核心的呢?

我:根據任務的具體細節和核的計算能力
AI: 那你能進一步闡述一下,CPU是如何識別任務的優先性的呢?

我:不會,你來講講
AI: 那我來給你講講。作業系統的任務排程器會維護一個就緒佇列,裡面包含了所有準備好被CPU處理的程序。當一個CPU核心空閒時,任務排程器會檢視就緒佇列中的程序。對於程序的優先順序設定,通常有不同的級別,比如高、中、低等。任務排程器會優先選擇優先順序高的程序分配給空閒的CPU核心。它會根據一些演算法來實現這種分配,例如先來先服務演算法(FCFS),就是按照程序進入就緒佇列的先後順序分配CPU,但如果結合優先順序,高優先順序的程序會插隊到低優先順序程序之前被處理;還有短作業優先演算法(SJF),如果高優先順序的程序預計執行時間短,就會優先被分配到CPU核心;還有基於優先順序的搶佔式排程演算法,高優先順序程序可以搶佔正在CPU上執行的低優先順序程序的資源。這樣,透過這些方式,任務排程器根據程序的優先順序設定來安排CPU核心處理任務的順序。那現在你對這個過程是不是有了更清晰的理解呢?

我:好的,就到這裡吧,再做個總結
AI: 好的。我們從你學習計算機基礎相關知識開始,針對計算機硬體中的CPU進行了一系列的探討。

首先,你理解計算機硬體是計算機系統的物理部分,並且認為CPU是對計算機整體效能影響最大的硬體,因為它是計算機的整體控制單元,能協調各部分工作。

然後我們深入探討了CPU協調各部分工作的方式,包括透過控制匯流排與記憶體、輸入輸出裝置互動,以及其內部指令集的作用。

接著討論了CPU的效能指標,如主頻和快取對協調工作效率的影響,你提到主頻決定工作效率,快取決定處理容量。

在多核心CPU方面,我們談到任務可分配給不同核心,之後彙總以提高效率,並且任務分配依據任務的性質、需求與優先性等。

最後說到CPU識別任務優先性是透過作業系統的任務排程器和程序的優先順序設定,任務排程器根據不同演算法,按照程序優先順序安排CPU核心處理任務的順序。

希望透過這些討論,你對計算機基礎中CPU相關知識有了更深入的理解。

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 20/20 2/2 20/20
第二週 0/20 1/3 5/25

參考:軟體工程軟體的估計為什麼這麼難軟體工程 估計方法

  • 計劃學習時間:15小時

  • 實際學習時間:5小時

  • 改進情況:國慶假期外出遊玩後沒有額外的精力完成相關作業或任務,以後假期減少活動,合理安排時間。

參考資料

  • 《電腦科學概論(第七版)》
  • 《c語言程式設計(第五版)》

相關文章