欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何區(qū)分程序與進(jìn)程

jf_78858299 ? 來源:碼農(nóng)的荒島求生 ? 作者:碼農(nóng)的荒島求生 ? 2023-02-24 14:17 ? 次閱讀

到目前為止,你肯定已經(jīng)見過很多次這兩個(gè)詞了,“程序”“進(jìn)程”。那程序和進(jìn)程到底有什么區(qū)別呢。

程序是一個(gè)靜態(tài)的概念。

進(jìn)程是一個(gè)動(dòng)態(tài)的概念。

我們用一個(gè)例子來形象的講解一下這個(gè)區(qū)別。程序其實(shí)本質(zhì)上和我們的菜譜非常類似,一個(gè)菜譜規(guī)定了完成一道菜的整個(gè)流程,一步一步每個(gè)節(jié)點(diǎn)執(zhí)行什么樣的操作,但是看一遍菜譜是不能變出一道美味可口的菜肴的。要想真正做出一道菜就應(yīng)該按照菜譜的要求走一遍,準(zhǔn)備好食材,按照菜譜的指導(dǎo),打開燃?xì)?,鍋熱后倒入油,待油溫適宜后放入準(zhǔn)備好的食材、調(diào)味料,然后不斷翻炒直至炒熟,這樣一道美味就新鮮出鍋啦。

在這個(gè)例子中 如果把菜譜比作我們寫的程序,那么按照菜譜真正炒菜的這個(gè)過程才是進(jìn)程 。如果你自己真的炒過菜,相信會(huì)對此有更加深刻地的理解,如果你還沒有做過菜,那么筆者強(qiáng)烈建議讀者自己真正的去炒一道菜感受一下。

進(jìn)程是計(jì)算機(jī)科學(xué)當(dāng)中一個(gè)及其重要的概念,徹底理解進(jìn)程是理解操作系統(tǒng)工作原理的關(guān)鍵所在,同時(shí)也是編程高手的標(biāo)志之一。

編程高手與普通程序員的分水嶺

進(jìn)程是計(jì)算機(jī)操作系統(tǒng)中至關(guān)重要的一個(gè)概念,可以說徹底理解進(jìn)程這個(gè)概念是能否成為擁有“自我探索”能力的編程高手的一個(gè)分水嶺, 能徹底理解操作系統(tǒng)如何實(shí)現(xiàn)進(jìn)程是編程高手的關(guān)鍵性標(biāo)志。 理解了這個(gè)概念以后你幾乎不會(huì)再遇到程序出現(xiàn)了問題,但是你根本就不知道到底哪里出現(xiàn)問題的窘境。正因?yàn)檫@個(gè)概念的重要性因此我們后面的文章會(huì)有很大一部分都是圍繞著進(jìn)程來進(jìn)行講解的,目的就是確保大家能真正掌握這一思想,從而在成為高手的道路上邁出堅(jiān)實(shí)的一步。

接下來讓我們首先來看一下程序是如何生成的。

程序是如何生成的

程序這個(gè)詞其實(shí)是比較籠統(tǒng)的,在我們學(xué)習(xí)工作工作過程中,即指我們?nèi)祟惪梢哉J(rèn)識(shí)的字符串程序,也可以指機(jī)器可以運(yùn)行的二進(jìn)制機(jī)器指令程序,這個(gè)程序就是可執(zhí)行程序。

所以在這里需要大家能意識(shí)到一點(diǎn),程序這個(gè)詞有兩種含義:

  • 人類可以認(rèn)識(shí)的程序,這些程序就是用比如C/C++,Java,Python語言寫成的文本文件。比如helloworld.c,hellworld.java,helloworld.py
  • 機(jī)器可以認(rèn)識(shí)的程序,這些程序就是可執(zhí)行程序。Windows下就是exe程序,Linux下就是elf程序。

因?yàn)橛?jì)算機(jī)看不懂人類可以認(rèn)識(shí)的文本文件程序,因此需要將文本文件程序轉(zhuǎn)換為機(jī)器可以認(rèn)識(shí)的可執(zhí)行程序。這個(gè)翻譯過程就是編譯器來完成的。編譯器將文本文件程序翻譯成二進(jìn)制機(jī)器指令程序。

在前幾節(jié)中,有兩種類型的語言,一類是C/C++這種編譯型語言,一類是比如Python、Java等解釋型語言,CPU可以直接運(yùn)行C/C++程序經(jīng)編譯后生成的機(jī)器指令,但解釋型語言不能直接被CPU執(zhí)行,解釋型語言是被解釋器直接執(zhí)行的,而解釋器可以被CPU直接執(zhí)行,因?yàn)檫@些解釋器通常都是C/C++語言編寫的,就好比下面這樣:

