3000萬人都喜歡開的10萬級神車,竟然還有5種不同選擇!

19萬R-line系列主要是基於280TSI車型對外觀和內飾進行運動風格的升級,比如前包圍的設計、輪轂造型都更運動化,和更年輕化。但是整體造型也不及高爾夫GTI系列的激進,就如同一件純白色的襯衫印了一些很酷的標識在上面,整體很平淡自然,細節又很個性特別。

至今,高爾夫已經歷經7.5代,累積產量已突破3000萬輛,是世界上銷量最大的汽車品牌,在累積千萬車主的同時,高爾夫也收穫不少粉絲,上至達官貴族、下至平頭百姓,其中下面這些名人都曾是高爾夫的忠實粉絲。

雖然我們今天未能拿到這些“名人”車主的用車口碑與大家分享,而且我們現在也買不到他們當年的車型了,所以我們今天的話題是針對我們國內現在能買得到最新的高爾夫,看看那些比較有代表的車主口碑都是怎麼說的?

現在我們在國內能買的高爾夫車型其實也不少,包括最近在中國上市的純電版e-Golf,但是由於車型太新,我們還未能收集到車主的口碑,所以今天我們聊的車型還是以大家熟悉的為主。

2018款 高爾夫·嘉旅

指導價:13.19-19.79萬

如何理解高爾夫·嘉旅的定位?其實它跟高爾夫的關係就像iphone 7和iphone 7 plus的關係,現款嘉旅無論是軸距還是空間上都比高爾夫要更長和更大,而且配置上也有一些先天的優勢,比如全景天窗。不過外觀造型明顯就比高爾夫要臃腫,沒有高爾夫給人的那種協調感,也沒有高爾夫那種獨有的氣質,更強調的是實用性和舒適性。

內飾的設計語言當然也和高爾夫保持一致,不過在風格上也有明顯的差異,嘉旅的中控會台使用了大面積的飾板(根據不同車型,飾板紋路不同),這樣更能營造出居家的氛圍。

車主口碑:買之前與高爾夫7對比過,感覺嘉旅要更運動,像是一輛小型SUV,空間很大,特別是後備箱空間比高爾夫大很多。最滿意的是嘉旅配備全景天窗。(2018款 230TIS自動豪華版)

2018款 高爾夫

指導價:12.19-18.29萬

現款7.5代高爾夫的外觀比起7代其實沒有太大變化,畢竟只是中期改款,前大燈組採用雙段式LED日間行車燈,中央格柵的鍍鉻飾條與日間行車燈相連,整體而言就是更精緻了。

內飾設計與7代車型也沒有太大變化,主要是2018款280TSI 自動旗艦型可選裝12.3英寸全液晶儀錶以及9.2英寸多媒體显示屏幕(注:只有這款車型可選擇)。特別是全液晶儀錶,真的太帥了,可是不用問也知道,在4S選裝這個配置,怎麼也得1W+吧。

車主口碑:最滿意的當然是動力了,還能體驗到推背感,甚至說有點點刺激。。。前排空間是很充足的,後排就不知道了,很少用。內飾做工用料也很滿意,質感跟奧迪的車差不多,非常棒。(2018款280TSI 自動旗艦型)

2018款 高爾夫 R-Line

指導價:15.79-17.19萬

R-line系列主要是基於280TSI車型對外觀和內飾進行運動風格的升級,比如前包圍的設計、輪轂造型都更運動化,和更年輕化。但是整體造型也不及高爾夫GTI系列的激進,就如同一件純白色的襯衫印了一些很酷的標識在上面,整體很平淡自然,細節又很個性特別。

內飾主要特點在於方向盤、座椅靠背等配有“R-line”的標識,但可惜的是R-line系列車型不能選配全液晶儀錶和9.2英寸多媒體显示屏幕。

車主口碑:最滿意的肯定是外觀,全LED大燈,流水尾燈,以及R-line的運動包圍,17寸的輪轂,外觀可以說是完美的。動力也很滿意,150馬力的1.4T發動機會讓你經常想暴力駕駛它,超車也很簡單,操控起來很靈活。最不滿意可能是隔音了。(2018款 280TSI 自動R-Line型)

2018款 高爾夫 GTI

指導價:23.99萬

現款高爾夫GTI中網格柵的紅色裝飾線非常搶眼,與前大燈內部的紅色裝飾線相互呼應,在搭配專屬的五輻戰斧式輪圈,可謂殺氣十足啊。

而內飾方面,最吸引人的當然是Clark格子布座椅,這可是一項極具情懷的設計,多少人為之着迷。還有就是標配了全液晶儀錶和8英寸多媒體显示屏幕,9.2英寸的仍然要選配。

車主口碑:外觀非常激進,全車LED燈源、運動包圍、雙出排氣、18寸戰斧輪轂,實在太帥。經典的格子面料回歸讓這一代GTI更有情話。但是,動力才是最讓人興奮的,220匹根本用不完。(2018款 2.0TSI GTI)

2017款 高爾夫 R

指導價:40.78萬

雖然2018款高爾夫R早已在海外上市了,可是目前為止,官方還沒正式引進中國,在國內只能買到2017款或更老的車型。至於什麼時候引進2018款,我們不得而知。但是,2017款的高爾夫R仍然是高爾夫車迷的信仰。

外觀方面其實比現款的GTI要低調得多,可是說是真正意義上“扮豬吃老虎”的車型。不過內飾同樣也很具情懷,比如發藍光的儀錶等。

車主口碑:最滿意的只有性能,其它方面的表現都不是這個價位的水平,只有踩下油門,聽到源源不斷的轟鳴才覺得這車很值。(2017款 2.0TSI R)

總結

看了這麼多款高爾夫之後,你是否有選到你心動的哪款?或者說你已經是高爾夫的車主,歡迎在下面的評論區分析你的用車感受哦。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

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

※產品缺大量曝光嗎?你需要的是一流包裝設計!

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

讀懂操作系統之虛擬內存TLB與緩存(cache)關係篇(四)

前言

前面我們講到通過TLB緩存頁表加快地址翻譯,通過上一節緩存原理的講解為本節做鋪墊引入TLB和緩存的關係,同時我們來完整梳理下從CPU產生虛擬地址最終映射為物理地址獲取數據的整個過程是怎樣的,若有錯誤之處,還請批評指正。

TLB和緩存串行訪問(Serial TLB & Cache Access)

這裡會跳過前面對虛擬頁號、虛擬頁偏移量、TLB索引和標記等的詳細分析和計算,不清楚的童鞋請先查看前面文章再來看本文。假設我們有14位的虛擬地址、12位的物理地址,每頁大小為64字節,如下:

 

 

同時假設已完全清楚虛擬地址和物理地址劃分,接下來則是針對虛擬地址和物理地址進行位劃分,如下:

同時我們假設TLB是通過組相聯來進行映射,TLB中有16個條目,4路相聯,所以TLB索引(TI)和TLB標記(TT)在虛擬地址中虛擬頁號進行位劃分如下: 

 

我們假設緩存採取直接映射的機制,緩存大小為64字節,每塊大小為4個字節,說明緩存有16塊即4位,位偏移為2位,所以緩存索引(CI)和緩存標記(CT)在物理地址中進行位劃分如下:

現假設讀取虛擬地址(0x0255),那麼將其劃分為VPN(0x09),VPO(0x15),然後將VPN劃分為TT(0x02)和TI(1)如下:

接下來通過TT(0x02)和TI(1)去查找TLB,如下:

此時我們會發現TLB缺失,緊接着通過VPN(0x0916 = 2110)去頁表中查找得到PPN(0x1716 = 2310),如下: 

 

