讀懂操作系統之虛擬內存頁表(五)

前言

在一個擁有32位的地址空間,4KB的頁面(212),並且每個PTE為4個字節,那麼頁表大小為4MB(4 * 232 / 212),但若為64位地址空間,4KB的頁面(212)且每個PTE為4字節,那麼頁表大小為16TB(4 * 264 / 212),由於頁表常駐內存,佔用內存會很大,所以必須對頁表存儲結構進行優化,這就是我們本文所要講解的內容,常見的頁表數據結構為多級頁表(兩級、三級等)、倒置頁表、哈希頁表,我們來一一進行分析。

多級頁表

首先我們講講2級頁表,然後通過2級頁表延伸到多級頁表,現假設有16KB(214)的地址空間,並且每頁大小為64(26)字節,每個PTE為4字節,那麼說明頁表為1KB(4 * 214 / 26),若我們有64字節的頁,那麼將1KB可劃分為16個64字節的頁面,每個頁面可容納16個PTE,前面我們講解到虛擬地址劃分為虛擬頁號(VPN)和虛擬頁偏移量(VPO),但虛擬頁偏移量已經固定,那麼我們只能從VPN下手將其作為索引用於索引頁表目錄,那麼我們該如何利用VPN來構建各個部分的索引呢?我們首先需要構建頁表目錄,根據上述假設,總共有256個PTE分佈在16頁上,頁目錄在頁表的每頁上需要一個條目,因此它具有16個條目, 最終我們需要VPN中的4位索引到目錄中,這也就意味着我們需要使用VPN的前4位,如下所示:

我們從VPN提取出了頁表目錄索引(PDI),那麼我們就可以計算出每個PDE(Page Directory Entry)的地址值:

PDEAddress = PageDirectoryBase + (PDIndex * sizeof(PDE))。

有了頁目錄索引后我們還需進行進一步翻譯,如果頁目錄索引為空,很顯然第2級頁表根本就不會存在,如此一來則達到了減少內存的要求,因為只有第一級頁表才會存在於主存中,虛擬內存系統會根據需要調入或調出第2級頁表,這就減少了主存的壓力,只有經常使用的2級頁表才需要緩存在主存中。如果第1級頁表即頁目錄索引有值,那麼還需根據頁目錄指向的頁表頁面去獲取PTE,要找到此PTE,我們還需要使用VPN的其餘索引映射到頁表的部分。

 通過使用如上頁表索引來索引頁表本身,從而找到PTE地址,也就找到了PFN(物理頁幀號)

PTEAddress = (PDE.PFN << SHIFT) + (PTIndex * sizeof(PTE))

從頁面目錄獲得的頁面幀號(PFN)必須先左移到適當位置,然後再與頁表索引組合以形成PTE的地址。假設如下為二級頁表扁平化的片段

 

如上第1片段為頁表目錄,在其中存在索引到第2級頁表的索引,還包括有效位,第2和第3片段分別為第1級頁表目錄索引對應的頁表(其中包含保護位,可讀?可寫?等等),假設CPU產生虛擬地址(0xFE16 = 25410 = 111111102),由於我們假設虛擬地址空間為14位,所以將轉換后的2進制不足用0填充即11111110000000,同時我們將地址空間進行虛擬頁號(VPN)和虛擬頁偏移量(VPO)劃分,然後對VPN劃分為頁表目錄和頁表索引,我們通過紅色、綠色、藍色由左至右分別代表頁表目錄索引、頁表索引、虛擬頁偏移量即1111 1110  000000,經過如此劃分后,此時前4位(11112 = 1510)為頁表目錄索引,對應上述頁表目錄最後一行,此時頁表目錄幀號為101對應第2個頁表片段,然後根據接下來的4位(11102 = 1410),最終得到索引為倒數第2行,即最終物理頁幀號為55。最後我們通過如下物理地址計算公式

 PhysAddress = (PTE.PFN << SHIFT) + offset

 即最終物理地址為:55 * 2+ 000000 = 352010 = 0XDC016。假設為32位地址空間,那麼頁目錄索引、頁表索引、虛擬頁偏移量分別對應為10、10、12位,那麼對應的2級頁表將是如下形式

簡而言之,對於32位地址空間,會將VPN中的前10位(位22..31)用於索引頁表目錄,緊接下來的10位(12 ..21)用於索引所選的頁表。換言之,對於2級頁表結構其本質是:VPN的前m位為頁表目錄索引,而接下來的n位為頁表索引,同時需要注意的是2級頁表其地址是從上往下增加。根據上述將32位地址空間中的頁表以2級結構劃分,此時第1級頁表大小為(1024 * 4) = 4KB,而第2級頁表為(1024 * 1024 * 4) = 4MB,所以頁表大小將為4KB + 4MB,這麼算來比直接使用單級頁表結構為4MB情況更糟糕了不是嗎,其實情況並不是這樣,如上算出的4KB + 4MB為最極限的情況,上述已經講解過只有經常需要用到的2級頁表才緩存在主存中,所以實際情況下頁表大小會小於4MB。

 

早期操作系統採用的是2級頁表結構,但是現如今大多數操作系統採用多級頁表結構,就像樹一樣,不過是深度或層次更深了而已。假設我們有一個30位虛擬地址空間和一個較小的頁面(512字節),因此,我們的虛擬地址具有21位的虛擬頁號和9位的偏移量,使頁表的每個部分都適合單個頁面是構建多級頁表的目標,但到目前為止,我們僅考慮了頁表本身,如果頁表目錄很大,那該怎麼辦?為了確定一個多級頁表中需要多少級才能使頁表的所有部分用一個頁面容納,我們首先確定一個頁面中可以容納多少個PTE。我們假設給定的頁面大小為512字節,並假設PTE大小為4字節,我們知道在單個頁面上可容納128個PTE。當我們索引到頁表的頁面時,可以得出結論,我們需要使用VPN的最低有效7位(log2128)作為索引

通過確定單頁面需要容納128個PTE,那麼將佔據地址空間7位,那麼還剩下14位地址空間,如果將剩下的214作為頁表目錄, 那麼將橫跨128頁而不再是1頁,那麼對於構建多級頁表的目標將無法實現,為了解決這個問題,我們需要將14位進行再次劃分,將頁表目錄進行設置為多頁,頁表目錄位於上方從而指向另一頁表目錄,因此我們可以進行如下劃分

