2024-2025-1 20241408陳燁南《計算機基礎與程式設計》第九周學習總結
這個作業屬於哪個課程 |
2024-2025-1-計算機基礎與程式設計) |
這個作業要求在哪裡 |
https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09 |
這個作業的目標 |
作業系統責任、記憶體與程序管理、分時系統、CPU排程、檔案、檔案系統、檔案保護、磁碟排程 |
作業正文 |
本部落格連結 |
教材學習內容總結
電腦科學概論(第七版)第10、11章總結
第10章:作業系統基礎
- 作業系統的概念與功能
作業系統定義:作業系統是管理計算機硬體和軟體資源的程式,它提供使用者與計算機硬體之間的介面。作業系統的主要功能是資源管理(CPU、記憶體、外設等)和任務排程。
作業系統的核心功能:
程序管理:管理和排程計算機上的各個程序。
記憶體管理:有效分配、回收記憶體,支援虛擬記憶體技術。
檔案系統管理:管理儲存裝置中的檔案,提供檔案的存取、儲存與保護功能。
裝置管理:管理計算機外部裝置的輸入輸出操作。
使用者介面:為使用者提供與計算機互動的介面。
- 程序管理
程序的定義:程序是程式的一個執行例項,每個程序都有獨立的記憶體空間和執行狀態。
程序狀態:程序有不同的狀態,包括執行態、就緒態、阻塞態等。
程序排程:作業系統根據特定的排程演算法來決定哪個程序在何時執行,常見的排程演算法有:
先來先服務(FCFS)
短作業優先(SJF)
優先順序排程
時間片輪轉(RR)
- 記憶體管理
記憶體分配:作業系統負責分配記憶體給程序使用,常見的記憶體分配方式有:
連續記憶體分配:為每個程序分配一個連續的記憶體塊。
分頁系統:將記憶體劃分為固定大小的頁,程序使用頁來儲存資料。
分段系統:將程序的記憶體劃分為若干段(如程式碼段、資料段等)。
虛擬記憶體:透過硬碟空間模擬出比實體記憶體更大的記憶體空間,讓程式看起來可以使用比實際實體記憶體更多的記憶體。
- 檔案系統
檔案的定義與管理:檔案是資料儲存的基本單位,作業系統需要管理檔案的建立、刪除、讀取和寫入。
檔案的組織方式:作業系統為檔案提供目錄結構,檔案可以按照檔名進行組織,並支援對檔案進行許可權控制(如讀、寫、執行許可權)。
檔案儲存:檔案通常儲存在硬碟或其他外部儲存裝置上,作業系統透過檔案系統來訪問和管理這些檔案。
- 輸入輸出管理
輸入輸出裝置:包括鍵盤、滑鼠、顯示器、硬碟等外部裝置。
緩衝區管理:作業系統為I/O操作提供緩衝區,以提高資料傳輸的效率。
I/O排程:作業系統透過排程演算法最佳化I/O操作的順序,以減少等待時間,提高效能。
第11章:資料庫系統
- 資料庫系統概述
資料庫的定義:資料庫是一個有組織的資料集合,透過資料庫管理系統(DBMS)進行管理,提供高效的資料儲存、查詢、更新和管理功能。
資料庫管理系統(DBMS):DBMS是一種軟體,它用於管理資料庫中的資料,提供資料存取、管理、更新等功能,確保資料的完整性、一致性和安全性。
- 資料模型
層次模型:資料以樹形結構組織,記錄間有父子關係,適用於層次化的資料儲存。
網狀模型:資料以圖形結構組織,記錄間可以有多對多的關係,比層次模型更靈活。
關係模型:資料以二維表格形式組織,每個表由行(記錄)和列(欄位)組成。關係模型是目前最常用的資料模型,關聯式資料庫管理系統(RDBMS)採用此模型。
- 關聯式資料庫
表(Relation):資料庫中的基本儲存單位。每張表包含若干列(屬性)和行(記錄)。
主鍵(Primary Key):用來唯一標識每條記錄的欄位,保證表中每條記錄的唯一性。
外來鍵(Foreign Key):用於建立表之間聯絡的欄位,它指向另一表的主鍵。
資料完整性:包括實體完整性、參照完整性和域完整性等,保證資料在儲存和操作過程中的正確性和一致性。
- SQL語言
SQL的定義:SQL(結構化查詢語言)是一種用於訪問和運算元據庫的標準語言。
資料查詢(SELECT):從資料庫中查詢資料,支援過濾、排序、聚合等操作。
資料操作:包括插入(INSERT)、更新(UPDATE)和刪除(DELETE)資料。
資料定義:包括建立、修改和刪除表(CREATE、ALTER、DROP)。
資料控制:用於控制使用者許可權,管理資料庫安全性(如GRANT、REVOKE)。
- 資料庫設計
實體-關係模型(ER圖):一種圖形化的資料庫設計工具,用來描述資料庫中的實體及其之間的關係。
規範化:透過消除冗餘資料、避免更新異常等方式,將資料庫設計為符合一定規範的結構。常見的規範化正規化有:
第一正規化(1NF):要求資料表中的每列都是原子性的。
第二正規化(2NF):在1NF的基礎上,要求消除部分依賴。
第三正規化(3NF):在2NF的基礎上,要求消除傳遞依賴。
C語言程式設計第8章:指標和陣列
- 指標基礎
指標的定義:指標是儲存記憶體地址的變數,指標變數的值是另一個變數的地址。透過指標可以訪問和操作該地址所指向的資料。
指標運算:指標可以進行加法、減法操作,例如,指標加1表示指向下一個同型別資料的記憶體地址。
指標型別:指標的型別必須與所指向的資料型別一致。
- 指標與陣列的關係
陣列名作為指標:陣列名實際上是指向陣列首元素的指標。
透過指標訪問陣列元素:可以透過指標運算來訪問陣列的元素。例如,*(arr + i)等同於arr[i]。
二維陣列與指標:二維陣列的元素可以透過指標操作進行訪問。二維陣列可以視為指向指標的指標(如int arr[3][4]可以視為int *arr[3])。
- 指標與函式
透過指標傳遞引數:使用指標可以傳遞變數的地址,使得函式能夠修改傳入的變數。
指標作為函式返回值:函式可以返回指標,返回動態分配的記憶體地址等。
- 動態記憶體分配
動態記憶體分配函式:
malloc(size_t size):分配一塊指定大小的記憶體,返回該記憶體的指標。
calloc(size_t num, size_t size):分配指定數量和大小的記憶體,並初始化為0。
realloc(void *ptr, size_t size):調整已經分配記憶體的大小。
free(void *ptr):釋放之前分配的記憶體。
- 多維陣列與指標
多維陣列:多維陣列本質上是指向指標的指標。二維陣列可以透過指標進行遍歷和訪問。
..C語言程式設計第8章:指標和陣列
C語言程式與設計
- 指標基礎
指標的定義:指標是儲存記憶體地址的變數,指標變數的值是另一個變數的地址。透過指標可以訪問和操作該地址所指向的資料。
指標運算:指標可以進行加法、減法操作,例如,指標加1表示指向下一個同型別資料的記憶體地址。
指標型別:指標的型別必須與所指向的資料型別一致。
- 指標與陣列的關係
陣列名作為指標:陣列名實際上是指向陣列首元素的指標。
透過指標訪問陣列元素:可以透過指標運算來訪問陣列的元素。例如,*(arr + i)等同於arr[i]。
二維陣列與指標:二維陣列的元素可以透過指標操作進行訪問。二維陣列可以視為指向指標的指標(如int arr[3][4]可以視為int *arr[3])。
- 指標與函式
透過指標傳遞引數:使用指標可以傳遞變數的地址,使得函式能夠修改傳入的變數。
指標作為函式返回值:函式可以返回指標,返回動態分配的記憶體地址等。
- 動態記憶體分配
動態記憶體分配函式:
malloc(size_t size):分配一塊指定大小的記憶體,返回該記憶體的指標。
calloc(size_t num, size_t size):分配指定數量和大小的記憶體,並初始化為0。
realloc(void *ptr, size_t size):調整已經分配記憶體的大小。
free(void *ptr):釋放之前分配的記憶體。
- 多維陣列與指標
多維陣列:多維陣列本質上是指向指標的指標。二維陣列可以透過指標進行遍歷和訪問。
..C語言程式設計第8章:指標和陣列
- 指標基礎
指標的定義:指標是儲存記憶體地址的變數,指標變數的值是另一個變數的地址。透過指標可以訪問和操作該地址所指向的資料。
指標運算:指標可以進行加法、減法操作,例如,指標加1表示指向下一個同型別資料的記憶體地址。
指標型別:指標的型別必須與所指向的資料型別一致。
- 指標與陣列的關係
陣列名作為指標:陣列名實際上是指向陣列首元素的指標。
透過指標訪問陣列元素:可以透過指標運算來訪問陣列的元素。例如,*(arr + i)等同於arr[i]。
二維陣列與指標:二維陣列的元素可以透過指標操作進行訪問。二維陣列可以視為指向指標的指標(如int arr[3][4]可以視為int *arr[3])。
- 指標與函式
透過指標傳遞引數:使用指標可以傳遞變數的地址,使得函式能夠修改傳入的變數。
指標作為函式返回值:函式可以返回指標,返回動態分配的記憶體地址等。
- 動態記憶體分配
動態記憶體分配函式:
malloc(size_t size):分配一塊指定大小的記憶體,返回該記憶體的指標。
calloc(size_t num, size_t size):分配指定數量和大小的記憶體,並初始化為0。
realloc(void *ptr, size_t size):調整已經分配記憶體的大小。
free(void *ptr):釋放之前分配的記憶體。
- 多維陣列與指標
多維陣列:多維陣列本質上是指向指標的指標。二維陣列可以透過指標進行遍歷和訪問。
基於AI的學習
程式碼除錯中的問題和解決過程
問題1:字串沒有正確倒序輸出
症狀: 程式輸出的字串順序與預期相反,即從字串的開頭開始輸出。
原因: 迴圈的起始條件設定錯誤,應該是 i = length - 1 而不是 i = 0。
解決: 檢查迴圈的起始條件,並確保它是從字串的最後一個字元開始。
問題2:輸出包含字串末尾的空字元
症狀: 字串正確倒序輸出了,但是末尾多了一個空字元。
原因: 字串在C語言中以空字元 '\0' 結尾,迴圈沒有正確地排除這個空字元。
解決: 確保迴圈在遇到空字元之前停止。可以透過檢查 str[i] != '\0' 來實現,或者更簡單地,使用 length - 1 作為迴圈的上限,因為 strlen 函式返回的長度不包括空字元。
學習進度條
|
程式碼行數(新增/累積) |
部落格量(新增/累積) |
學習時間(新增/累積) |
重要成長 |
目標 |
5000行 |
30篇 |
400小時 |
|
第一週 |
200/200 |
2/2 |
20/20 |
|
第二週 |
300/500 |
2/4 |
18/38 |
|
第三週 |
500/1000 |
3/7 |
22/60 |
|
第四周 |
300/1300 |
2/9 |
10/70 |
|
第五週 |
300/1600 |
2/11 |
10/80 |
|
第六週 |
300/1900 |
2/13 |
10/90 |
|
第七週 |
300/2200 |
2/15 |
10/100 |
|
第八週 |
300/2500 |
2/17 |
10/110 |
|
第九周 |
300/2800 |
2/19 |
10/120 |
|