題一: uboot是怎么傳參給內(nèi)核的? 思考過(guò)后,再到下方尋找答案 題二: linux怎么進(jìn)行內(nèi)存管理? 思考過(guò)后,再到下方尋找答案 題三: 請(qǐng)簡(jiǎn)單說(shuō)說(shuō)進(jìn)程和線程的區(qū)別。 思考過(guò)后,再到下方尋找答案 題一答案: 簡(jiǎn)單的講,uboot利用函數(shù)指針及傳參規(guī)范,它將 R0: 0x0 R1: 機(jī)器號(hào) R2: 參數(shù)地址 三個(gè)參數(shù)傳遞給內(nèi)核。 其中,R2寄存器傳遞的是一個(gè)指針,這個(gè)指針指向一個(gè)TAG區(qū)域。 題二答案: 早期計(jì)算機(jī)中,由于應(yīng)用程序比較小,可以直接在物理內(nèi)存中運(yùn)行,但現(xiàn)在計(jì)算機(jī)里面程序那么多又那么大,所以就需要對(duì)內(nèi)存進(jìn)行管理。 1、對(duì)內(nèi)存的分配和管理,也就是平時(shí)應(yīng)用層malloc和內(nèi)核層vmalloc、kmalloc之類的內(nèi)存申請(qǐng)的管理。 2、虛擬內(nèi)存和物理內(nèi)存之間的轉(zhuǎn)換。 題三答案: 簡(jiǎn)單的來(lái)說(shuō),一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。 第一點(diǎn)、進(jìn)程有自己的獨(dú)立地址空間,每啟動(dòng)一個(gè)進(jìn)程,系統(tǒng)就會(huì)為它分配地址空間,建立數(shù)據(jù)表來(lái)維護(hù)代碼段、堆棧段和數(shù)據(jù)段,這種操作非常昂貴。而線程是共享進(jìn)程中的數(shù)據(jù)的,使用相同的地址空間,因此CPU切換一個(gè)線程的花費(fèi)遠(yuǎn)比進(jìn)程要小很多,同時(shí)創(chuàng)建一個(gè)線程的開銷也比進(jìn)程要小很多。 但這樣帶來(lái)的缺點(diǎn)就是,多線程程序只要有一個(gè)線程掛掉了,那么整個(gè)進(jìn)程也就掛掉了,而進(jìn)程則不會(huì)影響另外一個(gè)進(jìn)程,它有自己的獨(dú)立地址空間。 第二點(diǎn)、線程之間的通信更方便,同一進(jìn)程下的線程共享全局變量、靜態(tài)變量等數(shù)據(jù),而進(jìn)程之間的通信需要以通信的方式(IPC)進(jìn)行。 以下課程可免費(fèi)試聽C語(yǔ)言、電子、PCB、STM32、Linux、FPGA、Python、安卓等。 想學(xué)習(xí)的你和我聯(lián)系預(yù)約就可以免費(fèi)聽課了。宋工Q35--24-65--90-88 Tel/WX:173--17--95--19--08 |