現在,在索引上層頁表目錄時,我們使用虛擬地址的最高位(圖中PD Index:0),該索引可用於從頂級頁表目錄中獲取頁表目錄的條目,如果有效,則對來自自頂層PDE和VPN的下一部分(PD Index:1)的物理幀號組合來查詢頁表目錄的第二層,最後,如果有效,則為PTE地址通過將頁表索引與第二級PDE中的地址結合使用,可以形成一個地址。 當然這個過程需要做很多工作,所有這些都是為了在多級表中查找物理頁幀號。最終多級頁表結構如下這般

上述我們講過若為64位地址空間,4KB的頁面(212)且每個PTE為4字節,在單級頁表情況下,那麼頁表大小為16TB(4 * 264 / 212)= 16TB,若我們劃分為3級,如下:

 

那麼對於上述外部頁即頁目錄索引將需要佔內存4 * 232 = 16GB,所以我們仍需繼續劃分層級,但是每個層級都有一個額外的間接方式,因此會產生額外的開銷。比如64位地址空間在4KB頁面上將使用大地址空間,所以多級頁表成為具有小頁的大地址空間的內存消耗。 

哈希頁表

處理大於32位地址空間常用的方法是使用哈希頁表(使用稀疏的地址空間),採用虛擬頁碼作為哈希值,對於每一個PTE使用鏈表結構存儲從而解決衝突或碰撞,每個元素由三個字段組成:虛擬頁碼、映射的頁幀、指向鏈表內下一個元素的指針。通過哈希算法將虛擬頁碼映射到哈希頁表,然後將虛擬頁碼與鏈表第一個元素的第一個字段進行比較,若匹配則將第二個字段用來形成物理地址,否則遍歷鏈表查找對應匹配項。哈希頁表如下圖所示

雖然通過哈希頁表查找很快,同時採用如上划重點標記的鏈表數據結構解決衝突問題,雖說消除了條目在內存中連續的需求,但是仍然以更高的內存開銷進行存儲即消耗更多內存,特別是如果頁表是完整的,並且具有有效/無效位以使未使用的條目無效,那麼哈希頁表不再那麼適用,此時我們採用其他方案,如下倒置頁表。

倒置頁表

通過前面內容學習我們知道對於每個進程都有一個關聯的頁表,該進程中的每一個虛擬頁都在頁表中對應一項,不管是否有效,進程通過虛擬地址引用頁,操作系統通過計算虛擬地址在頁表中的位置即PTE,但這種方式有明顯的缺點,如上我們也敘述過,每個頁表可能包含數以百萬計的條目,如此一來,頁表將佔用大量的物理內存以跟蹤其他物理內存是如何使用的,為解決這個問題,我們可以使用倒置頁表(inverted page table),對於每個真正的內存頁,倒置頁表才有一個條目,每個條目包含保存在真正內存位置上的頁的虛擬地址,以及擁有該頁進程的信息,因此,整個系統中所有進程將只有一個頁表,並且每個物理內存的頁只有一個相應的條目,換言之,與知道每個進程的虛擬頁在哪裡相反,現在我們知道擁有哪個物理頁的進程與它對應的虛擬頁。IBM是最早採用倒置頁表的公司,從IBM System 38、RS/6000、到現代的IBM Power CPU。對於IBM  RT,系統的虛擬地址包含三部分:進程Id、頁碼、頁偏移量,每個倒置頁表條目包含兩部分:進程Id、頁碼,這裏的進程Id作為地址空間的標識符,當發生內存引用時,由進程Id和頁碼組成的虛擬地址被提交到內存子系統,然後搜索倒置頁表來尋址匹配,如果找到匹配條目,則生成物理地址,如果未找到匹配條目則為非法地址訪問。 倒置頁表結構如下:

雖然倒置頁表減少了存儲每個頁表所需的內存空間,但是它增加了由於引用頁而查找頁表所需要的時間,由於倒置頁表是按照物理地址排序,而查找則是根據虛擬地址,因此查找匹配可能需要搜索整個表,這種搜索需要耗費很長時間,為解決這個問題,可以使用一個哈希表結構,從而將搜索限制在一個或最多數個頁表條目,當然,每訪問哈希表就增加了一次內存引用,因此每次虛擬地址的引用至少需要兩個內存讀,一個用於哈希表條目,另一個用於頁表條目即PTE,同時結合前面所學,在搜索哈希表之前,肯定先搜索TLB,這樣可大大提高性能。對於倒置頁表還會帶來一個問題,那就是實現共享內存,共享內存需要將多個虛擬地址映射到同一物理地址,很顯然,這種標準的方式無法應用於倒置頁表,因為每一個物理頁只有一個虛擬頁條目,一個物理頁不可能有兩個或多個共享的虛擬地址,所以為解決這個問題,只能允許頁表包含一個虛擬地址到共享物理地址的映射,這也就意味着,對於未映射的虛擬地址的引用勢必會導致頁錯誤。

總結

本節我們非常詳細的討論了多級頁表結構、對於哈希頁表和倒置頁表數據結構通過看圖理解起來非常簡單,從本節內容我們可總結出:對應頁表結構可以擁有良好的時間複雜度或空間複雜度,但不能同時兼得。到此關於虛擬內存重要內容基本上都已囊括,若有遺漏,後續我會繼續進行補充。接下來我們將進入內存管理分頁和分段的學習,講完之後,會陸續進入到程序的執行、進程、死鎖、併發等,相信大家會比較感興趣,感謝您的閱讀,我們下節再見。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

瑞典環保少女啟發 泰年輕人投身氣候變遷運動

摘錄自2019年12月01日中央通訊社泰國報導

受到16歲瑞典環保少女童貝里(Greta Thunberg)啟發,一群泰國年輕人起身組織氣候變遷抗議活動,希望喚起泰國人重視環保議題,目前已有越來越多年輕人加入他們的行列。這場活動是由一群年紀約20歲的泰國年輕人發起的,沒有政黨色彩,沒有強大的組織,主要發起人是年僅22歲、剛從大學畢業的楠緹查(Nanticha Ocharoenchai)。

日前在曼谷市中心的是樂園(Lumpini Park)有一場特別的抗議活動,上百人高舉著「氣候變遷比功課還糟糕」、「如果不停止的話我們都會死」、「這是我們的未來」、「改變正在發生」等標語,並高喊「我們現在就要行動!」等口號,上百人隨後躺在是樂園的地上,代表這塊土地受到氣候變遷的衝擊,正在逐漸衰亡。

