色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何區分程序與進程

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

到目前為止,你肯定已經見過很多次這兩個詞了,“程序”“進程”。那程序和進程到底有什么區別呢。

程序是一個靜態的概念。

進程是一個動態的概念。

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

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

進程是計算機科學當中一個及其重要的概念,徹底理解進程是理解操作系統工作原理的關鍵所在,同時也是編程高手的標志之一。

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

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

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

程序是如何生成的

程序這個詞其實是比較籠統的,在我們學習工作工作過程中,即指我們人類可以認識的字符串程序,也可以指機器可以運行的二進制機器指令程序,這個程序就是可執行程序。

所以在這里需要大家能意識到一點,程序這個詞有兩種含義:

  • 人類可以認識的程序,這些程序就是用比如C/C++JavaPython語言寫成的文本文件。比如helloworld.c,hellworld.java,helloworld.py
  • 機器可以認識的程序,這些程序就是可執行程序。Windows下就是exe程序,Linux下就是elf程序。

因為計算機看不懂人類可以認識的文本文件程序,因此需要將文本文件程序轉換為機器可以認識的可執行程序。這個翻譯過程就是編譯器來完成的。編譯器將文本文件程序翻譯成二進制機器指令程序。

在前幾節中,有兩種類型的語言,一類是C/C++這種編譯型語言,一類是比如Python、Java等解釋型語言,CPU可以直接運行C/C++程序經編譯后生成的機器指令,但解釋型語言不能直接被CPU執行,解釋型語言是被解釋器直接執行的,而解釋器可以被CPU直接執行,因為這些解釋器通常都是C/C++語言編寫的,就好比下面這樣:

$ python helloworld.py

其中python就是一個C語言程序,只不過這個C語言程序可以來執行python程序。有了這些背景后,接下來我們重點關注C/C++這類解釋型語言是如何從文本文件轉變為可執行文件的。

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

程序其實包含兩部分內容,一部分是指令(代碼),另一部分是數據

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

比如 int a = 100; 這段代碼在生成的可執行程序中是沒有對應的機器指令的,為什么,因為這是數據。那么什么樣的代碼才有對應的可執行程序呢?比如if... while... +-*/,return等語句才會有對應的機器指令。

現在你應該清楚了吧,一般來說,對數據的操作部分我們都可以認為是指令,而除此之外的定義都是數據。

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

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

這里需要大家意識到的一點就是可執行程序也是一個保存在磁盤上的普通文件,和我們的經常使用的文本文件沒有本質的區別。

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

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

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

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

接下來讓我們看看進程是怎么來的。

進程是如何生成的

到目前為止,保存在磁盤上的可執行程序和操作系統還沒有半毛錢關系。如果一個程序僅僅是放在磁盤上除了占用磁盤控制之外其實是沒有任何用處的,只有程序運行起來才能真正發揮它的作用。

那么程序是如何被運行起來的呢?

這點大家應該都非常熟悉,在Windows中我們通過雙擊程序圖標,在Linux下直接鍵入程序的名字。但是這個回答大家可能并不滿意,因為計算機的角度上看我們依然不清楚程序是如何運行起來的。

要回答這個問題,就需要我們的主角登場了,這里的主角就是操作系統。

我們的程序實際上是被操作系統運行起來的,大體經過了以下幾個階段。

1,當我們雙擊程序圖標或者鍵入程序名字后,操作系統根據程序的名字去磁盤中找到可執行程序。

2,操作系統在內存為即將要運行的程序劃出一塊區域。

3,操作系統將找到的可執行程序從磁盤中copy到剛剛劃分出的內存區域當中。

4,操作系統在內存中找到可執行程序代碼段的起始位置,假設這個地址是A。

5,操作系統告訴CPU從A這個位置開始執行。

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

在這里,我們可以給出進程的定義了。

程序運行起來之后就叫進程。

而進程也是我們后面文章的重中之重。

進程是操作系統精心構筑的一個概念,理解進程對理解操作系統來說至關重要,同時深刻理解進程也是編程高手和普通程序員的分水嶺。

總結

在這一節中我們重點關注了程序和進程這兩個概念。

程序是靜態的,放在磁盤上的,保存了程序的指令和數據普通文件。

進程是動態的,存防在內存中的,CPU執行程序時的樣子。

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

而進程一旦在內存中被CPU執行完畢,操作系統就會回收進程占據的所有內存空間,進程的生命周期取決于程序的運行時間。

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

而進程需要在內存中被運行,占用的是內存空間。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    6889

    瀏覽量

    123701
  • 程序
    +關注

    關注

    117

    文章

    3795

    瀏覽量

    81366
  • 進程
    +關注

    關注

    0

    文章

    204

    瀏覽量

    13986
