手機(jī)上的性能指標(biāo)是綜合的變化,由上圖可以看的出來(lái)手機(jī)更關(guān)注人跟機(jī)器的交互這,云系統(tǒng)則是比較關(guān)注機(jī)器跟機(jī)器的交互。手機(jī)系統(tǒng)比較特別的地方在于資源都是比較受限,例如 : 電量,性能…因此針對(duì)用戶體驗(yàn)是需要特別庖丁解牛來(lái)建立指標(biāo)。
我們?cè)诤芏鄷?shū)籍上、博客上都學(xué)過(guò)或者聽(tīng)說(shuō)過(guò)系統(tǒng)調(diào)用與API這兩個(gè)概念,那么這兩個(gè)概念究竟是什么意思,它們之間是什么關(guān)系呢?如果我們閱讀過(guò)《操作系統(tǒng)導(dǎo)論》,就會(huì)明白操作系統(tǒng)的目的與作用,就會(huì)知道內(nèi)核是要向進(jìn)程提供服務(wù)的,那么內(nèi)核是如何向進(jìn)程提供服務(wù)的呢?下面我們就來(lái)一探究竟。
史勝輝,在MTK工作了11年,一直在基帶芯片的USB驅(qū)動(dòng)領(lǐng)域做開(kāi)發(fā)和驗(yàn)證。從最開(kāi)始做USB2.0/3.0 IP驗(yàn)證和驅(qū)動(dòng)開(kāi)發(fā)到后面帶領(lǐng)團(tuán)隊(duì)做上層協(xié)議驅(qū)動(dòng)開(kāi)發(fā),以及跟硬件設(shè)計(jì)部門(mén)合作開(kāi)發(fā)全新的USB硬件加速器。
我們?cè)诠ぷ髦袝?huì)經(jīng)常遇到線程同步,那么到底什么是線程同步呢,線程同步的本質(zhì)是什么,線程同步的方法又有哪些,為什么會(huì)有這些方法呢?在回答這些問(wèn)題之前,我們先做幾個(gè)名詞解釋,以便建立共同的概念基礎(chǔ)。
進(jìn)程是程序的執(zhí)行過(guò)程。程序是靜態(tài)的,是存在于外存之中的,電腦關(guān)機(jī)后依然存在。進(jìn)程是動(dòng)態(tài)的,是存在于內(nèi)存之中的,是程序的執(zhí)行過(guò)程,電腦關(guān)機(jī)后就不存在進(jìn)程了。進(jìn)程的內(nèi)容來(lái)源于程序,進(jìn)程的啟動(dòng)過(guò)程就是把程序從外存加載到內(nèi)存的過(guò)程。程序文件是有格式的,UNIX-Like操作系統(tǒng)的通用程序文件格式是ELF。程序文件是從源碼文件編譯過(guò)來(lái)的,源碼文件很多是用C或者C++書(shū)寫(xiě)的。
圖形系統(tǒng)是計(jì)算機(jī)中最重要的子系統(tǒng)之一。我們平時(shí)使用的電腦、手機(jī)都是圖形界面的。對(duì)于普通人來(lái)說(shuō),沒(méi)有圖形界面的計(jì)算機(jī)幾乎是沒(méi)法用的,今天我們就來(lái)講一講圖形系統(tǒng)背后的原理。
我是從ARM7TDMI開(kāi)始接觸ARM架構(gòu)的,當(dāng)時(shí)很幸運(yùn)有DSP的學(xué)習(xí)基礎(chǔ),同時(shí)遇到了把ARM架構(gòu)和操作系統(tǒng)結(jié)合講解的書(shū)籍。這樣,結(jié)合自己不斷的實(shí)踐,一直可以跟上ARM架構(gòu)的演進(jìn)。長(zhǎng)期的跟蹤也讓我容易能看到ARM的趨勢(shì),我從Linaro在做ARM NEON指令集優(yōu)化關(guān)注到Linaro,后面持續(xù)的關(guān)注以Linaro為首ARM生態(tài)組織的發(fā)展,幾年后的2017年,我作為演講人分享了ARM架構(gòu)下的一個(gè)TLB性能優(yōu)化方案,實(shí)現(xiàn)了從關(guān)注到深度參與到過(guò)程。
計(jì)算機(jī)運(yùn)行在物理世界中,物理世界中的一切活動(dòng)都需要消耗能量。能量的形式有很多種,如熱能、核能、化學(xué)能等。計(jì)算機(jī)消耗的是電能,其來(lái)源是電池或者外電源。計(jì)算機(jī)內(nèi)部有一個(gè)部件叫做電源管理芯片(PMIC),它接收外部的電能,然后轉(zhuǎn)化為不同電壓的電流,向系統(tǒng)的各個(gè)硬件供電。什么硬件需要多少伏的電壓,都是由相應(yīng)的電氣標(biāo)準(zhǔn)規(guī)定好了的,各個(gè)硬件廠商按照標(biāo)準(zhǔn)生成硬件就可以了。上電的過(guò)程是由硬件自動(dòng)完成的,不需要軟件的參與。因?yàn)橛布簧想姷脑?,軟件也沒(méi)法運(yùn)行啊。但是當(dāng)硬件運(yùn)行起來(lái)之后,軟件就可以對(duì)硬件的電源狀態(tài)進(jìn)行管理了。電源管理的內(nèi)容包括電源狀態(tài)管理和省電管理。電源狀態(tài)管理是對(duì)整個(gè)系統(tǒng)的供電狀態(tài)進(jìn)行管理,內(nèi)容包括睡眠、休眠、關(guān)機(jī)、重啟等操作。省電管理是因?yàn)殡娔懿皇敲赓M(fèi)的,我們應(yīng)該盡量地節(jié)省能源,尤其是對(duì)于一些手持設(shè)備來(lái)說(shuō),電能雖然并不昂貴但是卻非常珍貴,因?yàn)殡姵氐娜萘糠浅S邢?。不過(guò)省電管理也不能一味地省電,還要考慮性能問(wèn)題,在性能與功耗之間達(dá)到平衡。
在我仔細(xì)研究Linux內(nèi)核中的ftrace之后,發(fā)現(xiàn)ftrace中的各個(gè)tracers的作用一直被人們嚴(yán)重低估了, 比如我們會(huì)花了大量的時(shí)間去理解Linux內(nèi)核中的一塊代碼,然后猜測(cè)可能的執(zhí)行流, 但是ftrace會(huì)首先直接告訴你整個(gè)執(zhí)行流,然后你再去查看代碼,這樣無(wú)論從效率和準(zhǔn)確度來(lái)講都是極大的提升。
雖然經(jīng)常更新內(nèi)核版本通常被認(rèn)為是一種安全最佳實(shí)踐,但由于各種原因,尤其是生產(chǎn)環(huán)境中的服務(wù)器無(wú)法這樣操作。這就意味著在機(jī)器運(yùn)行時(shí),會(huì)存在利用已知的漏洞(當(dāng)然,還會(huì)有一些未知的漏洞)來(lái)進(jìn)行攻擊的情況,所以需要某種方法來(lái)檢測(cè)和阻止對(duì)這些漏洞的利用,這正是Linux Kernel Runtime Guard(Linux內(nèi)核運(yùn)行時(shí)保護(hù)LKRG)誕生目的所在。
從文章Linux Kernel運(yùn)行時(shí)安全檢測(cè)之LKRG-原理篇可以看到,LKRG可以對(duì)正在運(yùn)行的Linux內(nèi)核進(jìn)行檢測(cè),并希望能夠及時(shí)響應(yīng)對(duì)正在運(yùn)行的進(jìn)程用戶id等憑證未經(jīng)授權(quán)的修改(完整性檢查)。對(duì)于進(jìn)程憑據(jù),LKRG嘗試檢測(cè)漏洞,并在內(nèi)核根據(jù)未經(jīng)授權(quán)的憑據(jù)授予訪問(wèn)權(quán)限(例如打開(kāi)文件)之前采取行動(dòng)。并且是以可加載的內(nèi)核模塊的形式,檢測(cè)正在運(yùn)行的內(nèi)核是否存在更改情況,以表明正在對(duì)其使用某種類(lèi)型的漏洞利用。除此之外,它還可以檢查系統(tǒng)上運(yùn)行的進(jìn)程,以查找對(duì)各種憑證的未經(jīng)授權(quán)修改,以防止這些更改授予額外的訪問(wèn)權(quán)限。
邢孟棒,曾供職于阿里、網(wǎng)易,目前在騰訊云專職做性能優(yōu)化方向。Linux 業(yè)余愛(ài)好者,偏好鉆研各類(lèi)工具源碼與底層技術(shù)原理。在日常的性能工程實(shí)踐中,比較注重方法論的探索、優(yōu)化案例的沉淀。熱衷于 eBPF 技術(shù),擅長(zhǎng)傳統(tǒng)工具與 BPF 工具的結(jié)合應(yīng)用。
大家都聽(tīng)說(shuō)過(guò)紅黑樹(shù),也都知道紅黑樹(shù)很厲害,是計(jì)算機(jī)里面評(píng)價(jià)非常高的數(shù)據(jù)結(jié)構(gòu)。但是每當(dāng)想學(xué)習(xí)紅黑樹(shù)的時(shí)候,卻總是找不到通俗易懂很好理解的學(xué)習(xí)資料。很多書(shū)上上來(lái)就是紅黑樹(shù)的定義,然后就是紅黑樹(shù)的實(shí)現(xiàn),直接就把人給整暈了。光看紅黑樹(shù)的定義就有5條,為什么要有5條定義,為什么要這么定義,這么定義是什么意思,光定義都讓人懵了,更別說(shuō)實(shí)現(xiàn)了。我看最近抖音上有很多人在講底層邏輯,只要你掌握了底層邏輯,其它的問(wèn)題都不在話下,今天我們也來(lái)講一講紅黑樹(shù)的底層邏輯。在講之前我們先介紹一下紅黑樹(shù)的誕生,紅黑樹(shù)是Rudolf Bayer在1972年首先提出來(lái)的,不過(guò)當(dāng)時(shí)并不叫紅黑樹(shù),而是叫對(duì)稱二叉 B 樹(shù)(symmetric binary B-trees)。后來(lái)在1978年Leo J. Guibas 和 Robert Sedgewick 對(duì)此數(shù)據(jù)結(jié)構(gòu)進(jìn)行了修改和完善,并重新命名為紅黑樹(shù)。為什么叫紅黑樹(shù)呢?有兩種說(shuō)法,因?yàn)榧t黑樹(shù)中要對(duì)節(jié)點(diǎn)連接做兩種顏色的區(qū)分,一說(shuō)是因?yàn)楫?dāng)時(shí)的書(shū)寫(xiě)筆只有紅色和黑色兩種顏色,另一說(shuō)是當(dāng)時(shí)的打印機(jī)只有紅和黑兩種顏色。
我們先來(lái)說(shuō)一說(shuō)什么是排序、為什么要排序。什么是排序,這個(gè)很簡(jiǎn)單,就是把無(wú)序的東西按照一定的規(guī)則順序排列成升序或者降序。為什么要排序,有兩個(gè)原因,一是為了方便后面的查找,如果沒(méi)有排序的話只能進(jìn)行線性查找,時(shí)間復(fù)雜度是O(n),如果排序了就可以進(jìn)行二分查找,時(shí)間復(fù)雜度是O(logn),復(fù)雜度一下子就大大降低了。我們來(lái)說(shuō)明一下這兩種復(fù)雜度的差別有多么懸殊(雖然用詞錯(cuò)誤,但是這么用確實(shí)很符合氣氛),假設(shè)n是10億的話,O(n)還是10億,而O(logn)是30多(以2為底,假設(shè)系數(shù)是1),30多和10億比都可以忽略不計(jì)了。二是為了顯示的時(shí)候按照順序顯示,人類(lèi)的習(xí)慣就是喜歡看有序的東西。
在我仔細(xì)研究Linux內(nèi)核中的ftrace之后,發(fā)現(xiàn)ftrace中的各個(gè)tracers的作用一直被人們嚴(yán)重低估了, 比如我們會(huì)花了大量的時(shí)間去理解Linux內(nèi)核中的一塊代碼,然后猜測(cè)可能的執(zhí)行流, 但是ftrace會(huì)首先直接告訴你整個(gè)執(zhí)行流,然后你再去查看代碼,這樣無(wú)論從效率和準(zhǔn)確度來(lái)講都是極大的提升。
289117336
Tronlong創(chuàng)龍
phane99
大有可為
xlu10333
shaolw
xiaoguaixh
houlianpi
caizhiwei
Addition
hch
wuton
liqinglong1023