因其PPO = VPO(0x15),所以計算出物理地址為(23 * 64+21 = 149310 = 0x5D516

然後根據上述物理地址劃分為CT(0x17)、CI(5)、CO(1),如下:

最後通過上述CT(0x17)和CI(5)去查找緩存,此時緩存命中,然後將數據發送到CPU,如下:

從CPU到獲取數據整個的過程是這樣的:【1】CPU產生虛擬地址【2】TLB翻譯成物理地址【3】TLB命中,將物理地址發送到緩存【4】緩存命中返回數據。其中每一個過程涉及到的細節,比如TLB缺失、頁缺失等等前面已有詳細講解,殊途同歸,大致過程則是如下圖解

通過如上可看出此時TLB與Cache是串行訪問的關係,這是最簡單同時也是比較慢的方式,因為不得不等待TLB翻譯完成后才去檢查緩存中是否有數據,如此一來將對CPU處理速度產生重大影響,涉及到大量內存訪問時間。

TLB和緩存并行訪問(Parallel TLB & Cache Access)

當前處理器最普遍的設計是採取TLB和Cache并行的方式,有些也稱之為重疊訪問(Overlapping TLB & Cache Access),從而提高訪問速度,那麼并行訪問到底是如何做的呢?有沒有什麼使用限制呢?這裏我們以Intel Skylake(英特爾第六代微處理器架構)為例來說明,其虛擬地址和物理地址結構大致如下:

看到上述結構我們可以發現物理地址中的PPN和緩存標記(CT)位數相等以及其他,英特爾這樣設計就是為了讓TLB和Cache可以并行訪問。TLB和Cache并行訪問原理:虛擬地址(VA)中的高階位即(VPN)用來查找TLB,而低階位(VPO)用來查找緩存。通過TLB將VPN映射到PPN,此時PPN作為緩存標記(CT),而將VPO中的低階位作為緩存偏移量(CO),高階位作為緩存索引(CI)。有了緩存標記和緩存索引我們就可以查詢到數據,比如CPU產生虛擬地址(0x7916 = 00011110012),此時通過并行訪問則為如下圖解

我們結合上述圖解繼續進行分析將并行訪問分為三種情況,比如上緩存中的tag = 11,同時我們產生的PPN = tag = 11,說明緩存標記等於物理頁號,同時緩存命中,最終返回數據B5給CPU(其一)。假設產生的緩存標記不是11,那麼說明緩存標記不等於頁號或者緩存缺失,但此時TLB命中,那麼將通過TLB中的物理頁號直接訪問主存(其二)。否則做標準的虛擬地址翻譯(其三)。為便於大家理解,我們通過偽代碼形式來說明:

if (cache hit && cache tag = PPN)
  //返回數據到CPU
else if (cache miss || cache tag != PPN && TLB hit) 
  //通過TLB中的PPN訪問主存
else
  //標準地址翻譯

兩種緩存架構(Cache & TLB Access)

緩存索引(Cache index)用於查找數據在緩存中的索引位置,而緩存標記(Cache tag)則是驗證緩存中有哪些數據。從上述對并行訪問原理講解我們知道將虛擬地址中的虛擬偏移量可作為物理緩存索引,這裏我們稱之為虛擬索引,同時我們將VPN轉換為PPN,這種模式稱之為虛擬索引、物理標記緩存架構(Virtual-indexed Physically-tagged Caches),其實我們也可以將虛擬地址中的偏移量作為緩存標記,也就是說虛擬地址中的偏移量(VPO)既作為緩存索引也作為緩存標記,這種緩存架構成為虛擬索引、虛擬標記緩存架構(Virtual-indexed Virtually-tagged Caches),也叫虛擬地址緩存(Virtual Address Caches),接下來我們來分析這兩種緩存架構。

虛擬索引、虛擬標記緩存(Virtual-indexed Virtually-tagged Caches)

 

 

此種緩存架構讓緩存保存虛擬地址,但是現代處理器極少使用這種緩存設計,雖然很塊,但是處理起來很複雜, 比如進行上下文切換時需要刷新緩存(當然可以在地址空間添加ASID),但是即使這樣,由於頁面可以共享而造成處理頁面別名問題,用於直接映射緩存的解決方案,共享頁面的VA必須在緩存索引位中一致,確保訪問同一PA的所有VA將在直接映射的緩存(早期SPARC)中發生衝突,所以大多處理器採用第二種(VA-PA)緩存架構。

虛擬索引、物理標記緩存(Virtual-indexed Physically-tagged Caches)

 

并行TLB & Cache訪問採取的就是此種架構,此種架構要求緩存索引完全包含在虛擬地址中的虛擬偏移量中。緩存標記和PPN相等(當然第一種)當查詢緩存時也執行TLB訪問,它是當前處理器最常見的設計,我們知道緩存使用的是物理地址,而CPU產生的是虛擬地址,這也就意味着沒有TLB就無法完成緩存查找。前面我們了解到緩存數據存儲結構存在直接映射、組相聯、全相聯三種結構,在此種緩存架構中有使用限制,我們首先來看看直接映射。

 

并行訪問的本質在於緩存查詢數據無需等待TLB完成,二者可同時開始,所以當兩者訪問完成后需要進行比較,如果(cache size <=  page size)即(C = L + b) <= P才有效,因為對於緩存的所有輸入都無需進行任何翻譯。

通過組相聯增加了緩存的關聯性從而減少索引到緩存所需地址的位數,在訪問完成後進行比較,如果(cache size) / (associativity) ≤ page size即(C <= P + A)才有效。對於緩存和TLB都採用的組相聯從而減少缺失率,所以對於并行訪問中的緩存組相聯映射必須滿足(cache size) / (associativity) ≤ page size。那麼問題來了,如果一個緩存大小為64KB,採用2路相聯,頁大小>=4k,那麼可以進行并行訪問TLB & Cache嗎?很顯然不能,如下

緩存大小:64KB = 216     ————-》 C = 16

組相聯:2                        ————-》 A = 1

頁大小: 4KB = 212        ————–》P >= 12

那麼問題又來了,對於一個16位的虛擬地址,頁大小為64字節,緩存大小為256b,採用8路相聯的1級緩存且有16塊,那麼可以并行訪問TLB &Cache嗎?請輸出原因。

總結

本節我們詳細介紹了TLB &Cache二者的關係,採用并行訪問通過VPN查找TLB,VPO查詢緩存同時進行來提高訪問速度。下一節我們進入頁表數據結構的詳細講解,謝謝。 

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

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

結合中斷上下文切換和進程上下文切換分析Linux內核的一般執行過程

結合中斷上下文切換和進程上下文切換分析Linux內核的一般執行過程

目錄

  • 結合中斷上下文切換和進程上下文切換分析Linux內核的一般執行過程
    • 一. 實驗準備
    • 二. 實驗過程
      • I 分析中斷上下文的切換
      • II 分析fork子進程啟動執行時進程上下文及其特殊之處
      • III 分析execve系統調用中斷上下文及其特殊之處
      • IV 以系統調用作為特殊的中斷,結合中斷上下文切換和進程上下文切換分析Linux系統的一般執行過程
    • 三. 總結

一. 實驗準備

  1. 詳細要求

結合中斷上下文切換和進程上下文切換分析Linux內核一般執行過程

  • 以fork和execve系統調用為例分析中斷上下文的切換
  • 分析execve系統調用中斷上下文的特殊之處
  • 分析fork子進程啟動執行時進程上下文的特殊之處
  • 以系統調用作為特殊的中斷,結合中斷上下文切換和進程上下文切換分析Linux系統的一般執行過程

完成一篇博客總結分析Linux系統的一般執行過程,以期對Linux系統的整體運作形成一套邏輯自洽的模型,並能將所學的各種OS和Linux內核知識/原理融通進模型中

  1. 實驗環境

發行版本:Ubuntu 18.04.4 LTS

處理器:Intel® Core™ i7-8850H CPU @ 2.60GHz × 3

圖形卡:Parallels using AMD® Radeon pro 560x opengl engine

GNOME:3.28.2

二. 實驗過程

I 分析中斷上下文的切換

中斷髮生以後,CPU跳到內核設置好的中斷處理代碼中去,由這部分內核代碼來處理中斷。這個處理過程中的上下文就是中斷上下文

幾乎所有的體繫結構,都提供了中斷機制。當硬件設備想和系統通信的時候,它首先發出一個異步的中斷信號去打斷處理器的執行,繼而打斷內核的執行。中斷通常對應着一个中斷號,內核通過這个中斷號找到中斷服務程序,調用這個程序響應和處理中斷。當你敲擊鍵盤時,鍵盤控制器發送一个中斷信號告知系統,鍵盤緩衝區有數據到來,內核收到這个中斷號,調用相應的中斷服務程序,該服務程序處理鍵盤數據然後通知鍵盤控制器可以繼續輸入數據了。為了保證同步,內核可以使用中止—既可以停止所有的中斷也可以有選擇地停止某个中斷號對應的中斷,許多操作系統的中斷服務程序都不在進程上下文中執行,它們在一個與所有進程無關的、專門的中斷上下文中執行。之所以存在這樣一個專門的執行環境,為了保證中斷服務程序能夠在第一時間響應和處理中斷請求,然後快速退出。

對同一個CPU來說,中斷處理比進程擁有更高的優先級,所以中斷上下文切換並不會與進程上下文切換同時發生。由於中斷程序會打斷正常進程的調度和運行,大部分中斷處理程序都短小精悍,以便盡可能快的執行結束。

一個進程的上下文可以分為三個部分:用戶級上下文、寄存器上下文以及系統級上下文。

用戶級上下文: 正文、數據、用戶堆棧以及共享存儲區;
寄存器上下文: 通用寄存器、程序寄存器(IP)、處理器狀態寄存器(EFLAGS)、棧指針(ESP);
系統級上下文: 進程控制塊task_struct、內存管理信息(mm_struct、vm_area_struct、pgd、pte)、內核棧。

當發生進程調度時,進行進程切換就是上下文切換(context switch)。操作系統必須對上面提到的全部信息進行切換,新調度的進程才能運行。而系統調用進行的是模式切換(mode switch)。模式切換與進程切換比較起來,容易很多,而且節省時間,因為模式切換最主要的任務只是切換進程寄存器上下文的切換。

II 分析fork子進程啟動執行時進程上下文及其特殊之處

fork()系統調用會通過複製一個現有進程來創建一個全新的進程. 進程被存放在一個叫做任務隊列的雙向循環鏈表當中。鏈表當中的每一項都是類型為task_struct成為進程描述符的結構。

首先我們來看一段代碼

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
  pid_t pid;
  char *message;
  int n;
  pid = fork();
  if(pid<0){
    perror("fork failed");
    exit(1);
  }
  if (pid == 0){
    message = "this is the child \n";
    n=6;
  }else {
    message = "this is the parent \n";
    n=3;
  }
  for(;n>0;n--){
    printf("%s",message);
    sleep(1);
  }
  return 0;
}

