1. 程式人生 > >作業系統與多核處理器

作業系統與多核處理器

這篇文章解答了我心中的疑問,那就是作業系統會自動排程cpu資源來處理多程序,多執行緒的併發。      早在上世紀90年代末,就有眾多業界人士呼籲用CMP(單晶片多處理器)技術來替代複雜性較高的單執行緒CPU。IBM、惠普、Sun等高階伺服器廠商,更是相繼推出了多核伺服器CPU。不過,由於伺服器價格高、應用面窄,並未引起大眾廣泛的注意。直到AMD搶先手推出64位處理器後,英特爾才想起利用“多核”這一武器進行“帝國反擊戰”。2005年4月,英特爾倉促推出簡單封裝雙核的奔騰D和奔騰四至尊版840。AMD在之後也釋出了雙核皓龍(Opteron)和速龍(Athlon) 64 X2和處理器。但真正的“雙核元年”,則被認為是2006年
。這一年的7月23日,英特爾基於酷睿(Core)架構的處理器正式釋出。
    

    雙核的優勢不是頻率,而是對付同時處理多件事情。一個核心理論上同時只能幹一件事,比如你同時在後臺BT下載,前臺一邊看電影一邊拷貝檔案一邊聯QQ……,這麼多程式同時需要CPU來響應,怎麼辦?靠作業系統! 
    window本身就是多執行緒作業系統(DOS就是單執行緒系統,dos下2核4核和單核沒區別,處理一個任務時必須停下來等待處理結束才能幹下一件事),它可以把每個處理任務劃分為多“份”(一個任務可以由多個程序來實現,把每個程序又分為多個執行緒,然後由作業系統協調分配多核來處理排隊的執行緒,最後把處理結果合併
),多個處理任務按順序排成佇列,這樣單核心的CPU可以一次處理一“份”,輪流處理每個程式的“份”,這樣你感覺就是CPU同時在幹幾件事了。但如果CPU不夠強勁,同時排隊等待處理的東西太多了,你就會感覺系統在等待,有延時,反應慢等等症狀。再或者某個程式出現錯誤,宕機了,很可能造成後面排隊的其他任務都在那裡乾等,造成系統無反應的情況,按熱啟鍵都沒反應。理論上如果現在有顆6G頻率的單核CPU,單論處理效能應該與1個3G雙核近似,甚至更高一些,因為目前雙核比單核也就快不到2倍。
原本計算機一直以單核心的工作頻率作為效能的衡量,之所以放棄單核是因為目前的技術水平令單核效能繼續提升遇到了瓶頸,4G P4的夭折讓依靠頻率提升效能的路子走進死衚衕,不得已改走多核心路線,以核心數量來彌補處理能力的不足。不過慢慢的這些多核心的頻率又開始奔3G去了,隨著45nm的出現,雙核上4G應該可以想象,所以一方面每個核心的效能還在發展,另一方面多核心整合的手段雙管齊下,這樣CPU的效能可以迅速提升,繼續保持摩爾定律。
    多核CPU就是基板上整合有多個單核CPU,早期PD雙核需要北橋來控制分配任務,核心之間存在搶二級快取的情況,後期酷睿自己集成了任務分配系統(硬體上),再搭配作業系統(軟體上)就能真正同時開工,2個核心同時處理2“份”任務,速度快了,萬一1個核心宕機,起碼另一個U還可以繼續處理關機、關閉軟體等任務。較早的作業系統如XP等需要裝雙核或多核補丁,能更好發揮性能或更穩定,Vistia下就不需要。 
    目前幾乎所有的程式在編寫時是按單核心CPU寫的(多核心程式優化對程式設計師來說是個噩夢,目前好像還沒有合適的程式設計軟體能讓程式設計師輕鬆編寫針對多核心的程式),因此對多核的利用率不是很高,分配任務時,往往1個核心滿負荷,另一個還有空閒(留些空閒也對,要應付隨時發生的其它命令)。一般2核心效能也就比單核心高60~70%甚至更低。 
    4核或者將來的8核說白了還是多個核心獨自處理各自的“份”,不過人多力量大,速度快,響應時間短,不易宕機。當然耗電、協調性都會是個考驗。 

