#一 操做系統的做用:
1:隱藏醜陋複雜的硬件接口,提供良好的抽象接口
2:管理、調度進程,而且將多個進程對硬件的競爭變得有序
#二 多道技術:
1.產生背景:針對單核,實現併發
ps:
如今的主機通常是多核,那麼每一個核都會利用多道技術
有4個cpu,運行於cpu1的某個程序遇到io阻塞,會等到io結束再從新調度,會被調度到4個
cpu中的任意一個,具體由操做系統調度算法決定。
2.空間上的複用:如內存中同時有多道程序
3.時間上的複用:複用一個cpu的時間片
強調:遇到io切,佔用cpu時間過長也切,核心在於切以前將進程的狀態保存下來,這樣
才能保證下次切換回來時,能基於上次切走的位置繼續運行
進程的概念:
第一,進程是一個實體。每個進程都有它本身的地址空間,通常狀況下,包括文本區域(text region)(python的文件)、數據區域(data region)(python文件中定義的一些變量數據)和堆棧(stack region)。文本區域存儲處理器執行的代碼;數據區域存儲變量和進程執行期間使用的動態分配的內存;堆棧區域存儲着活動過程調用的指令和本地變量。
第二,進程是一個「執行中的程序」。程序是一個沒有生命的實體,只有處理器賦予程序生命時(操做系統執行之),它才能成爲一個活動的實體,咱們稱其爲進程。[3]
進程是操做系統中最基本、重要的概念。是多道程序系統出現後,爲了刻畫系統內部出現的動態狀況,描述系統內部各道程序的活動規律引進的一個概念,全部多道程序設計操做系統都創建在進程的基礎上。
進程和程序的區別:
程序是指令和數據的有序集合,其自己沒有任何運行的含義,是一個靜態的概念。
而進程是程序在處理機上的一次執行過程,它是一個動態的概念。
程序能夠做爲一種軟件資料長期存在,而進程是有必定生命期的。
程序是永久的,進程是暫時的。
舉例:就像qq同樣,qq是咱們安裝在本身電腦上的客戶端程序,其實就是一堆的代碼文件,咱們不運行qq,那麼他就是一堆代碼程序,當咱們運行qq的時候,這些代碼運行起來,就成爲一個進程了。
進程狀態:
就緒,運行,堵塞
同步,異步,阻塞,非阻塞
所謂同步就是一個任務的完成須要依賴另一個任務時,只有等待被依賴的任務完成後,依賴的任務才能算完成,這是一種可靠的任務序列
。要麼成功都成功,失敗都失敗,兩個任務的狀態能夠保持一致。其實就是一個程序結束才執行另一個程序,串行的,不必定兩個程序就有依賴關係。
python
所謂異步是不須要等待被依賴的任務完成,只是通知被依賴的任務要完成什麼工做,依賴的任務也當即執行,只要本身完成了整個任務就算完成了
。至於被依賴的任務最終是否真正完成,依賴它的任務沒法肯定,因此它
是不可靠的
任務序列
。算法
異步非阻塞形式:效率更高,由於打電話是你(等待者)的事情,而通知你則是櫃檯(消息觸發機制)的事情,程序沒有在兩種不一樣的操做中來回切換
。併發