第一週做業:Linux下開發環境、vi基本操做、gcc編譯器的使用,對每章提一個問題
html
第二週做業:補作課堂實踐、學習靜態庫和動態庫,模仿od實現myod
node
第三週做業:理解有符號整數、無符號整數、浮點數的表示,避免C語言中溢出,數據類型轉換中的陷阱和可能會致使的漏洞
git
第四周做業:補充課上實踐,掌握系統編程錯誤處理的方式;掌握Unix/Linux系統級I/O:open close read write seek stat;掌握I/O重定向的方法
算法
第五週做業:X86彙編基礎、ISA(指令集體系結構)、使用GDB進行調試
編程
第六週做業:瞭解異常及其種類、理解進程和併發的概念、掌握進程建立和控制的系統調用及函數使用
windows
第七週做業:ISA抽象及其做用、流水線和實現方式
數組
第八週做業:進程、線程、I/O多路複用三種併發方式,線程同步互斥及相關係統調用
緩存
第九周做業:RAM、ROM、磁盤、固態硬盤等存儲技術,局部性原理和緩存思想在存儲層次結構中的應用
安全
第十週做業:補交第十週課上測試,Linux下IPC機制
服務器
第十一週做業:虛擬存儲器、地址翻譯、存儲器映射、動態存儲器分配方法
第十三週做業:從新學習教材第十二章:併發編程,完成該章課後習題
第十四周做業:從新學習教材第四章《處理器體系結構》,完成該章習題
實驗一 開發環境的熟悉:配置交叉編譯環境、連通目標機和宿主機、使用目標機運行程序
實驗二 固件程序設計:MDK、LED、UART、國密算法、SM1
實驗三 實時系統報告:基於socket實現mywc,使用多線程實現wc服務器並使用同步互斥機制保證計數正確
實驗四 外設驅動程序設計:完成「hqyj.嵌入式Linux應用程序開發標準教程.pdf」中的第十一章的test試驗
實驗五 通信協議設計:Linux下OpenSSL的安裝與測試、基於Socket實現TCP通訊、研究OpenSSL算法,測試對稱算法中的AES,非對稱算法中的RSA,Hash算法中的MD五、實現對實驗二中的「wc服務器」經過混合密碼系統進行防禦
截圖 git log --pretty=format:"%h - %an, %ar : %s" 的結果
代碼量彙總提交statistics.sh的支持截圖
第一週我除了配置了本學習學習須要的實驗環境以外,還針對每章的內容提出了十二個問題,不敢說徹底抓住了學習重點,可是確定是沒有跑題的,不過多是由於參考教材目錄提出的問題,因此有些問題問的稍有一些大。
操做系統的五大管理功能: (1)做業管理:包括任務、界面管理、人機交互、圖形界面、語音控制和虛擬現實等; (2)文件管理:又稱爲信息管理; (3)存儲管理:實質是對存儲「空間」的管理,主要指對主存的管理; (4)設備管理:實質是對硬件設備的管理,其中包括對輸入輸出設備的分配、啓動、完成和回收; (5)進程管理:實質上是對處理機執行「時間」的管理,即如何將CPU真正合理地分配給每一個任務。
無符號數(Unsigned number)是相對於有符號數而言的,指的是整個機器字長的所有二進制位均表示數值位,至關於數的絕對值 機器數就是在計算機裏面存儲的數, 真值是帶符號的數 原碼錶示法就是帶符號的絕對值表示 正數的補碼爲它自己,負數的補碼等於原碼的數值位取反加1。原碼變補碼和補碼變原碼的方法是同樣的。
Y86是一個指令體系結構(ISA)經過Y86指令,可以更好的瞭解CPU處理指令的流程以及它的工做原理。
第七章:動態庫與靜態庫的不一樣?
本質上來講,庫是一種可執行代碼的二進制形式,能夠被操做系統載入內存執行。庫有兩種:靜態庫(.a、.lib)和動態庫(.so、.dll) 【靜態庫】是在連接階段,會將彙編生成的目標文件.o與引用到的庫一塊兒連接打包到可執行文件中。所以對應的連接方式稱爲靜態連接,注意如下三點: 1.靜態庫對函數庫的連接是放在編譯時期完成的。 2.程序在運行時與函數庫再無瓜葛,移植方便。 3.浪費空間和資源,由於全部相關的目標文件與牽涉到的函數庫被連接合成一個可執行文件。 靜態庫存在的問題: 1.空間浪費 2.對程序的更新、部署和發佈頁會帶來麻煩。若是靜態庫libxx.lib更新了,全部使用它的應用程序都須要從新編譯、 【動態庫】在程序編譯時並不會被鏈接到目標代碼中,而是在程序運行是才被載入。不一樣的應用程序若是調用相同的庫,那麼在內存裏只須要有一份該共享庫的實例,規避了空間 浪費問題。動態庫在程序運行時才被載入,也解決了靜態庫對程序的更新、部署和發佈頁會帶來麻煩。用戶只須要更新動態庫便可,增量更新。以上解答參考了靜態庫和動態庫的區別這篇博客
執⾏信號的處理動做稱爲信號遞達,信號從產⽣到遞達之間的狀態,稱爲信號未決。進程能夠選擇阻塞某個信號。被阻塞的信號產⽣時將保持在未決狀態,直到進程解除對此信號的阻塞,才執行遞達的動做。 Linux下常規信號在遞達以前產生屢次只計⼀次,而實時信號在遞達以前產⽣屢次能夠依次放在⼀個隊列裏。
windows 提供了三種機制來對內存進行操做 1)虛擬內存,最適合用來管理大型對象數組 或大型結構數組 2)內存映射文件,最適合用來管理大型數據流(一般是文件),以及在同一機器上運行的多進程之間共享數據。 3)堆,適合用來管理大量的小型對象。
內核使用三種數據結構表示打開的文件,分別是文件描述符表、文件表和 V 節點表。 (1) 每一個進程在進程表中都有一個記錄項,記錄項中包含有一張打開文件描述符表,每一個描述符佔用一項。與每一個文件描述符相關聯的是: (a) 文件描述符標誌。 (b) 指向一個文件表項的指針。 (2) 內核爲全部打開文件維持一張文件表。每一個文件表項包含: (a) 文件狀態標誌(讀、寫、添寫、同步和非阻塞等)。 (b) 當前文件偏移量。 (c) 指向該文件 V 節點表項的指針。 (3) 每一個打開文件(或設備)都有一個 v 節點(v-node)結構。v 節點包含了文件類型和對此文件進行各類操做的函數的指針。v 節點還包含了從磁盤讀取的 i 節點(i-node)的信息,i 節點信息包含了文件的全部者、文件長度、文件所在的設備、指向文件的實際數據塊在磁盤上的所在位置的指針等。
應用層經過傳輸層進行數據通訊時,TCP和UDP會遇到同時爲多個應用程序進程提供併發服務的問題。多個TCP鏈接或多個應用程序進程可能須要 經過同一個TCP協議端口傳輸數據。爲了區別不一樣的應用程序進程和鏈接,許多計算機操做系統爲應用程序與TCP/IP協議交互提供了稱爲套接字 (Socket)的接口,區分不一樣應用程序進程間的網絡通訊和鏈接。
先簡單說說線程與進程的概念: (1)進程是指一個內存中運行的應用程序,好比在Windows系統中,一個運行的exe就是一個進程。 (2)線程是指進程中的一個執行流程。 多線程併發只是表面和感受上的併發,並非實質上的併發。一個線程要運行,它必須佔有CPU,而咱們目前用的計算機大多都是單CPU的,因此一次最多隻能有一個線程獲取CPU並運行。 多線程的實質是「最大限度地利用CPU資源」,當某一個線程的處理不須要佔用CPU而只須要和I/O等資源打交道時,讓其餘線程有機會得到CPU資源。
暫時沒有
在課上對每章的重點內容進行講解,方便有側重點的自學
20155318 《信息安全系統設計基礎》課程總結