操做系統:計算機系統漫遊

  1. hello程序的生命週期是從一個源程序(或源文件)開始的。
  2. 數字的機器表示方式,與實際的整數和實數是不一樣的。它們是對真值的有限近似值。

C語言的起源

c是貝爾實驗室的Dennis Ritchie建立的的。起初是爲了減小彙編代碼的編寫量。java

  1. 大部分Unix內核以及全部的支撐工具和函數庫都是用c編寫的。

程序的編譯

gcc編譯c源文件的過程有:shell

  1. 預處理:根據#開頭的命令,修改c程序。如把#include的h文件插入到程序文本中。最終獲得一個以.i結束的文件。
  2. 編譯:將i文件翻譯成s文件。s文件包含了一個彙編語言程序。
  3. 彙編:彙編器as將s文件翻譯成機器語言指令,並把這些指令打包成一個叫作可重定位目標文件的格式(o文件)。o文件是一個二進制文件。
  4. 連接:把o文件連接在一塊兒。如hello程序中用到了printf,就把printf.o(預編譯好的)和hello.o(上一步生成的)合併,造成最後的可執行文件hello

gnu項目

gcc是gnu(GNUL'S NOT UNIX)(有Richard Stallman發起的開源項目)的開發出來的工具之一。現代開放源碼運動的思想起源是GNU項目中的自由軟件概念(自由並非說免費)。數組

瞭解編譯的好處

  1. 優化程序性能
  2. 理解連接時出現的錯誤
  3. 避免安全漏洞(注:避免寫成減小可能更好)

系統的硬件組成

  1. 總線:電子管道,用於攜帶信息字節,負責在各個部件間傳遞數據。一般被設計成傳送定長的字節塊,也就是字
  2. io設備:系統與外部世界的鏈接通道。經常使用的io設備有鼠標、鍵盤、顯示器、磁盤。每一個io設備都有一個控制器/適配器adapter。
  3. 主存:臨時存儲設備,用於存放程序和程序須要處理的數據。主存通常有動態隨機存取存儲器(DRAM)組成。是一個線性的字節數組。每一個字節都有惟一的地址(從零開始)。
  4. 處理器cpu:核心是一個大小爲一個字的存儲設備(寄存器),即程序計數器pc。pc指向主存中某條機器語言的指令地址。cpu的工做:緩存

    • 讀指令
    • 解析指令
    • 加載數據,執行操做,存儲結果
    • 更新pc(多是加一,或者更新到指定值)

處理器看上去是它的指令集架構的簡單實現。實際上固然是複雜的多。安全

緩存

高速緩存存儲器(cache)的提出是爲了解決cpu和主存的速度問題。cache將cpu經常使用、將要用到的數據、指令從主存加載到本身處,而後cpu讀取cache的數據便可。爲了更好的實現緩存功能,人們還實現了多級緩存。高級緩存比低級緩存快,但同時存儲空間也相對小。網絡

操做系統管理硬件

os有兩個基本功能:數據結構

  • 防止硬件被失控的應用程序濫用
  • 嚮應用程序提供簡單一致的機制來控制複雜而又大不相同低級硬件設備。

os經過幾個抽象概念來實現這兩個功能:進程、虛存、文件架構

Unix的層次文件系統、做爲用戶級進程的shell概念,都是從Multics(上世紀60年代的一個較爲成功的系統)來的。後來加州大學的伯克利分校增長了虛存和internet協議,稱爲BSD(Berkeley software distribution)。後來不少廠商加入了一些其餘的功能,可是不一樣產商的特性一般不兼容,爲了解決這個問題,Richard Stallman和ieee標準化了Unix的開發。這個標註稱爲posix。併發

進程

進程是os對一個正在運行的程序的抽象。一個os能夠同時運行多個進程(併發運行),是經過上線文切換來實現的(系統保持跟蹤進程運行所需的全部狀態信息,這種狀態,就是上下文)。函數

內核不是一個獨立的程序,它是系統管理所有進程所用代碼和數據結構的集合。

線程

一個進程能夠有多個線程(至少一個)。每一個線程運行在進程的上下文中,共享進程的代碼和全局數據,同時每一個線程有本身的上下文。

線程分爲內核級和用戶級兩種。

虛存

os爲進程提供一個假象,即每一個進程都在獨佔地使用主存。每一個進程看到的內存都是一致的。

  • 地址空間的最上面的區域是留給操做系統中的代碼和數據的,這對全部進程來講都是同樣的。空間底部存放用戶進程定義的代碼和數據。
  • 程序代碼和數據:代碼從一固定地址開始,接着是和c全局變量相對應的數據位置。
  • 堆:運行時經過malloc申請的空間,經過free釋放。堆的地址是向上增加的
  • 棧:調用函數和致使棧增加,函數返回則棧收縮。一般的棧溢出,說的就是這個。(JVM除外,java有本身的棧)
內核
---------
用戶棧
---------
共享庫的內存映射區域
---------

---------
運行時堆
---------
讀寫數據
---------
只讀代碼和數據(程序開始的位置,注意,不是從0開始的喔)
---------
0

文件

文件就是字節序列,僅此而已。io設備均可以當作是文件,裏面的數據就是字節序列。系統的輸入輸出都是經過使用一組稱爲Unix io的系統函數調用讀寫文件來實現的。

1991年,Linus Torvalds謹慎地發佈一個新的類unix os內核,後來逐漸發展稱爲一個技術和文化現象。

網絡通訊

網絡能夠視爲一個io設備。網絡經過一個適配器,做爲io介入計算機。

其餘概念

  • 併發、並行
  • 超線程
  • 指令級並行:流水線
  • simd:單指令多數據

原文:https://blog.givenzeng.cn/book/computer_system/chapter_1/

相關文章
相關標籤/搜索