計算機-操做系統程序員
一 .爲何要有操做系統算法
現代的計算機系統主要是由一個或者多個處理器,主存,硬盤,鍵盤,鼠標,顯示器,打印機,網絡接口及其餘輸入輸出設備組成。由於管理這些部件並加以優化使用,是一件極富挑戰性的工做,因而,計算安裝了一層軟件(系統軟件),稱爲操做系統。它的任務就是爲用戶程序提供一個更好、更簡單、更清晰的計算機模型,並管理剛纔提到的全部設備。shell
二 .操做系統的位置編程
操做系統位於計算機硬件與應用軟件之間,本質也是一個軟件。操做系統由操做系統的內核(運行於內核態,管理硬件資源)以及系統調用(運行於用戶態,爲應用程序員寫的應用程序提供系統調用接口)兩部分組成,因此,單純的說操做系統是運行於內核態的,是不許確的。安全
三.操做系統的功能服務器
a:隱藏了醜陋的硬件調用接口,爲應用程序員提供調用硬件資源的更好,更簡單,更清晰的模型(系統調用接口)。應用程序員有了這些接口後,就不用再考慮操做硬件的細節,專心開發本身的應用程序便可。網絡
好比,磁盤資源的抽象是文件系統(C盤,D盤,E盤...下的目錄及文件),有了文件的概念,咱們直接打開文件,讀或者寫就能夠了,無需關心記錄是否應該使用修正的調頻記錄方式,以及當前電機的狀態等細節, 須要指出的是,操做系統的實際客戶是應用程序(應用程序員負責開發應用程序,於是也能夠說應用程序員是操做系統的客戶)。應用程序直接與操做系統及其抽象打交道。而最終,用戶則是與應用程序(即用戶接口)打交道,或者是命令行shell或者是圖形界面(好比桌面),它們都只是運行於操做系統之上的應用軟件,並不屬於操做系統。併發
b:將應用程序對硬件資源的競態請求變得有序化,例如:不少應用軟件實際上是共享一套計算機硬件,比方說有可能有三個應用程序同時須要申請打印機來輸出內容,那麼a程序競爭到了打印機資源就打印,而後多是b競爭到打印機資源,也多是c,這就致使了無序,打印機可能打印一段a的內容而後又去打印c...,操做系統的一個功能就是將這種無序變得有序(多路複用)性能
四.操做系統的發展優化
第一代計算機(1940~1955):真空管和穿孔卡片
第一代計算機的產生背景:
第一代以前人類是想用機械取代人力,第一代計算機的產生是計算機由機械時代進入電子時代的標誌,從Babbage失敗以後一直到第二次世界大戰,數字計算機的建造幾乎沒有什麼進展,第二次世界大戰刺激了有關計算機研究的爆炸性進展。
lowa州立大學的john Atanasoff教授和他的學生Clifford Berry建造了據認爲是第一臺可工做的數字計算機。該機器使用300個真空管。大約在同時,Konrad Zuse在柏林用繼電器構建了Z3計算機,英格蘭布萊切利園的一個小組在1944年構建了Colossus,Howard Aiken在哈佛大學建造了Mark 1,賓夕法尼亞大學的William Mauchley和他的學生J.Presper Eckert建造了ENIAC。這些機器有的是二進制的,有的使用真空管,有的是可編程的,但都很是原始,設置須要花費數秒鐘時間才能完成最簡單的運算。
在這個時期,同一個小組裏的工程師們,設計、建造、編程、操做及維護同一臺機器,全部的程序設計是用純粹的機器語言編寫的,甚至更糟糕,須要經過成千上萬根電纜街道插件板上連成電路來控制機器的基本功能。沒有程序設計語言(彙編也沒有),操做系統則是歷來都沒據說過。使用機器的過程更加原始.
特色:沒有操做系統的概念全部的程序設計都是由純粹的機器語言編寫的.
工做過程:程序員在牆上的機時表預定一段時間,而後程序員拿着他的插件版到機房裏,將本身的插件板街道計算機裏,這幾個小時內他獨享整個計算機資源,後面的一批人都得等着(兩萬多個真空管常常會有被燒壞的狀況出現)。後來出現了穿孔卡片,能夠將程序寫在卡片上,而後讀入機而不用插件板
優勢:程序員在申請的時間段內獨享整個資源,即時的調試本身的程序,若是有bug能夠即時處理.
缺點:這對於計算機提供商來講是一種浪費(你買一臺電腦4000塊,那 一年中你用365比只用1天,確定是省成本的,物盡其用)你有一臺電腦你往外租,你一次租2個小時,那麼即使是用戶在第一個小時就已經完成工做了,剩下的1個小時你的電腦就空閒了,而一天你只能租給12我的,至關於要浪費12個小時。
注意:同一時刻只有一個程序在內存中,被cpu調用執行,比方說10個程序的執行,是串行的
第二代計算機(1955~1965):晶體管和批處理系統
第二代計算機的產生背景:
因爲當時的計算機很是昂貴,自認很天然的想辦法較少機時的浪費。一般採用的方法就是批處理系統。
特色:設計人員、生產人員、操做人員、程序人員和維護人員直接有了明確的分工,計算機被鎖在專用空調房間中,由專業操做人員運行,這即是‘大型機’。
有了操做系統的概念,下圖就是最先期的操做系統:是人力與計算機結合的系統,須要人蔘與。
有了程序設計語言:FORTRAN語言或彙編語言,寫到紙上,而後穿孔打成卡片,再講卡片盒帶到輸入室,交給操做員,而後喝着咖啡等待輸出接口
工做過程:插圖
第一代計算機的問題是:
人機交互太多了(人機交互過程:輸入-》計算-》輸出)
一我的的交互:輸入-》計算-》輸出
10我的的交互:
輸入-》計算-》輸出
輸入-》計算-》輸出
輸入-》計算-》輸出
輸入-》計算-》輸出
輸入-》計算-》輸出
第二代如何解決第一代的問題:
1.把一堆人的輸入攢成一大波輸入,
2.而後順序計算(這是有問題的,可是第二代計算也沒有解決)
3.把一堆人的輸出攢成一大波輸出
現代操做系統的前身:在收集了大約一個小時的批量做業以後,這些卡片被讀入磁帶,而後磁帶被送到機房裏並裝到磁帶上。而後磁帶被送到機房裏並裝到磁帶機上。隨後,操做員裝入一個特殊的程序,它負責從磁帶上讀入第一個做業(job,一個或一組程序)並運行,其輸出寫到第二個磁帶上,並且不打印。每一個做業結束後,操做系統自動的從磁帶上讀入下一個做業而且運行。當一整批的做業所有結束後,操做員去下輸入和輸出磁帶,講輸入磁帶換成下一批做業,而且把輸出磁帶拿到一臺1041機器上進行脫機(不與主計算機聯機)打印,這一套須要人蔘的狀況下機器才能運行的系統乃現代操做系統的前身
優勢:批處理,節省了機時
缺點:
1.整個流程須要人蔘與控制,將磁帶搬來搬去(中間倆小人)
2.計算的過程仍然是順序計算-》串行
3.程序員原來獨享一段時間的計算機,如今必須被統一規劃到一批做業中,等待結果和從新調試的過程都須要等同批次的其餘程序都運做完才能夠(這極大的影響了程序的開發效率,沒法及時調試程序)
第三代計算機(1965~1980):集成電路芯片和多道程序設計
第三代計算機的產生背景:
20世紀60年代初期,大多數計算機廠商都有兩條徹底不兼容的生產線。
一條是面向字的:大型的科學計算機,如IBM 7094,見上圖,主要用於科學計算和工程計算
另一條是面向字符的:商用計算機,如IBM 1401,見上圖,主要用於銀行和保險公司從事磁帶歸檔和打印服務
開發和維護徹底不一樣的產品是昂貴的,同時不一樣的用戶對計算機的用途不一樣。
IBM公司試圖經過引入system/360系列來同時知足科學計算和商業計算,360系列低檔機與1401至關,高檔機比7094功能強不少,不一樣的性能賣不一樣的價格
360是第一個採用了(小規模)芯片(集成電路)的主流機型,與採用晶體管的第二代計算機相比,性價比有了很大的提升。這些計算機的後代仍在大型的計算機中內心使用,此乃如今服務器的前身,這些服務器每秒處理不小於千次的請求。
如何解決第二代計算機的問題1:
卡片被拿到機房後可以很快的將做業從卡片讀入磁盤,因而任什麼時候刻當一個做業結束時,操做系統就能將一個做業從磁帶讀出,裝進空出來的內存區域運行,這種技術叫作
同時的外部設備聯機操做:SPOOLING,該技術同時用於輸出。當採用了這種技術後,就不在須要IBM1401機了,也沒必要將磁帶搬來搬去了(中間倆小人再也不須要)
如何解決第二代計算機的問題2:第三代計算機的操做系統普遍應用了第二代計算機的操做系統沒有的關鍵技術:
多道技術
多道技術中的多道指的是多個程序,多道技術的實現是爲了解決多個程序競爭或者說共享同一個資源(好比cpu)的有序調度問題,解決方式即多路複用,多路複用分爲時間上的複用和空間上的複用。
空間上的複用:將內存分爲幾部分,每一個部分放入一個程序,這樣,同一時間內存中就有了多道程序。
時間上的複用:當一個程序在等待I/O時,另外一個程序可使用cpu,若是內存中能夠同時存放足夠多的做業,則cpu的利用率能夠接近100%,相似於咱們小學數學所學的統籌方法。
空間上的複用最大的問題是:程序直接的內存必須分割,這種分割在硬件層面實現,由操做系統控制實現。若是內存彼此不分割,則一個程序能夠訪問另一個程序的內存,
首先喪失的是安全性,好比你的qq程序能夠訪問操做系統的內存,這意味着你的qq能夠拿到操做系統的全部權限。
其次喪失的是穩定性,某個程序崩潰時有可能把別人的內存也給回收了,比方說把操做系統的內存給回收了,則操做系統崩潰。
第三代計算機的操做系統仍然是批處理
許多程序員懷念第一代獨享的計算機,能夠即時調試本身的程序。爲了知足程序員們很快能夠獲得響應,出現了分時操做系統
多個聯機終端+多道技術20個客戶端同時加載到內存,有17在思考,3個在運行,cpu就採用多道的方式處理內存中的這3個程序,因爲客戶提交的通常都是簡短的指令並且不多有耗時長的,索引計算機可以爲許多用戶提供快速的交互式服務,全部的用戶都覺得本身獨享了計算機資源
CTTS:麻省理工(MIT)在一臺改裝過的7094機上開發成功的,CTSS兼容分時系統,第三代計算機普遍採用了必須的保護硬件(程序之間的內存彼此隔離)以後,分時系統纔開始流行
MIT,貝爾實驗室和通用電氣在CTTS成功研製後決定開發可以同時支持上百終端的MULTICS(其設計者着眼於建造知足波士頓地區全部用戶計算需求的一臺機器),很明顯真是要上天啊,最後摔死了。
後來一位參加過MULTICS研製的貝爾實驗室計算機科學家Ken Thompson開發了一個簡易的,單用戶版本的MULTICS,這就是後來的UNIX系統。基於它衍生了不少其餘的Unix版本,爲了使程序能在任何版本的unix上運行,IEEE提出了一個unix標準,即posix(可移植的操做系統接口Portable Operating System Interface)
後來,在1987年,出現了一個UNIX的小型克隆,即minix,用於教學使用。芬蘭學生Linus Torvalds基於它編寫了Linux
第四代計算機(1980~至今):我的計算機
五.多道技術
1.時間上的複用
當一個資源在時間上覆用時,不一樣的程序或用戶輪流使用它,第一個程序獲取該資源使用結束後,在輪到第二個。。。第三個。。。
例如:只有一個cpu,多個程序須要在該cpu上運行,操做系統先把cpu分給第一個程序,在這個程序運行的足夠長的時間(時間長短由操做系統的算法說了算)或者遇到了I/O阻塞,操做系統則把cpu分配給下一個程序,以此類推,直到第一個程序從新被分配到了cpu而後再次運行,因爲cpu的切換速度很快,給用戶的感受就是這些程序是同時運行的,或者說是併發的,或者說是僞並行的。至於資源如何實現時間複用,或者說誰應該是下一個要運行的程序,以及一個任務須要運行多長時間,這些都是操做系統的工做。
2.空間上的複用
每一個客戶都獲取了一個大的資源中的一小部分資源,從而減小了排隊等待資源的時間。
例如:多個運行的程序同時進入內存,硬件層面提供保護機制來確保各自的內存是分割開的,且由操做系統控制,這比一個程序獨佔內存一個一個排隊進入內存效率要高的多。
有關空間複用的其餘資源還有磁盤,在許多系統中,一個磁盤同時爲許多用戶保存文件。分配磁盤空間而且記錄誰正在使用哪一個磁盤塊是操做系統資源管理的典型任務。、
這兩種方式合起來即是多道技術
計算機-網絡基礎
一.什麼是互聯網協議及爲什麼要有互聯網協議
英語成爲世界上全部人通訊的統一標準,若是把計算機當作分佈於世界各地的人,那麼鏈接兩臺計算機之間的internet實際上就是一系列統一的標準,這些標準稱之爲互聯網協議,互聯網的本質就是一系列的協議,總稱爲‘互聯網協議’(Internet Protocol Suite).
互聯網協議的功能:定義計算機如何接入internet,以及接入internet的計算機通訊的標準。
二.osi七層模型
三.用戶上網流程
物理層由來:上面提到,孤立的計算機之間要想一塊兒玩,就必須接入internet,言外之意就是計算機之間必須完成組網
數據鏈路層:定義了電信號的分組方式
網絡層:引入一套新的地址用來區分不一樣的廣播域/子網,這套地址即網絡地址
傳輸層:創建端口到端口的通訊
應用層:規定應用程序的數據格式。