網(wǎng)站建設(shè)是在商標(biāo)哪個(gè)類別16888精品貨源入口
12、并發(fā)和并行的區(qū)別?
最本質(zhì)的區(qū)別就是:并發(fā)是輪流處理多個(gè)任務(wù),并行是同時(shí)處理多個(gè)任務(wù)。
你吃飯吃到一半,電話來了,你一直到吃完了以后才去接,這就說明你不支持并發(fā)也不支持并行。
你吃飯吃到一半,電話來了,你停了下來接了電話,接完后繼續(xù)吃飯,這說明你支持并發(fā)。 (不一定是同時(shí)的)
你吃飯吃到一半,電話來了,你一邊打電話一邊吃飯,這說明你支持并行。
并發(fā)的關(guān)鍵是你有處理多個(gè)任務(wù)的能力,不一定要同時(shí)。
并行的關(guān)鍵是你有同時(shí)處理多個(gè)任務(wù)的能力。
所以我認(rèn)為它們最關(guān)鍵的點(diǎn)就是:是否是『同時(shí)』。
并發(fā)是輪流處理多個(gè)任務(wù),并行是同時(shí)處理多個(gè)任務(wù)
原文鏈接:https://blog.csdn.net/weixin_30363263/article/details/80732156
1、const 含義
只讀
問題:const char* name = “hello word”,是否可以改變name里存放的字符串?
不可以,指針指向常量,內(nèi)容不可變,指針可以變。
const char *p; //*p是const,p可變
const (char *) p;//p是const,*p可變
char* const p; //p是const,*p可變
const char* const p; //p和*p都是const
char const * p;// *p是const,p可變
(char*) const p;//p是const,*p可變
char* const p;// p是const,*p可變
2、C語言中strlen和sizeof的區(qū)別
1.strlen是一個(gè)庫(kù)函數(shù)使用時(shí)需要引用#include<string.h>這個(gè)頭文件,而sizeof是一個(gè)運(yùn)算符號(hào);
2.strlen計(jì)算的是’\0’之前的字符個(gè)數(shù),sizefo計(jì)算的是所占空間內(nèi)存的大小,單位是字節(jié);
3.strlen計(jì)算時(shí)不包含’\0’,而sizeof包含’\0’;
4.strlen遇到’\0’才結(jié)束;
5.sizeof的類型是unsigned int ,是一個(gè)無符號(hào)的整型;
6.strlen只能用char做參數(shù),sizeof可以用類型做參數(shù);
3、ioctl如何確保命令的唯一性?
ioctl 用戶與驅(qū)動(dòng)之間的協(xié)議
前文提到 ioctl 方法第二個(gè)參數(shù) cmd 為用戶與驅(qū)動(dòng)的 “協(xié)議”,理論上可以為任意 int 型數(shù)據(jù),可以為 0、1、2、3……,但是為了確保該 “協(xié)議” 的唯一性,ioctl 命令應(yīng)該使用更科學(xué)嚴(yán)謹(jǐn)?shù)姆椒ㄙx值,在linux中,提供了一種 ioctl 命令的統(tǒng)一格式,將 32 位 int 型數(shù)據(jù)劃分為四個(gè)位段,如下圖所示:
// include/uapi/asm-generic/ioctl.h
#define _IOC(dir,type,nr,size)
(((dir) << _IOC_DIRSHIFT) |
((type) << _IOC_TYPESHIFT) |
((nr) << _IOC_NRSHIFT) |
((size) << _IOC_SIZESHIFT))
dir(direction),ioctl 命令訪問模式(數(shù)據(jù)傳輸方向),占據(jù) 2 bit,可以為 _IOC_NONE、_IOC_READ、_IOC_WRITE、_IOC_READ | _IOC_WRITE,分別指示了四種訪問模式:無數(shù)據(jù)、讀數(shù)據(jù)、寫數(shù)據(jù)、讀寫數(shù)據(jù);
type(device type),設(shè)備類型,占據(jù) 8 bit,在一些文獻(xiàn)中翻譯為 “幻數(shù)” 或者 “魔數(shù)”,可以為任意 char 型字符,例如
‘a(chǎn)’、’b’、’c’ 等等,其主要作用是使 ioctl 命令有唯一的設(shè)備標(biāo)識(shí);
nr(number),命令編號(hào)/序數(shù),占據(jù) 8 bit,可以為任意 unsigned char 型數(shù)據(jù),取值范圍 0~255,如果定義了多個(gè) ioctl 命令,通常從 0 開始編號(hào)遞增;
size,涉及到 ioctl 函數(shù) 第三個(gè)參數(shù) arg ,占據(jù) 13bit 或者 14bit(體系相關(guān),arm 架構(gòu)一般為 14 位),指定了 arg 的數(shù)據(jù)類型及長(zhǎng)度,如果在驅(qū)動(dòng)的 ioctl 實(shí)現(xiàn)中不檢查,通??梢院雎栽搮?shù);
4、copy_from_user 返回值含義
copy_from_user失敗返回沒有被拷貝的字節(jié)數(shù),成功返回0.
5、linux設(shè)備驅(qū)動(dòng)注冊(cè)流程
- 驅(qū)動(dòng)程序入口 module_init (at6600efb_init)
- 模塊初始化 platform_driver_register(&at6600efb_platform_driver);
- 驅(qū)動(dòng)程序注冊(cè) platfrom_driver_register() 是在設(shè)備注冊(cè)時(shí)進(jìn)行綁定的.以USB為例:先插上USB設(shè)備并掛到總線上,然后在安裝USB設(shè)備驅(qū)動(dòng)的過程中,從總線上遍歷各個(gè)設(shè)備,看是否有與驅(qū)動(dòng)相匹配的設(shè)備,如果有,則兩者綁定,就是platfrom_driver_register()
platfrom_device_register() 是在驅(qū)動(dòng)注冊(cè)時(shí)進(jìn)行綁定的.以USB為例:先安裝USB驅(qū)動(dòng)程序,然后當(dāng)USB設(shè)備插入時(shí),就遍歷總線上各個(gè)驅(qū)動(dòng),看兩者是否匹配,如果相配則綁定,這就是platfrom_device_register()
6、platform目錄在哪里?
/sys/bus/platform/drivers
7、問:用宏定義一年有多少秒(忽略閏年)
答:
#define SECONDS_PER_YEAR 60 * 60 * 24 * 365UL //加UL,是為了防止溢出
8、IPC攝像頭含義
internet protocol camera
9、vmalloc 和 kmalloc區(qū)別
.kmalloc分配的頁(yè)在物理地址上是連續(xù)的(虛擬地址自然也是連續(xù)的)
vmalloc只確保頁(yè)在虛擬地址空間內(nèi)是連續(xù)的。它通過非連續(xù)的物理內(nèi)存塊,再“修正”頁(yè)表,把內(nèi)存映射到邏輯地址空間是連續(xù)的區(qū)域內(nèi)。
10、單精度和雙精度
單精度是這樣的格式,1位符號(hào),8位指數(shù),23位小數(shù)。
單精度和雙精度精確的范圍不一樣:單精度,也即float,一般在計(jì)算機(jī)中存儲(chǔ)占用4字節(jié),也32位,有效位數(shù)為7位;
雙精度是1位符號(hào),11位指數(shù),52位小數(shù)。
雙精度(double)在計(jì)算機(jī)中存儲(chǔ)占用8字節(jié),64位,有效位數(shù)為16位。
11、cache作用
Cache可以大大提高CPU訪問主存的速度,中央處理器絕大多數(shù)存取主存儲(chǔ)器的操作能為存取高速緩沖存儲(chǔ)器所代替,能極大緩和中央處理器和主存儲(chǔ)器之間速度不匹配的矛盾。