收藏 人收藏

    評論

    相關推薦

    實驗:編寫多進程程序

    1.實驗目的 通過編寫多進程程序,使讀者熟練掌握fork()、exec()、wait()和waitpid()等函數的使用,進一步理解在Linux中多進程編程的步驟。 2.實驗內容 該實驗有3個
    發表于 09-05 15:32

    線程、進程程序的區別

    )。VxWorks內核使任務能快速共享系統的絕大部分資源。在VxWorks6.4中,進程是指Rtp,進程包含任務,任務是調度的最小單元。進程(有時被稱為重量級進程)是
    發表于 03-23 13:09

    進程程序的關系

    進程是一個動態的概念,而程序是一個靜態的概念。程序是指令的有序集合,沒有任何的執行含義。
    發表于 08-06 08:41

    進程程序有何不同

    進程控制進程是一個具有一定獨立功能的程序的一次運行活動,同時也是資源分配的最小單元;進程是動態的,程序是靜態的:
    發表于 11-08 08:27

    進程是什么?進程程序的區別在哪

    進程是什么?進程程序的區別在哪?進程的狀態有哪幾種?
    發表于 12-23 06:27

    進程控制開發之編寫多進程程序實驗解析

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

    Linux進程調度的原理解析

    進程調度依據 調度程序運行時,要在所有可運行狀態的進程中選擇最值得運行的進程投入運行。選擇進程的依據是什么呢?在每個
    發表于 11-02 11:01 ?1次下載

    如何創建一個進程 程序進程的區別

    那么,程序進程(process)的區別又是什么呢?
    的頭像 發表于 10-06 11:53 ?6617次閱讀

    程序進程和線程常見的19個問題

    這里是仍在筆耕不輟的程序喵大人耗時半個月完成的精心力作: 0 1 什么是進程? 標準定義:進程是一個具有一定獨立功能的程序在一個數據集合上依次動態執行的過程。
    的頭像 發表于 12-26 10:17 ?1991次閱讀
    <b class='flag-5'>程序</b>中<b class='flag-5'>進程</b>和線程常見的19個問題

    進程切換與線程切換有啥區別

    注意這個題目問的是進程**切換**與線程**切換**的區別,不是進程與線程的區別。當然這里的**線程指的是同一個進程中的線程**。 這個問題能很好的考察面試者對進程和線程的理解深
    的頭像 發表于 02-24 14:16 ?613次閱讀

    Linux應用開發之進程程序

    進程是一個可執行程序的實例,程序包含了一系列信息文件,這些信息描述了如何在運行期間創建一個進程
    的頭像 發表于 06-04 16:35 ?716次閱讀
    Linux應用開發之<b class='flag-5'>進程</b>和<b class='flag-5'>程序</b>

    程序進程和線程的區別

    什么是進程 1、進程和線程的區別 進程是指正在運行的程序,它擁有獨立的內存空間和系統資源,不同進程之間的數據不共享。
    的頭像 發表于 06-22 11:39 ?725次閱讀
    <b class='flag-5'>程序</b>中<b class='flag-5'>進程</b>和線程的區別

    什么是進程

    在探討這個問題之前,我們先來弄清什么是進程進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。程序是指令
    的頭像 發表于 11-08 15:21 ?4260次閱讀
    什么是<b class='flag-5'>進程</b>

    程序進程的區別

    比如: 開發寫的代碼我們稱為程序,那么將開發的代碼運行起來。我們稱為進程
    的頭像 發表于 11-25 16:03 ?480次閱讀
    <b class='flag-5'>程序</b>和<b class='flag-5'>進程</b>的區別

    深入解析Linux程序進程

    什么是程序 一組計算機能識別和執行的指令,用于指導計算機執行特定任務或解決特定問題。程序通常由代碼、數據和資源文件組成,涉及語法、算法和數據結構。為二進制文件 什么是進程 是一個具有獨立功能的
    的頭像 發表于 12-18 11:01 ?149次閱讀
    深入解析Linux<b class='flag-5'>程序</b>與<b class='flag-5'>進程</b>
    主站蜘蛛池模板: 国产精品成人网 | 2021全国精品卡一卡二 | 亚洲精品无夜久久久久久久久 | 九九久久精品 | 2022国产麻豆剧传媒剧情 | 久草高清在线 | av在线观看地址 | 两个吃奶一个添下面视频 | 久久精品国产免费中文 | WRITEAS塞红酒瓶 | 午夜影院一区二区三区 | 最近免费中文字幕MV免费高清 | 高清国产mv视频在线观看 | 国产精品99亚发布 | 在线中文高清资源免费观看 | 好男人在线观看视频观看高清视频免费 | 99视频精品全部免费免费观 | 麻豆国产精品va在线观看约 | 国色精品VA在线观看免费视频 | 久久免费特黄毛片 | 国产精品自在拍在线播放 | 精品人妻无码一区二区三区蜜桃臀 | 2021国产精品视频一区 | 538prom精品视频我们不只是 | 国产在线精品亚洲二品区 | 好男人视频免费高清在线观看www | 97人人看碰人免费公开视频 | 幻女FREE性俄罗斯学生 | 亚洲XXX午休国产熟女屁 | 久久频这里精品99香蕉久网址 | 欧美18videosex初次 | 亚洲a免费| 最近2019中文字幕免费 | 好好的曰com久久 | 好大好爽好深舒服死了 | 在线看片成人免费视频 | 小向美奈子厨房magnet | 男神插曲女生软件完整版 | 2021扫黑风暴在线观看免费完整版 | 国产高清视频在线播放www色 | 尤蜜网站在线进入免费 |