根據世界銀行在9月發布的報告,曼谷每年都在下沉,估計到2030年,曼谷有40%的土地會被水淹沒。

這個活動的目標就是希望泰國政府採取行動,也希望喚起更多泰國人關心氣候變遷的議題,因此參與這場抗議活動的除了大人,還有很多曼谷各區的大學生、中學生甚至小學生。被朋友暱稱為琳(Lynn)的楠緹查和她的團隊今年已經第4次在泰國發起這樣的抗議活動,從一開始僅50多人到這次的上百人,越來越多人注意到氣候變遷議題。

琳曾經發信給泰國自然資源和環境部(Ministry of Natural Resources and Environment),呼籲泰國政府承諾減少煤炭使用量,並且在2025年提高使用再生能源佔全部能源的比例達50%,2040年可以達到100%使用再生能源。

琳關心氣候變遷議題已經3、4年時間,但直到今年,她決定發起實際行動,希望帶來更多改變。她說,有越來越多的年輕人願意加入他們,他們也得到政府部門和大企業的正面回應。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

控制暖化不超過2°C 燃煤電廠需大規模改建更新 | 解讀《 2019年世界能源展望》報告1/3

環境資訊中心外電;姜唯 翻譯;林大利 審校;稿源:Carbon Brief

國際能源署(IEA)13日發表報告。報告中指出,全球能源系統正在進行「深層更新」,但儘管如此,除非積極度再提升,否則全球的二氧化碳排放量還是會繼續增長數十年。

今年810頁版本的特點在於「承諾政策情境(Stated Policies Scenario, STEPS)」(以前稱為「新政策情境」),反映政府已經說出口的政策的效果。風能和太陽能的激增將使再生能源滿足全球能源需求的大部分成長。但是煤炭的平穩發展,加上對石油和天然氣的需求不斷增加,全球排放量在到2040年的展望期內將繼續上升。

相對地,報告的「永續發展情境(Sustainable Development Scenario, SDS)」描繪出有50%機率將升溫限制在1.65°C內所需的條件,IEA表示這是「完全符合巴黎協定」的情況。

報告說,SDS需要投資「大量重新分配」,從化石燃料轉向效率和再生能源、淘汰全球約一半的燃煤電廠,以及全球經濟的其他變化。

IEA今年還探討了將升溫限制在工業化前1.5°C內(即巴黎協定的理想目標)所需條件,不過沒有建立詳細模型。

未來情境

《世界能源展望》(WEO)是這個主題的年度出版物中審查最嚴格的報告之一。長達數百頁的分析以世界各國政府的數千個資料庫和IEA的世界能源模型為基礎。

IEA表示報告沒有對前景預測。相反地,它以二氧化碳排放量和其他資料形式呈現了特定能源選擇的後果。該報告說明道:

「《世界能源展望》的目的不是提供一個關於2030年或2040年世界能源將在何處的觀點。這將取決於未來的各種重大選擇。 WEO-2019的目的是,提供決策者制訂新政策、考慮新投資或以其他方式塑造能源未來時所需的資訊。透過探索各種可能的未來、實現的方式、不同選擇的後果以及一些關鍵的不確定性來做到這一點。」

引言中介紹了三種可能的「前景」,在報告發表前,部落格文章「了解WEO情境」也提前對此做了說明。

展望報告的中心觀點是「STEPS」,它的目的是「在不預期未來有所改變的情況下,讓政策制定者好好審視自己的計畫和積極度會有何表現」,包括政府做出的巴黎氣候承諾。不過,IEA並不認為所有政策目標都會實現:

「積極度不會自動被納入情境中:徹底落實不是理所當然的,因此政策落實的前景和時機是以我們對相關監管、市場、基礎建設和財務限制的評估為基礎。」

承諾政策包括零排放淨目標,如英國的目標。 IEA表示,已商定或討論中的類似目標(包括歐盟)涵蓋了全球排放量的12%。就解決全球排放而言,這些目標很重要,但不是決定性的。IEA表示,為實現零排放目標而開發的技術和方法可能會產生更大的連鎖反應,這可能有助於其他國家減少排放。

WEO的第二個未來情境是「永續發展情境(SDS)」。這個情境從能源獲取、空氣污染和碳排放方面的永續發展目標開始,探討達到目標所需的條件。

最後,在「當前政策情境(Current Policies Scenario, CPS)」中,政府放棄其承諾目標和意圖,能源系統僅以已經制定好的政策和法律為指導。

今年的報告文字、圖表和數據將繼續提到CPS,只是重要性較低,「當前政策情境」這個詞在810頁中僅使用了102次,遠少於STEPS的793次和SDS的535次。報告也說明,CPS就是不採取行動的後果,可看出STEPS情境所需的額外努力。

(2010年《世界經濟展望》 中,CPS被提及了340次,而當時的中心觀點NPS出現981次,「450種情境」出現745次。)

需求上升

IEA表示,根據全球已承諾的計畫和政策,到2040年,全球能源需求將繼續每年增長1%,相當於中國目前的總需求量。

根據國際貨幣基金組織(IMF)的預測,人口增加(根據聯合國的「中等」預測,2040年將達到90億人口)和經濟持續擴大(全球GDP每年增加3.4%)推動了這個成長。

IEA表示,由於產業轉向低能耗,能源效率的提高和「飽和效應」(如汽車需求封頂),2019年能源需求的成長率大約是2000年以來平均2%的一半。

如下圖中的紅線所示,STEPS中再生能源將滿足約49%的需求增長。天然氣的使用也預期將迅速增加(藍色),超過煤炭成為僅次於石油的第二大能源,並滿足總體需求增長的三分之一。

1990年至2040年全球各類型能源需求量,單位是數百萬噸石油當量。未來需求預測以STEPS為基礎。其他再生能源包括太陽能、風能、地熱能和海洋能。資料來源:國際能源署《 2019年世界能源展望》。Carbon Brief使用Highcharts繪製圖表。

與天然氣和再生能源的快速發展相比,IEA STEPS情境預測煤炭使用量將達到平穩,然後從今日的水平略降(上方黑線)。這呼應去年的分析,即全球煤炭需求在2014年達到頂峰。

IEA現在還建議,由於汽車燃油效率的提高和電動汽車(EV)的增加,到2030年(橙色線)石油需求將開始趨於穩定,這將使汽車的石油需求在2020年代末期達到峰值。報告說,由於電動汽車成本下降,傳統汽車的未來將是值得深思的問題。

