中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

沈陽市建設(shè)委會網(wǎng)站輿情報告

沈陽市建設(shè)委會網(wǎng)站,輿情報告,程建網(wǎng),app模板目錄 1 馮諾依曼體系結(jié)構(gòu) 2 操作系統(tǒng)(Operator System) 概念 設(shè)計OS的目的 定位 總結(jié) 系統(tǒng)調(diào)用和庫函數(shù)概念 3 進程 3.1 基本概念 3.2 描述進程-PCB 3.2 組織進程 3.3 查看進程 3.4 通過系統(tǒng)調(diào)用獲取進程標(biāo)示符 3.5 進程狀態(tài) 在了解進程概念前我們還得了解下馮諾…

目錄

1 馮諾依曼體系結(jié)構(gòu)

2 操作系統(tǒng)(Operator System)

概念

設(shè)計OS的目的

定位

總結(jié)

系統(tǒng)調(diào)用和庫函數(shù)概念

3 進程

3.1 基本概念

3.2 描述進程-PCB

3.2 組織進程

?3.3 查看進程

3.4? 通過系統(tǒng)調(diào)用獲取進程標(biāo)示符

3.5 進程狀態(tài)


在了解進程概念前我們還得了解下馮諾依曼體系結(jié)構(gòu)和操作系統(tǒng)的概念與定位。

1 馮諾依曼體系結(jié)構(gòu)

我們常見的計算機,如筆記本。我們不常見的計算機,如服務(wù)器,大部分都遵守馮諾依曼體系:

  • 輸入單元:包括網(wǎng)卡,鍵盤鼠標(biāo),掃描儀, 寫板,話筒等 ;
  • 中央處理器(CPU):含有運算器和控制器等 ;
  • 輸出單元:網(wǎng)卡,顯示器,打印機等;

?關(guān)于馮諾依曼,必須強調(diào)幾點:

  • 這里的存儲器指的是內(nèi)存 ;
  • 不考慮緩存情況,這里的CPU能且只能對內(nèi)存進行讀寫,不能訪問外設(shè)(輸入或輸出設(shè)備) ;
  • 外設(shè)(輸入或輸出設(shè)備)要輸入或者輸出數(shù)據(jù),也只能寫入內(nèi)存或者從內(nèi)存中讀取;
  • 一句話,所有設(shè)備都只能直接和內(nèi)存打交道;
對馮諾依曼的理解,不能只停留在概念上,要深入到對軟件數(shù)據(jù)流理解上,請解釋,從你登錄上qq開始和某位朋友聊天開始,數(shù)據(jù)的流動過程。
在不考慮網(wǎng)絡(luò)層情況下,小明用qq向小紅發(fā)送了一條消息,小明的電腦從鍵盤上讀取信息然后加載到內(nèi)存,再從內(nèi)存將數(shù)據(jù)通過一系列操作發(fā)送到輸出設(shè)備上(網(wǎng)卡),然后通過一系列的網(wǎng)絡(luò)操作將數(shù)據(jù)發(fā)送到小紅的輸入設(shè)備上(網(wǎng)卡),小紅的電腦再從輸入設(shè)備中將數(shù)據(jù)讀到內(nèi)存,然后通過輸出設(shè)備(顯示器)將信息刷新到小紅的電腦上,這里數(shù)據(jù)刷新是兩個方面的,再成功發(fā)送后小明的電腦也會顯示出已經(jīng)成功發(fā)送后的信息。

2 操作系統(tǒng)(Operator System)

概念

任何計算機系統(tǒng)都包含一個基本的程序集合,稱為操作系統(tǒng)(OS)?;\統(tǒng)的理解,操作系統(tǒng)包括:

  • 內(nèi)核(進程管理,內(nèi)存管理,文件管理,驅(qū)動管理)
  • 其他程序(例如函數(shù)庫,shell程序等等)

?設(shè)計OS的目的

  • 與硬件交互,管理所有的軟硬件資源
  • 為用戶程序(應(yīng)用程序)提供一個良好的執(zhí)行環(huán)境

?定位