在Linux環境中編寫和執行

# 創建一個C文件,名為t.c,將上面的代碼拷貝進去
touch t.c
# 進行編譯
gcc t.c
# 執行
./a.out

之所以輸出是這樣的結果,是因為程序的執行流程如下圖所示:

以上的fork()例子的執行流程大致如下:

  1. 父進程初始化。
  2. 父進程調用fork,這是一個系統調用,因此進入內核。
  3. 內核根據父進程複製出一個子進程,父進程和子進程的PCB信息相同,用戶態代碼和數據也相同。因此,子進程現在的狀態看起來和父進程一樣,做完了初始化,剛調用了fork進入內核,還沒有從內核返回。
  4. 現在有兩個一模一樣的進程看起來都調用了fork進入內核等待從內核返回(實際上fork只調用了一次),此外系統中還有很多別的進程也等待從內核返回。是父進程先返回還是子進程先返回,還是這兩個進程都等待,先去調度執行別的進程,這都不一定,取決於內核的調度算法。
  5. 如果某個時刻父進程被調度執行了,從內核返回后就從fork函數返回,保存在變量pid中的返回值是子進程的id,是一個大於0的整數,因此執下面的else分支,然後執行for循環,打印"This is the parent\n"三次之後終止。
  6. 如果某個時刻子進程被調度執行了,從內核返回后就從fork函數返回,保存在變量pid中的返回值是0,因此執行下面的if (pid == 0)分支,然後執行for循環,打印"This is the child\n"六次之後終止。fork調用把父進程的數據複製一份給子進程,但此後二者互不影響,在這個例子中,fork調用之後父進程和子進程的變量messagen被賦予不同的值,互不影響。
  7. 父進程每打印一條消息就睡眠1秒,這時內核調度別的進程執行,在1秒這麼長的間隙里(對於計算機來說1秒很長了)子進程很有可能被調度到。同樣地,子進程每打印一條消息就睡眠1秒,在這1秒期間父進程也很有可能被調度到。所以程序運行的結果基本上是父子進程交替打印,但這也不是一定的,取決於系統中其它進程的運行情況和內核的調度算法,如果系統中其它進程非常繁忙則有可能觀察到不同的結果。另外,讀者也可以把sleep(1);去掉看程序的運行結果如何。
  8. 這個程序是在Shell下運行的,因此Shell進程是父進程的父進程。父進程運行時Shell進程處於等待狀態,當父進程終止時Shell進程認為命令執行結束了,於是打印Shell提示符,而事實上子進程這時還沒結束,所以子進程的消息打印到了Shell提示符後面。最後光標停在This is the child的下一行,這時用戶仍然可以敲命令,即使命令不是緊跟在提示符後面,Shell也能正確讀取。

fork()最特殊之處在於:成功調用后返回兩個值,是由於在複製時複製了父進程的堆棧段,所以兩個進程都停留在fork函數中,等待返回。所以fork函數會返回兩次,一次是在父進程中返回,另一次是在子進程中返回,這兩次的返回值不同

其中父進程返回子進程pid,這是由於一個進程可以有多個子進程,但是卻沒有一個函數可以讓一個進程來獲得這些子進程id,那談何給別人你創建出來的進程。而子進程返回0,這是由於子進程可以調用getppid獲得其父進程進程ID,但這個父進程ID卻不可能為0,因為進程ID0總是有內核交換進程所用,故返回0就可代表正常返回了。

