嵌入式混合面試題_第1頁
嵌入式混合面試題_第2頁
嵌入式混合面試題_第3頁
嵌入式混合面試題_第4頁
嵌入式混合面試題_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、一、ANSI C/C+方面的知識一.1、簡答題。下面的題目必須全部答對才給分(20分):1、 如何在C中初始化一個字符數(shù)組。2、 如何在C中為一個數(shù)組分配空間。3、 如何初始化一個指針數(shù)組。4、 如何定義一個有10個元素的整數(shù)型指針數(shù)組。5、 s10的另外一種表達(dá)方式是什么。6、 GCC3.2.2版本中支持哪幾種編程語言。7、 要使用CHAR_BIT需要包含哪個頭文件。8、 對(-1.2345)取整是多少?9、 如何讓局部變量具有全局生命期。10、C中的常量字符串應(yīng)在何時定義?11、如何在兩個.c文件中引用對方的變量。12、使用malloc之前需要做什么準(zhǔn)備工作。13、realloc函數(shù)在使用

2、上要注意什么問題。14、strtok函數(shù)在使用上要注意什么問題。15、gets函數(shù)在使用上要注意什么問題。16、C語言的詞法分析在長度規(guī)則方面采用的是什么策略?17、a+b所表示的是什么意思?有什么問題?18、如何定義Bool變量的TRUE和FALSE的值。19、C語言的const的含義是什么。在定義常量時,為什么推薦使用const,而不是#define。20、C語言的volatile的含義是什么。使用時會對編譯器有什么暗示。一.2、問答題。1、 “匈牙利命名法”有什么優(yōu)缺點(diǎn)?(2分)2、下面x, y, *p的值是多少,有什么問題?(2分)int x, y, z = 2;int *p=&z;x