IEA表示,貨運、航運、航空和化學產品的石油需求「持續增長」,SUV因日益普及,成為另一個潛在的需求支撐因素。(值得注意的是,阿拉伯國家石油公司的股票銷售文件也顯示,全球石油需求將從2035年左右開始趨於穩定。)

根據IEA STEPS,到2040年,全球能源需求增長的三分之二來自亞太地區。印度成為世界上人口最多的國家,其能源需求成長一倍,成為全球需求成長的最大貢獻者,佔成長總量的四分之一以上。

在這一總數中,STEPS預測亞洲國家對煤炭的需求增加抵消了美國和歐洲的大幅減少。IEA說:

「煤炭需求來自大多數亞洲發展中國家:在煤基礎設施方面的新投資決策已顯著放緩,但是現有的煤電廠和用煤工廠還是很多……為煤炭提供了可觀的發展動力。」

比例變動

STEPS之下,到2040年,再生能源的興起體現了IEA所形容的「深層更新」,但同時也指出了全球能源系統「變動緩慢」的特性,如煤炭長期的需求高原。

需求成長的比例變化顯示在下面圖表中,煤炭、石油和天然氣(藍色色塊)滿足了能源史上的大部分成長(最左欄)。

儘管STEPS之下,再生能源能滿足2040年需求成長一半,而且成長速度因為經濟因素和能源效率變化而放慢(中間欄),但它仍然遠遠沒有限制全球碳排放量(參閱下文)。

如果要阻止全球氣溫上升,需要有更具決定性的變化,如實現IEA SDS(最右欄)。

全球能源需求年均變化量,以百萬噸石油當量為單位。左:歷史變化。中:IEA STEPS。右:IEA SDS。資料來源:國際能源署《 2019年世界能源展望》 。Carbon Brief使用Highcharts繪製。

在STEPS之下可見再生能源所能滿足的需求成長越來越多,化石燃料在全球能源用量的比例將從2018年的81%下降到2040年的74%,SDS之下則下降到58%。

從STEPS到SDS的需要大規模的變革,其中大多數已經在決策者的議程中很久了。報告解釋:

「2018年化石燃料消費補貼的全球價值,幾乎是再生能源和電動汽車補貼以及全球碳定價計畫收入總和的兩倍。這種不平衡使排放儘早達到峰值的任務變得十分複雜。」

SDS之下,2030年代無碳捕集的化石燃料投資將減少至2014年到2018年平均的一半,再生能源、電網和核能方面的投資將翻倍,而在能源效率上的支出將翻兩倍。

IEA表示,這反映了一個事實,即能源效率是解決排放的最重要因素,這表示SDS下2040年的總體需求會略低於今日的水平。

IEA說「提高能源效率很有機會讓全世界實現永續能源目標」,它召集了「全球能源效率緊急行動委員會」來促成進展。

某種程度上這是對數據的回應,數據顯示效率的改善正在放緩,2018年的效率成長率是2010年以來最低的,這「疲軟的氣力」直得「深切關注」。IEA表示「新能源效率政策和加強現有措施的努力相對缺乏」。

較低的需求會帶來連鎖反應,特別是加上再生能源的快速成長。值得注意的是,在SDS之下,對煤炭、石油和天然氣的需求逐漸下降,而煤炭減幅特別大(上方最右欄中的灰色部分)。

在這個總數中,IEA說,電業的煤炭用量受影響最大。到2040年,超過一半的當前燃煤電廠將退役,規模大於全中國目前的容量。

有半數的退役發生在壽命結束之前,如果將升溫保持在2°C以下,那麼投資於全球現有煤電廠的10億美元中,有部分將面臨風險。歐洲222GW燃煤中有約98%、美國276GW中約88%將關閉。

IEA說,在SDS之下,剩餘的燃煤電廠大部分必須「改建或翻新」。他們得在需求高峰和再生能源產出低谷期間運作有限的時間,不然就得大量投資碳捕集與封存(CCS)技術來減排。

今年的展望報告包含了對煤炭開採過程中釋放的甲烷的新分析。分析結果說明,與航空和航運業相比,煤炭開採的暖化效應更大。(1/3,)

‘Profound shifts’ underway in energy system, says IEA World Energy Outlook (1/3) by Simon Evans

The world’s CO2 emissions are set to continue rising for decades unless there is greater ambition on climate change, despite the “profound shifts” already underway in the global energy system.

That is one of the key messages from the International Energy Agency’s (IEA) , published today. This year’s 810-page edition is notable for its renamed central “Stated Policies Scenario” (STEPS), formerly known as the “New Policies Scenario”.

In this scenario, which aims to mirror the outcome of policies already set out by governments, a surge in wind and solar power would see renewable sources of energy meeting the majority of increases in global energy demand. But a plateau for coal, along with rising demand for oil and gas, would mean global emissions continue to rise throughout the outlook period to 2040.

In contrast, the report’s “Sustainable Development Scenario” (SDS) sets out what would be required to give a 50% chance of limiting warming to 1.65C, which the IEA describes as “fully in line with the Paris Agreement”.

It says the SDS would require a “significant reallocation” of investment away from fossil fuels towards efficiency and renewables, as well as the retirement of around half the world’s fleet of coal-fired power stations and other changes across the global economy.

The IEA has this year also explored, but not modelled in detail, what it would take to limit warming to no more than 1.5C above pre-industrial temperatures, the aspirational goal of the Paris Agreement.

Future scenarios

The World Energy Outlook (WEO) is one of the most heavily scrutinised documents in the annual calendar of publications on the topic. Its hundreds of pages of analysis are based on thousands of datapoints, drawn from governments around the world, as well as the IEA’s .

The IEA says that it does not make forecasts in its outlook. Instead, it presents the consequences of societal energy “choices” in terms of CO2 emissions and other outcomes. The report explains:

“The World Energy Outlook does not aim to provide a view on where the energy world will be in 2030 or 2040. This will depend on hugely important choices that lie ahead. What the WEO-2019 does aim to do is to inform decision-makers as they design new policies or consider new investments or shape our energy future in other ways. It does so by exploring various possible futures, the ways that they come about, the consequences of different choices and some of the key uncertainties.”

The outlook spans three alternative “futures”, set out in the introduction and described in a , published ahead of the report’s release, on “understanding the WEO scenarios”.

