linux筆試題參考答案(4)

linux筆試題參考答案(4)

(部分題目還沒找到答案,改天在貼出)

1. 嵌入式linux和wince操作系統的特點和特性?

2. 嵌入式linux中tty設備驅動的體系結構?

3. 嵌入式設備,爲加快啓動速度,可以做哪些方面的優化?

4. USB設備的枚舉過程?

5. PSRAM、SDRAM、DDR、DDR2的時序特性?

6. I2C觸摸屏芯片與CPU的數據傳輸流程?畫出相關圖例?(這題目記得不是太清楚了,大概是考查I2C設備驅動的數據傳輸過程)


12.Linux有內核級線程麼。
答:線程通常被定義爲一個進程中代碼的不同執行路線。從實現方式上劃分,線程有兩
種類型:“用戶級線程”和“內核級線程”。用戶線程指不需要內核支持而在用戶程序
中實現的線程,其不依賴於操作系統核心,應用進程利用線程庫提供創建、同步、調度
和管理線程的函數來控制用戶線程。這種線程甚至在象DOS 這樣的操作系統中也可實現
,但線程的調度需要用戶程序完成,這有些類似Windows3.x 的協作式多任務。另外一
種則需要內核的參與,由內核完成線程的調度。其依賴於操作系統核心,由內核的內部
需求進行創建和撤銷,這兩種模型各有其好處和缺點。用戶線程不需要額外的內核開支
,並且用戶態線程的實現方式可以被定製或修改以適應特殊應用的要求,但是當一個線
程因I/O 而處於等待狀態時,整個進程就會被調度程序切換爲等待狀態,其他線程得不
到運行的機會;而內核線程則沒有各個限制,有利於發揮多處理器的併發優勢,但卻佔
用了更多的系統開支。
Windows NT和OS/2支持內核線程。Linux 支持內核級的多線程
14.使用線程是如何防止出現大的波峯。
答:意思是如何防止同時產生大量的線程,方法是使用線程池,線程池具有可以同時提
高調度效率和限制資源使用的好處,線程池中的線程達到最大數時,其他線程就會排隊
等候

22.TCP/IP建立連接的過程?(3-way shake)
答:在TCP/IP協議中,TCP協議提供可靠的連接服務,採用三次握手建立一個連接。
  第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀
態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個
SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
  第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1)
,此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
23.ICMP是什麼協議,處於哪一層?
答:Internet控制報文協議,處於網絡層
27.IP組播有那些好處?
答:Internet上產生的許多新的應用,特別是高帶寬的多媒體應用,帶來了帶寬的急劇
消耗和網絡擁擠問題。組播是一種允許一個或多個發送者(組播源)發送單一的數據包
到多個接收者(一次的,同時的)的網絡技術。組播可以大大的節省網絡帶寬,因爲無
論有多少個目標地址,在整個網絡的任何一條鏈路上只傳送單一的數據包。所以說組播
技術的核心就是針對如何節約網絡資源的前提下保證服務質量。

 

Embedded Software Design Engineer
1 讀程序段,回答問題
int main(int argc,char *argv[])
{
int c=9,d=0;
c=c++%5;
d=c;
printf("d=%d\n",d);
return 0;
}
a) 寫出程序輸出
b) 在一個可移植的系統中這種表達式是否存在風險?why?
#include "stdio.h"
int a=0;
int b;
static char c;
int main(int argc,char *argv[])
{
char d=4;
static short e;
a++;
b=100;
c=(char)++a;
e=(++d)++;
printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);
return 0;
}
a) 寫出程序輸出
b) 編譯器如果安排各個變量(a,b,c,d)在內存中的佈局(eg. stack,heap,data section,bsssection),最好用圖形方式描述。
2 中斷是嵌入式系統中重要的組成部分,這導致了許多編譯開發商提供一種擴展:讓標準C支持中斷,產生了一個新的關鍵字__interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一箇中斷服務子程序(ISR),請評論以下這段代碼。
__interrupt double compute_area(double radius)
{
double area = PI * radius *radius;
printf("nArea = %f", area);
return area;
}
3 C/C++基礎知識問題
a) 關鍵字volatile在編譯時有什麼含義?並給出三個不同使用場景的例子(可以僞代碼或者文字描述)。
b) C語言中static關鍵字的具體作用有哪些?
c) 請問下面三種變量聲明有何區別?請給出具體含義
int const *p;
int* const p;
int const* const p;
4 嵌入式系統相關問題
a) 對於整形變量A=0x12345678,請畫出在little endian及big endian的方式下在內存中是如何存儲的。
b) 在ARM系統中,函數調用的時候,參數是通過哪種方式傳遞的?
c) 中斷(interrupt,如鍵盤中斷)與異常(exception,如除零異常)有何區別?
5 設週期性任務P1,P2,P3的週期爲T1,T2,T3分別爲100,150,400;執行時間分別爲20,40,100。請設計一種調度算法進行任務調度,滿足任務執行週期及任務週期。
6 優先級反轉問題在嵌入式系統中是一中嚴重的問題,必須給與足夠重視。
a) 首先請解釋優先級反轉問題
b) 很多RTOS提供優先級繼承策略(Priorityinheritance)和優先級天花板策略(Priorityceilings)用來解決優先級反轉問題,請討論這兩種策略。
參考答案:
1 5 //我感覺答案應該是4,但標準答案給的是5...
存在風險,因爲c=c++%5;這個表達式對c有兩次修改,行爲未定義,c的值不確定
int a=0; // data section
int b; 
  //data section