3、=sizeof*p;y=x/*p; /* x=?, *p=?, y=?, 有什么問題?*/3、下面的語句是什么意思?如何聲明或定義才使它們更易懂?(10分)int (*foo()();int (*foo();int (*foo)();(*(void(*)()0)();void (*signal(int,void(*)(int)(int);4、本題(2分)。一般使用malloc時,需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,如:char *s; s = (char *)malloc(31);下面中?該如何填寫,才可以正確執(zhí)行強(qiáng)制類型轉(zhuǎn)換?int (*monthp)31; monthp = (?)malloc(31);

4、5、關(guān)于C語言運(yùn)算符優(yōu)先級的記憶技巧是什么?(2分)/* 下面r的值是多少 */int hi, low, r;hi=7;low=3;r=hi4+low;6、指針和數(shù)組的區(qū)別是什么?用一個簡單的聲明把它們區(qū)分開。(2分)指針和數(shù)組的聲明在什么情況下是相同的?(2分)7、C語言的左值(lvalue)和右值(rvalue)的含義是什么?(2分)8、為什么C語言可以實(shí)現(xiàn)printf(char *format, )這樣可變參數(shù)的調(diào)用形式?這樣有什么缺點(diǎn)?(2分)9、說明C語言中術(shù)語”聲明”定義”原型”的含義?(2分)10、舉一個例子,說明使用assert和防錯代碼的區(qū)別。(5分)11、對語句 if el

5、se 與操作符 ? : 使用場合的比較。(2分)12、編寫一個函數(shù),輸入一個的整型數(shù)字,可以選擇按照8/10/16進(jìn)制輸出字符串。注意邊界值。(5分)13、本題(2分)。下面是一個1616的黑白圖標(biāo):static unsigned short stopwatch = 007c6,01ff7,0383b,0600c,0600c,0xc006,0xc006,0xdf06,0xc106,0xc106,0610c,0610c,03838,01ff0,007c0,00000,;如何修改聲明,可以使之在源代碼中形象地表現(xiàn)出圖形的模樣。14、說出可以使用calendar1130變量的四種類型定義。(5分)如

6、:int calendar1231; /* 二維數(shù)組 */15、使用strcmp,當(dāng)字符串相同時會返回0。但0一般作為邏輯假,因此下面的語句不容易理解:if (!strcmp(s, “string”) return EQUATION;如何經(jīng)過簡單修改,使之更易懂?(2分)16、編寫一個自己的完全C語言版本的memset函數(shù),并且評價這個實(shí)現(xiàn)的性能和可移植性。(5分)17、在樹和圖這些數(shù)據(jù)結(jié)構(gòu)中,通常使用指針來組織數(shù)據(jù)。如果我們要把這些數(shù)據(jù)保存到文件中,指針是沒有意義的。我們該如何解決這個問題。(2分)18、用2種不同的方法計算long變量的”1bit的個數(shù)。(2分)19、任意給出一個C的基本數(shù)

7、據(jù)類型,如何編碼判斷這個數(shù)據(jù)類型是有符號還是無符號的?(2分)不得上機(jī)實(shí)驗(yàn),寫出下面代碼的輸出。解釋這個行為是標(biāo)準(zhǔn)定義的,還是依賴實(shí)現(xiàn)的。(2分)int i;for (i = 0; i = 0xa1 & c2 = 0xa1)return 1;elsereturn 0;6、下面x, y的值是多少,有什么問題?int x = 10, y = 3;x = y;y = x;x = y;/* x=?, y = ? */7、int days=31,28,31,30,31,30,31,31,30,31,30,31,;int calendar1231;int (*monthp)31;int *dayp;int

8、 i;memset(calendar, 0, sizeof(calendar);i = 0;for (monthp = calendar; monthp &calendar12; monthp+) for (dayp = *monthp; dayp &(*monthp)31; dayp+) if (dayp - *monthp dayscalendar - monthp) *dayp = i+ % 7 + 1;8、void printnum(long n)if (n = 10) printnum(n/10);putchar (”0123456789n%10);9、void * memchr(v

9、oid *pv, unsigned char ch, size_t size)unsigned char *pch = (unsigned char *) pv;unsigned char *pchEnd = pch + size;while (pch pchEnd) if (*pch = ch)return (pch);pch+;return NULL;10、void * memchr(void *pv, unsigned char ch, size_t size)unsigned char *pch = (unsigned char *) pv;unsigned char *pchPlan

10、t = pch + size;unsigned char chSave = *pchPlant;*pchPlant = ch;while (pch != ch) pch+;*pchPlant = chSave;return (pch = pchPlant) ? NULL : pch);11、void UnsToStr(unsigned short int u, char *str)char *pch;assert(u 0);strcpy(str, pch);12、void *memmove(void *pvTo, void pvFrom, size_t size)char *pbTo = (c

11、har *)pvTo;char *pbFrom = (char *)pvFrom;(pbTo 0);*pbTo+ = *pbFrom+;return (pvTo);14、#include int main(int argc, char *argv)char s=”0123456789;int i = 0;do printf (”%c”, i+s); while(s?1:printf(”n”)-1);return 0;15、int fibonacci(int x)if (x = 1 | x = 2)return 1;return fibonacci(x - 2) + fibonacci(x -

12、1);16、這里有一個程序cdecl.c。寫出它的工作流程。寫出它的使用方法。給出一個典型輸入用例,記錄下它的輸出。一.4、綜合編程題。要求:1、完成需求,程序運(yùn)行正確。2、工作原理文檔,使用文檔完整。3、代碼規(guī)整優(yōu)美。注釋得當(dāng)。4、運(yùn)行速度足夠快。5、用工具分析出是哪些代碼或函數(shù)造成速度瓶頸。1、編寫一個排序程序。被排序的文件有8MB大小,一行一個隨機(jī)整數(shù)(ASCII格式)。要求對這些整數(shù)進(jìn)行排序,并計算平均值,打印出排序所需的時間。(20分)2、用dummy header技巧實(shí)現(xiàn)一個鏈表DEMO。要求具有create, insert, delete, search功能。編寫一個應(yīng)用程序,使

13、用上面的函數(shù)。使用dummy header技巧有什么優(yōu)點(diǎn)。(20分)3、用heapsort算法實(shí)現(xiàn)優(yōu)先隊(duì)列。要求具有create, insert, delete功能。編寫一個應(yīng)用程序,使用上面的函數(shù)。使用heapsort算法有什么優(yōu)點(diǎn)。(20分)用trie(一種多叉樹)實(shí)現(xiàn)一個字典。要求具有create, insert, delete, search功能。編寫一個應(yīng)用程序,使用上面的函數(shù)。使用trie樹有什么優(yōu)點(diǎn)。(20分)二、POSIX方面的知識。二.1、簡答題。下面的題目必須全部答對才給分:(5分)1、在UNIX環(huán)境中,編譯流程是什么?2、ABI,ELF的英文全稱是什么3、一般UNIX的程

14、序有多少段,舉一個實(shí)際的例子說明。4、如何在kernel二進(jìn)制代碼中找一個字符串。5、段地址F000:FFF0轉(zhuǎn)換為線形地址的值是多少(16進(jìn)制表達(dá))。6、在一個UNIX文件系統(tǒng)中,文件的唯一性標(biāo)志是什么?二.2、問答題。1、寫一些代碼。如何用文件實(shí)現(xiàn)信號燈?要求如果程序崩潰了,這個文件也將自動被刪除。為什么可以這樣實(shí)現(xiàn)信號燈?(5分)傳統(tǒng)的signal函數(shù)信號處理為什么是不可靠的,信號和系統(tǒng)調(diào)用有何關(guān)系?(5分)在圖形庫系統(tǒng)中往往提供timer的功能,除了使用ALARM信號外,你還可以使用什么系統(tǒng)調(diào)用來實(shí)現(xiàn)timer?(5分)2、寫一些代碼,演示如何正確使用write系統(tǒng)調(diào)用。注意看好手冊再

15、回答。(2分)如果一個文件以rw模式打開,在進(jìn)行read/write操作轉(zhuǎn)換時,需要進(jìn)行什么操作。(2分)3、解釋終端結(jié)構(gòu)termios.c_cc的MIN/TIME數(shù)值變化的帶來read/write的特性。(5分)如何理解終端、控制終端、虛擬終端、控制臺、tty等類同的概念?(5分)4、解釋計算機(jī)中Copy-On-Write的概念。(2分)調(diào)用fork之后,子進(jìn)程沒有繼承父進(jìn)程的屬性有哪些?(5分)解釋為什么每個程序在裝入執(zhí)行之后,總是已經(jīng)預(yù)先打開了stdout、stdin、stderr?(2分)在fork之前,父進(jìn)程打開了一個文件。在fork之后,如果子進(jìn)程移動了文件指針,父進(jìn)程的文件指針有

16、什么變化;如果子進(jìn)程關(guān)閉了文件,父進(jìn)程有什么變化?為什么會這樣?(5分)標(biāo)準(zhǔn)輸入、輸出和錯誤輸出分別是什么類型的緩沖,這些緩沖在用戶空間還是在核心空間?怎樣關(guān)閉他們的緩沖?如果父進(jìn)程關(guān)閉了緩沖,在fork之后建立的子進(jìn)程是否也關(guān)閉了緩沖?(5分)vfork和fork相比,有什么特色?(2分)system函數(shù)是否等同于fork+exec?(2分)wait系統(tǒng)調(diào)用有多少種條件可以退出?(2分)5、系統(tǒng)調(diào)用和庫函數(shù)調(diào)用有什么區(qū)別。(2分)在linux2.4.x上的glibc和newlib(一種嵌入式C庫)的系統(tǒng)調(diào)用有什么不同?(2分)在linux2.4.x上,對系統(tǒng)調(diào)用execve如果調(diào)用成功,它返

17、回的值是多少。(2分)6、列出你所知道的2個內(nèi)存跟蹤庫。(2分)設(shè)計一個內(nèi)存跟蹤方案,為什么選擇這個方案(5分)二.3、綜合編程題。要求:1、完成需求,程序運(yùn)行正確。2、工作原理文檔,使用文檔完整。3、代碼規(guī)整優(yōu)美。注釋得當(dāng)。4、運(yùn)行速度足夠快。1、這里有一個8MB的文件,編寫一個copy程序,拷貝這個文件,并計算所需時間。用工具分析出是哪些代碼或函數(shù)造成速度瓶頸。提示:如果只是使用read/write調(diào)用,不是一個好的實(shí)現(xiàn)。(20分)2、Linux系統(tǒng)中,什么時候會出現(xiàn)類似Y2K的問題。寫一個程序證明。(20分)3、編寫一個程序,測試系統(tǒng)最小的睡眠時間間隔。(20分)4、編寫一個pipe程序

18、,測試有N個管道,size大小的buffer情況下,pipe的傳輸性能是多少?(20分)5、在ext2文件系統(tǒng)上,單個文件最大可以達(dá)到多少?寫一個程序獲得這方面的限制。(20分)三、Linux編程基本使用知識。三.1、命令和shell1)編寫一個腳本,統(tǒng)計一個目錄下面所有C代碼的行數(shù)。(2分)2)編寫一個sed腳本,去除HTML文件中的HTML標(biāo)記。(2分)3)編寫一個腳本獲得當(dāng)前系統(tǒng)eth0的IP地址。(2分)4)編寫一個腳本以交互的方式,進(jìn)行DNS的設(shè)定。(2分)5)使用ls命令編寫一個腳本,實(shí)現(xiàn)ls -R,遞歸列出當(dāng)前目錄下的所有目錄、文件。(2分)6)在一個目錄下,找soft-link

