华为内部面试题库---(10)
1. 對于linux內核信號量,說法正確的是(多選):(參考:Linux內核設計與實現,第二版,第9章,9.4小節)
A. 如果獲取一個被占用的信號量,任務會睡眠,等待信號量釋放之后,該任務才能重新獲得調度
B. 信號量可以允許任意數量的鎖持有者
C. 信號量保護的代碼可以被搶占
D. 信號量的實現也是與體系架構相關的
答案:A,B,C,D
試題解析:信號量是一個睡眠鎖,在信號量被占用時,企圖獲取該信號量的任務會睡眠,等待信號量被釋放,或者被喚醒,之后再重新獲得調度;
信號量在初始化時,其count可以初始化為大于等于0的任何數值,因此可以允許任意數量的鎖持有者;
信號量獲取后,在釋放之前,并不管搶占,正因為這個原因,在可搶占的內核中,高優先級任務可以搶占獲取信號量的低優先級任務;
在內核中,信號量數據結構如下:
struct semaphore {
?????? spinlock_t????????????? lock;
?????? unsigned int?????????? count;
?????? struct list_head?????? wait_list;
};
自旋鎖保護P/V(對其count加減)操作,而自旋鎖是基于原子操作才能實現,因此信號量是與體系架構相關的。
?
2. 對于內核信號量,對其使用方法,錯誤的是(單選):(參考:Linux內核設計與實現,第二版,第9章,9.4小節)
A. 信號量在使用之前一定要初始化,否則在使用時可能會導致內核崩潰
B. 對信號量的操作,其實就是P/V操作,在linux內核中,對信號量的down()相當于V操作,up()相當于P操作
C. 在使用down_interruptible()函數未獲取信號量時,進入睡眠的任務可以被信號喚醒
D. 如果想在獲取信號量失敗后超時退出,可以使用down_timeout()函數接口
答案:B
試題解析:內核信號量以及內核mutex,在使用之前都需要初始化,內核對信號量的初始化,方法有:
1. ?sema_init(struct semaphore *sem, int val),將count的值初始化為val;
2. init_MUTEX(sem), 將count的值初始化為1,通常用于互斥操作;
3. init_MUTEX_LOCKED(sem), 將count的值初始化為0,通常用于異步事件的同步;
在linux內核中,對信號量的down()相當于P操作,up()相當于V操作
down_interruptible()以及down_timeout()接口函數,可參考內核代碼。
因此選B
?
3. 對于信號量和自旋鎖使用區別,錯誤的是(單選):(參考:Linux內核設計與實現,第二版,第9章,9.4小節)
A. 信號量適合于多進程對資源互斥,競爭失敗就會發生上下文切換,適合進程長時間占用資源;
B. 如果占用資源時間短于線程上下文切換開銷時間,使用自旋鎖
C. 在使用信號量和自旋鎖時,持有信號量或者自旋鎖的代碼可以被高優先級任務搶占
D. 如果需要在中斷上下文中保護臨界區,則只能使用spinlock,不能使用信號量
答案:C
試題解析:信號量特點:
1. linux中的信號量是一種睡眠鎖,當一個任務試圖獲得一個已經被占用的信號量,信號量會將其推進一個等待隊列,然后讓其睡眠。
2. 爭用信號量的進程在等待鎖可用時會睡眠,使用鎖長時間持有的情況;
3. 允許任意數量持有該鎖。
自旋鎖特點:
1. 低開銷加鎖;
2. 短期鎖定;
3. 可用于中斷上下文中加鎖;
4. 只允許一個任務獲取。
自旋鎖用于多核之間的同步,因此需要禁止搶占,否則很容易造成死鎖(如在本地CPU上任務被搶占,在高優先級任務中又獲取了同一個自旋鎖,死鎖)由此得出:C錯誤,獲取自旋鎖的代碼不能被搶占。
?
4. 下面不是解決linux內核態并發機制的是(單選):(參考:Linux內核設計與實現,第二版,第9章)
A. 自旋鎖;
B. 互斥鎖mutex
C. 原子操作
D. 管道
答案:D。
試題解析:管道是一種用戶態進程間通信機制。管道是進程之間的一個單向數據流:一個進程寫入管道的所有數據都由內核定向到另一個進程,另一個進程由此就可以從管道中讀取數據。
?
5. 下面不是內核態和用戶態間通信機制的是(單選):(參考:http://www.ibm.com/developerworks/cn/linux/l-netlink/index.html)
A. Netlink;
B. 消息隊列
C. 系統調用
D. ioctl
答案:B
試題解析:消息隊列是一種用戶態進程間通信機制,不能實現內核態和用戶態間通信;
Netlink,系統調用,ioctl是使用較多的內核態和用戶態間通信機制,其中系統調用只能由用戶態發起。
轉載于:https://www.cnblogs.com/hehehaha/archive/2013/05/20/6332760.html
總結
以上是生活随笔為你收集整理的华为内部面试题库---(10)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 中使用AsyncTask
- 下一篇: 微信不绑定卡怎么收钱