從fork函數開始以後的代碼父子共享,既父進程要執行這段代碼,子進程也要執行這段代碼.(子進程獲得父進程數據空間,堆和棧的副本. 但是父子進程並不共享這些存儲空間部分. (即父,子進程共享代碼段.)。現在很多實現並不執行一個父進程數據段,堆和棧的完全複製. 而是採用寫時拷貝技術。這些區域有父子進程共享,而且內核地他們的訪問權限改為只讀的.如果父子進程中任一個試圖修改這些區域,則內核值為修改區域的那塊內存製作一個副本, 也就是如果你不修改我們一起用,你修改了之後對於修改的那部分內容我們分開各用個的。

再一個就是,在重定向父進程的標準輸出時,子進程標準輸出也被重定向。這就源於父子進程會共享所有的打開文件。 因為fork的特性就是將父進程所有打開文件描述符複製到子進程中。當父進程的標準輸出被重定向,子進程本是寫到標準輸出的時候,此時自然也改寫到那個對應的地方;與此同時,在父進程等待子進程執行時,子進程被改寫到文件show.out中,然後又更新了與父進程共享的該文件的偏移量;那麼在子進程終止后,父進程也寫到show.out中,同時其輸出還會追加在子進程所寫數據之後。

在fork之後處理文件描述符一般有以下兩種情況:

  • 父進程等待子進程完成。此種情況,父進程無需對其描述符作任何處理。當子進程終止后,它曾進行過讀,寫操作的任一共享描述符的文件偏移已發生改變。
  • 父子進程各自執行不同的程序段。這樣fork之後,父進程和子進程各自關閉它們不再使用的文件描述符,這樣就避免干擾對方使用的文件描述符了。這類似於網絡服務進程。

同時父子進程也是有區別的:它們不僅僅是兩個返回值不同;它們各自的父進程也不同,父進程的父進程是ID不變的;還有子進程不繼承父進程設置的文件鎖,子進程未處理的信號集會設置為空集等不同

事實上linux平台通過clone()系統調用實現fork()。fork(),vfork()和clone()庫函數都根據各自需要的參數標誌去調用clone(),然後由clone()去調用do_fork(). 再然後do_fork()完成了創建中的大部分工作,他定義在kernel/fork.c當中.該函數調用copy_process()。

具體的流程可以參考下圖:

III 分析execve系統調用中斷上下文及其特殊之處

execve() 系統調用的作用是運行另外一個指定的程序。它會把新程序加載到當前進程的內存空間內,當前的進程會被丟棄,它的堆、棧和所有的段數據都會被新進程相應的部分代替,然後會從新程序的初始化代碼和 main 函數開始運行。同時,進程的 ID 將保持不變。

execve() 系統調用通常與 fork() 系統調用配合使用。從一個進程中啟動另一個程序時,通常是先 fork() 一個子進程,然後在子進程中使用 execve() 變身為運行指定程序的進程。 例如,當用戶在 Shell 下輸入一條命令啟動指定程序時,Shell 就是先 fork() 了自身進程,然後在子進程中使用 execve() 來運行指定的程序。

Linux提供了execl、execlp、execle、execv、execvp和execve等六個用以執行一個可執行文件的函數(統稱為exec函數,其間的差異在於對命令行參數和環境變量參數的傳遞方式不同)。這些函數的第一個參數都是要被執行的程序的路徑,第二個參數則向程序傳遞了命令行參數,第三個參數則向程序傳遞環境變量。以上函數的本質都是調用在arch/i386/kernel/process.c文件中實現的系統調用sys_execve來執行一個可執行文件。

asmlinkage int sys_execve(struct pt_regs regs)
{
    int  error;
    char * filename;
    //將可執行文件的名稱裝入到一個新分配的頁面中
    filename = getname((char __user *) regs.ebx);
    error = PTR_ERR(filename);
    if (IS_ERR(filename))
       goto out;
    //執行可執行文件
    error = do_execve(filename,
          (char __user * __user *) regs.ecx,
          (char __user * __user *) regs.edx,
         &regs);
    if (error == 0) {
       task_lock(current);
       current->ptrace &= ~PT_DTRACE;
       task_unlock(current);
       
       set_thread_flag(TIF_IRET);
    }
    putname(filename);
out:
    return error;
}

該系統調用所需要的參數pt_regs在include/asm-i386/ptrace.h文件中定義。該參數描述了在執行該系統調用時,用戶態下的CPU寄存器在核心態的棧中的保存情況。通過這個參數,sys_execve可以獲得保存在用戶空間的以下信息:可執行文件路徑的指針(regs.ebx中)、命令行參數的指針(regs.ecx中)和環境變量的指針(regs.edx中)。

struct pt_regs {
    long ebx;
    long ecx;
    long edx;
    long esi;
    long edi;
    long ebp;
    long eax;
    int xds;
    int xes;
    long orig_eax;
    long eip;
    int xcs;
    long eflags;
    long esp;
    int xss;
};

regs.ebx保存着系統調用execve的第一個參數,即可執行文件的路徑名。因為路徑名存儲在用戶空間中,這裏要通過getname拷貝到內核空間中。getname在拷貝文件名時,先申請了一個page作為緩衝,然後再從用戶空間拷貝字符串。為什麼要申請一個頁面而不使用進程的系統空間堆棧?首先這是一個絕對路徑名,可能比較長,其次進程的系統空間堆棧大約為7K,比較緊缺,不宜濫用。用完文件名后,在函數的末尾調用putname釋放掉申請的那個頁面。

sys_execve的核心是調用do_execve函數,傳給do_execve的第一個參數是已經拷貝到內核空間的路徑名filename,第二個和第三個參數仍然是系統調用execve的第二個參數argv和第三個參數envp,它們代表的傳給可執行文件的參數和環境變量仍然保留在用戶空間中。簡單分析一下這個函數的思路:先通過open_err()函數找到並打開可執行文件,然後要從打開的文件中將可執行文件的信息裝入一個數據結構linux_binprm,do_execve先對參數和環境變量的技術,並通過prepare_binprm讀入開頭的128個字節到linux_binprm結構的bprm緩衝區,最後將執行的參數從用戶空間拷貝到數據結構bprm中。內核中有一個formats隊列,該隊列的每個成員認識並只處理一種格式的可執行文件,bprm緩衝區中的128個字節中有格式信息,便要通過這個隊列去辨認。do_execve()中的關鍵是最後執行一個search_binary_handler()函數,找到對應的執行文件格式,並返回一個值,這樣程序就可以執行了。

do_execve 定義在 <fs/exec.c> 中,關鍵代碼解析如下。

int do_execve(char * filename, char __user *__user *argv,
       char __user *__user *envp,    struct pt_regs * regs)
{
    struct linux_binprm *bprm; //保存要執行的文件相關的數據
    struct file *file;
    int retval;
    int i;
    retval = -ENOMEM;
    bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
    if (!bprm)
       goto out_ret;
    //打開要執行的文件,並檢查其有效性(這裏的檢查並不完備)
    file = open_exec(filename);
    retval = PTR_ERR(file);
    if (IS_ERR(file))
       goto out_kfree;
    //在多處理器系統中才執行,用以分配負載最低的CPU來執行新程序
    //該函數在include/linux/sched.h文件中被定義如下:
    // #ifdef CONFIG_SMP
    // extern void sched_exec(void);
    // #else
    // #define sched_exec() {}
    // #endif
    sched_exec();
    //填充linux_binprm結構
    bprm->p = PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *);
    bprm->file = file;
    bprm->filename = filename;
    bprm->interp = filename;
    bprm->mm = mm_alloc();
    retval = -ENOMEM;
    if (!bprm->mm)
       goto out_file;
    //檢查當前進程是否在使用LDT,如果是則給新進程分配一個LDT
    retval = init_new_context(current, bprm->mm);
    if (retval  0)
       goto out_mm;
    //繼續填充linux_binprm結構
    bprm->argc = count(argv, bprm->p / sizeof(void *));
    if ((retval = bprm->argc)  0)
       goto out_mm;
    bprm->envc = count(envp, bprm->p / sizeof(void *));
    if ((retval = bprm->envc)  0)
       goto out_mm;
    retval = security_bprm_alloc(bprm);
    if (retval)
       goto out;
    //檢查文件是否可以被執行,填充linux_binprm結構中的e_uid和e_gid項
    //使用可執行文件的前128個字節來填充linux_binprm結構中的buf項
    retval = prepare_binprm(bprm);
    if (retval  0)
       goto out;
    //將文件名、環境變量和命令行參數拷貝到新分配的頁面中
    retval = copy_strings_kernel(1, &bprm->filename, bprm);
    if (retval  0)
       goto out;
    bprm->exec = bprm->p;
    retval = copy_strings(bprm->envc, envp, bprm);
    if (retval  0)
       goto out;
    retval = copy_strings(bprm->argc, argv, bprm);
    if (retval  0)
       goto out;
    //查詢能夠處理該可執行文件格式的處理函數,並調用相應的load_library方法進行處理
    retval = search_binary_handler(bprm,regs);
    if (retval >= 0) {
       free_arg_pages(bprm);
       //執行成功
       security_bprm_free(bprm);
       acct_update_integrals(current);
       kfree(bprm);
       return retval;
    }
out:
    //發生錯誤,返回inode,並釋放資源
    for (i = 0 ; i  MAX_ARG_PAGES ; i++) {
       struct page * page = bprm->page;
       if (page)
         __free_page(page);
    }
    if (bprm->security)
       security_bprm_free(bprm);
out_mm:
    if (bprm->mm)
       mmdrop(bprm->mm);
out_file:
    if (bprm->file) {
       allow_write_access(bprm->file);
       fput(bprm->file);
    }
out_kfree:
    kfree(bprm);
out_ret:
    return retval;
}