$ python helloworld.py

其中python就是一個(gè)C語言程序,只不過這個(gè)C語言程序可以來執(zhí)行python程序。有了這些背景后,接下來我們重點(diǎn)關(guān)注C/C++這類解釋型語言是如何從文本文件轉(zhuǎn)變?yōu)榭蓤?zhí)行文件的。

接下來的這句話,大家一定要理解,那就是:

程序其實(shí)包含兩部分內(nèi)容,一部分是指令(代碼),另一部分是數(shù)據(jù)

有的同學(xué)可能會(huì)問了,程序里面不都是“指令(代碼)”嗎,不是的,大家一定要意識(shí)到這一點(diǎn),非常重要。程序中不都是指令(代碼),還包括數(shù)據(jù)。

比如 int a = 100; 這段代碼在生成的可執(zhí)行程序中是沒有對應(yīng)的機(jī)器指令的,為什么,因?yàn)檫@是數(shù)據(jù)。那么什么樣的代碼才有對應(yīng)的可執(zhí)行程序呢?比如if... while... +-*/,return等語句才會(huì)有對應(yīng)的機(jī)器指令。

現(xiàn)在你應(yīng)該清楚了吧,一般來說,對數(shù)據(jù)的操作部分我們都可以認(rèn)為是指令,而除此之外的定義都是數(shù)據(jù)。

有了這些知識(shí),你就能理解編譯器啦,編譯器的工作就是把C程序中的對數(shù)據(jù)的操作部分翻譯成二進(jìn)制機(jī)器指令,這些指令統(tǒng)一放在二進(jìn)制文件中的一部分,這一部分就叫代碼段,然后編譯器收集C程序中定義的數(shù)據(jù),把這些數(shù)據(jù)統(tǒng)一放在二進(jìn)制文件中的另一部分,這一部分就叫數(shù)據(jù)段,就好比披薩一樣分為兩層,一個(gè)可執(zhí)行文件就如下圖所示:

這就是為什么最終可執(zhí)行文件中有兩部分的原因,這也是可執(zhí)行程序在磁盤中的看起來是樣子的。

這里需要大家意識(shí)到的一點(diǎn)就是可執(zhí)行程序也是一個(gè)保存在磁盤上的普通文件,和我們的經(jīng)常使用的文本文件沒有本質(zhì)的區(qū)別。

我們來總結(jié)一下,編譯器將源代碼分成兩類,一類是對數(shù)據(jù)的操作,這一部分就被編譯器翻譯成了機(jī)器指令;另一類是數(shù)據(jù),這些數(shù)據(jù)被編譯器收集后放到了可執(zhí)行文件的數(shù)據(jù)段。

可執(zhí)行程序也是文件,和普通的文本文件沒有什么本質(zhì)的區(qū)別,只不過文本文件中保存的是人類認(rèn)識(shí)的字符,而可執(zhí)行程序保存的是機(jī)器指令以及機(jī)器指令操作的數(shù)據(jù),這些二進(jìn)制的指令或數(shù)據(jù)人類是很難直觀理解的,但是CPU不一樣,CPU可以直接執(zhí)行這些二進(jìn)制機(jī)器指令。

現(xiàn)在你應(yīng)該清楚程序是如何生成的了吧,程序是編譯器翻譯而成的,可執(zhí)行程序和普通文件一樣,生成后被安靜的保存在磁盤上。

從這里我們也可以看出程序其實(shí)和菜譜一樣是一個(gè)靜態(tài)的概念。程序被保存在磁盤上,只要磁盤沒被破壞程序就可以一直被保存下去。

接下來讓我們看看進(jìn)程是怎么來的。

進(jìn)程是如何生成的

到目前為止,保存在磁盤上的可執(zhí)行程序和操作系統(tǒng)還沒有半毛錢關(guān)系。如果一個(gè)程序僅僅是放在磁盤上除了占用磁盤控制之外其實(shí)是沒有任何用處的,只有程序運(yùn)行起來才能真正發(fā)揮它的作用。

那么程序是如何被運(yùn)行起來的呢?

這點(diǎn)大家應(yīng)該都非常熟悉,在Windows中我們通過雙擊程序圖標(biāo),在Linux下直接鍵入程序的名字。但是這個(gè)回答大家可能并不滿意,因?yàn)橛?jì)算機(jī)的角度上看我們依然不清楚程序是如何運(yùn)行起來的。

要回答這個(gè)問題,就需要我們的主角登場了,這里的主角就是操作系統(tǒng)。

我們的程序?qū)嶋H上是被操作系統(tǒng)運(yùn)行起來的,大體經(jīng)過了以下幾個(gè)階段。