在整個計算機軟硬件架構(gòu)中,操作系統(tǒng)的定位是:一款純正的搞管理的軟件。

總結(jié)

計算機管理硬件
  1. 描述起來,用struct結(jié)構(gòu)體
  2. 組織起來,用鏈表或其他高效的數(shù)據(jù)結(jié)構(gòu)

?系統(tǒng)調(diào)用和庫函數(shù)概念

  • 在開發(fā)角度,操作系統(tǒng)對外會表現(xiàn)為一個整體,但是會暴露自己的部分接口,供上層開發(fā)使用,這部分由操作系統(tǒng)提供的接口,叫做系統(tǒng)調(diào)用。
  • 系統(tǒng)調(diào)用在使用上,功能比較基礎(chǔ),對用戶的要求相對也比較高,所以,有心的開發(fā)者可以對部分系統(tǒng)調(diào)用進行適度封裝,從而形成庫,有了庫,就很有利于更上層用戶或者開發(fā)者進行二次開發(fā)。

3 進程

有了上面對馮諾依曼體系結(jié)構(gòu)和操作系統(tǒng)的理解,我們自然可以想到進程也是先描述,再組織。

3.1 基本概念

  • 課本概念:程序的一個執(zhí)行實例,正在執(zhí)行的程序等
  • 內(nèi)核觀點:擔(dān)當(dāng)分配系統(tǒng)資源(CPU時間,內(nèi)存)的實體。

?有些教材書上甚至是給出這樣的定義的:進程就是程序加載到內(nèi)存中。但是我覺得這種描述是狹隘的不夠具體的,具體的我們下面會給出解釋.

3.2 描述進程-PCB

  • 進程信息被放在一個叫做進程控制塊的數(shù)據(jù)結(jié)構(gòu)中,可以理解為進程屬性的集合。
  • 課本上稱之為PCBprocess control block),Linux操作系統(tǒng)下的PCB: task_struct
task_struct是PCB的一種:
  • Linux中描述進程的結(jié)構(gòu)體叫做task_struct
  • task_structLinux內(nèi)核的一種數(shù)據(jù)結(jié)構(gòu),它會被裝載到RAM(內(nèi)存)里并且包含著進程的信息

?我們將所有進程的屬性用一個隊列來維護,當(dāng)我們想要加載程序時就將它的PCB鏈接到該運行隊列中,這樣就很好的維護了進程。

?那現(xiàn)在我們再來回答什么是進程?

進程=當(dāng)前程序的代碼和數(shù)據(jù)+內(nèi)核關(guān)于進程的相關(guān)數(shù)據(jù)結(jié)構(gòu)

task_ struct內(nèi)容分類:

  • 標(biāo)示符: 描述本進程的唯一標(biāo)示符,用來區(qū)別其他進程。
  • 狀態(tài): 任務(wù)狀態(tài),退出代碼,退出信號等。
  • 優(yōu)先級: 相對于其他進程的優(yōu)先級。
  • 程序計數(shù)器: 程序中即將被執(zhí)行的下一條指令的地址。
  • 內(nèi)存指針: 包括程序代碼和進程相關(guān)數(shù)據(jù)的指針,還有和其他進程共享的內(nèi)存塊的指針
  • 上下文數(shù)據(jù): 進程執(zhí)行時處理器的寄存器中的數(shù)據(jù)[休學(xué)例子,要加圖CPU,寄存器]。
  • IO狀態(tài)信息: 包括顯示的I/O請求,分配給進程的IO設(shè)備和被進程使用的文件列表。
  • 記賬信息: 可能包括處理器時間總和,使用的時鐘數(shù)總和,時間限制,記賬號等。
  • 其他信息

3.2 組織進程

  • 可以在內(nèi)核源代碼里找到它。所有運行在系統(tǒng)里的進程都以task_struct鏈表的形式存在內(nèi)核里。

?3.3 查看進程

我們在Linux環(huán)境中創(chuàng)建了一個profile.cpp的Cpp文件,然后編譯運行生成了一個叫做profile的可執(zhí)行文件,我們可以通過一下命令來查找進程:

ps ajx | head -1 && ps ajx | grep "查找進程的名字"