該函數用到了一個類型為linux_binprm的結構體來保存要執行的文件相關的信息,該結構體在include/linux/binfmts.h文件中定義:

struct linux_binprm{
    char buf[BINPRM_BUF_SIZE]; //保存可執行文件的頭128字節
    struct page *page[MAX_ARG_PAGES];
    struct mm_struct *mm;
    unsigned long p;    //當前內存頁最高地址
    int sh_bang;
    struct file * file;     //要執行的文件
    int e_uid, e_gid;    //要執行的進程的有效用戶ID和有效組ID
    kernel_cap_t cap_inheritable, cap_permitted, cap_effective;
    void *security;
    int argc, envc;     //命令行參數和環境變量數目
    char * filename;   //要執行的文件的名稱
    char * interp;       //要執行的文件的真實名稱,通常和filename相同
   unsigned interp_flags;
    unsigned interp_data;
    unsigned long loader, exec;
};

在該函數的最後,又調用了fs/exec.c文件中定義的search_binary_handler函數來查詢能夠處理相應可執行文件格式的處理器,並調用相應的load_library方法以啟動進程。這裏,用到了一個在include/linux/binfmts.h文件中定義的linux_binfmt結構體來保存處理相應格式的可執行文件的函數指針如下:

struct linux_binfmt {
    struct linux_binfmt * next;
    struct module *module;
    // 加載一個新的進程
    int (*load_binary)(struct linux_binprm *, struct pt_regs * regs);
    // 動態加載共享庫
    int (*load_shlib)(struct file *);
    // 將當前進程的上下文保存在一個名為core的文件中
   int (*core_dump)(long signr, struct pt_regs * regs, struct file * file);
    unsigned long min_coredump;
};

Linux內核允許用戶通過調用在include/linux/binfmt.h文件中定義的register_binfmt和unregister_binfmt函數來添加和刪除linux_binfmt結構體鏈表中的元素,以支持用戶特定的可執行文件類型。
在調用特定的load_binary函數加載一定格式的可執行文件后,程序將返回到sys_execve函數中繼續執行。該函數在完成最後幾步的清理工作后,將會結束處理並返回到用戶態中,最後,系統將會將CPU分配給新加載的程序。

execve系統調用的過程總結如下:

  • execve系統調用陷入內核,並傳入命令行參數和shell上下文環境
  • execve陷入內核的第一個函數:do_execve,該函數封裝命令行參數和shell上下文
  • do_execve調用do_execveat_common,後者進一步調用__do_execve_file,打開ELF文件並把所有的信息一股腦的裝入linux_binprm結構體
  • do_execve_file中調用search_binary_handler,尋找解析ELF文件的函數
  • search_binary_handler找到ELF文件解析函數load_elf_binary
  • load_elf_binary解析ELF文件,把ELF文件裝入內存,修改進程的用戶態堆棧(主要是把命令行參數和shell上下文加入到用戶態堆棧),修改進程的數據段代碼段
  • load_elf_binary調用start_thread修改進程內核堆棧(特別是內核堆棧的ip指針)
  • 進程從execve返回到用戶態后ip指向ELF文件的main函數地址,用戶態堆棧中包含了命令行參數和shell上下文環境

IV 以系統調用作為特殊的中斷,結合中斷上下文切換和進程上下文切換分析Linux系統的一般執行過程

Linux系統的一般執行過程

正在運行的用戶態進程X切換到運行用戶態進程Y的過程

  1. 發生中斷 ,完成以下步驟:

    save cs:eip/esp/eflags(current) to kernel stack
    load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack)

  2. SAVE_ALL //保存現場,這裡是已經進入內核中斷處里過程

  3. 中斷處理過程中或中斷返回前調用了schedule(),其中的switch_to做了關鍵的進程上下文切換

  4. 標號1之後開始運行用戶態進程Y(這裏Y曾經通過以上步驟被切換出去過因此可以從標號1繼續執行)

  5. restore_all //恢復現場

  6. 繼續運行用戶態進程Y

進程間的特殊情況

  • 通過中斷處理過程中的調度時機,用戶態進程與內核線程之間互相切換和內核線程之間互相切換
  • 與最一般的情況非常類似,只是內核線程運行過程中發生中斷沒有進程用戶態和內核態的轉換;
  • 內核線程主動調用schedule(),只有進程上下文的切換,沒有發生中斷上下文的切換,與最一般“的情況略簡略;
  • 創建子進程的系統調用在子進程中的執行起點及返回用戶態,如fork;
  • 加載一個新的可執行程序后返回到用戶態的情況,如execve;0-3G內核態和用戶態都可以訪問,3G以上只能內核態訪問。內核是所有進程共享的。內核是各種中斷處理過程和內核線程的集合。

三. 總結

這次實驗主要做了如下的事情:

  • 學習並完成實驗環境的配置的搭建
  • 學習並了解Linux內核中系統調用相關知識
  • 學習了中斷相關的知識
  • 學習並實踐了fork()與execve()系統調用的知識
  • 思考代碼執行的流程與原理

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

【其他文章推薦】

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

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

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

敏捷開發:最近的收穫和站會上的小黃鴨

最近

在博客園經常分享一些心得,有幸在另一個平台做了一場直播。

自己精心準備了很長時間,從素材和文章以及一字一句。

過程中感覺自信滿滿,後期再去回顧發現其實硬貨還需要再硬一點。

dxxxxxx 平台的分享

自己在這個社區進行分享的時候,開始自己照着自己的演講稿念,沒多久自己發現根據演講稿年思路不夠連貫。

自己扔掉演講稿根據之前自己準備的主體脈絡進行分享,有準備但是還是覺得臨場發揮思路更加連貫和清晰。

一個半小時過去了,我的分享完畢,這種直播的壓力確實是比較大的,因為你要直接面對聽眾,會遇到一些突發事情。

期間就發生了2次離線,還有你要關注評論的同時也不能讓評論影響你的節奏,

對於一些重要的評論在分享過程中隨時回復還是記錄下來?

直播結束后,第二天我又重新聽了一下自己的分享,總結一下直播的經驗。

過程比結果收穫更大。期間還有一件事讓我很是糾結。

我發朋友圈做宣傳,把自己的同事給屏蔽了,因為當時的我沒有自信,怕他們笑話。

心中的那種不自信的感覺完全戰勝了一切。自己不是技術最牛的,自己也不是這個管理經驗最豐富的。

我對自己這種糾結懊悔了很久,正常地做自己就好了,又不是做給別人看的。

下次再有機會我會更加自信,即便不是最專業,那也需要一份對自己努力的自信。

另一個話題

沒有一絲防備,我們直接切換另一個話題。

上面算是給自己這3個月沒寫博客劃一個句號。我們來看看最近我們在敏捷一些什麼?

我們項目組組織了讀書分享,當時組織這個讀書分享我也是很糾結。

作為項目經理不是職能經理,自己到底組織一場讀書分享合不合適?