1,當(dāng)我們雙擊程序圖標(biāo)或者鍵入程序名字后,操作系統(tǒng)根據(jù)程序的名字去磁盤中找到可執(zhí)行程序。

2,操作系統(tǒng)在內(nèi)存為即將要運(yùn)行的程序劃出一塊區(qū)域。

3,操作系統(tǒng)將找到的可執(zhí)行程序從磁盤中copy到剛剛劃分出的內(nèi)存區(qū)域當(dāng)中。

4,操作系統(tǒng)在內(nèi)存中找到可執(zhí)行程序代碼段的起始位置,假設(shè)這個(gè)地址是A。

5,操作系統(tǒng)告訴CPU從A這個(gè)位置開始執(zhí)行。

經(jīng)過了這幾個(gè)步驟后,CPU就開始運(yùn)行我們的程序啦。值得注意的是以上只簡化后的幾個(gè)重要步驟,實(shí)際情況要更加復(fù)雜,但是這個(gè)簡化的步驟已經(jīng)足以讓我們理解操作系統(tǒng)是如何來運(yùn)行程序的了。在后面的文章中我們會(huì)詳細(xì)描述這一過程。所以你會(huì)看到當(dāng)打開一個(gè)比較大的程序,比如游戲時(shí),總是非常慢,還會(huì)給出“正在加載”的提示,其實(shí)就是操作系統(tǒng)在忙著以上幾個(gè)步驟。

在這里,我們可以給出進(jìn)程的定義了。

程序運(yùn)行起來之后就叫進(jìn)程。

而進(jìn)程也是我們后面文章的重中之重。

進(jìn)程是操作系統(tǒng)精心構(gòu)筑的一個(gè)概念,理解進(jìn)程對理解操作系統(tǒng)來說至關(guān)重要,同時(shí)深刻理解進(jìn)程也是編程高手和普通程序員的分水嶺。

總結(jié)

在這一節(jié)中我們重點(diǎn)關(guān)注了程序和進(jìn)程這兩個(gè)概念。

程序是靜態(tài)的,放在磁盤上的,保存了程序的指令和數(shù)據(jù)普通文件。

進(jìn)程是動(dòng)態(tài)的,存防在內(nèi)存中的,CPU執(zhí)行程序時(shí)的樣子。

只要磁盤沒有被破壞,程序就可以永久保存。

而進(jìn)程一旦在內(nèi)存中被CPU執(zhí)行完畢,操作系統(tǒng)就會(huì)回收進(jìn)程占據(jù)的所有內(nèi)存空間,進(jìn)程的生命周期取決于程序的運(yùn)行時(shí)間。

程序需要存放在磁盤上,占用的是磁盤的空間。

而進(jìn)程需要在內(nèi)存中被運(yùn)行,占用的是內(nèi)存空間。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6900

    瀏覽量

    123814
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3798

    瀏覽量

    81464
  • 進(jìn)程
    +關(guān)注

    關(guān)注

    0

    文章

    204

    瀏覽量

    14003
