day 7 1 程序理論知識

2022-05-10 00:46:15 字數 4391 閱讀 4867

一.程序的定義

程序(process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統

結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。

程序的概念起源於作業系統,是作業系統最核心的概念,也是作業系統提供的最古老的也是最重要的抽象概念之一。作業系統的其他所有內容都是圍繞程序的概念展開的。所以想要 

真正了解程序,必須先了解作業系統。詳見部落格點選進入。

須知的理論基礎:

#

一 作業系統的作用:

1:隱藏醜陋複雜的硬體介面,提供良好的抽象介面

2:管理、排程程序,並且將多個程序對硬體的競爭變得有序

#二 多道技術:

1.產生背景:針對單核,實現併發

ps:現在的主機一般是多核,那麼每個核都會利用多道技術,但是核與核之間沒有使用多道技術切換這麼一說;

有4個cpu,執行於cpu1的某個程式遇到io阻塞,會等到io結束再重新排程,會被排程到4個cpu中的任意乙個,具體由作業系統排程演算法決定。

2.時間上的復用:當乙個程式在等待i/o時,另乙個程式可以使用cpu,如果記憶體中可以同時存放足夠多的作業,則cpu的利用率可以接近100%,類似於我們小學數學所學的統籌方法。

(作業系統採用了多道技術後,可以控制程序的切換,或者說程序之間去爭搶cpu的執行許可權。這種切換不僅會在乙個程序遇到io時進行,乙個程序占用cpu時間過長也會切換,

或者說被作業系統奪走cpu的執行許可權)

3.空間上的復用:將記憶體分為幾部分,每個部分放入乙個程式,這樣,同一時間記憶體中就有了多道程式。

一 什麼是程序

程序:正在進行的乙個過程或者說乙個任務。而負責執行任務則是cpu。

舉例:(單核+多道,實現多個程序的併發):

比如說你就是乙個cpu,你下午有幾個活要幹,吃飯,洗衣服,上廁所等。但是就在那一下午要把所有的事幹完(而cpu同一時間只能幹一件事),那麼如何才能讓多個任務實現並

發執行的效果呢?那麼,你應該這樣做,你可以先做飯,在等待飯熟的過程中你可以去洗個衣服,洗的差不多飯也就熟了,那麼你在去上個廁所也可以嘛。

二. 程序與程式的區別

程式僅僅只是一堆**而已,而程序指的是程式的執行過程。

同乙個程式多次執行,會產生多個程序.比如你開了2個qq程式,就會產生2個qq.exe的程序.

三. 併發與並行

併發:單個cpu+多道技術.偽並行,看起來像是同時在執行多個程式,其實是通過多道技術來實現.

無論是並行還是併發,在使用者看來都是'同時'執行的,不管是程序還是執行緒,都只是乙個任務而已,真是幹活的是cpu,cpu來做這些任務,而乙個cpu同一時刻只能執行乙個任務

一 併發:是偽並行,即看起來是同時執行。單個cpu+多道技術就可以實現併發.

什麼時候cpu會利用多道技術在程序間切換?

a:當乙個程式遇到io,cpu就會切換到另外乙個程式上去執行.(提高cpu的利用率,提高效率)

b:當乙個程式執行的時間過長,cpu也會切換到另外乙個程式上去執行(降低了效率,來回切換是需要時間的,這就增加了cpu的切換時間)

並行:同時執行,只有具備多個cpu才能實現並行.

單核下,可以利用多道技術,多個核,每個核也都可以利用多道技術(多道技術是針對單核而言的), 有四個核,六個任務,這樣同一時間有四個任務被執行,假設分別被分配給了   

cpu1,cpu2,cpu3,cpu4, 一旦任務1遇到i/o就被迫中斷執行,此時任務5就拿到cpu1的時間片去執行,這就是單核下的多道技術,一旦任務1的i/o結束了,作業系統會重新呼叫它(需知

程序的排程、分配給哪個cpu執行,由作業系統說了算),可能被分配給四個cpu中的任意乙個去執行,所有現代計算機經常會在同一時間做很多件事,乙個使用者的pc(無論是單cpu還是多

cpu),都可以同時執行多個任務(乙個任務可以理解為乙個程序)  

多道技術:記憶體中同時存入多道(多個)程式,cpu從乙個程序快速切換到另外乙個,使每個程序各自執行幾十或幾百毫秒,這樣,雖然在某乙個瞬間,乙個cpu只能執行乙個任務,

但在1秒內,cpu卻可以執行多個程序,這就給人產生了並行的錯覺,即偽併發,以此來區分多處理器作業系統的真正硬體並行(多個cpu共享同乙個物理記憶體)

四. 同步和非同步

同步執行:乙個程序在執行某個任務時,另外乙個程序必須等待其執行完畢,才能繼續執行其他的程序

非同步執行:乙個程序在執行某個任務時,另外乙個程序無需等待其執行完畢,就可以繼續執行,當有訊息返回時,系統會通知後者進行處理,這樣可以提高執行效率

舉個例子,打**時就是同步通訊,發短息時就是非同步通訊。

五. 程序的建立

但凡是硬體,都需要有作業系統去管理,只要有作業系統,就有程序的概念,就需要有建立程序的方式,一些作業系統只為乙個應用程式設計,比如微波爐中的控制器,一旦啟動微

波爐,所有的程序都已經存在。

而對於通用系統(跑很多應用程式),需要有系統執行過程中建立或撤銷程序的能力,主要分為4中形式建立新的程序:

系統初始化(檢視程序linux中用ps命令,windows中用任務管理器,前台程序負責與使用者互動,後台執行的程序與使用者無關,執行在後台並且只在需要時才喚醒的程序,稱為守護程序,如電子郵件、web頁面、新聞、列印)

乙個程序在執行過程中開啟了子程序(如nginx開啟多程序,os.fork,subprocess.popen等)

使用者的互動式請求,而建立乙個新程序(如使用者雙擊暴風影音)

乙個批處理作業的初始化(只在大型機的批處理系統中應用)

無論哪一種,新程序的建立都是由乙個已經存在的程序執行了乙個用於建立程序的系統呼叫而建立的:

在unix中該系統呼叫是:fork,fork會建立乙個與父程序一模一樣的副本,二者有相同的儲存映像、同樣的環境字串和同樣的開啟檔案(在shell直譯器程序中,執行乙個命令就會建立乙個子程序)

在windows中該系統呼叫是:createprocess,createprocess既處理程序的建立,也負責把正確的程式裝入新程序。

關於建立的子程序,unix和windows

六. 程序的終止

正常退出(自願,如使用者點選互動式頁面的叉號,或程式執行完畢呼叫發起系統呼叫正常退出,在linux中用exit,在windows中用exitprocess)

出錯退出(自願,python a.py中a.py不存在)

嚴重錯誤(非自願,執行非法指令,如引用不存在的記憶體,1/0等,可以捕捉異常,try...except...)

被其他程序殺死(非自願,如kill -9)

七. 程序的層次結構

無論unix還是windows,程序只有乙個父程序,不同的是:

在unix中所有的程序,都是以init程序為根,組成樹形結構。父子程序共同組成乙個程序組,這樣,當從鍵盤發出乙個訊號時,該訊號被送給當前與鍵盤相關的程序組中的所有成員。

在windows中,沒有程序層次的概念,所有的程序都是地位相同的,唯一類似於程序層次的暗示,是在建立程序時,父程序得到乙個特別的令牌(稱為控制代碼),該控制代碼可以用來控制子程序,但是父程序有權把該控制代碼傳給其他子程序,這樣就沒有層次了。

八. 程序的狀態

tail -f access.log |grep '404'

執行程式tail,開啟乙個子程序,執行程式grep,開啟另外乙個子程序,兩個程序之間基於管道'|'通訊,將tail的結果作為grep的輸入。

程序grep在等待輸入(即i/o)時的狀態稱為阻塞,此時grep命令都無法執行

其實在兩種情況下會導致乙個程序在邏輯上不能執行,

程序掛起是自身原因,遇到i/o阻塞,便要讓出cpu讓其他程序去執行,這樣保證cpu一直在工作

與程序無關,是作業系統層面,可能會因為乙個程序占用時間過多,或者優先順序等原因,而呼叫其他的程序去使用cpu。

乙個程序的三種狀態:

九. 程序併發的實現

程序併發的實現在於,硬體中斷乙個正在執行的程序,把此時程序執行的所有狀態儲存下來,為此,作業系統維護一張**,即程序表(process table),每個程序占用乙個程序表項

(這些表項也稱為程序控制塊)

該錶存放了程序狀態的重要資訊:程式計數器、堆疊指標、記憶體分配狀況、所有開啟檔案的狀態、帳號和排程資訊,以及其他在程序由執行態轉為就緒態或阻塞態時,必須儲存的資訊,從而保證該程序在再次啟動時,就像從未被中斷過一樣。

python 程序理論知識

1.在看程序之前了解一下作業系統 1 作業系統的作用 a 隱藏醜陋複雜的硬體介面,提供良好的抽象介面 b 管理 排程程序,並且將多個程序對硬體的競爭變得有序 2 多道技術 a.產生背景 針對單核,實現併發 ps 現在的主機一般是多核,那麼每個核都會利用多道技術 有4個cpu,執行於cpu1的某個程式...

Day71 資料分析 Excel

最常用的操作 ctrl a 全選 ctrl z 撤銷 ctrl x 剪下 ctrl c 複製 ctrl v 貼上 ctrl b 加粗 ctrl s 儲存 ctrl f 查詢 ctrl h 替換 alter enter 單元格內強制換行 區域選擇 home 移到工作表中某一行的開頭 ctrl home...

web services理論知識

web服務作為一種能夠快速整合應用的技術,如果與非同步傳輸進行組合,就將為構建企業級應用提供所需的可靠性。在本文中,我們嘗試用兩種設計方法來部署和訪問非同步web服務 通過使用 apache axis 在第一種方法中,用websphere mq support pac ma0r來提供mq傳輸 利用w...