1. 程式人生 > >01 操作系統基礎

01 操作系統基礎

現在 tel info 商機 小型機 硬盤 貝爾 讀取 lar

---恢復內容開始---

計算機的基本組成

  計算機主要要CPU與內存以及IO總線三個核心設備,加上外部設備(例如硬盤、顯示器、鼠標鍵盤等)組成;

  當前的計算機常見架構如下:

技術分享圖片

  CPU:CPU包括運算器、控制器與寄存器;其中運算器為核心設備,它用來進行數據運算,控制器則是用來處理控制指令,同時為了實現線路復用技術,我們需要保存先輸入進來的加數,等待被加數輸入進來後進行運算,而用來存儲加數的空間我叫做寄存器;

  北橋:高速總線控制器,需要高速形成數據交換,它是用來連接內存與CPU的;【現在的架構的內存直接連接到CPU了,北橋芯片則直接連接硬盤(固態硬盤)】

  南橋:低速總線控制器,它是用來連接IO設備的,然後在連接到北橋芯片上;

  加電自檢:我們說內存空間在計算機啟動的時候是沒有數據的,而計算機是如何啟動的呢?在計算機啟動的時候,電腦內置的BIOS芯片會將一段默認代碼加載到內存中,提供給CPU讀取,這段代碼實現的是CPU對於關聯硬件設備的檢測功能,比如硬盤是否正常、主板是否正常等,這個過程我們就叫做加電自檢;

應用程序與CPU架構

  程序:由指令是數據完成某些特定功能呢的代碼,我就叫做程序;指令控制由CPU控制器來完成,而數據運算則由CPU運算器來完成;計算在讀取數據的時候哪些數據才是這段程序需要的呢?這些都由控制器來決定;

  CPU架構:復雜指令集:intel和AMD 以及 精簡指令集:IBM和ARM

  intel和AMD為x86架構,而IBM則為PowerPC架構,ARM為自己的ARM架構,M68K摩托羅拉;

  【Linux系統支持所有的CPU架構類型】

  程序移植:我們知道,程序的運行都是依賴於硬件設備,也就是我們的CPU,而不同廠家生產的CPU架構是不一樣的,這樣的話,也許這個CPU上能運行的代碼移植到別的廠家CPU上就運行不了了。為了避免這種情況,第一種方法就是使用匯編語言來編寫程序,這種低級別語言在CPU讀取上沒有太多的困難,但是對於程序員而言,想要讀懂就不太容易了。第二種方式則是通過CPU的微碼(microcode)來解決,微碼是匯編語言的一種編輯器,每個廠家為自己的CPU生產對應的微碼,但是這種方式依然不能很好解決程序移植的問題,於是就出現了高級語言。

  高級語言:高級語言通過調用系統提供的API(應用編程接口),很好的避免了程序直接和硬件打交道,這樣的話,只需要系統上運行的API,或者說庫文件一致,就能夠支持高級語言的運行,就很好的解決了程序移植的問題;

操作系統介紹

  我們知道程序是運行在操作系統之上的,但是操作系統本身也是一個程序,只不過,它是一種來搭載別的應用程序的一種平臺而已;

常見的操作系統

  windows系統,Linux系統,Unix:HP-UX/Solaris/aix,OS/2系統

操作系統的工作流程

jobs:計算機上完成的一個計算過程,我們叫一個作業; 之後為了提高CPU的運算你過程,我們將多個作業同時加載到CPU上進行處理,這個過程就叫做批處理;比如:job1$job2$job3,當CPU讀取到$後就發現前一個作業完成,開始進行後一個作業; 多任務:為了使多個jobs同時運行,我們將CPU按照時間來區分slice,一個slice假設為5ms,則job每5ms來運行一次,此時,程序運行時間斷的,所以我們需要保存現場,這個過程就由我們的進程來完成;memory和CPU一樣需要分段來使用; 操作系統:運行在硬件上,用來管理硬件資源的一個軟件;它還需要完成程序的啟動終止和資源回收的過程;它說白了就是一種軟件,它不負責具體的工作,而是用來協調其他軟件的一種軟件程序; 庫:程序為了在各個硬件上面運行,需要調用庫文件; system call系統調用:程序需要使用硬件資源,必須通過操作系統,而操作系統提供system call的接口去調用,而system call就是內核的一種調用資源的機制; 系統調用是非常底層的東西,而具體的體現形式由程序員決定,程序員可以自己開發自己具體想要的東西,但是這很麻煩,如果你真的只是想要“饅頭”,這時候就直接開發一個庫,最後調用庫即可; 技術分享圖片

shell:為人機交互接口!!!

操作系統的發展歷史