補充: 
    原本有個說法(有陣子我自己就持這觀點):“目前的軟體都是為單核心編寫的,多核CPU處理起來也沒什麼優勢。” 
    經過分析我們可以得知,參與任務分配的主角一是程式自己,二是作業系統,即使如單任務的SuperPI,在雙核下成績也要比同頻率的單核快不少,這就是事實證明。理論分析:單執行緒程式很傻,不知道有2個CPU在前面等著,所以發出的請求應該也是針對單核心的,但作業系統自動將呼叫請求分配給了2個CPU,並在處理結束後將結果合併,所以單核心程式也能享受到多核的“照顧”。儘管作業系統分配的可能不完美,但畢竟比單CPU要快。 
    如果程式自己又對多執行緒處理進行了優化(重新編寫),那麼就更完美了,可以達到2倍水平,對於這點5樓的朋友已經能舉出具體的例子了。非常感謝。 
    再推測一下,根據上面的分析,2G雙核應該比2G單核快近2倍,那麼2G的4核應該比2G的雙核快近2倍!如果有4G的雙核,那麼應該和2G的4核效能近似。

       對於多核CPU,優化作業系統任務排程演算法是保證效率的關鍵。一般任務排程演算法有全域性佇列排程和區域性佇列排程。前者是指作業系統維護一個全域性的任務等待佇列,當系統中有一個CPU核心空閒時,作業系統就從全域性任務等待佇列中選取就緒任務開始在此核心上執行。這種方法的優點是CPU核心利用率較高。後者是指作業系統為每個CPU核心維護一個區域性的任務等待佇列,當系統中有一個CPU核心空閒時,便從該核心的任務等待佇列中選取恰當的任務執行,這種方法的優點是任務基本上無需在多個CPU核心間切換,有利於提高CPU核心區域性Cache命中率。目前多數多核CPU作業系統採用的是基於全域性佇列的任務排程演算法

相關部落格:移動CPU非同步多核和大小核的那些事 http://www.leiphone.com/1208-vv-cpu.html 

相關推薦

作業系統處理器

這篇文章解答了我心中的疑問,那就是作業系統會自動排程cpu資源來處理多程序,多執行緒的併發。      早在上世紀90年代末,就有眾多業界人士呼籲用CMP(單晶片多處理器)技術來替代複雜性較高的單執行緒CPU。IBM、惠普、Sun等高階伺服器廠商,更是相繼推出了多核伺服器CPU。不過,由於伺服器價格高、應

執行緒處理器 SMP 分析

首先分析執行緒的優勢: 1、提高程式的併發性(執行緒級並行,而非指令級並行); 2、一個程序內的所有執行緒共享所有資源; 3、切換執行緒的代價下; 4、互動式程式可以通過多執行緒方式改善響應時間。 多執行緒實現的方式: 1、程式採用多執行緒設計方案; 2、多核處理器為單一的

Linux 的 Spinlock 在 MIPS 處理器中的設計實現

引言 隨著科技的發展,尤其是在嵌入式領域,高效能、低功耗的處理器成為眾多廠商追逐的目標,但是由於技術和工藝的瓶頸,試圖在單核處理器上達到這樣的目標變得越發困難,於是人們提出了多核處理器的概念。多核處理器的核心思想是一個處理器中包含若干個核(或執行緒),所有核(或執行緒)之間共享 IO、Cache、記憶體等資

片上處理器系統

多執行緒支援多個執行緒以重疊方式共享單個處理的功能單元,但是開發執行緒級並行的一般方法是使用多處理器。 實現多執行緒的硬體方法主要有三種: 細粒度多執行緒, Fine-grained (interleaved) multithreading,每個時鐘週

[py]你真的了解處理器嗎? 了解線程

註意 董事會 fusion 整體 用戶 繼續 高速 多核處理器 真的 你真的了解多核處理器嗎? 1.雙核≠雙性能 多核不一定會使你的手機或電腦速度更快,但它將提高你的PC的整體性能,這是一個有所不同的細微的技術特色。多核處理器的性能提升並不是簡單CPU核心的倍數,因為受到

[轉帖]AMD、英特爾為何爭相走向膠水處理器?真相在此

AMD、英特爾為何爭相走向膠水多核處理器?真相在此 膠水多核到底好不好?這個事不是簡單一句話能說明的,今天的超能課堂裡我們就來聊聊MCM膠水多核技術的過去及未來。 作者:孟憲瑞來源: 超能網|2018-11-21 15:25  收藏

DVFS及處理器功耗優化技術詳解

    概述         降低嵌入式系統功耗有多種方法,其中動態電源管理(DPM)和動態電壓頻率調整技術(DVFS)是降低系統功耗的兩種關鍵技術。其中動態電源管理主要依據裝置工作負載的變化切換器工作狀態以達到系統功耗最小化。本篇部落格則主要從DVFS技術做詳細的介紹。DV

對於執行緒程式,單核cpucpu是怎麼工作的