我把我的疑惑和需求說給了我們項目群經理,希望從他那裡能夠得到一些經驗。

疑惑:我們從項目角度出發來組織學習,會不會觸碰了職能經理的職能邊界?

(比如讓大家閱讀《Scrum精髓:敏捷轉型指南》,會不會觸碰產品職能的邊界?)

需求:我希望大家能夠系統地認識敏捷和框架。
從中能夠學習到一些東西來應用到項目中,其次大家對於這種項目內的分享形式是擁抱的態度

經理的建議是可以嘗試一下。我們項目組開了一個會,約定了一下。

在不佔用大家太多的時間,我們挑選值得閱讀的章節么一個項目中帶着一次分享,每次分享大約1-2個章節。

是的,我們邁出了第一步

我們其實是在項目結束后一周內,確定好閱讀範圍,確定好分享人,確定好分享時長兩小時。

流程分為依次提問和自由提問,分享人可以拿任何的分享資料分享(doc,表格)都行。

目的就是讓大家心裏有一定的概念並對當前最容易實行的一個敏捷方法進行深入討論。

這是當時分享人的一個分享大綱

第一次分享,大家也在適應遮掩的一種分享狀態。

整體過程很順利也夠味,如果能夠再放鬆一些那就更好了,大家說著說著就說成了項目總結會~

從這次會議中的一些啟發

從有了開這種分享會的想法到實行,總結下來就是如果大家都抱有期待並且準備充足那就先試試。有想法就嘗試。

一些之前的想去執行的想法,當下就會執行嘗試。

站會上的小鴨子

終於到了標題中的這一部分。之前讀敏捷相關的書籍時,很多會提到站會上需要一個像權力交接棒的實際物品來標識你的權力~

以前我們開站會,時間和習慣都不錯,到時間我提醒大家開會,大家湊一堆開始開會。

但是,總覺得缺少一些什麼讓整個會議顯得有點太過於形式。

我想起了開始的那句話:有一個實際的權力物品來做交接。

看吧,就是這隻小鴨子

改變

每天的站會,不同的主持人,主持人的象徵就是擁有這隻小鴨子~

就是誰拿到這隻小鴨子,誰就是站會的負責人和支持人。

8:40 他會在群里喊,然後會議上主持,結束后流動到另一位組織者手裡~

大家對站會接受度更高了,對這個項目也有了一些感情,團隊的人的默契和氛圍會默默提高很多。

這種感覺是潛移默化的,也是需要我們隨時提醒和建立的。

再回過頭來說那次敏捷分享的效果,我們之前是開發,然後測試,最後上線。

我們雖然是分階段提測但是沒有執行分階段測試。

所以這次新版本中我們“打成”一致嘗試分階段提測後分階段測試。就是 開發-測試交替進行。

有沒有難度呢?有,就是大家的時間和專註度會受到衝擊。

對於實踐這個開發、測試交替進行我們承認一些東西也相信一些東西。

我們組內也承認起初實踐起來肯定會比之前的模式有一定的不適應,但是我們依然信心。

希望可以踴躍暴漏問題不管是個人還是團隊不管是心情還是問題,都暴露出來。

我們組內達成了一致默默嘗試了一下,我們重視了組內的衝刺總結會,其實從總結會上我們收穫還是很多的。

一些開發和溝通問題,組內他們能夠自組織去主動解決,根據目前組內的主動性,我覺得我不需要關心。

我重點解決了一下時間和專註度衝突的問題。

開發正在開發下一個階段,測試正在測試你上一個階段,突然一個bug給你你煩不煩?開不開心?

–你是馬上斷開思路去改正?還是抱着忐忑的心情繼續開發?

開發修復完bug,馬上回給測試,測試此時正在測試下一個階段,

–你是斷開思路馬上去回歸?還是思索着會不會影響後面的功能的心情測試下去?

達成一致

我們就問題討論,最終達成一致

當然我們還依然堅信,剛開始實踐期間肯定會有不適應和一些問題。

但是我們還堅持要解決問題並把問題的根因找出來,想辦法解決。這是毋庸置疑的。

分階段提測,大家達成一致是因為每一次提交的功能不是很多,測試測試之前可以先在群里發出通知。

開發就一些工作進行微調,便於後面的bug修改。

測試發通知–3:00統一提bug–開發4:00開始修復–測試最晚命題談進行回歸

還有一點就是,對於流程和嚴重bug,隨時支持,沒有理由。這個大家也是認可的。

總結

其實這一段時間對於我到其他社區進行了一次敏捷分享;

對於項目組,我們使用權力交接棒–小黃鴨,進行大家主人翁意識的交接培養。

對於項目,我們實踐衝刺,我們開始重視每一次的衝刺總結會,

我們希望團隊中任何一個人都可以發現問題並自己發起會議(當然也是集中遇到問題或者集中解決問題)

我們實踐開發-測試交替進行的模式,為什麼呢?

這個原因我們的測試總結得很好,縮短時間其次,重要的是測試可以提前參与,提前發現問題,而不是最後採取發現問題。

我理解的是通過測試的力量在過程中來保駕護航,而不是在項目最後去修修補補。

最近感觸很大,當一些行動獲得大家認可的時候,大家互相能理解,大家也都互相提建議。

為了讓項目更好,讓我們更加自主,你好,我好,項目好。你提高,我提高,項目也提高。

當前的應屆生的學習能力和融合能力確實很強。

作為項目經理除了要保證項目交付這個基本目標以外,也是希望大家從項目中能夠獲得一些東西。我更希望是自驅的動力~

如果可以,可以把項目中的好的實踐帶到其他項目中去,去默默影響他人。

堅持自己,堅持自己的那些原則。獲得好的優秀的經驗,慢慢影響他人。

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

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

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

※產品缺大量曝光嗎?你需要的是一流包裝設計!

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

福島輻射污染土再利用 實驗種出超標作物

文:宋瑞文(媽媽監督核電廠聯盟特約撰述)

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

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

食腦變形蟲入侵美德州水源 當局急籲勿用自來水

摘錄自2020年09月27日中央通訊社美國報導

美國德州雷克傑克森市(Lake Jackson)當局呼籲居民不要使用自來水,因為水中可能含有致命的食腦微生物福氏內格里蟲(Naegleria fowleri)。

德州環境品質委員會(Texas Commission on Environmental Quality)表示,在「自來水系統獲得充分沖刷,且採檢樣本顯示水質已安全無虞可供使用」以前,雷克傑克森居民應該持續避免使用自來水。

福氏內格里蟲蹤跡遍及世界各地。美國疾病管制暨預防中心(CDC)表示,美國境內多數感染案例都出現在南方各州,福氏內格里蟲透過受污染的淡水感染人類,經由鼻腔進入人體使人致病。若遭感染,致死率相當高。感染者會出現發燒、噁心、嘔吐,以及頸部僵硬和頭痛等症狀,多數感染者會在1週內喪命。這類病例在美國境內相當罕見,2009年到2018年間僅傳出34起案例。

污染治理
國際新聞
德州
自來水
CDC
水污染

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

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

比昂科威貴不了幾萬,都20多萬了為啥不看看奔馳寶馬?

奔馳GLA的發動機動力表現不錯,低扭頗為強勁。但是它搭載的7DCT變速箱在調校方面離完美還差一些,它的低速有一些頓挫。其整體傳動效率較高,動力和油耗表現都不錯。寶馬X1的車身尺寸、車內空間比起同場的奔馳GLA、奧迪Q3要更富有優勢。

您是否看見滿大街跑的途觀L、昂科威、冠道等車型后,覺得有些千人一面、審美疲勞?其實差不多的價位,已經有不少豪華品牌的入門SUV車型供我們選擇!下面咱們就來看看這些車型是否具備良好表現!