static char c; // BSS
int main(int argc,char *argv[])
{
 
  char d=4;        // stack
 
  static short e;   //BSS
 
  a++;
 
  b=100;
 
  c=(char)++a;
 
  e=(++d)++;
 
  printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e);
 
  return 0;
}
a=2,b=100,c=2,d=6,e=5
2 a)ISR不能返回一個值;
b)ISR不能傳遞參數;
c)浮點一般都是不可重入的;
d)printf函數有重入和性能上的問題。
3 a) 用volatile關鍵字定義變量,相當於告訴編譯器,這個變量的值會隨時發生變化,每次使用時都需要去內存裏
重新讀取它的值,並不要隨意針對它作優化。
建議使用volatile變量的場所:
(1) 並行設備的硬件寄存器
(2) 一箇中斷服務子程序中會訪問到的非自動變量(全局變量)
(3) 多線程應用中被幾個任務共享的變量
b) 在函數體,一個被聲明爲靜態的變量在這一函數被調用過程中維持其值不變。
 
   在模塊內(但在函數體外),一個被聲明爲靜態的變量可以被模塊內所用函數訪問,但不能被模塊外其它函數
訪問。它是一個本地的全局變量。
 
   在模塊內,一個被聲明爲靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的
模塊的本地範圍內使用。
 
   static全局變量與普通的全局變量有什麼區別:static全局變量只初使化一次,防止在其他文件單元中被引用;
 
   static局部變量和普通局部變量有什麼區別:static局部變量只被初始化一次,下一次依據上一次結果值;
 
   static函數與普通函數有什麼區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝
c) 一個指向常整型數的指針
 
   一個指向整型數的常指針
 
   一個指向常整型數的常指針
4
a) 0x12345678
little endian 
      big endian 剛好反過來
高地址--〉0x12 
    低地址--〉0x12
 
           0x34                0x34
 
           0x56                0x56
低地址--〉0x78 
    高地址--〉0x78
b)參數4的通過壓棧方式傳遞
c) 
 異常:在產生時必須考慮與處理器的時鐘同步,實踐上,異常也稱爲同步中斷。在處理器執行到由於編程失誤而導致的錯誤指令時,或者在執行期間出現特殊情況(如缺頁),必須靠內核處理的時候,處理器就會產生一個異常。
所謂中斷應該是指外部硬件產生的一個電信號,從cpu的中斷引腳進入,打斷cpu當前的運行;
所謂異常,是指軟件運行中發生了一些必須作出處理的事件,cpu自動產生一個陷入來打斷當前運行,轉入異常處理流程。
異步與同步的區別`
5
6 高優先級任務需要等待低優先級任務釋放資源,而低優先級任務又正在等待中等優先級任務的現象叫做優先級反轉
優先級繼承策略(Priorityinheritance):繼承現有被阻塞任務的最高優先級作爲其優先級,任務退出臨界區,恢
復初始優先級。
優先級天花板策略(Priorityceilings):控制訪問臨界資源的信號量的優先級天花板。
優先級繼承策略對任務執行流程的影響相對教小,因爲只有當高優先級任務申請已被低優先級任務佔有的臨界資源
這一事實發生時,才擡升低優先級任務的優先級。
 讀程序段,回答問題
 
    int  main(int  argc,char  *argv[])
 
    {
 
        int  c=9,d=0;
 
        c=c++%5;
 
        d=c;
 
        printf("d=%d\n",d);
 
        return  0;
 
    }
 
    a)  寫出程序輸出
 
    5
 
    b)  在一個可移植的系統中這種表達式是否存在風險?why?
 
    #include  "stdio.h"
 
    int  a=0;   
 
    int 

發佈了33 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章