19、 files,用下面的命令,原理是可行的,但無法操作,該如何解決?要2種方法。(2分)ls -l | grep -7)如何把標(biāo)準(zhǔn)錯誤輸出,重定向到標(biāo)準(zhǔn)輸出上。(2分)8)我們的系統(tǒng)中的軟件包是使用RPM管理的。要求下面的問題寫出shell命令和運(yùn)行結(jié)果。(5分)如何知道系統(tǒng)中安裝了幾個軟件包。如何知道系統(tǒng)中安裝了哪幾類(group)軟件包。如何知道kernel軟件包的簡述。如何知道kernel軟件包的Changelog。如何知道kernel軟件包有幾個文件。如何知道kernel軟件包安裝后有多大。三.2、編輯工具的使用。(各2分)1)如何使用vi進(jìn)行塊拷貝、粘貼、刪除的操作2)如何設(shè)置Tab的

20、長度,以及自動縮進(jìn)的長度3)如何使用tag進(jìn)行代碼閱讀4)如何在110行,有確認(rèn)的進(jìn)把所有的RedHat改為RedFlag5)在SourceNavigator中,如何跳到一個變量的聲明處?如何得知光標(biāo)當(dāng)前的位置在那個函數(shù)體內(nèi)?三.3、編譯器與調(diào)試器。(各2分)1)如何使用gcc得到宏展開的中間代碼2)如何通過gcc在命令行中傳入宏定義3)在那一級優(yōu)化的情況下,內(nèi)聯(lián)函數(shù)才真正的內(nèi)聯(lián)到代碼中4)gdb的watch命令如何使用,有何缺點(diǎn)5)gdb中使用什么命令可以顯式調(diào)用的棧幀,如何查看某個棧幀上的局部變量6)如何使用gdb調(diào)試多進(jìn)程7)如何使能/禁止core dump?三.4、庫。(各2分)1)如