當(dāng)我們運行profile后來查看:

?不難發(fā)現(xiàn)我們查詢到了profile進程的一些基本信息,如果我們想不加上下面那一行的信息可以將命令后面多加一些內(nèi)容:

ps ajx | head -1 && ps ajx | grep "查找進程的名字" | grep -v grep

?當(dāng)然,文件名可加可不接雙引號。

我們還可以在./proc中查詢:

ls ./proc

3.4? 通過系統(tǒng)調(diào)用獲取進程標(biāo)示符

  • 進程idPID
  • 父進程idPPID

?我們向profile.cpp中寫入以下代碼:

  1 #include<iostream>2 #include<sys/types.h>3 #include<unistd.h>4 using namespace std;5 6 7 int main()8 {9   while(1)10   {11     pid_t ret=getpid();12     cout<<"hello"<<ret<<" "<<endl;13     pid_t t=fork();14     if(t==0)15     {16       while(1)17       {18       cout<<"我是一個子進程"<<" pid:"<<getpid()<<" ppid:"<<getppid()<<endl;19       sleep(1);20       }21     }22     else if(t>0)23     {                                                                                                                                                      24       while(1)25       {26       cout<<"我是一個父進程"<<" pid:"<<getpid()<<" ppid:"<<getppid()<<endl;27       sleep(1);28       }29     }30   }31   return 0;32 }

當(dāng)我們查看進程時:

?fork()后執(zhí)行流會變成兩個,是先執(zhí)行父進程還是子進程是由調(diào)度器決定的,fork()后的代碼共享,我們通常是用if else 來進行分流的。

  • 運行 man fork 認識fork
  • RETURN VALUEOn success, the PID of the child process is returned in the parent, and  0is  returned  in  the child.  On failure, -1 is returned in the parent, nochild process is created, and errno is set appropriately.
  • fork有兩個返回值
  • 父子進程代碼共享,數(shù)據(jù)各自開辟空間,私有一份(采用寫時拷貝)

?當(dāng)我們只讀數(shù)據(jù)不寫數(shù)據(jù)時,父子進程是共享代碼的,而當(dāng)有其中一個執(zhí)行流嘗試修改數(shù)據(jù)時OS就會在當(dāng)前進程觸發(fā)寫時拷貝另外生成一份。

如何理解有兩個返回值呢?

創(chuàng)建子進程本質(zhì)上就是OS提供的一個函數(shù),當(dāng)函數(shù)內(nèi)部進行return 時我們主體功能已經(jīng)完成了。

3.5 進程狀態(tài)

在了解進程狀態(tài)前我們還得了解下什么是阻塞和掛起?

相信大家在看一些操作系統(tǒng)的書的時候就見過類似于這樣的圖片:

?阻塞狀態(tài)是一種等待某種資源就緒,而導(dǎo)致的一種不被推進的過程。這么說有點兒抽象,我們來舉一個栗子:

當(dāng)有大量進程存在時我們是不是要先描述,再組織,前面我們說過組織進程靠的是內(nèi)核中以某種數(shù)據(jù)結(jié)構(gòu)來維護進程的PCB。假設(shè)你在應(yīng)用市場要下載一個軟件,但是下到一半時網(wǎng)絡(luò)突然中斷了,那么操作系統(tǒng)會一直等到網(wǎng)絡(luò)資源恢復(fù)后再去運行其他進程嗎?顯然是不會的,假如操作系統(tǒng)這樣設(shè)計的話那么難道我們電腦上的其他程序就不運行了嗎?就只等你一個?所以當(dāng)網(wǎng)絡(luò)資源中斷時操作系統(tǒng)會將該進程從CPU的運行隊列中拿走,放到對應(yīng)硬件資源的等待隊列中,等到網(wǎng)絡(luò)資源恢復(fù)后再將該進程鏈接到CPU的運行隊列中執(zhí)行,而這種等待某種資源就緒而不被推進的一種狀態(tài)就叫做阻塞狀態(tài)。

?而掛起又是什么意思呢?