奧迪Q3的車身設計“德味”很重,它造型飽滿、大氣,尾部的設計精緻感強。但屬於產品生命末期的它,內飾設計保守,而做工的精緻度頗高、用料也不錯。

奧迪Q3日常開起來能讓人感到“零壓力”,它的轉向和油門很輕盈,在市區中穿行尤為輕鬆。它的動力匹配程度高,降擋速度很快捷,用戶想要稍為激烈駕駛,它也能給出很好的配合!

作為廣汽謳歌推出的首款車型,謳歌CDX肩負着打開市場的重任。它的造型極其前衛,而且看到實車時你就會能感受到其設計的精緻感!而內飾造型層次感突出,還採用了大面積的軟性材質和皮革包裹,質感不錯。

謳歌CDX的1.5T發動機採用了缸內直噴技術,與之匹配的是一副8擋雙離合變速箱。該雙離合變速箱帶有液力變矩器,這讓它換擋平順,降擋的速度也相當快,動力系統匹配是高效的。這讓它的油耗較低,兩驅車型也能在8.35秒內破百,表現良好。

奔馳GLA的車身設計除了動感、柔美以外,還富有性感氣質!最喜歡的是它的側面輪廓緊湊,動感氣息濃厚!而且它的內飾帶有較高的豪華氣息,也富有動感!當然,它的配置方面有待提高,起步價也不算低。

奔馳GLA的發動機動力表現不錯,低扭頗為強勁。但是它搭載的7DCT變速箱在調校方面離完美還差一些,它的低速有一些頓挫。其整體傳動效率較高,動力和油耗表現都不錯。

寶馬X1的車身尺寸、車內空間比起同場的奔馳GLA、奧迪Q3要更富有優勢。它2780mm的軸距,4565mm的車身長度要更符合緊湊型SUV的定位!車身設計富有力量感,氣勢較強。

寶馬X1入門車型採用的1.5T發動機,動力參數略顯保守,而匹配的6AT變速箱平順性挺好,換擋邏輯中規中矩。中高配車型採用的2.0T+8AT動力總成表現頗為出眾!因此更推薦大家提高預算選擇2.0T車型。

雷克薩斯NX的設計相當前衛,犀利的紡錘型中網富有氣勢,車身線條硬朗,燈組造型獨特。而且內飾精緻感強,用料較好。

而雷克薩斯NX提供了豐富的動力組合,其300h全驅鋒致版車型上搭載的電機總扭矩達409牛米,官方破百時間9.2秒,百公里綜合油耗為6.1L,更側重於低能耗的調校讓它油耗很低,續航里程頗高。

寫在最後:這6款豪華SUV車型,具備良好的實用性,設計也大多前衛、個性,年輕人駕駛起來相當合適。當然它們之中部分車型優惠較大,喜歡的朋友可以去了解一下!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

A800/580/途安L/奇駿/奧德賽/銳界,7座車大亂斗!

4T+7速雙離合真的難逢敵手,有動力,又夠快速,還平順,頓挫。不好意思,我們大眾的雙離合真的沒有,你說用幾年之後就會有。那是之後的事情。而且,大眾紮實的底盤質感在途安L上也得到體現,這也是很多人喜歡大眾車的其中一個原因。

在SUV市場繼續高歌猛進的同時,有兩股勢力正隱隱膨脹——旅行車和7座車,一個是人們為情懷買單,一個是解決了實際需求。只不過誰都還是不願意只做一個7座車(MpV或微面),都還是想抓住SUV市場,於是很多7座SUV進入了各個級別區間。今天,我們找來了6台不同級別的7座車,他們分別是10萬級的東風風光580、長安歐尚A800,20萬級的日產奇駿、大眾途安L,30萬級的福特銳界、本田奧德賽。一起來探討一下,到底誰的空間大,誰的駕乘表現好,而你,又該選誰?請看視頻/文章……

10萬級風光580vs歐尚A800

風光580 7.29-12.30萬,A800 5.99-11.99萬

風光580的銷量還是挺不錯的,我猶記得它上市發布會那100個網紅,咳咳,它的火熱,主要是因為在這個價位很難找到像它這樣質感相對較好的7座SUV車型。

設計方面我就不多聊了,個人覺得車頭和車側的部分線條神似本田繽智,外觀方面還挺Nice,但內飾老氣了一些。

有人說,這車就是一個“日系”車,因為是逆向研發出來的。我不去評判這個說法,我只想說,這車駕駛起來還真有這麼回事。動力比較疲軟,配合CVT變速箱,基本上就是落入“舒適、平順”(肉)的範疇。懸挂方面也是偏軟了一些,舒適性倒是沒有太多問題,不過確實沒有太好的駕駛感受。NVH也如此,各方面的噪音空間都是中等水平。

机械性倒是沒有什麼問題,例如不會有明顯鬆散的感覺、不會有過多的抖動或者異響,每個月這麼多人購買它,說明還是可以接受的(看在價格份上)。

這台車的行駛質感比上面說的580要好,畢竟是新車,且長安的造車水平自然更勝一籌。你會覺得這台車的机械質感更加緊緻,低速時候的噪音控制是意外的好,動力輸出會多了一股衝勁,主要是因為它是偏低扭輸出一些,且用的是手動變速箱。

當然,它也有問題,一來畢竟是較長的MpV車型,懸挂的後段支撐不算很到位,所以稍微快一點的操作它是應對不過來的。另一方面的問題出在濾振上,有種拉不住彈簧的感覺,整台車左右多餘晃動比較多。噪音也是,在速度起來之後有點控制不住。

223布局的座椅,在長車身、長軸距下換來不錯的乘坐空間,三排座位都能夠坐人,且也有一些配置照顧到第三排的乘客,倘若平時真的很經常多人出行,那麼我覺得這種MpV會是更好的選擇。

20萬級奇駿vs途安L

奇駿17.98-26.88萬,途安L15.58-19.98萬

奇駿嚴格意義來說算不上7座車,不過既然它有7座就逃不過我們的“魔爪”,5座的奇駿賣得好這點沒有人懷疑,我們還是來看看7座的表現吧。

2.5L+CVT的奇駿並不是人們印象中日系車或者日產車那種中庸中庸的調校,甚至低速時還有股蠻勁,平順和動力之間取得了不錯的平衡。底盤也如此,雖然是“沙發廠”,但不是一味的軟,濾振有高級感,懸挂有韌勁,操控方面也可圈可點。而且,也沒有一貫日系車那種單薄的感覺,噪音、震動都有一定的抑制。

相對大尺寸的奇駿在緊湊型SUV里算是大個子了,所以也有了不錯的第二排空間,不過同樣地,5座設計的它加入了2個第三排座椅,表現自然有限,還好7座車只有兩個配置,看來只是滿足一下部分特殊消費者的需求。

途安L則是一台典型的大眾車,我這麼說你真的很難反駁,通用化的零件、一樣的動力搭配,甚至差不多的前臉和中控設計,簡單想想都大概知道它的駕駛感受。不過我還是要稱讚一下大眾,這套1.4T+7速雙離合真的難逢敵手,有動力,又夠快速,還平順,頓挫?不好意思,我們大眾的雙離合真的沒有,你說用幾年之後就會有?那是之後的事情。

而且,大眾紮實的底盤質感在途安L上也得到體現,這也是很多人喜歡大眾車的其中一個原因。

途安L的第二排算是一個亮點,3個座位都是獨立的,雖然犧牲了一些寬度,但這樣卻優化了中間那位乘客的體驗,不用被隆起的座椅擱屁股。進入第三排很方便,一鍵放倒毫不拖泥帶水。第三排的座椅礙於車身尺寸,一樣是比較有限,只適合坐身材“好”的人或者小朋友。