21、何知道XSetIMValues這個符號在那個X的庫文件中2)如何讀取C+的符號名,更具可讀性3)請解釋動態(tài)庫的soname概念4)解釋在鏈接時rpath選項(xiàng)的含義三.5、Makefile。(10分)如果有一個簡單的Test項(xiàng)目目錄如下:# tree TestTest| common.h| main.cpp| test.cpp test.h1)使用wildcard、patsubst函數(shù)編寫一個C+項(xiàng)目的Makefile文件2)使用automake、autoconfig編寫一個支持configure選項(xiàng)的configure.in腳本三.6、CVS。(10分)1)如果一個CVS項(xiàng)目中,甲添加了一個子

22、目錄模塊,那么乙在update時是否會自動檢出這個新添加的子模塊?如果不能,那么你有什么好的解決方案?2)如何在一個CVS項(xiàng)目中添加一個二進(jìn)制文件,這個二進(jìn)制文件可以進(jìn)行增量的版本管理嗎?3)如何檢出標(biāo)記(tag)為milestone-1的版本,如何創(chuàng)建以milestone-1為基礎(chǔ)的分支milestone-1-b1,并如何把分支的修改合并到milestone-1的主分支上三.7、Linux/GNU編程基本知識1、Linux2.4.x有多少種類型的設(shè)備文件?分別寫出來。(2分)2、glibc動態(tài)庫的搜尋次序是什么?(2分)glibc 2.1.x 與 2.2.x的動態(tài)庫的搜尋次序有什么不同?為什