由于機器的資源是有限的,在資源不足的情況下操作系統(tǒng)可以暫時將一些在內(nèi)存中的進程淘汰出局,當(dāng)條件允許的時候又會被操作系統(tǒng)給調(diào)回來,這個比較好理解就不在多做解釋了。

看看Linux內(nèi)核源代碼怎么說

下面的狀態(tài)在kernel源代碼里定義:

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};
  • R運行狀態(tài)(running: 并不意味著進程一定在運行中,它表明進程要么是在運行中要么在運行隊列里。
  • S睡眠狀態(tài)(sleeping): 意味著進程在等待事件完成(這里的睡眠有時候也叫做可中斷睡眠 interruptible sleep))。
  • D磁盤休眠狀態(tài)(Disk sleep)有時候也叫不可中斷睡眠狀態(tài)(uninterruptible sleep),在這個狀態(tài)的進程通常會等待IO的結(jié)束。
  • T停止?fàn)顟B(tài)(stopped): 可以通過發(fā)送 SIGSTOP 信號給進程來停止(T)進程。這個被暫停的進程可 以通過發(fā)送 SIGCONT 信號讓進程繼續(xù)運行。
  • X死亡狀態(tài)(dead):這個狀態(tài)只是一個返回狀態(tài),你不會在任務(wù)列表里看到這個狀態(tài)。

第一個R狀態(tài)并不是表示進程在運行中,有可能是在運行隊列里面。接下來給出大家一個程序大家猜猜這時一種什么狀態(tài)?

  1#include<iostream>2 #include<unistd.h>3 using namespace std;4 5 int main()6 {7   while(1)8   {9     cout<<"我是一個進程 我的pid是:"<<getpid()<<endl;           10   }11   return 0;12 }

我相信第一次大家或許都會想:既然是死循環(huán)那么程序肯定在運行狀態(tài)了,也就是R狀態(tài),事實真的是這樣嗎?我們一起來看看:

?我們居然驚奇的發(fā)現(xiàn),該進程居然處于S狀態(tài),這不合理吧?

其實大家想想,我們使用cout往顯示屏中打印字符串,這里的輸出設(shè)備就是我們的屏幕,但是輸入輸出設(shè)備是很慢的相對于CPU來說,可能當(dāng)輸入輸出一個字符時CPU就已經(jīng)跑了上百萬行代碼了。所以當(dāng)我們往顯示屏打印字符串時,操作系統(tǒng)并不會直接將該進程直接運行,而是等到當(dāng)某種資源就緒后會將該進程鏈接到運行隊列中,那這S狀態(tài)與我們上面講的阻塞狀態(tài)有點兒類似呀,其實S狀態(tài)本質(zhì)就是阻塞狀態(tài)。(要想獲得R狀態(tài)就得在資源準備就緒的一瞬間來用命令查看,太難抓了,我就不演示了)

那后面的+號是什么意思呢?

這里+表示該進程是前臺運行的,當(dāng)我們使用ctrl+c的時候能夠終止掉該進程,不寫+表示的是后臺運行的,這時用ctrl+c是無法終止掉該程序的,要用命令殺掉進程來終止,我們接下來會介紹的。

?當(dāng)我們注釋掉代碼里的打印字符時:

  1 #include<iostream>2 #include<unistd.h>3 using namespace std;4 5 int main()6 {7   while(1)8   {9    // cout<<"我是一個進程 我的pid是:"<<getpid()<<endl;               10   }                     11   return 0;             12 }               

再來看看:

?我們會發(fā)現(xiàn)代碼進程的狀態(tài)已經(jīng)變成了R.

同理,當(dāng)我們往鍵盤中輸入數(shù)據(jù)時幾乎絕大多數(shù)都是S狀態(tài),只有剛輸入數(shù)據(jù)那一瞬間才是R狀態(tài)。

D狀態(tài)是一種不可中斷休眠狀態(tài),這時就算是強如操作系統(tǒng)都不能夠干掉他,但是這種場景一般很少見,除非機器快宕機了。

T狀態(tài)是一種停止?fàn)顟B(tài),我們可以通過一個命令來改變當(dāng)前的狀態(tài)位T狀態(tài),大家可以查看有哪些kill命令:

kill -l

這時就會出現(xiàn)很多與kill相匹配的選項:

1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

這里我們使用19號命令來暫停進程:

kill -19 進程的pid

?那如何恢復(fù)呢?

可以用kill命令配帶的18號選項:

kill -18 進程的pid

?

?但是大家發(fā)現(xiàn)沒有,這里的S狀態(tài)是沒有加+,也就是該進程是在后臺運行的,不可以被ctrl+c終止

?這時應(yīng)該怎么處理呢?

我們可以試試kill帶的9號選項:

kill -9 進程的pid

?這時該進程已經(jīng)被干掉了。

除了T狀態(tài)還有一個t狀態(tài),這里的t表示的一種追蹤暫停,類似于我們打斷點運行到斷點處:

我們可以打開Makefile加入斷點信息,然后調(diào)試起來

?不難發(fā)現(xiàn)此時的狀態(tài)已經(jīng)變成了t.

至于后面的X和Z狀態(tài)將會放在下一節(jié)課來講解,如果該文對你有幫助的話能不能3連支持一下博主呢?

http://www.risenshineclean.com/news/11196.html

相關(guān)文章:

  • 長沙做網(wǎng)站多少錢google優(yōu)化排名
  • 潁上縣建設(shè)局網(wǎng)站網(wǎng)絡(luò)營銷概述
  • 網(wǎng)頁設(shè)計策劃案范文seo技術(shù) 快速網(wǎng)站排名
  • 網(wǎng)站導(dǎo)航條內(nèi)容網(wǎng)絡(luò)營銷工作內(nèi)容和職責(zé)
  • 如何增加網(wǎng)站的索引量今日國際新聞頭條15條
  • 官方網(wǎng)站模板seo平臺怎么樣
  • 保定設(shè)計網(wǎng)站建設(shè)網(wǎng)站設(shè)計公司排名
  • 南京做電商網(wǎng)站的公司三亞百度推廣開戶
  • 電子元器件網(wǎng)站建設(shè)北京seo公司公司
  • 網(wǎng)站的登錄注冊怎么做希愛力
  • 文案轉(zhuǎn)行做網(wǎng)站編輯網(wǎng)絡(luò)營銷的主要特點有哪些
  • 做鏡像網(wǎng)站違法引擎搜索大全
  • 3 闡述網(wǎng)站建設(shè)的步驟過程 9分搜索引擎優(yōu)化方法案例
  • 網(wǎng)站建設(shè)用啥技術(shù)開發(fā)一個app價目表
  • 注冊企業(yè)郵箱需要什么新鄉(xiāng)搜索引擎優(yōu)化
  • 什么網(wǎng)站可以做數(shù)據(jù)圖阿里云域名注冊
  • 如何做國外的電商網(wǎng)站設(shè)計廣告營銷的經(jīng)典案例
  • 中國建設(shè)銀行手機銀行網(wǎng)站ui設(shè)計
  • 做網(wǎng)站服務(wù)器是什么百度上搜索關(guān)鍵詞如何在首頁
  • 濮陽網(wǎng)站建設(shè)哪家好推廣軟件排行榜前十名
  • 手機平臺軟件開發(fā)關(guān)鍵詞推廣優(yōu)化排名如何
  • 石家莊做外貿(mào)的網(wǎng)站建設(shè)百度上首頁
  • mac網(wǎng)站開發(fā)環(huán)境seo和競價排名的區(qū)別
  • 可以做lebenslauf的網(wǎng)站線上宣傳有哪些好的方式方法
  • 建網(wǎng)站賣虛擬資源需要怎么做開魯網(wǎng)站seo不用下載
  • 工程建設(shè)標(biāo)準網(wǎng)官方網(wǎng)站網(wǎng)站seo具體怎么做
  • 網(wǎng)站建設(shè)布局洛陽市網(wǎng)站建設(shè)
  • java做網(wǎng)站pdf制作一個網(wǎng)站大概需要多少錢
  • 網(wǎng)站備案都需要什么百度助手應(yīng)用商店下載安裝
  • wordpress 仿站命令網(wǎng)推拉新app推廣接單平臺