此文中的大部分資料來自於網路上,我只是覺得把有道理的整理一下,方便以後查閱。 1.多執行緒在單核和多核CPU上的執行效率問題的討論a1: 多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換那個執行而已,其實並沒有快(反而慢)多個cpu的話就可以在兩個cpu中同時執行了.....

spinlock在處理器上的效能比較

#define _GNU_SOURCE#include <sched.h>#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>#includ

MySQL利用處理器

在工作中可能遇到這樣的情況,隨著業務的增長,使用者量也在逐漸增長,終究有一天,一到高峰期,資料庫伺服器CPU利用率直飈100%。 最簡單的做法就是直接提升硬體效能,簡單粗暴,直接有效。 假如我們最開始的伺服器CPU核數是4,然後我們覺得4個有點扛不住,那就直

單核執行緒執行緒的區別---總結

在單核時代,多執行緒就有很廣泛的應用,這時候多執行緒大多用於降低阻塞(意思是類似於 while(1) { if(flag==1) break; sleep(1); } 這樣的程式碼)帶來的CPU資源閒置,注意這裡沒有浪費CPU資源,去掉sleep(1)就是純浪費了。 阻塞在

處理器&類UNIX系統 -> 之程序和執行緒效能比較

網路上有很多討論關於在*NIX系統在SMP環境下到底是應該用多執行緒還是多程序, 到底哪一個有更好的效能,  比如有很多人認為考慮到linux使用1-1執行緒模型(對核心來說, 執行緒就是一個程序)並且系統已經為程序處理做了很多優化,效率提升, 所以在liunx SMP環

處理器處理器的區別

最近遇到了一個讓人很是疑惑的問題,然後寫出來供大家解疑: 多個處理器&多核處理器? 多個處理器:多個單核處理器,就是說電腦和處理器有多個,但是這個電腦的處理器是單核的; 多核處理器:單個多核處理器,也就是說電腦有一個處理器,但是這個處理器是多核的;      

android手機之-------64位作業系統 64位處理器

//////////一、引  言:64位相關概覽 1. 理論上,64 位處理器搭配64位系統執行64位軟體,執行效率將成倍提升,這也將是未來的發展趨勢。 但就目前來看,基於32位指令開發的應用仍是壓倒性優勢,所以指望64位處理器能有明顯的進步還得過一段時間才行。 2. 當64位處理器執行在64位系統下時,可以

單核CPUCPU工作原理

單核CPU與多核CPU工作原理今天要介紹一下單核CPU和單核(超時間軸)CPU以及多核CPU的工作原理一.單核CPU起源:CPU的起源是1971年英特爾公司推出,由此正式宣告計算機的誕生,可以說是世界級

MySQL利用處理器 innodb_read_io_threads

在工作中可能遇到這樣的情況,隨著業務的增長,使用者量也在逐漸增長,終究有一天,一到高峰期,資料庫伺服器CPU利用率直飈100%。最簡單的做法就是直接提升硬體效能,簡單粗暴,直接有效。假如我們最開始的伺服器CPU核數是4,然後我們覺得4個有點扛不住,那就直接給他搞16個核。這下

自旋 鎖 單核 時間片 搶佔核心 非搶佔核心

(1) linux上的自旋鎖有三種實現:          1. 在單cpu,不可搶佔核心中,自旋鎖為空操作。          2. 在單cpu,可搶佔核心中,自旋鎖實現為“禁止核心搶佔”,並不實現“自旋”。          3. 在多cpu,可搶佔核心中,自旋鎖實現為

ARM處理器啟動過程分析

說明: 該流程圖按照程式碼執行時間順序劃分為4部分: 1.     Bootloader在圖片上半部,最先啟動; 2.     Kernel在圖片下半部,由bootloader引導啟動; 3.CPU0執行流程在圖片左半部,bootloader程式碼會進行判斷,先行啟

異構處理器開發嵌入式應用入門

By Toradex Raul Rosetto Mu?oz 1). 簡介 每天都有新的異構多核處理器/片上系統 SoC 面市。在 SoC 上整合微控制器和外設控制核正變得越來越普遍,看看最新發布的 NXP? :i.MX 6SoloX、i.MX7 和即將面世的 i.MX 8。

執行緒執行效率

1、多執行緒在單核和多核CPU上的執行效率問題的討論 多執行緒在單cpu中其實也是順序執行的,不過系統可以幫你切換哪個執行而已,其實並沒有快(反而慢)。多個cpu的話就可以在多個cpu中同時執行了。單核CPU時使用多執行緒,通常是有執行緒要處於等待狀態。而對於普通的進度條更