① 程序是什麼怎樣編程序
首先的學幾種編程語言,然後編寫自己需用的東西。看看書就知道什麼是程序了,具體的定義可能是那位老兄說的把,建議看看最基本的編程語言,像c語言就可以。
② 什麼是程序
程序可以看作對一系列動作的執行過程的描述。剛才我們描述的是個形式非常簡單的程序,實際上這個過程也可能變得復雜。例如,輪到取款時發現帶的是個錯誤的儲蓄卡,你就需要同家取卡,再次排隊,這樣就出現了重復性動作,步驟也會相應增加。
我們使用計算機,就是要利用計算機處理各種小同的問題。但是,計算機不會自己思考,它是人類手中的木偶啊,因此我們要明確告訴它做什麼工作以及做哪幾步才能完成這個工作。
試想一下,計算機程序執行的整個過程是怎樣的呢?
計算機完成一件我們分配給它的任務,就像「取錢」這件工作,它按照我們的命令去做,我們說「立正」,它不能「稍息」,這樣在我們的支配下完成預定工作。
這里,我們所下達的每個命令稱為指令,它對應著計算機執行的一個基本動作。我們告訴計算機按照某種順序完成系列指令,這一系列指令的集合稱為程序。
(2)程序像什麼擴展閱讀:
在國標《質量管理體系 基礎和術語》GB/T19000—2008/ISO9000:2005中第3.4.5條 程序procere中對於「程序」的定義進行了規定。
一個環節,內部嵌套著一系列復雜的列邏輯慎密的一個組件,如若一個地方出問題則會影響到整個主體(可以理解為事務)。
術語定義
在中華人民共和國國家標准《質量管理體系 基礎和術語》GB/T19000—2008/ISO9000:2005(代替GB/T19000—2000)中第3.4.5條 程序procere中對於「程序」的定義是「 為進行某項活動或過程(3.4.1)所規定的途徑。」
程序,是管理方式的一種,是能夠發揮出協調高效作用的工具,在我們的社會主義建設事業或者說現代化建設中,應該充分重視它的作用,應該不斷地將我們的工作從無序整改到有序。
③ 什麼叫程序
計算機程序(Computer Program)是指一組指示計算機或其他具有消息處理能力裝置每一步動作的指令,通常用某種程序設計語言編寫,運行於某種目標體系結構上。打個比方,一個程序就像一個用漢語(程序設計語言)寫下的紅燒肉菜譜(程序),用於指導懂漢語(編譯器)同時也會烹飪手法的人(體系結構)來做這道菜。 通常,以英文文本為基礎的計算機程序要經過編譯和鏈接而成為一種人們不易看清而計算機可解讀的一連串數字的格式,然後放入運行。未經編譯就可運行的程序,通常稱之為腳本程序(script)。
為了一個程序運行,計算機載入程序代碼,可能還要載入數據,從而初始化成一個開始狀態,然後調用某種啟動機制。在最低層上,這些是由一個載入器開始的。
在大多數計算機中,操作系統例如Windows等,載入並且執行很多程序。在這種情況下,一個計算機程序是指一個單獨的可執行的映射,而不是當前在這個計算機上運行的全部程序。
要講的更加詳細的話,必須說馮·諾依曼體系結構。
在一台基於最常見的馮諾依曼體系結構(又稱普林斯頓結構)的計算機上,程序從某種外部設備,通常是硬碟,被載入到計算機之內。 如果計算機選擇馮諾依曼體系結構,那麼程序就被載入入內存。 指令序列順序執行,直到一條跳轉或轉移指令被執行,或者一個中斷出現。所有這些指令都會改變指令寄存器的內容。
基於這種體系的計算機,如果沒有程序的支持,將無法工作。一個計算機程序是一系列指令的集合。
程序里的指令都是基於機器語言;程序通常首先用一種計算機程序設計語言編寫,然後用編譯器或者解釋器翻譯成機器語言。 有時,也可以用匯編語言編程,匯編語言實質就是表示機器語言的一組記號-在這種情況下,用於翻譯的程序叫做匯編程序。
說說樓上沒有說完的演算法
演算法指解決某個問題的嚴格方法,通常還需輔以某種程度上的運行性能分析。演算法可以是純理論的,也可以由一個計算機程序實現。理論演算法通常根據復雜性分為不同類別;實現的演算法通常經過剖析(Profiling)以測試其性能。請注意雖然一個演算法在理論上有效可行,但是一個糟糕的演算法仍會浪費寶貴的計算機資源。(更詳細信息,參見演算法資訊理論(Algorithmic Information Theory))
④ 程序是什麼
計算機程序的定義LJ
程序(program)是為實現特定目標或解決特定問題而用計算機語言編寫的命令序列的集合。 程序(港台稱之為程式) program(me)或procere chéng xù
編輯本段概念
概念1.:為進行某活動或過程所規定的途徑。 概念2.程序是由序列組成的,告訴計算機如何完成一個具體的任務。由於現在的計算機還不能理解人類的自然語言,所以還不能用自然語言編寫計算機程序。
編輯本段指示計算機按解決問題的步驟
實現預期目的而進行操作的一系列語句和指令。一般分為系統程序和應用程序兩大類。 計算機中的程序在港澳台地區稱為程式。程序就是為使電子計算機執行一個或多個操作,或執行某一任務,按序設計的計算機指令的集合。由程序計數器(Program Counter)控制。程序(program)是為實現特定目標或解決特定問題而用計算機語言編寫的命令序列的集合。是用匯編語言、高級語言等開發編制出來的可以運行的文件,在計算機中稱可執行文件(後綴名一般為.exe)。我們玩的游戲一般都是應用程序(但現在後綴名為.swf的Flash影片類的游戲也比較流行)
⑤ 程序是什麼
加殼和脫殼,簡單說就是軟體的加密和解密!
最早提出「殼」這個概念的,據我所知,應該是當年推出脫殼軟體 RCOPY 3 的作者熊焰先生。在幾年前的 DOS 時代,「殼」一般都是指磁碟加密軟體的段加密程序,可能是那時侯的加密軟體還剛起步不久吧,所以大多數的加密軟體(加殼軟體)所生成的「成品」在「殼」和需要加密的程序之間總有一條比較明顯的「分界線」。有經驗的人可以在跟蹤軟體的運行以後找出這條分界線來,至於這樣有什麼用這個問題,就不用我多說了。但畢竟在當時,甚至現在這樣的人也不是很多,所以當 RCOPY3 這個可以很容易就找出「分界線」,並可以方便的去掉「殼」的軟體推出以後,立即就受到了很多人的注意。老實說,這個我當年在《電腦》雜志看到廣告,在廣州電腦城看到標著999元的軟體,在當時來說,的確是有很多全新的構思,單內存生成 EXE 可執行文件這項,就應該是世界首創了。但它的思路在程序的表現上我認為還有很多可以改進的地方(雖然後來出現了可以加強其功力的 RO97),這個想法也在後來和作者的面談中得到了證實。在這以後,同類型的軟體想雨後春筍一般冒出來,記得住名字的就有: UNKEY、MSCOPY、UNALL .... 等等,但很多的軟體都把磁碟解密當成了主攻方向,忽略了其它方面,當然這也為以後的「密界剋星」「解密機器」等軟體打下了基礎,這另外的分支就不多祥談了,相信機齡大一點的朋友都應該看過當時的廣告了。
解密(脫殼)技術的進步促進、推動了當時的加密(加殼)技術的發展。LOCK95和 BITLOK 等所謂的「殼中帶籽」加密程序紛紛出籠,真是各出奇謀,把小小的軟盤也折騰的夠辛苦的了。正在國內的加殼軟體和脫殼軟體較量得正火紅的時候,國外的「殼」類軟體早已經發展到像 LZEXE 之類的壓縮殼了。這類軟體說穿了其實就是一個標準的加殼軟體,它把 EXE 文件壓縮了以後,再在文件上加上一層在軟體被執行的時候自動把文件解壓縮的「殼」來達到壓縮 EXE 文件的目的。接著,這類軟體也越來越多, PKEXE、AINEXE、UCEXE 和後來被很多人認識的 WWPACK 都屬於這類軟體,但奇怪的是,當時我看不到一個國產的同類軟體。
過了一段時間,可能是國外淘汰了磁碟加密轉向使用軟體序列號的加密方法吧,保護 EXE 文件不被動態跟蹤和靜態反編譯就顯得非常重要了。所以專門實現這樣功能的加殼程序便誕生了。 MESS 、CRACKSTOP、HACKSTOP、TRAP、UPS 等等都是比較有名氣的本類軟體代表,當然,還有到現在還是數一數二的,由台灣同胞所寫的 FSE 。其實以我的觀點來看,這樣的軟體才能算是正宗的加殼軟體。
在以上這些加殼軟體的不斷升級較勁中,很多軟體都把比較「極端」技術用了上去,因為在這個時候 DOS 已經可以說是給眾高手們玩弄在股掌之間了,什麼保護模式、反 SICE 、逆指令等等。相對來說,在那段時間里發表的很多國外脫殼程序,根本就不能對付這么多的加殼大軍,什麼 UPC、TEU 等等都紛紛成為必防的對象,成績比較理想的就只有 CUP386 了,反觀國內,這段時間里也沒了這方面的「矛盾斗爭」。加殼軟體門揮軍直搗各處要崗重地,直到在我國遇到了 TR 這個銅牆鐵壁以後,才紛紛敗下陣來各謀對策,但這已經是一年多以後的事情了。我常想,如果 TR 能早兩年「出生」的話,成就肯定比現在大得多,甚至蓋過 SICE 也有可能。TR 發表的時候 WIN95 的流行已經成為事實,DOS 還有多少的空間,大家心裡都清楚。但話又說回來, TR 的確是個好軟體,比起當年的 RCOPY3 有過之而無不及,同時也證明了我們中國的 CRACK 實力(雖然有點過時)。這個時候,前面提到過的 FSE 憑著強勁的實力也漸漸的浮出了水面,獨領風騷。其時已經是 1997 年年底了,我也走完了學生「旅程」。工作後在CFIDO 的 CRACK 區認識了 Ding-Boy ,不久 CRACK 區關了,我從此迷上了 INTERNET,並於98年6月建起了一個專門介紹「殼」的站台: ;;,放上了我所收集的所有「殼」類軟體。在這段時間里,各種「殼」類軟體也在不段的升級換代,但都沒什麼太大的進展,差不多就是 TR 和眾加殼軟體的版本數字之爭而已。
1998年8月,一個名為 UNSEC (揭秘)的脫殼軟體發表了,它號稱可以脫掉98年8月以前發表的所有殼。我測試之後,覺得並沒傳聞中的那麼厲害,特別是兼容性更是令我不想再碰它。 Ding-Boy 給這個軟體的作者提了很多建議,但寄去的 EMIAL 有如泥牛入海,可能是一怒之下吧,不久 Ding-Boy 的 BW (沖擊波)就誕生了。這個使用內存一次定位生成 EXE 文件(後來放棄了)的脫殼軟體,在我的站台公開後,得到了很多朋友們的肯定。要知道,從RCOPY 3 開始,絕大部分的脫殼軟體都是要兩次運行目標程序來確定 EXE 的重定位數據的。BW 的這一特點雖然有兼容性的問題,但也樹立了自己的風格、特色。經過幾個月的改善, BW 升級到了 2.0 版本,這個版本的推出可以說是 BW 的轉折點,因為它已經是一個成熟、穩定脫殼軟體了,它可以對付當時(現在)大多數的殼,包括當時最新的 FSE 0.6 等。更重要的是這個版本把選擇殼的和軟體「分界線」這個最令新手頭疼的步驟簡化到不能再簡化的地步,使更多的朋友接受了它。另外,能加強 BW 功力的 CI 模式也是其它脫殼軟體沒有的東西。最近,BW 發表了最新的 2.5 BETA2 版本,增強了一些方面的功能,因它竟然可以脫掉號稱最厲害的磁碟加密工具 LOCKKING 2.0 的加密殼,因而進一步奠定了它在「脫殼界」的地位。說到最新,就不能不提 GTR、LTR、EDUMP、ADUMP、UPS、UPX、APACK 這幾個國外的好軟體了,它們每個都有自己的特色,可以說都是當今各類「殼」中的最新代表了。(這些軟體和詳細介紹請到我的主頁查閱)
由於 WINDOWS 3.1 只是基於 DOS 下的一個圖形外殼,所以在這個平台下的「殼」類軟體很少,見過的就只有像 PACKWIN 等幾個有限的壓縮工具,終難成氣候。
可能是 MICROSOFT 保留了 WIN95 的很多技術上的秘密吧,所以即便是 WIN95 已經推出了 3 年多的時間,也沒見過在其上面運行的「殼」類軟體。直到 98 年的中期,這樣的軟體才遲遲的出現,而這個時候 WIN98 也發表了有一段日子了。應該是有 DOS 下的經驗吧,這類的軟體不發表由自可,一發表就一大批地的沖了出來。先是加殼類的軟體如: BJFNT、PELOCKNT 等,它們的出現,使暴露了 3 年多的 WIN95 下的 PE 格式 EXE 文件得到了很好的保護。大家都應該知道現在很多 WIN95 下的軟體都是用注冊碼的方法來區分、確定合法與非法用戶的吧,有了這類加殼軟體,這種注冊方法的安全性提高了不少,如果大家也有自己編的 WIN95 程序,就一定要多留意一下本類軟體了。接著出現的就是壓縮軟體了,因為 WIN95 下運行的 EXE 文件「體積」一般都比較大,所以它的實用價值比起 DOS 下的壓縮軟體要大很多,這類的軟體也很多,早些時候的 VBOX、PEPACK、PETITE 和最近才發表的 ASPACK、UPX 都是其中的佼佼者。在 DOS 下很流行的壓縮軟體 WWPACK 的作者也推出了對應 WIN95 版本的 WWPACK32,由於性能並不是十分的突出,所以用的人也不太多。由於壓縮軟體其實也是間接給軟體加了殼,所以用它們來處理 EXE 也是很多軟體作者喜歡做的事情,最近新發表的很多軟體里都可以看到這些加殼、加壓縮軟體的名字了。有加殼就一定會有脫殼的,在 WIN95 下當然也不例外,但由於編這類軟體比編加殼軟體要難得多,所以到目前為止,我認為就只有 PROCDUMP 這個軟體能稱為通用脫殼軟體了,它可以對付現在大多數的加殼、壓縮軟體所加的殼,的確是一個難得的精品。其它的脫殼軟體多是專門針對某某加殼軟體而編,雖然針對性強、效果好,但收集麻煩,而且這樣的脫殼軟體也不多。前些時候 TR 作者也順應潮流發表了 TR 的 WIN95 版本: TRW ,由現在的版本來看可以對付的殼還不多,有待改進。
BW 的作者 Ding-Boy 最新發表了一個 WIN95 的 EXE 加殼軟體 DBPE 。雖然它還不太成熟,但它可以為軟體加上使用日期限制這個功能是其它加殼軟體所沒有的,或者以後的加殼軟體真的會是像他說的那樣可以:加殼和壓縮並重、並施;隨意加使用日期;加上注冊碼;加軟體狗(磁碟)保護;加硬體序列號判別;加... 。
⑥ 什麼是程序
簡單地說,程序可以看作對一系列動作的執行過程的描述。剛才我們描述的是個形式非常簡單的程序,實際上這個過程也可能變得復雜。例如,輪到取款時發現帶的是個錯誤的儲蓄卡,你就需要同家取卡,再次排隊,這樣就出現了重復性動作,步驟也會相應增加。
那麼,汁算機程序到底是什麼?計算機里的程序和日常生活中的程序很相似!
我們使用計算機,就是要利用計算機處理各種小同的問題。但是,計算機不會自己思考,它是人類手中的木偶啊,因此我們要明確告訴它做什麼工作以及做哪幾步才能完成這個工作。試想一下,計算機程序執行的整個過程是怎樣的呢?計算機完成一件我們分配給它的任務,就像「取錢」這件工作,它按照我們的命令去做,我們說「立正」,它不能「稍息」,這樣在我們的支配下完成預定工作。這里,我們所下達的每個命令稱為指令,它對應著計算機執行的一個基本動作。我們告訴計算機按照某種順序完成系列指令,這一系列指令的集合稱為程序。
⑦ 什麼是程序 什麼是數據
好像記得是匯編基礎啊~~
就象匯編指令全部是放在內存裡面的~
然而 數據 全部是放在寄存器 如 AX BX CX 等等~
數據和命令是分開存儲的
就好像 匯編里debug調試時候 可以直接選擇跳轉到命令行內存地址 不一定要使用標識符號
所以 對這兩塊存儲單元是不同的處理方法
程序是指令的有序集合
硬體里的「程序」是第一層 我們平時說的編程的「程序」是在它之上的
就好像 我們可以赤腳騎腳踏車 但是 我們習慣穿著鞋子騎車
可以說 是程序上面的程序~
就是低級語言 與 高級語言之分~ 高級語言是站在低級語言之上的
高級語言里的一條指令 就是在低級語言里就是一段程序
希望你能明白了~~ 不是太好解釋的~ 多想想就行了
⑧ xp系統有很多自帶的程序 像什麼開發工具 等等的 哪些是可以卸載的 求高手解答
這要看你自己需要些什麼不需要什麼,才能決定,一般來說它提供的都是運行庫,也就是說你可以使用xp系統作為平台運行一些與之有關的程序,所以不很清楚地話建議先不要忙著卸載它們。
⑨ 程序的概念
程序=演算法+數據結構
程序就是一系列有序執行的指令集合。
第一個答案對於大多數人其實等於沒有回答,因為演算法這個概念可能是一個比程序更為復雜的概念。
第二個答案算是有點容易明白,但還不能讓人明白程序能做什麼不能做什麼。
一,菜譜
材料: 五花肉半斤,尖椒一個,青蒜4-5根,(其實正宗的回鍋肉還要放豆乾,再放根紅椒點綴,咱家沒有,省略了),白糖2茶勺,生抽1湯勺,鹽2克,雞精,料酒,薑片,蔥段;蒜片,郫縣豆瓣醬1湯勺
做法: 預先處理:將整塊五花肉放入熱水中煮熟(筷子紮下去可以扎透),期間點些料酒,放兩片姜,兩三段蔥;然後放入冷水中冷卻。其中,冷水中冷卻的步驟可以使肉快速收縮,幫助成型,增加嚼勁兒,是普通廚子變大廚的關鍵步驟,不可省略哈。
青椒切菱形段,青蒜拍一下蒜頭,切寸段。蒜頭和蒜葉分開放。
預先處理過的五花肉切薄片,越薄越好。俺就這刀工了,算比較厚的啊。
蒜拍碎(沒拍),郫縣豆瓣剁成茸(碎點兒好看也好吃)。
處理好的肉片下油鍋,旺火煸炒。直至肉片打卷,變得焦黃。
將超好的肉片撥至一邊,下入蒜末和郫縣豆瓣,用小火炒出紅油。
倒入尖椒段和青蒜蒜頭,烹入糖,生抽,鹽。注意:郫縣豆瓣醬和生抽均有鹹度,鹽一定要酌情放。
待尖椒和蒜頭香味出來,放入青蒜葉及雞精兜勻。青蒜葉熟的很快,這個步驟只需要30秒或者更短,只要看到青蒜葉被油裹住就可以了。
出鍋
以上是網上找的一個回鍋肉的菜譜(貌似這個下酒好)。從廣義的角度來說這也是一個程序,怎麼說呢?
這個程序與計算機程序略微不一樣,這個程序的運行者是一個可以認識上面的文字,能正確理解每句話的意義,且有能力得到材料並按步驟執行的人。而計算機程序則是計算機可以理解和執行語句。
二,為什麼要有編程語言
就像上面的菜譜一樣,我們只要識得漢字基本都可以照著來執行。為什麼要有讓人看起怎麼都不能一下就接受的編程語言呢?
自然語言有歧義
男老師發現一女生上課睡覺,氣憤的說:我在上面累的要死,你在下面一動不動!不配合也就罷了,連點反應都沒有,將來要是肚子里沒東西,可別怪老師不行!
中國足球隊誰也打不贏。中國乒乓球隊誰也打不贏。
冬天太冷,出門時衣服能穿多少就穿多少。夏天太熱,出門時衣服能穿多少就穿多少。
地鐵里聽到一個女孩大概是給男朋友打電話,「我已經到西直門了,你快出來往地鐵站走。如果你到了,我還沒到,你就等著吧。如果我到了,你還沒到,你就等著吧。」
老婆給當程序員的老公打電話:下班順路買一斤包子帶回來,如果看到賣西瓜的,買一個。當晚,程序員老公手捧一個包子進了家門…老婆怒道:你怎麼就買了一個包子?!老公答曰:因為看到了賣西瓜的。
這是幾則最典型的漢語歧義,其它語種中一樣有很多這樣的歧義。看最後程序員這則,那麼就是老婆下了一系列指令但是執行者按照另一種意義去執行了。當然這例子還有不恰當的地方,我們也可以將指令改為:「下班順路買一斤包子帶回來,另外如果看到賣西瓜的,買一個西瓜。」。但是麻煩就在漢語本身並未限制我們必須如此,另外其它例子中的用法那就更加不容易確定意義了,還牽扯到語境。所以到今天為止計算機在處理自然語言上都還很糟糕。
自然語言不穩定
666, 蝦米, 醬紫, 沙發, 粉絲
以上這些詞語在有了網路後就多了一層意思,不上網的人可能根本不知道這多出一層意思。當然不穩定本質上還是帶來歧義。
因為這些原因才有數學語言(其實一樣有歧義,不然就不會產生數理邏輯這個分支了)、編程語言來規避歧義。
三,程序是什麼
這真是一個不好下定義的詞,比較可靠的回答都要涉及數理邏輯。無論是遞歸函數論、圖靈機模型、lambda演算都不是那麼容易掌握的。這些遠比學一門編程語言及掌握寫程序更難。所以在這里我們先只給出一個形象的比喻,程序就是一段編譯器或解釋器(這東西可能比任何人都要聽你的話,只要你能用它懂的語言來指揮)能聽懂的指令。
打開微信我們可以指揮微信,我們可以給好友發信息,可以加好友,可以發朋友圈,我們下什麼指令它就做什麼,我們下指令是通過點擊屏幕。而編譯器與解釋器也是類似的東西,不過這東西它只接受它認識的指令,它接受指令都是文字(主要是英文,數字,標點)。
四,計算、同構、模擬
對於同一件事比如我們要計算3+5,那麼我們可以有:
扳著手指頭左手3個,右手5個放在一起是8個手指頭
先拿出3個小球,再拿出5個小球放在一起是8個小球
我們在計算器輸入3+5得出8
這三個方法都可以計算出3+5的值,他們用了不同方法的形式但在對於計算3+5這個核心上是計算等價的。也就是同構的概念。
有了同構我們就可以模擬了,比如你有小球,拿它做了一次加法運算。但是我沒有小球我可以用手指頭或者石子來代替小球模擬你用小球做加法運算,並且得出和你一樣的結果。
我們是怎麼用程序來事的呢?主要就是用計算機中的數據來模擬現實中的東西。
比如攝像頭中的你腦袋往左移了一下,那麼本質上計算機中代表腦袋的那些數據的x坐標減去了一定的值,最終再輸出到顯示器上。
比如你在紙上解了一個方程,那麼在計算機也有一個模擬你每一步的計算的過程來得出和你一樣的值。只是你用紙和筆來進行,而計算機用它的方式來進行。
⑩ 程序是什麼意思
程序是計算機指令的集合,它以文件的形式存儲在磁碟上。說白了你的所有的可運行軟體都是以程序形式存在於硬碟上的。如果程序啟動了(運行了)程序被載入後運行於內容中就形成了一個進程。進程只是線程的容器,裡面至少包含一個線程,具體的功能需要由程序員編程通過線程執行相關的操作。如有興趣,以下為C++中對 進程 線程 程序的孫鑫老師一個說明。
進程:通常被定義為一個正在運行的程序的實例,是一個程序在其自身的地址空間中的一次執行活動。進程是資源申請、調度和獨立運行的單位,因此,它使用系統中的運行資源;而程序不能申請系統資源,不能被系統調度,也不能作為獨立運行的單位,因此,它不佔用系統的運行資源。
進程由兩個部分組成:
1、操作系統用來管理進程的內核對象。內核對象也是系統用來存放關於進程的統計信息的地方。
2、地址空間。它包含所有可執行模塊或DLL模塊的代碼和數據。它還包含動態內存分配的空間。如線程堆棧和堆分配空間。進程是不活潑的。進程從來不執行任何東西,它只是線程的容器。若要使進程完成某項操作,它必須擁有一個在它的環境中運行的線程,此線程負責執行包含在進程的地址空間中的代碼。
單個進程可能包含若干個線程,這些線程都「同時」 執行進程地址空間中的代碼。
每個進程至少擁有一個線程,來執行進程的地址空間中的代碼。當創建一個進程時,操作系統會自動創建這個進程的第一個線程,稱為主線程。此後,該線程可以創建其他的線程。系統賦予每個進程獨立的虛擬地址空間。對於32位進程來說,這個地址空間是4GB。
每個進程有它自己的私有地址空間。進程A可能有一個存放在它的地址空間中的數據結構,地址是0x12345678,而進程B則有一個完全不同的數據結構存放在它的地址空間中,地址是0x12345678。當進程A中運行的線程訪問地址為0x12345678的內存時,這些線程訪問的是進程A的數據結構。當進程B中運行的線程訪問地址為0x12345678的內存時,這些線程訪問的是進程B的數據結構。進程A中運行的線程不能訪問進程B的地址空間中的數據結構,反之亦然。
4GB是虛擬的地址空間,只是內存地址的一個范圍。在你能成功地訪問數據而不會出現非法訪問之前,必須賦予物理存儲器,或者將物理存儲器映射到各個部分的地址空間。
4GB虛擬地址空間中,2GB是內核方式分區,供內核代碼、設備驅動程序、設備I/O高速緩沖、非頁面內存池的分配和進程頁面表等使用,而用戶方式分區使用的地址空間約為2GB,這個分區是進程的私有地址空間所在的地方。一個進程不能讀取、寫入、或者以任何方式訪問駐留在該分區中的另一個進程的數據。對於所有應用程序來說,該分區是維護進程的大部分數據的地方。線程
線程由兩個部分組成:
1、線程的內核對象,操作系統用它來對線程實施管理。內核對象也是系統用來存放線程統計信息的地方。
2、線程堆棧,它用於維護線程在執行代碼時需要的所有參數和局部變數。
當創建線程時,系統創建一個線程內核對象。該線程內核對象不是線程本身,而是操作系統用來管理線程的較小的數據結構。可以將線程內核對象視為由關於線程的統計信息組成的一個小型數據結構。
線程總是在某個進程環境中創建。系統從進程的地址空間中分配內存,供線程的堆棧使用。新線程運行的進程環境與創建線程的環境相同。因此,新線程可以訪問進程的內核對象的所有句柄、進程中的所有內存和在這個相同的進程中的所有其他線程的堆棧。這使得單個進程中的多個線程確實能夠非常容易地互相通信。
線程只有一個內核對象和一個堆棧,保留的記錄很少,因此所需要的內存也很少。
因為線程需要的開銷比進程少,因此在編程中經常採用多線程來解決編程問題,而盡量避免創建新的進程。線程運行
操作系統為每一個運行線程安排一定的CPU時間 —— 時間片。系統通過一種循環的方式為線程提供時間片,線程在自己的時間內運行,因時間片相當短,因此,給用戶的感覺,就好像線程是同時運行的一樣。
如果計算機擁有多個CPU,線程就能真正意義上同時運行了。互斥對象
互斥對象(mutex)屬於內核對象,它能夠確保線程擁有對單個資源的互斥訪問權。
互斥對象包含一個使用數量,一個線程ID和一個計數器。
ID用於標識系統中的哪個線程當前擁有互斥對象,計數器用於指明該線程擁有互斥對象的次數。