早期開發操作系統初衷是實現批處理功能,而早期的批處理系統無法發揮硬件的全部功能,於是三個公司開始開發多任務多進程的系統,這三個公司為GE通用電氣-BELL貝爾實驗室-MIT麻省理工大學;於是在1970年的時候誕生了第一個操作系統multics系統; 系統開發完成以後,他們失去了原本的目標,於是GE和BELL退出了這個項目,其中BELL一個年輕的科學家ken thompson,他為了運行自己space travel的遊戲向公司申請購買一臺計算機系統,而被公司拒絕;此時,他基於DEC(美國數字設備)公司開發的PDP-7(當時最好的是PDP-11)系統開發了自己的系統,用來運行space travel,這就是我們後面的Unix系統;而DEC公司還有一個系統(vmx)我們之後再說它! ken除了是Unix系統的發明者,他還是C語言的發明者;1973年C語言被發明,ken和他的同事Ritchie迫不及待的通過C語言重寫了Unix系統; 因為對計算機行業的巨大貢獻,ken獲得了一年的帶薪年假,在這段時間裏面,他來到了加州大學伯克利分校任教;而在這個學校裏面有個傑出的學生Bill Joy(SUN的創始人),他組織了BSRG,並且在ken的帶領下BSRG開發了一個新的系統BSD(和Unix相近)。此時BSD商業化,開始售賣賺錢;而Unix系統的所有者BELL實驗室在被Novell公司收購後也開始售賣,並由於代碼相近的原因,兩者之間因為版權問題,打了十年的官司,而在這十年裏面,我們新的IT巨頭悄悄發展起來,它就是Mircosoft; 1981年個人PC機的興起為微軟帶了商機,他借助母親的關系,將轉軸買來的的CP/M系統敲敲打打後,也就是我們後來為人所知的DOS系統,轉手賣給了IBM;此時PC機市場有著一個巨無霸,那就是jobs的蘋果公司; 蘋果Apple1系統基於Unix開發,要遠遠強於DOS系統,同時jobs在Xerox公司的PARC實驗室那看到了鼠標與圖形界面的開發,它從Xerox公司購買到了圖形界面,而比爾蓋茨則假裝幫助jobs開發圖形界面。而得到圖形界面的比爾蓋茨將自己的DOS從新開發,這就是我們的windows系統! windows系統可以說在系統行業屬於非常差的系統,經常藍屏,比爾蓋茨為了解決這個問題,推導了原本CP/M的框架從新使用了DEC的vmx系統作為底層開了一個新的系統,這就時候我們的windows NT; 十年後,當Microsoft非常強大以後,BSD和Unix停止了官司,開始發展自己的系統,其中BSD開發了FreeBSD OpenBSD NetBSD; 與此同時,Bill Joy則在這時候成立了自己的小型機系統SUN OS,也就是我們後面所知道的Solaris;SUN 2001年被oracle收購;*SUN為我們的Linux引入了CSHELL;而基於Unix系統則各個廠家開發了自己的系統例如上面說到的solaris,以及IBM的AIX和惠普的HP-Unix; 此時的系統市場已經高度商業化;Unix、BSD商業化以後,大學裏面就無法在使用這些系統教學了,此時,荷蘭大學的一個教授Andrew開發了自己系統Minix系統。 此時有個學生linus想使用Minix系統,但是想修改minix裏面的一些驅動程序,所以自己開發了一個Linux系統;此時和80年代的一個stallman發起了freedom計劃,也就是GNU計劃,GNU is not unix;GPL宣言也由此誕生,General Public License;Emacs/gcc(GNU C Complier)也就是GNU計劃提供的軟件; 我們說此時的GNU/Linux系統只是C語言的源代碼程序,而想要運行起來就必須對這些C語言程序進行編譯;而為了兼容各種CPU硬件架構,這是就出現了一些第三方公司,來開發Linux的打包程序的公司:其中包括RedHat SLS Debian SUSE,他們只是將Linux的源代碼進行編譯,能夠讓Linux系統在各種硬件上面運行,這些廠家就叫做Linux的發行商GPL的發展LGPL-GLPv2-GPLv3 Apache、BSD 相對於GPL協議而言更加開放,更加自由;而Linux內核遵循的就是GPL協定; centos:community enterprise OS 社區企業操作系統,它是社區版的紅帽; fedora:為紅帽系統的個人版本; mandriva:為紅帽的圖形系統; SUSE --> Novell(netware),OpenSUSE Debian 它是唯一一個不受商業組織維護的操作系統 Ubuntu 基於Debian的二次發型版 mint是Ubuntu的二次發型版本 Linux的內核版本:www.kernel.org RHEL:3.0 4.0 5.0 6.0 7.0 這是紅帽系統的發型版本