23、么會采用現(xiàn)在的方案?(2分)三.3、綜合編程題。要求:1、完成需求,程序運(yùn)行正確。2、工作原理文檔,使用文檔完整。3、代碼規(guī)整優(yōu)美。注釋得當(dāng)。4、運(yùn)行速度足夠快。1、本題(20分)。寫一個程序,有三個功能:a)取得CMOS中的當(dāng)前時間,按照YY:MM:DD:HH:MM:SS格式輸出。b)取得物理內(nèi)存的大小,格式化輸出。c)取得從物理段地址F000:FFF0起,16個字節(jié)的值,每字節(jié)按照16進(jìn)制格式輸出。2、本題(20分)。對串口編程,編寫一對類似ping的程序,作用在串口上,了解serial的聯(lián)通情況。定義協(xié)議要求:定義一個聯(lián)通和響應(yīng)協(xié)議。至少具有:發(fā)送、回復(fù)、超時三種狀態(tài)。除超時狀態(tài)外,所有

24、狀態(tài)的數(shù)據(jù)必須經(jīng)過校驗(yàn)才可使用。ping_serial_client要求:1,發(fā)送數(shù)據(jù)包;2,等待回復(fù)數(shù)據(jù)包,直到超時;3,如果有回復(fù)數(shù)據(jù)包,對數(shù)據(jù)包進(jìn)行校驗(yàn);4,計算校驗(yàn)通過的數(shù)據(jù)包之間的時間差;5,重復(fù)直到用戶退出;6,統(tǒng)計丟包率,時間。界面:bash# ping_serial_client /dev/ttyS0 baud_value?bytes from ttyS0, time=?msC ttyS0 ping statistics ? packets transmitted, ? received, ?% losstime ?ms, min/avg/max = ?/?/? msping_

25、serial_server要求:1,等待對方的發(fā)送數(shù)據(jù)包;2,對發(fā)送數(shù)據(jù)包進(jìn)行校驗(yàn);3,校驗(yàn)通過則回復(fù)數(shù)據(jù)包;4,重復(fù)直到用戶退出;界面:bash# ping_serial_server /dev/ttyS0 baud_value3、編寫一對socket程序,要求類似于network echo procotol。Client每隔1秒把自己的IP地址輪流循環(huán)發(fā)送給一個Server.Server接到IP后,在屏幕上打印對方IP;然后把自己的IP發(fā)送回去。Client收到回復(fù)后,在屏幕上打印對方IP。程序一直運(yùn)行,直到用戶退出。各自分類統(tǒng)計接收到的各IP的數(shù)據(jù)包的個數(shù)。注意:Client可以向多個S