收藏 人收藏

    評論

    相關(guān)推薦

    實(shí)驗(yàn):編寫多進(jìn)程程序

    1.實(shí)驗(yàn)?zāi)康?通過編寫多進(jìn)程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數(shù)的使用,進(jìn)一步理解在Linux中多進(jìn)程編程的步驟。 2.實(shí)驗(yàn)內(nèi)容 該實(shí)驗(yàn)有3個(gè)
    發(fā)表于 09-05 15:32

    線程、進(jìn)程、程序的區(qū)別

    )。VxWorks內(nèi)核使任務(wù)能快速共享系統(tǒng)的絕大部分資源。在VxWorks6.4中,進(jìn)程是指Rtp,進(jìn)程包含任務(wù),任務(wù)是調(diào)度的最小單元。進(jìn)程(有時(shí)被稱為重量級進(jìn)程)是
    發(fā)表于 03-23 13:09

    進(jìn)程程序的關(guān)系

    進(jìn)程是一個(gè)動(dòng)態(tài)的概念,而程序是一個(gè)靜態(tài)的概念。程序是指令的有序集合,沒有任何的執(zhí)行含義。
    發(fā)表于 08-06 08:41

    進(jìn)程程序有何不同

    進(jìn)程控制進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序的一次運(yùn)行活動(dòng),同時(shí)也是資源分配的最小單元;進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的:
    發(fā)表于 11-08 08:27

    進(jìn)程是什么?進(jìn)程程序的區(qū)別在哪

    進(jìn)程是什么?進(jìn)程程序的區(qū)別在哪?進(jìn)程的狀態(tài)有哪幾種?
    發(fā)表于 12-23 06:27

    進(jìn)程控制開發(fā)之編寫多進(jìn)程程序實(shí)驗(yàn)解析

    7.4.1 編寫多進(jìn)程程序 1.實(shí)驗(yàn)?zāi)康?通過編寫多進(jìn)程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數(shù)的使用,進(jìn)一步理解在Linux中多
    發(fā)表于 10-18 16:33 ?0次下載
    <b class='flag-5'>進(jìn)程</b>控制開發(fā)之編寫多<b class='flag-5'>進(jìn)程</b><b class='flag-5'>程序</b>實(shí)驗(yàn)解析

    Linux進(jìn)程調(diào)度的原理解析

    進(jìn)程調(diào)度依據(jù) 調(diào)度程序運(yùn)行時(shí),要在所有可運(yùn)行狀態(tài)的進(jìn)程中選擇最值得運(yùn)行的進(jìn)程投入運(yùn)行。選擇進(jìn)程的依據(jù)是什么呢?在每個(gè)
    發(fā)表于 11-02 11:01 ?1次下載

    如何創(chuàng)建一個(gè)進(jìn)程 程序進(jìn)程的區(qū)別

    那么,程序進(jìn)程(process)的區(qū)別又是什么呢?
    的頭像 發(fā)表于 10-06 11:53 ?6635次閱讀

    程序進(jìn)程和線程常見的19個(gè)問題

    這里是仍在筆耕不輟的程序喵大人耗時(shí)半個(gè)月完成的精心力作: 0 1 什么是進(jìn)程? 標(biāo)準(zhǔn)定義:進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集合上依次動(dòng)態(tài)執(zhí)行的過程。
    的頭像 發(fā)表于 12-26 10:17 ?2014次閱讀
    <b class='flag-5'>程序</b>中<b class='flag-5'>進(jìn)程</b>和線程常見的19個(gè)問題

    進(jìn)程切換與線程切換有啥區(qū)別

    注意這個(gè)題目問的是進(jìn)程**切換**與線程**切換**的區(qū)別,不是進(jìn)程與線程的區(qū)別。當(dāng)然這里的**線程指的是同一個(gè)進(jìn)程中的線程**。 這個(gè)問題能很好的考察面試者對進(jìn)程和線程的理解深
    的頭像 發(fā)表于 02-24 14:16 ?625次閱讀

    Linux應(yīng)用開發(fā)之進(jìn)程程序

    進(jìn)程是一個(gè)可執(zhí)行程序的實(shí)例,程序包含了一系列信息文件,這些信息描述了如何在運(yùn)行期間創(chuàng)建一個(gè)進(jìn)程
    的頭像 發(fā)表于 06-04 16:35 ?727次閱讀
    Linux應(yīng)用開發(fā)之<b class='flag-5'>進(jìn)程</b>和<b class='flag-5'>程序</b>

    程序進(jìn)程和線程的區(qū)別

    什么是進(jìn)程 1、進(jìn)程和線程的區(qū)別 進(jìn)程是指正在運(yùn)行的程序,它擁有獨(dú)立的內(nèi)存空間和系統(tǒng)資源,不同進(jìn)程之間的數(shù)據(jù)不共享。
    的頭像 發(fā)表于 06-22 11:39 ?738次閱讀
    <b class='flag-5'>程序</b>中<b class='flag-5'>進(jìn)程</b>和線程的區(qū)別

    什么是進(jìn)程

    在探討這個(gè)問題之前,我們先來弄清什么是進(jìn)程。 進(jìn)程(Process)是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。程序是指令
    的頭像 發(fā)表于 11-08 15:21 ?4302次閱讀
    什么是<b class='flag-5'>進(jìn)程</b>

    程序進(jìn)程的區(qū)別

    比如: 開發(fā)寫的代碼我們稱為程序,那么將開發(fā)的代碼運(yùn)行起來。我們稱為進(jìn)程
    的頭像 發(fā)表于 11-25 16:03 ?504次閱讀
    <b class='flag-5'>程序</b>和<b class='flag-5'>進(jìn)程</b>的區(qū)別

    深入解析Linux程序進(jìn)程

    什么是程序 一組計(jì)算機(jī)能識(shí)別和執(zhí)行的指令,用于指導(dǎo)計(jì)算機(jī)執(zhí)行特定任務(wù)或解決特定問題。程序通常由代碼、數(shù)據(jù)和資源文件組成,涉及語法、算法和數(shù)據(jù)結(jié)構(gòu)。為二進(jìn)制文件 什么是進(jìn)程 是一個(gè)具有獨(dú)立功能的
    的頭像 發(fā)表于 12-18 11:01 ?169次閱讀
    深入解析Linux<b class='flag-5'>程序</b>與<b class='flag-5'>進(jìn)程</b>