---恢復內容結束---

計算機的基本組成

  計算機主要要CPU與內存以及IO總線三個核心設備,加上外部設備(例如硬盤、顯示器、鼠標鍵盤等)組成;

  當前的計算機常見架構如下:

技術分享圖片

  CPU:CPU包括運算器、控制器與寄存器;其中運算器為核心設備,它用來進行數據運算,控制器則是用來處理控制指令,同時為了實現線路復用技術,我們需要保存先輸入進來的加數,等待被加數輸入進來後進行運算,而用來存儲加數的空間我叫做寄存器;

  北橋:高速總線控制器,需要高速形成數據交換,它是用來連接內存與CPU的;【現在的架構的內存直接連接到CPU了,北橋芯片則直接連接硬盤(固態硬盤)】

  南橋:低速總線控制器,它是用來連接IO設備的,然後在連接到北橋芯片上;

  加電自檢:我們說內存空間在計算機啟動的時候是沒有數據的,而計算機是如何啟動的呢?在計算機啟動的時候,電腦內置的BIOS芯片會將一段默認代碼加載到內存中,提供給CPU讀取,這段代碼實現的是CPU對於關聯硬件設備的檢測功能,比如硬盤是否正常、主板是否正常等,這個過程我們就叫做加電自檢;

應用程序與CPU架構

  程序:由指令是數據完成某些特定功能呢的代碼,我就叫做程序;指令控制由CPU控制器來完成,而數據運算則由CPU運算器來完成;計算在讀取數據的時候哪些數據才是這段程序需要的呢?這些都由控制器來決定;

  CPU架構:復雜指令集:intel和AMD 以及 精簡指令集:IBM和ARM

  intel和AMD為x86架構,而IBM則為PowerPC架構,ARM為自己的ARM架構,M68K摩托羅拉;

  【Linux系統支持所有的CPU架構類型】

  程序移植:我們知道,程序的運行都是依賴於硬件設備,也就是我們的CPU,而不同廠家生產的CPU架構是不一樣的,這樣的話,也許這個CPU上能運行的代碼移植到別的廠家CPU上就運行不了了。為了避免這種情況,第一種方法就是使用匯編語言來編寫程序,這種低級別語言在CPU讀取上沒有太多的困難,但是對於程序員而言,想要讀懂就不太容易了。第二種方式則是通過CPU的微碼(microcode)來解決,微碼是匯編語言的一種編輯器,每個廠家為自己的CPU生產對應的微碼,但是這種方式依然不能很好解決程序移植的問題,於是就出現了高級語言。

  高級語言:高級語言通過調用系統提供的API(應用編程接口),很好的避免了程序直接和硬件打交道,這樣的話,只需要系統上運行的API,或者說庫文件一致,就能夠支持高級語言的運行,就很好的解決了程序移植的問題;

操作系統介紹

  我們知道程序是運行在操作系統之上的,但是操作系統本身也是一個程序,只不過,它是一種來搭載別的應用程序的一種平臺而已;

常見的操作系統

  windows系統,Linux系統,Unix:HP-UX/Solaris/aix,OS/2系統

操作系統的工作流程

jobs:計算機上完成的一個計算過程,我們叫一個作業; 之後為了提高CPU的運算你過程,我們將多個作業同時加載到CPU上進行處理,這個過程就叫做批處理;比如:job1$job2$job3,當CPU讀取到$後就發現前一個作業完成,開始進行後一個作業; 多任務:為了使多個jobs同時運行,我們將CPU按照時間來區分slice,一個slice假設為5ms,則job每5ms來運行一次,此時,程序運行時間斷的,所以我們需要保存現場,這個過程就由我們的進程來完成;memory和CPU一樣需要分段來使用; 操作系統:運行在硬件上,用來管理硬件資源的一個軟件;它還需要完成程序的啟動終止和資源回收的過程;它說白了就是一種軟件,它不負責具體的工作,而是用來協調其他軟件的一種軟件程序; 庫:程序為了在各個硬件上面運行,需要調用庫文件; system call系統調用:程序需要使用硬件資源,必須通過操作系統,而操作系統提供system call的接口去調用,而system call就是內核的一種調用資源的機制; 系統調用是非常底層的東西,而具體的體現形式由程序員決定,程序員可以自己開發自己具體想要的東西,但是這很麻煩,如果你真的只是想要“饅頭”,這時候就直接開發一個庫,最後調用庫即可; 技術分享圖片

  shell:為人機交互接口!!!

操作系統的發展歷史