26、erver發(fā)送請求,Server也可以接收多個Client請求。注意:輸出信息的美觀,和對錯誤的處理。四、C+題目。1。給定下面的代碼:class Graphpublic:Graph() s_gCount+; virtual Graph() s_gCount;virtual int drawOut() = 0;static int getTotalCount() return s_gCount; protected:int m_x;int m_y;static int s_gCount;回答下列問題:(各5分)1)這個類能否生成實(shí)例,為什么?2)上述代碼中有什么錯誤?3)如果有一個Rectan

27、gle類公共繼承該類,那么s_gCount對Rectangle的成員屬性是什么?4)對Graph及其子類的計數(shù)是否有效,如果無效應(yīng)該采取什么措施?5)請畫出該類的內(nèi)存布局結(jié)構(gòu)示意圖2。給定下面的代碼:class Aint a;class AA : public Aint aa;class X : public virtual Aint x;class Y : public virtual Aint y;class Z : public X, public Y int z;回答下列問題:(各5分)1)請畫出上述5個類的UML類圖2)請畫出A、AA、X、Z的內(nèi)存布局結(jié)構(gòu)示意圖3。給定下面代碼:#i

28、nclude #include typedef struct _AAAint a;AAA, *PAAA;class CAAApublic:CAAA() m_a.a = 0; CAAA(CAAA& in) printf(”CAAA(CAAA& in)n”); CAAA(AAA in) printf(”CAAA(AAA in)n”); CAAA(int in) printf(”CAAA(int in)n”); private:AAA m_a;public:operator PAAA ()return &m_a;void test0(PAAA pa)printf(”test0n”);void tes

29、t1(CAAA ca)printf(”test1n”);void test2(CAAA ca)printf (”test2n”);void main(void)CAAA a;test0 (a);AAA b;test1 (b);int i=0;test2 (i);請回答下列問題:(各5分)1)找出程序中的錯誤2)test0函數(shù)聲明傳入的參數(shù)為PAAA類型,而在main函數(shù)中,實(shí)際傳入的是CAAA類型,這是否是一個錯誤?如果不是,請解釋原因。4?;卮鹣铝袉栴}:1)C+中的struct和class類型有什么區(qū)別?(2分)2)假定一個class名為Test,具有構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、operator

30、 =,那么Test a;Test b=a;分別執(zhí)行的是哪一個函數(shù)?(2分)3)C+程序進(jìn)行鏈接時是否必須鏈接stdc+函數(shù)庫,如果不必須情況下不需要,什么情況下需要?(2分)4)你所熟悉的關(guān)于C+的中英文經(jīng)典書籍都有哪些,它們分別都側(cè)重于什么方面?(5分)五、QT編程。任選2題完成。(各20分)要求:按照綜合編程題目的要求編寫代碼和文檔。1.編寫一個簡單的clock控件, 要求從QWidget繼承, 有一個指針和表盤,指針每12秒轉(zhuǎn)一圈,并且可以用鼠標(biāo)左鍵,起動和停止指針的轉(zhuǎn)動.2.給定一個designer生成的UI文件, 讀取指定名字控件的幾何信息,計算出該控件的面積大小.(用Dom和SAX

31、都可)3.設(shè)計一個程序, 建立個人信息庫,包括:姓名,年齡,性別,住址.建立完之后可以查處特定人的信息,用designer設(shè)計你的界面, 不要求把信息庫存在硬盤上.4.把第三題變成國際化程序, 要求兩種語言中文和英文.需要用qt-linquist等工具.5. 用QSocket實(shí)現(xiàn)兩臺不同機(jī)器間的收發(fā), 收發(fā)要求用戶動態(tài)輸入.提示:以上各題需在qt3.0以上實(shí)現(xiàn),推薦用qt-3.1.1,不限止qt-embedded或qt-desktop.六、MiniGUI編程要求:按照綜合編程題目的要求編寫代碼和文檔。1.裁剪MiniGUI字體庫,使它僅支持英文和繁體中文。(10分)2.描述MiniGUI/MP