The outlook’s central scenario is STEPS, which has “the intention to ‘hold up a mirror’ to the plans and ambitions announced by policymakers without trying to anticipate how these plans might change in future”. This includes the made by governments. The IEA does not assume that all policy goals will be met, however:

“[A]mbitions are not automatically incorporated into the scenario: full implementation cannot be taken for granted, so the prospects and timing for their realisation are based upon our assessment of the relevant regulatory, market, infrastructure and financial constraints.”

Stated policies include some net-zero emissions goals, such as . Similar goals agreed or under discussion, including in the EU, cover 12% of global emissions, the IEA says. This makes the targets significant, but not decisive, in terms of tackling the global emissions. But the IEA says there could be larger knock-on effects due to the technologies and approaches developed to meet net-zero targets, which could help others to also cut emissions.

The second WEO future is the “Sustainable Development Scenario” or SDS. This is a different type of scenario that starts from on energy access, air pollution and CO2 emissions before working backwards to show what would be needed to reach them.

Finally, the “Current Policies Scenario” (CPS) would see governments renege on their stated goals and intentions, with the energy system guided only by policies and laws that are already in place.

This year’s outlook continues to feature the CPS in its text, charts and data. But it is afforded lower priority, with the phrase “current policies scenario” used 102 times over 810 pages – far less often than the 793 mentions of the STEPS or the 535 for the SDS. The outlook says the CPS highlights the consequences of inaction and the level of effort required to meet even the STEPS pathway.

(For comparison, the CPS is mentioned 340 times in the , against 981 uses of the then-central NPS and 745 mentions of the “450 scenario”.)

Rising demand

On the basis of stated plans and policies around the world, the IEA says that global energy needs will continue to rise by 1% per year until 2040, adding demand equivalent to China’s current total.

This growth is driven by a rising population – based on the UN’s to reach 9 billion people by 2040 – and an expanding economy, with global GDP increasing by 3.4% a year, per projections.

The rate of energy demand growth is around half the average rate of 2% seen since 2000, the IEA says, due to shifts towards less energy-intensive industries, energy efficiency gains and “saturation effects” – for example, where demand for cars reaches a peak.

Some 49% of demand growth would be met by renewables in the STEPS, as shown with the red line in the chart, below. Gas use is also expected to rise rapidly (blue), overtaking coal to become the second-largest source of energy after oil and meeting a third of the rise in overall demand.

Global primary energy demand by fuel, millions of tonnes of oil equivalent, between 1990 and 2040. Future demand is based on the STEPS. Other renewables includes solar, wind, geothermal and marine. Source: IEA . Chart by Carbon Brief using .

In contrast to the rapid gains for gas and renewables, the IEA STEPS sees coal use plateau and then decline slightly from today’s levels (black line above). This confirms last year’s analysis that global coal demand peaked in 2014.

The IEA now also suggests that oil demand will start to level off by the 2030s (orange line) as a result of vehicle fuel-efficiency gains and the rise of electric vehicles (EVs), which see passenger car oil demand peak in the “late 2020s”. There are “profound questions” over the future of conventional cars, it says, given falling costs for EVs.

Oil demand for freight, shipping, aviation and chemicals “continues to grow”, the IEA says, with the growing popularity of SUVs another potential factor propping up demand. (Notably, documentation for the Saudi Aramco share sale also has global oil demand levelling off from around 2035.)

The global rise of SUVs is challenging efforts to reduce emissions.

If the appetite for heavier & bigger cars continues to grow at a similar pace to the past decade, this would add nearly 2m barrels a day in global oil demand by 2040.

4/

— Fatih Birol (@IEABirol)

Some two-thirds of the increase in global energy demand to 2040 comes from the Asia Pacific region, under the IEA STEPS. India becomes the country and its energy demand doubles, making it the single largest contributor to global growth and accounting for more than a quarter of the total increase.

Within this total, the STEPS sees rising offset large declines in the US and Europe. The IEA says:

“Coal is the incumbent in most developing Asian countries: new investment decisions in coal-using infrastructure have slowed sharply, but the large stock of existing coal-using power plants and factories…provides coal with considerable staying power in the STEPS.”

Shifting shares

The rise of renewables anticipated under the STEPS to 2040 is demonstrative of the “profound shifts” described by the IEA, yet it also points to the “slow moving” nature of the global energy system, as exemplified by the long, high plateau in demand for coal.

These shifting shares of demand growth are shown in the chart, below, with coal, oil and gas (shades of blue) having met most of the historical increases in energy use (leftmost columns).

While the STEPS maps a future where renewables meet half of the increase in demand to 2040, and the pace of growth slows due to shifting economic factors and energy efficiency (central columns), it remains well short of putting a cap on global CO2 emissions (see discussion below).

If increases in global temperatures are to be stopped, then even more decisive changes will be required, as shown in the example of the IEA SDS (rightmost columns).

Average annual change in global energy demand, by fuel, million tonnes of oil equivalent. Left: historical changes. Centre: IEA STEPS. Right: IEA SDS. Source: IEA . Chart by Carbon Brief using .

The rising portion of demand growth met by renewables sees the fossil fuel share of global energy use decline from 81% in 2018 to 74% in 2040 under the STEPS, or 58% under the SDS.

Moving from the STEPS to the SDS will require a wide range of changes, most of which have long been on the agenda for policymakers. As the report explains:

“The global value of fossil fuel consumption subsidies in 2018 was almost double the combined value of subsidies to renewable energy and electric vehicles and the revenue from carbon pricing schemes around the world. This imbalance greatly complicates the task of achieving an early peak in emissions.”

By the 2030s, investment in fossil fuels without carbon capture would halve in the SDS, relative to the average during 2014-2018. At the same time, investment in renewables, electricity networks and nuclear would roughly double and spending on energy efficiency would nearly quadruple.

This reflects the fact that energy efficiency is the single most important factor in tackling emissions, the IEA says, meaning that overall demand in 2040 under the SDS is slightly below today’s levels.

It says “the potential for efficiency improvements to help the world meet its sustainable energy goals is massive” and it has convened a to boost progress.

In part, this is a response to data showing that efficiency improvements are drying up and 2018 saw the , with this “faltering momentum” a cause for “deep concern”. It cites “a relative lack of new energy efficiency policies and of efforts to tighten existing measures”.

The World Energy Outlook is out today and shows once again the critical role of energy efficiency for achieving carbon goals.

— Jan Rosenow (@janrosenow)