早期開發操作系統初衷是實現批處理功能,而早期的批處理系統無法發揮硬件的全部功能,於是三個公司開始開發多任務多進程的系統,這三個公司為GE通用電氣-BELL貝爾實驗室-MIT麻省理工大學;於是在1970年的時候誕生了第一個操作系統multics系統; 系統開發完成以後,他們失去了原本的目標,於是GE和BELL退出了這個項目,其中BELL一個年輕的科學家ken thompson,他為了運行自己space travel的遊戲向公司申請購買一臺計算機系統,而被公司拒絕;此時,他基於DEC(美國數字設備)公司開發的PDP-7(當時最好的是PDP-11)系統開發了自己的系統,用來運行space travel,這就是我們後面的Unix系統;而DEC公司還有一個系統(vmx)我們之後再說它! ken除了是Unix系統的發明者,他還是C語言的發明者;1973年C語言被發明,ken和他的同事Ritchie迫不及待的通過C語言重寫了Unix系統; 因為對計算機行業的巨大貢獻,ken獲得了一年的帶薪年假,在這段時間裏面,他來到了加州大學伯克利分校任教;而在這個學校裏面有個傑出的學生Bill Joy(SUN的創始人),他組織了BSRG,並且在ken的帶領下BSRG開發了一個新的系統BSD(和Unix相近)。此時BSD商業化,開始售賣賺錢;而Unix系統的所有者BELL實驗室在被Novell公司收購後也開始售賣,並由於代碼相近的原因,兩者之間因為版權問題,打了十年的官司,而在這十年裏面,我們新的IT巨頭悄悄發展起來,它就是Mircosoft; 1981年個人PC機的興起為微軟帶了商機,他借助母親的關系,將轉軸買來的的CP/M系統敲敲打打後,也就是我們後來為人所知的DOS系統,轉手賣給了IBM;此時PC機市場有著一個巨無霸,那就是jobs的蘋果公司;蘋果Apple1系統基於Unix開發,要遠遠強於DOS系統,同時jobs在Xerox公司的PARC實驗室那看到了鼠標與圖形界面的開發,它從Xerox公司購買到了圖形界面,而比爾蓋茨則假裝幫助jobs開發圖形界面。而得到圖形界面的比爾蓋茨將自己的DOS從新開發,這就是我們的windows系統! windows系統可以說在系統行業屬於非常差的系統,經常藍屏,比爾蓋茨為了解決這個問題,推導了原本CP/M的框架從新使用了DEC的vmx系統作為底層開了一個新的系統,這就時候我們的windows NT; 十年後,當Microsoft非常強大以後,BSD和Unix停止了官司,開始發展自己的系統,其中BSD開發了FreeBSD OpenBSD NetBSD;與此同時,Bill Joy則在這時候成立了自己的小型機系統SUN OS,也就是我們後面所知道的Solaris;SUN 2001年被oracle收購;*SUN為我們的Linux引入了CSHELL;而基於Unix系統則各個廠家開發了自己的系統例如上面說到的solaris,以及IBM的AIX和惠普的HP-Unix; 此時的系統市場已經高度商業化;Unix、BSD商業化以後,大學裏面就無法在使用這些系統教學了,此時,荷蘭大學的一個教授Andrew開發了自己系統Minix系統。此時有個學生linus想使用Minix系統,但是想修改minix裏面的一些驅動程序,所以自己開發了一個Linux系統;此時和80年代的一個stallman發起了freedom計劃,也就是GNU計劃,GNU is not unix;GPL宣言也由此誕生,General Public License;Emacs/gcc(GNU C Complier)也就是GNU計劃提供的軟件; 我們說此時的GNU/Linux系統只是C語言的源代碼程序,而想要運行起來就必須對這些C語言程序進行編譯;而為了兼容各種CPU硬件架構,這是就出現了一些第三方公司,來開發Linux的打包程序的公司:其中包括RedHat SLS Debian SUSE,他們只是將Linux的源代碼進行編譯,能夠讓Linux系統在各種硬件上面運行,這些廠家就叫做Linux的發行商GPL的發展LGPL-GLPv2-GPLv3 Apache、BSD 相對於GPL協議而言更加開放,更加自由;而Linux內核遵循的就是GPL協定; centos:community enterprise OS 社區企業操作系統,它是社區版的紅帽; fedora:為紅帽系統的個人版本; mandriva:為紅帽的圖形系統; SUSE --> Novell(netware),OpenSUSE Debian 它是唯一一個不受商業組織維護的操作系統 Ubuntu 基於Debian的二次發型版 mint是Ubuntu的二次發型版本 Linux的內核版本:www.kernel.org RHEL:3.0 4.0 5.0 6.0 7.0 這是紅帽系統的發型版本

01 操作系統基礎