2019-2020-1 20175218 《信息安全系統設計基礎》第1周學習總結

2019-2020-1 20175218 《信息安全系統設計基礎》第1周學習總結

教材學習內容總結

第一章 計算機系統漫遊

  • 源程序就是一個由值0和1組成的位序列。程序中的某些文本字符就是字節,每一個字節由8個位組成。
  • 只有ASCII字符構成的文件稱爲文本文件,全部其餘文件都稱爲二進制文件。
  • 編譯系統html

    - 預處理器(cpp)————將源程序進行修改,將.c文件轉換成.i文件。命令示例(-E):gcc -E hello.c -o hello.i
    - 編譯器(ccl)————將.i文件轉換成.s文件。命令示例(-S):gcc -S hello.i -o hello.s
    - 彙編器(as)————將文件翻譯成機器語言指令。命令示例(-c):gcc -c hello.s -o hello.o
    - 連接器(ld)————生成可執行目標程序。命令示例:gcc hello.o -o hello
    • 以上4步能夠經過命令(gcc hello.c -o hello)一步實現
    • 第3步中,能夠輸入objdump -d hello.o查看文件

  • 全部文件都有後,經過輸入 ./ + 文件名 實現運行

  • 系統的硬件組成:
    • 總線
    • I/O設備
    • 主存
    • 處理器
  • Amdahl定律
    • 加速比:S=1/((1-α)+α/k)
  • 系統的存儲設備造成層次結構:CPU寄存器在頂部,而後是多層的硬件高速緩存存儲器、DRAM主存和磁盤存儲器。其中,位於更高層的存儲設備比低層的存儲設備要更快。
  • 操做系統內核提供的三個基本的抽象:
    • 文件是對I/O設備的抽象
    • 虛擬內存是對主存和磁盤的抽象
    • 進程是處理器、主存和I/O設備的抽象
  • -I參數:.h文件放入include中, .c文件放入src中。由 gcc c -o main (一塊兒編譯因此.c文件)後找不到 head.h 文件。緣由是 head.h 文件放到了另外一個文件夾中,編譯器找不到。此時,輸入 gcc -I /頭文件所在路徑 .c -o main 指明路徑便可。git

  • gdb:
    • 功能
      • 啓動程序,而且能夠設置運行環境和參數來運行指定程序
      • 讓程序在指定斷點處中止執行
      • 對程序做出相應調整,這樣就能糾正一個錯誤後繼續調試
    • 經常使用命令
      • gdb l ———— 列出文件的代碼清單
      • gdb display ———— 設置一些自動顯示的變量,當程序停住時,或者在單步跟蹤時,這些變量會自動顯示
      • gdb p ———— 顯示指定變量
      • gdb c ———— 繼續執行,直到下一個斷點或程序結束
      • gdb b ———— 在指定函數,或指定行,或條件,或臨時斷點處中止
      • gdb s ———— 至關於「Step Into」
      • gdb n ———— 至關於「Step Over」
      • gdb q ———— 退出gdb調試
  • makefile隱含規則:它是一種慣例,make會按照這種「慣例」自動運行,就算咱們在Makefile中沒有書寫這樣的規則數據庫

第七章 連接

  • 連接能夠在編譯時由靜態編譯器來完成,也能夠在加載時和運行時由動態連接器來完成。
  • 連接器處理稱爲目標文件的二進制文件,有三種形式:可重定位的、可執行的和共享的。
  • 連接器的兩個主要任務是符號解析和重定位。
  • 動態連接器:緩存

    - 重定位 libc.so 的文本和數據到某個內存段
    - 重定位 libvector.so 的文本和數據到另外一個內存段
    - 重定位 prog21 中全部對由 libc.so 和 libvector.so 定義的符號的引用
    • 經過以上重定位可完成連接任務

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

  • 問題1:

在學習gcc的時候,提到了靜態數據庫和動態數據庫,一下沒太懂它們的意思。安全

  • 問題1解決方案:

上網發現了一個大佬在CSDN上寫了一篇關於它們的介紹——點擊進入連接,大體就瞭解了一些:微信

靜態庫:
是指編譯連接時,把庫文件的代碼所有加入到可執行文件中,所以生成的文件比較大,但在運行時也就再也不須要庫文件了。其後綴名通常爲」.a」。函數

動態庫:
與之相反,在編譯連接時並無把庫文件的代碼加入到可執行文件中,而是在程序執行時由運行時連接文件加載庫,這樣能夠節省系統的開銷。動態庫通常後綴名爲」.so」,gcc/g++在編譯時默認使用動態庫。不管靜態庫,仍是動態庫,都是由.o文件建立的。學習

  • 問題2:

在看教程的第七章第十節的動態連接共享庫時,不理解共享庫實現共享的兩種方式。操作系統

  • 問題2解決方案:

這個問題尚未徹底解決,主要是感受第七章內容學起來有些艱難,以及不少知識點都不太理解。在網上看到了一個隨筆,是關於Linux共享庫、靜態庫、動態庫的詳細介紹的,我看了以後,仍是不太理解,但稍微瞭解到了這三個庫的基本知識。點擊進入連接.net

代碼調試中的問題和解決過程

  • 問題1:沒有安裝gcc

  • 問題1解決方案:直接根據提示install就行

  • 問題2:git push失敗

  • 問題2解決方案:

(1)試試強制 git push ,結果仍是不行

(2)系統提示不一樣步,因此先pull,再合併後進行push,即先輸入 git pull --rebase origin master ,而後輸入 git push -u origin master ,便可。

代碼託管

statistics.sh腳本截圖

上週考試錯題總結

其餘(感悟、思考等,可選)

  • 感受第七章學起來有些艱難

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 99/99 2/2 22/22

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:20小時

  • 實際學習時間:22小時

  • 改進狀況:無

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索