Lower demand has knock-on consequences, particularly when combined with more rapid growth from renewables. Notably, demand for coal, oil and gas progressively declines under the SDS, with coal facing particularly large reductions (grey chunks in the rightmost columns, above).

Within this total, the IEA suggests that coal use in the power sector would be hardest hit. It says that more than half of current coal-fired power stations would retire by 2040 in the SDS, representing a fleet larger than .

With half of retirements coming before the end of their useful lives, some of the $1tn of capital invested in the world’s existing coal fleet would be put at risk, if warming is kept below 2C. Some 98% of the 222 gigawatts (GW) of coal in Europe and 88% of the 276GW in the US would close.

Under the SDS, the remaining coal plants would mostly need to be “repurposed or retrofitted”, the IEA says. This means they would either operate limited hours, during peaks in demand and troughs in renewable output, or would face substantial investments to fit (CCS) technology to prevent their CO2 emissions.

This year’s outlook contains new analysis on the methane released during coal mining, which it suggests has a greater warming impact than .

※ 全文及圖片詳見:()

作者

如果有一件事是重要的,如果能為孩子實現一個願望,那就是人類與大自然和諧共存。

於特有生物研究保育中心服務,小鳥和棲地是主要的研究對象。是龜毛的讀者,認為龜毛是探索世界的美德。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

蒲亭與習近平視訊連線 啟動首條俄中天然氣管

摘錄自2019年12月02日中央通訊社報導

俄羅斯總統蒲亭今天(2日)與中國國家主席習近平透過視訊連線,在電視轉播的儀式中啟動連接俄中兩國的首條天然氣管「西伯利亞力量管道」(Power of Siberia)。

習近平指出,這項計畫是「我們兩國間互利合作的典範」。根據俄國電視的翻譯,他又說:「中俄關係的發展如今是,未來也仍將是我們兩國外交政策的優先要務。」

這條3000公里長的管道從俄羅斯西伯利亞東部偏遠地區,經由邊境城市海蘭泡(Blagoveshchensk)進入中國的中俄東線天然氣管道,中國境內管道的長度超過5000公里。

俄中兩國在經歷十年的艱苦談判後,於2014年簽署了一項為期30年的4000億美元協議,以建設和營運這條管道。這是俄羅斯天然氣工業公司的最大合約。當管道於2025年完全運作時,每年將提供中國380億立方公尺的天然氣。

此外,俄羅斯也正計畫不久後啟動另外兩條天然氣管道,將繞過烏克蘭增加對歐洲的天然氣供應。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

海拔4000公尺的馬鈴薯博物館 暖化未來養活世界人口的希望

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

水資源危機默默蔓延 威脅全球糧食供應

摘錄自2019年11月26日中央通訊社報導

美國智庫世界資源研究所今天(26日)表示,一場「默默蔓延的危機」正威脅全球糧食供應,到了2040年,水資源匱乏可能危及多達40%的灌溉作物。

世界資源研究所(World Resources Institute)指出,氣候變遷造成降雨不規律,也威脅到1/3依靠雨季供給水分的作物。科學家認為,水資源的供應受到多重因素影響,包括氣候變遷和管理不善,但農業是一大因素,占用70%淡水。

世界資源研究所今天推出名為Aqueduct Food的線上工具,在地圖上標識出香蕉、咖啡、大豆和棉花等40多種作物的灌溉水資源風險分布。

這個智庫發現,在灌溉作物中,將近67%的小麥、64%的玉米和19%的稻米到了2040年可能會位於極高缺水壓力的區域。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

潛力無窮的黑暗物質:生物炭一年可抵消10億噸碳

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

Java基礎系列5:Java代碼的執行順序

該系列博文會告訴你如何從入門到進階,一步步地學習Java基礎知識,並上手進行實戰,接着了解每個Java知識點背後的實現原理,更完整地了解整個Java技術體系,形成自己的知識框架。

 

一、構造方法

構造方法(或構造函數)是類的一種特殊方法,用來初始化類的一個新的對象。Java 中的每個類都有一個默認的構造方法,它必須具有和類名相同的名稱,而且沒有返回類型。構造方法的默認返回類型就是對象類型本身,並且構造方法不能被 static、final、synchronized、abstract 和 native 修飾。

提示:構造方法用於初始化一個新對象,所以用 static 修飾沒有意義;構造方法不能被子類繼承,所以用 final 和 abstract 修飾沒有意義;多個線程不會同時創建內存地址相同的同一個對象,所以用 synchronized 修飾沒有必要。

構造方法的語法格式如下:

public class Person {
	
	/**
	 * 1.構造方法沒有返回值 默認返回類型就是對象類型本身
	 * 2.構造方法的方法名和類名相同
	 */
	
	//無參構造方法
	public Person() {
		System.out.println("我是無參構造方法");
	}
	
	//有參構造方法
	public Person(String username,Integer age) {
		System.out.println("我是有參構造"+"姓名:"+username+"  密碼:"+age);
	}
	
	public static void main(String[] args) {
		Person p1=new Person();//調用無參構造
		
		Person p2=new Person("小王",12);//調用有參構造
	}

}

  

關於構造方法,需要注意:

  • 如何調用:
    • 構造方法在實例化的時候調用,如上述代碼中的Person p1=new Person(),這裏便調用了Person類的無參構造,構造方法由系統自動調用
  • 構造函數重載
    • 我們知道方法可以重載(方法名相同,參數列表不同),那麼構造方法也是方法的一種,當然也可以繼承,如上述代碼中的兩個構造方法,一個無參構造方法,一個帶兩個參數的構造方法。
    • 當有多個構造方法時,程序會在你創建類時根據你傳入的參數決定調用哪個構造方法
  • 默認構造方法
    • 細心的讀者可能會有疑問,之前創建類的時候我並沒有聲明構造函數,但是也可以創建類,是不是可以說類不需要構造函數也可以創建。不是滴,當你沒有显示聲明構造函數時,程序會自動生成一個默認的無參構造函數
    • 並且該構造函數的權限是隨着類的改變而改變的(類為public,構造函數也為public;類改為private,構造函數也改為private);而當該類一旦聲明了構造函數以後,java 是不會再給該類分配默認的構造函數。就是說,一旦你聲明了構造函數,並且該構造函數有形參,那麼你就不能pen ipen=new pen();像這樣聲明一個對象了。
  • 構造方法作用:
    • 構造函數是用於對象初始化
    • 一個對象建立,構造函數只運行一次,而一般方法可以被該對象調用多次。

 

二、代碼塊