32、P的消息機(jī)制(20分)3.使用MPP和MySql,編寫一使用在商場POS機(jī)上的應(yīng)用,要求如下:(50分)1)收銀員帳戶管理:每臺POS機(jī)供若干個收銀員和一個系統(tǒng)管理員使用.收銀員憑密碼登錄POS機(jī),密碼可修改.收銀員只能查看自己的銷售數(shù)據(jù),但不能刪除.系統(tǒng)管理員可以增加刪減收銀員帳戶,查詢銷售記錄.2)收款管理:計算顧客購買商品總金額;計算找零3)顧客會員管理:根據(jù)顧客ID,判斷會員等級及相應(yīng)打折級別.4)屏幕鎖定功能:特定按健觸發(fā)屏幕鎖定,輸入密碼后解鎖七、Kernel & Driver內(nèi)核基礎(chǔ)試題1. 簡答題。(各10分)1.1 Spin Lock 相對于信號量的特點(diǎn);在UP/MP/SMP

33、這些不同環(huán)境下,Spin Lock的不同實(shí)現(xiàn)方法。1.2 簡要說明e2compr壓縮文件系統(tǒng)的壓縮策略;經(jīng)其處理后,上層文件系統(tǒng)(EXT2/3等)是否會受到影響。1.3 比較linux操作系統(tǒng)內(nèi)核態(tài)和用戶態(tài)的搶占性,及兩者之間存在差異的原因。1.4 linux2.2支持的最大進(jìn)程數(shù)是多少,演進(jìn)至2.4后,這一制約是如何克服的。1.5 列舉中斷屏蔽的類型,并簡單比較。1.6 列舉linux所要處理的定時/計數(shù)器(實(shí)際的外圍硬件設(shè)備,不是指軟件定時器),及其用途。2. 問答題。(各20分)2.1 窮舉在用戶態(tài)空間,內(nèi)核消息的獲取方式、差異、以及差異的原因。2.2 解釋linux進(jìn)程調(diào)度中的epoc

34、h概念,該機(jī)制的目的。2.3 描述一個硬件中斷信號發(fā)生,到為其注冊的中斷服務(wù)例程開始執(zhí)行,之間所經(jīng)過的內(nèi)核處理過程。并進(jìn)一步分析,制約linux中斷響應(yīng)時間的因素存在于哪些方面。2.4 比較底半機(jī)制(BH)和Tasklet的特點(diǎn),及運(yùn)行方面的差異。2.5 說明引導(dǎo)過程中initrd.img和linuxrc作用,給出制作initrd.img的偽代碼形式的流程。2.6 在VFS層中如何區(qū)分設(shè)備文件和正規(guī)文件?2.7 內(nèi)核有幾種方式訪問硬件設(shè)備?2.8 內(nèi)核如何訪問iomem?請舉例說明。3. 分析題。3.1 系統(tǒng)時間設(shè)置問題。(10分)同樣采用date命令,目的在于修改系統(tǒng)時間,在不同的系統(tǒng)上卻有

35、不同的現(xiàn)象:假定初始時間(T1)為 03月01日16:00 2003年,期望的修改后時間(T2)為 12月31日00:00 2002年, 在EDK系統(tǒng)中,執(zhí)行命令 #date 123100002002,系統(tǒng)時間立即會變?yōu)門2;但系統(tǒng)重新啟動之后,系統(tǒng)時間仍恢復(fù)為T1的時間區(qū)間: 03月01日16:02 2003年,修改并未保留下來。 在RedHat7.2/8.0中,重復(fù)上述設(shè)置,系統(tǒng)重新啟動之后,時間設(shè)置得到了保留,系統(tǒng)運(yùn)行于T2的時間區(qū)間:12月31日00:02 2002年。請分析 中所表現(xiàn)出的現(xiàn)象是由于什么原因造成的;3.2 在大家相關(guān)于串口的工作中,可能會遇到這樣的問題:(20分)串口在