30萬級銳界vs奧德賽

銳界22.98-42.98萬,奧德賽22.98-35.48萬

提及7座SUV,應該大部分人會想到銳界或者漢蘭達,這兩台車價格雖然不低,但也都挺火的,畢竟到了這個價位7座車就沒有什麼好選的了。

福特把運動刻在基因里,銳界的運動感自然也不在話下,2.0T用在這個尺寸和重量的車上百公里加速時間只能說還行,但實際的感受卻不一樣,它很樂意停留在高轉速,讓提速來得很狂野,只是油耗就有些難保障了。操控感也是一流的,反應很快,支撐很足。銳界的NVH是對得起其價格的,底盤有高級感,不過路感會清晰一些。

尺寸足夠大的銳界二排空間沒有毛病,但可惜了,第三排的座椅依然是“小板凳”,空間也一樣需要第二排給它騰,甚至腳掌也一樣不能放平。有些遺憾。高配的銳界第三排、第二排座椅都支持一鍵放倒,這是銳界的一個亮點。

奧德賽和GL8是目前這個價位MpV的典型,我覺得奧德賽還是會更舒適一點。

奧德賽用的是2.4L自然吸氣發動機加CVT變速箱,然而你卻不能少看它——本田發動機廠的調校可不是蓋的,動力輸出很順暢,肉感會有一點,但你會發現這個動力很懂你,能否滿足你的精準操作。只不過,它還是比不上競品們的2.0T來得猛烈。

駕控方面也讓人有些出乎意料之外,不會過分軟,不會過分輕盈,開起來還是很稱手的。略感可惜的是,噪音控制還是不太到位,這一點會讓它的商務性、甚至家用性都扣上點分。

奧德賽的大空間真的就毋庸置疑了,第二排還有頭等艙座椅,有多向調節、腳拖等,讓你坐得舒舒服服,左右兩個座椅的距離也可以調整,這點還是很巧妙的。

第三排座椅雖然也不見得是多完整,但起碼空間、坐姿沒有太大問題。可以說,如果你認為奧德賽的7座都不及格的話,真的沒有多少台車ok了。

所以到底怎麼選?

總的來說,MpV在空間和功能性上面都是優於SUV的,SUV就算是銳界這種中型SUV,7座也都是有些許勉強。不過我也可以告訴你,確實SUV的駕駛感受可能會更好一些,畢竟它需要應對更多不同的路況,對懸挂和濾振的要求會更高些,且坐姿高、視野也都更好,整體風格會更加的多種多樣,而MpV在這方面會調校得更加的“無趣”一些,大多隻能談舒適。

最後再認真的說一句,其實不同品牌在設計車型或者調校水平上面是有差別的,例如途安L的質感就很好且座椅的布局、功能都很好,而像580,彷彿就沒有考慮太多。因此,在物色7座車的你,還是要去全方位的體驗一下各種關於空間和乘坐的細節會更好一些!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

安全性能五星+的領克01,動態表現能拿幾分?

勇登峰環節展示了領克01較強的脫困能力,領克01搭配了BorgWarner第五代智能四驅系統,同時接近角度20°、離去角度25。4°、通過角20。2°,再加上發動機的大扭矩輸出,在這種程度的測試中表現得游刃有餘,確實讓駕駛員在這種環境下也充滿了信心。

4月21日,中國汽車技術研究中心發布了2018年度C-NCAp第一批車型的評價結果,共有13款車型參与測試,其中10款車型獲得五星。值得一提的是,此次測試中領克01獲得五星+評級,這也是現行中國汽車安全碰撞標準體系2015版規則中第一款,也是目前唯一一款獲得五星+成績的車型。

其實對於這個結果,雖然感到有些意外,但其實這也是情理之中的事情。畢竟領克01是吉利與沃爾沃合作開發的CMA基礎模塊架構下的產品,而且是第一款產品,對於吉利和沃爾沃來說這是出來打響招牌的車型,所以必定是會投入最多的精力來打磨。

所以得到在豪華品牌中都以安全著稱的沃爾沃技術支持的領克01,在安全測試中得不到好評才不正常,但是直接拿到了2015版規則以來的第一個五星+評級這樣的好成績確實不容易。

就在評價結果公布的這一天,正好參加了“領克01都市競技場”廣州站的活動,在試駕場地中對領克01進行了實際的試駕,那麼領克01的動態表現是否也像安全測試成績一樣能拿到五星+的評價呢?

此次試駕活動是在廣州五號停機坪購物廣場中進行,由於場地大小及時間上的限制,這一次領克01隻安排了三個項目的體驗:對戰競技環節、勇奪峰、智行環。

對戰競技環節,這一環節其實是領克01針對操控方面進行展示,通過一段較短距離的急加速、急減速及一段繞樁測試來展示領克搭載的2.0T發動機的強勁動力輸出、6速自動變速箱和7速DCT雙離合變速器的清晰的換擋邏輯和較快的換擋速度,還有百公里制動距離達到34米的出色制動效果,以及偏運動取向但整體調教良好的懸挂系統。

智行環體驗環節主要是展示領克01的自適應巡航功能以及在中低速下的自動排隊功能,整體表現良好,但是可能是現場道路指向不夠清晰,在彎度較大探測不到前車軌跡的時候,會出現自動排隊功能失效的情況。

勇登峰環節展示了領克01較強的脫困能力,領克01搭配了BorgWarner第五代智能四驅系統,同時接近角度20°、離去角度25.4°、通過角20.2°,再加上發動機的大扭矩輸出,在這種程度的測試中表現得游刃有餘,確實讓駕駛員在這種環境下也充滿了信心。

其實從車輛試駕的角度來看,這三個項目環節太少、時間太短,因此並不足以試出太多深淺,就好像是用一套小學題目來考驗初中學生,對這個價位的大部分車型來說,這些都只能算是基礎操作。因此對於領克01這種基礎功紮實的好學生來說,就更加沒什麼挑戰性了。通過這幾個項目的測試,只能說領克01確實基本功紮實,其他的表現還需要更深入的體驗才行。

活動最後,對領克銷售公司大區經理進行了群訪,據最新了解到的消息,同屬於CMA基礎模塊架構的領克02預計在年中上市發布,而領克03也將在年底正式亮相。對於這兩款車型也是抱有較高的期待的。從目前市場反饋來看,領克01在3月份已經賣了8000多輛,隨着銷售渠道的不斷擴張,其銷量很可能會有進一步的提高,對於領克這樣一個售價並不低廉的新品牌來說,首款車型能賣到這樣的銷量還是比較不錯的。

作為中國品牌向上突圍的排頭兵,領克給了國內消費者不小的驚喜,從安全測試的成績和實際試駕的表現來看,領克01確實有着中國品牌中數一數二的實力。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

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

中華鳥會遭除名 英國慈善委員會將調查

摘錄自2020年9月30日中央社報導

路透社報導,掌管慈善團體的英國慈善委員會(Charity Commission)29日發表聲明,國際鳥盟已提交事件報告,委員會將檢視所有提交資訊進行調查,以決定下一步動作。

中華鳥會自1996年成為全球最大的鳥類保育組織「國際鳥盟」(BirdLife International)會員。但國際鳥盟全球理事會2週前決議,由於中華鳥會的中文名稱「中華民國野鳥學會」對國際鳥盟的夥伴關係造成經營上的「風險」,因此將中華鳥會自正式夥伴關係中移除。

儘管國際鳥盟將中華鳥會除名,但許多組織仍表示將繼續與中華鳥會合作,包括國際鳥盟的重要夥伴英國皇家鳥類保護協會(Royal Society for the Protection of Birds)。

國際鳥盟禁止員工就此事發表評論,並未立即回應。

生物多樣性
國際新聞
英國
鳥會
政治因素

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

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準