1、普通代碼塊:

普通代碼塊是我們用得最多的也是最普遍的,它就是在方法名後面用{}括起來的代碼段。普通代碼塊是不能夠單獨存在的,它必須要緊跟在方法名後面。同時也必須要使用方法名調用它。

public class Test {
    public void test(){
        System.out.println("普通代碼塊");
    }
}

  

2、構造代碼塊:

在類中直接定義沒有任何修飾符、前綴、後綴的代碼塊即為構造代碼塊。我們明白一個類必須至少有一個構造函數,構造函數在生成對象時被調用。構造代碼塊和構造函數一樣同樣是在生成一個對象時被調用

public class Test{
  {
      System.out.println("我是構造代碼塊");
  }
}    

 

注意:

  • 構造代碼塊的作用是給對象初始化。
  • 對象一建立就調用構造代碼塊了,而且優於構造函數執行。這裏強調一下,有對象創建,才會執行構造代碼塊,類不能調用構造代碼塊的,而且構造代碼塊與構造函數的執行順序是前者先於後者執行。
  • 構造代碼塊與構造函數的區別是:構造代碼塊是給所有對象進行統一初始化,而構造函數是給對應的對象初始化,因為構造函數是可以多個的,運行哪個構造函數就會建立什麼樣的對象,但無論建立哪個對象,都會先執行相同的構造代碼塊。也就是說,構造代碼塊中定義的是不同對象共性的初始化內容。

  

 

3、靜態代碼塊:

想到靜態我們就會想到static,靜態代碼塊就是用static修飾的用{}括起來的代碼段,它的主要目的就是對靜態屬性進行初始化。

public class Test {
    static{
        System.out.println("靜態代碼塊");
    }
}

  

注意:

  • 靜態代碼塊隨着類的加載而執行,而且只會執行一次,並優於主函數。具體說靜態代碼塊由類調用,類調用時先執行靜態代碼塊,然後才執行主函數。
  • 靜態代碼塊是給類初始化的,而構造代碼塊是給對象初始化的。
  • 靜態代碼塊中的變量是局部變量,和普通方法中的局部變量沒有區別。
  • 一個類中可以有多個靜態代碼塊。

 

三、Java類的初始化順序

1、一個類的情況:

A:

public class Test {
	
	public Test(){
		System.out.println("Test構造函數");
	}
	
	{
		System.out.println("Test構造代碼塊");
	}
	
	static {
		System.out.println("靜態代碼塊");
	}
	
	
	public static void main(String[] args) {
		
	}

}

  

結果:

靜態代碼塊

  

B:

public class Test {
	
	public Test(){
		System.out.println("Test構造函數");
	}
	
	{
		System.out.println("Test構造代碼塊");
	}
	
	static {
		System.out.println("靜態代碼塊");
	}
	
	
	public static void main(String[] args) {
		Test t=new Test();//創建了一個對象
		
	}

}

  

這段代碼相比於上述代碼多了一個創建對象的代碼

結果:

靜態代碼塊
Test構造代碼塊
Test構造函數

  

C:

public class Test {
	
	public Test(){
		System.out.println("Test構造函數");
	}
	
	{
		System.out.println("Test構造代碼塊");
	}
	
	static {
		System.out.println("靜態代碼塊");
	}
	
	
	public static void main(String[] args) {
		Test t1=new Test();//創建了一個對象
		
		Test t2=new Test();
		
	}

}

  

結果:

靜態代碼塊
Test構造代碼塊
Test構造函數
Test構造代碼塊
Test構造函數

  

由此結果可以看出:靜態代碼塊只會在類加載的時候執行一次,而構造函數和構造代碼塊則會在每次創建對象的都會執行一次

 

對於一個類而言,按照如下順序執行:

  1. 執行靜態代碼塊
  2. 執行構造代碼塊
  3. 執行構造函數

對於靜態變量、靜態初始化塊、變量、初始化塊、構造器,它們的初始化順序依次是(靜態變量、靜態初始化塊)>(變量、初始化塊)>構造器。

 

D:

public class Test {
	
	//靜態變量
	public static String staticField="靜態變量";
	
	//變量
	public String field="變量";
	
	//靜態初始化塊
	static {
		System.out.println(staticField);
		System.out.println("靜態初始化塊");
	}
	
	{
		System.out.println(field);
		System.out.println("初始化塊");
	}
	
	//構造函數
	public Test() {
		System.out.println("構造函數");
	}
	
	public static void main(String[] args) {
		Test t=new Test();
	}

}

  

結果:

靜態變量
靜態初始化塊
變量
初始化塊
構造函數

  

2、繼承情況下的代碼執行順序:

class TestA{
	public TestA() {
		System.out.println("A的構造函數");
	}
	
	{
		System.out.println("A的構造代碼塊");
	}
	
	static {
		System.out.println("A的靜態代碼塊");
	}
}

public class TestB extends TestA {
	
	public TestB() {
		System.out.println("B的構造函數");
	}
	
	{
		System.out.println("B的構造代碼塊");
	}
	
	static {
		System.out.println("B的靜態代碼塊");
	}

	public static void main(String[] args) {
		TestB t=new TestB();
	}
	
}

  

這裡有兩個類,屬於繼承的關係,讀者先不要看答案,自己思考一下結果是啥?

1 A的靜態代碼塊
2 B的靜態代碼塊
3 A的構造代碼塊
4 A的構造函數
5 B的構造代碼塊
6 B的構造函數

結果

 

 

當設計到繼承時,代碼的執行順序如下:

1、執行父類的靜態代碼塊,並初始化父類的靜態成員

2、執行子類的靜態代碼塊,並初始化子類的靜態成員

3、執行父類的構造代碼塊,執行父類的構造函數,並初始化父類的普通成員變量

4、執行子類的構造代碼塊,執行子類的構造函數,並初始化子類的普通成員變量

 

Java初始化流程圖:

 

 

 

class Parent {
	/* 靜態變量 */
	public static String p_StaticField = "父類--靜態變量";
	/* 變量 */
	public String p_Field = "父類--變量";
	protected int i = 9;
	protected int j = 0;
	/* 靜態初始化塊 */
	static {
		System.out.println(p_StaticField);
		System.out.println("父類--靜態初始化塊");
	}
	/* 初始化塊 */
	{
		System.out.println(p_Field);
		System.out.println("父類--初始化塊");
	}