36、發(fā)送數(shù)據(jù)時,不是連續(xù)且迅速地發(fā)送,而是以一個固定的節(jié)拍(10秒),且每次只發(fā)送等長度的一段數(shù)據(jù),請列舉可能造成這一問題的所有原因;3.3 Oops分析。(50分)以下是一段經(jīng)過符號解析過的Oops信息,我們知道造成這個Oops的直接原因在于對于內(nèi)核函數(shù)_wake_up的調(diào)用過程之中出現(xiàn)了問題;基于上述判斷,請基于已經(jīng)給出的_wake_up相關(guān)源碼和反匯編碼,大致分析問題出現(xiàn)在哪個源碼行,并給出分析結(jié)論;ksymoops信息:ksymoops 2.4.4 on i686 2.2.19-rthal3. Options used-v /usr/src/linux-2.2.19/vmlinux (sp

37、ecified)-k /proc/ksyms (specified)-l /proc/modules (specified)-o /lib/modules/2.2.19-rthal3/ (default)-m /usr/src/linux-2.2.19/System.map (specified)current-tss.cr3 = 07d29000, %cr3 = 07d29000*pde = 00000000Oops: 0000CPU: 0EIP: 0010:Using defaults from ksymoops -t elf32-i386 -a i386eax: 00000014 ebx

38、: c0eabf74 ecx: 00000013 edx: 00000021esi: 00000000 edi: 00000020 ebp: c0eabf6c esp: c0eabf60ds: 0018 es: 0018 ss: 0018Process in.identd (pid: 828, process nr: 6, stackpage=c0eab000)Stack: 00000000 c807ca04 00000021 c0eabf74 c807be21 c0eabfb0 c807bf74c807c94000000000 00000000 00000000 c803fb60 c807e

39、000 00000e20 2b124c280000027c0010a000 c807c900 00000000 0000f944 bffff944 c803d2ec 0000000000000000Call Trace: Code: 8b 02 85 45 fc 74 1b 85 ff 74 10 83 7a 44 00 74 0a 85 f6 75EIP; c01110c1 =Trace; c807ca04 Trace; c807be21 Trace; c807bf74 Trace; c807c940 Trace; c803fb60 Trace; c807e000 Trace; c807c9

40、00 Trace; c803d2ec Trace; c803c0a0 Code; c01110c1 00000000 :Code; c01110c1 =0: 8b 02 movl (%edx),%eax =Code; c01110c3 2: 85 45 fc testl %eax,0xfffffffc(%ebp)Code; c01110c6 5: 74 1b je 22 c01110e3Code; c01110c8 7: 85 ff testl %edi,%ediCode; c01110ca 9: 74 10 je 1b c01110dcCode; c01110cc b: 83 7a 44 0

41、0 cmpl $00,044(%edx)Code; c01110d0 f: 74 0a je 1b c01110dcCode; c01110d2 11: 85 f6 testl %esi,%esiCode; c01110d4 13: 75 00 jne 15 c01110d6Unable to handle kernel paging request at virtual address 66fe4603current-tss.cr3 = 00e94000, %cr3 = 00e94000*pde = 00000000Oops: 0000CPU: 0EIP: 0010:EFLAGS: 0001

42、0a83Warning (Oops_read): Code line not seen, dumping what data is availableEIP; c01113e6 =1 warning issued. Results may not be reliable.1. _wake_up的源碼:void _wake_up(struct wait_queue *q, unsigned int mode)struct task_struct *p, *best_exclusive;struct wait_queue *head, *next;unsigned int do_exclusive

43、;if (!q)goto out;/* this is safe to be done before the check because it* means no deference, just pointer operations.*/head = WAIT_QUEUE_HEAD(q);read_lock(&waitqueue_lock);next = *q;if (!next)goto out_unlock;best_exclusive = 0;do_exclusive = mode & TASK_EXCLUSIVE;while (next != head) p = next-task;next = next-next;if (p-state & mode) if (do_exclusive & p-task_exclusive) if (best_exclusive = NULL)best_exclusive = p;else wake_up_process(p);if (best_ex

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論