	/* 構造器 */
	public Parent() {
		System.out.println("父類--構造器");
		System.out.println("i=" + i + ", j=" + j);
		j = 20;
	}
}

public class SubClass extends Parent {
	/* 靜態變量 */
	public static String s_StaticField = "子類--靜態變量";
	/* 變量 */
	public String s_Field = "子類--變量";
	/* 靜態初始化塊 */
	static {
		System.out.println(s_StaticField);
		System.out.println("子類--靜態初始化塊");
	}
	/* 初始化塊 */
	{
		System.out.println(s_Field);
		System.out.println("子類--初始化塊");
	}

	/* 構造器 */
	public SubClass() {
		System.out.println("子類--構造器");
		System.out.println("i=" + i + ",j=" + j);
	}

	/* 程序入口 */
	public static void main(String[] args) {
		System.out.println("子類main方法");
		new SubClass();
	}
}

  

結果:

父類--靜態變量
父類--靜態初始化塊
子類--靜態變量
子類--靜態初始化塊
子類main方法
父類--變量
父類--初始化塊
父類--構造器
i=9, j=0
子類--變量
子類--初始化塊
子類--構造器
i=9,j=20

  

(1)訪問SubClass.main(),(這是一個static方法),於是裝載器就會為你尋找已經編譯的SubClass類的代碼(也就是SubClass.class文件)。在裝載的過程中,裝載器注意到它有一個基類(也就是extends所要表示的意思),於是它再裝載基類。不管你創不創建基類對象,這個過程總會發生。如果基類還有基類,那麼第二個基類也會被裝載,依此類推。

(2)執行根基類的static初始化,然後是下一個派生類的static初始化,依此類推。這個順序非常重要,因為派生類的“static初始化”有可能要依賴基類成員的正確初始化。

(3)當所有必要的類都已經裝載結束,開始執行main()方法體,並用new SubClass()創建對象。

(4)類SubClass存在父類,則調用父類的構造函數,你可以使用super來指定調用哪個構造函數。基類的構造過程以及構造順序,同派生類的相同。首先基類中各個變量按照字面順序進行初始化,然後執行基類的構造函數的其餘部分。

(5)對子類成員數據按照它們聲明的順序初始化,執行子類構造函數的其餘部分。 

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

學習數據倉庫之構建

    數據庫有三級模型的概念,在這裏,數據倉庫也是有着三級模型並且是有着相似的思路。

1.概念模型

“信息世界”中的信息結構,也常常借用關係數據庫設計中的E-R方法,不過在數據倉庫的設計是以主題替代實體。

根據業務的範圍和使用來劃分主題

劃分的方法是首先要確定系統邊界,包括了解決策者需求(關注點),需求類型。通過對業務系統的詳細說明,確定數據覆蓋範圍,對數據進行梳理,列出數據主題詳細的清單,了解源數據狀況。

對每個數據主題都作出詳細的解釋,然後經過歸納、分類,整理成各個數據主題域,確定系統包含的主題。列出每個數據主題域包含哪些部分,並對每個數據主題域作出詳細的解釋,最後劃分成主題域概念模型。

2.邏輯模型

邏輯模型的設計是數據倉庫實施中最重要的一步,因為它直接反映了數據分析部門的實際需求和業務規則,同時對物理模型的設計和實現具有指導作用。它的特點就是通過實體和實體之間的關係勾勒出整個企業的數據藍圖和規劃。邏輯模型一般遵循第三範式,與概念模型不同,它主要關注細節性的業務規則,同時需要解決每個主題包含哪些概念範疇和跨主題域的繼承和共享的問題。

根據需求列出需要分析的主題,需求目標緯度指標,緯度層次分析的指標,分析的方法、數據來源等

對於一些緯度存在層次問題,比如說產品存在產品的類別,產品的子類別以及具體的產品

 

 

 在邏輯模型設計中需要考慮粒度層次的劃分。數據倉庫的粒度層次劃分直接影響了數據倉庫模型的設計,通常細粒度的數據模型直接從企業模型選取實體作為邏輯模型的實體,而粗粒度的數據模型需要經過匯總計算得到相應的實體。粒度決定企業數據倉庫的實現方式、性能、靈活性和數據倉庫的數據量。

粒度指的是描述數據的綜合程度。粒度規定了數據倉庫潛在的能力和靈活性,如果沒有粒度級別的變化,數據倉庫將不能回答需要低於所採用細節級的問題。同時,粒度級別是數據庫規模的主要決定因素之一,對操作的開銷及性能都有顯著影響。

數據粒度越小,信息越細,數據量越大;顆粒粒度越大就忽略了眾多的細節,數據量越小。

 3.物理模型

 將邏輯模型轉變為物理模型包括以下幾個步驟:

(1)實體名(Entity) 轉變為表名(Table)。

(2)屬性名(Attribute) 轉換為列名(Column) ,確定列的屬性(Property) 。

(3)確定表之間連接主鍵和外鍵屬性或屬性組。

 

     在物理模型設計中同時要考慮數據的存儲結構、存取時間、存儲空間利用率、維護代價等。根據數據的重要程度、使用頻率和響應時間將數據分類,不同類數據分別存放在不同存儲設備中,重要性高、經常存取並對反應時間要求高的數據存放在高速存儲設備上:存取頻率低或對存取響應時間要求低的數據可以存放在低速存儲設備上。根據數據量設定存儲塊、緩衝區大小和個數。

兩大類物理模型

數據倉庫的的數據模型相對數據庫更簡單一些,根據事實表和維度表的關係,主要有星形結構模型雪花型結構模型兩種。

當所有維表都直接連接到“事實表”上時,整個圖解就像星星一樣,故將該模型稱為星型模型。

星型架構是一種非規範化的結構,多維數據集的每一個維度都直接與事實表相連接,所以數據有一定的冗餘,如在商店維度表中,存在省A的城市B以及省A的城市C兩條記錄,那麼省A的信息分別存儲了兩次,即存在冗餘。

雪花型架構相對於星形架構的優點是,能夠直接利用現有的數據庫建模工具進行建模,提高工作效率;以後對維度表的變更會更加靈活,而星形結構會牽涉到大量的數據更新:由於不存在數據冗餘,因此數據的裝載速度會更快。雪花型架構通過去除了數據冗餘,通過最大限度地減少數據存儲量以及聯合較小的維表來改善查詢性能。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

南投搬家前需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務

減量力道不足 國際智庫提長期氣候策略

文:楊竣文(台灣大學政治學研究所碩士生)

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?