Linux 커 널 큐 - kfifo
5718 단어 데이터 구조 와 알고리즘데이터 구조linuxkernel
리 눅 스 커 널 에는 아름 다운 데이터 구조 가 많 고 대기 열 kfifo 가 그 중의 하나 입 니 다.kfifo 는 커 널 안의 First In First Out 데이터 구조 로 링 순환 대기 열의 데이터 구 조 를 사용 하여 이 루어 집 니 다.이것 은 경계 가 없 는 바이트 흐름 서 비 스 를 제공 합 니 다. 가장 중요 한 것 은 병렬 무 잠 금 프로 그래 밍 기술 을 사용 합 니 다. 즉, 하나의 입 대 스 레 드 와 하나의 출 대 스 레 드 의 상황 에 사용 할 때 두 스 레 드 는 동시에 조작 할 수 있 고 잠 금 행 위 를 하지 않 아 도 kfifo 의 스 레 드 안전 을 보장 할 수 있 습 니 다.
구조 체 kfifo 의 정의
Linux 2.6 버 전 및 이전 커 널 버 전에 서 kfifo 의 정 의 는 다음 과 같 습 니 다.
struct kfifo {
unsigned char *buffer; /* the buffer holding the data */
unsigned int size; /* the size of the allocated buffer */
unsigned int in; /* data is added at offset (in % size) */
unsigned int out; /* data is extracted from off. (out % size) */
spinlock_t *lock; /* protects concurrent modifications */
};
그러나 현재 새로운 커 널 버 전에 서 이 정 의 를 찾 을 수 없습니다. 또한 kfifo 의 정 의 는 숨겨 져 있 습 니 다. 다음은 linux - 3.19.2 리 kfifo. h 파일 에서 kfifo 의 정의 입 니 다.
#define __STRUCT_KFIFO_COMMON(datatype, recsize, ptrtype) \
union { \
struct __kfifo kfifo; \
datatype *type; \
const datatype *const_type; \
char (*rectype)[recsize]; \
ptrtype *ptr; \
ptrtype const *ptr_const; \
}
#define __STRUCT_KFIFO_PTR(type, recsize, ptrtype) \
{ \
__STRUCT_KFIFO_COMMON(type, recsize, ptrtype); \
type buf[0]; \
}
/*
* define compatibility "struct kfifo" for dynamic allocated fifos
*/
struct kfifo __STRUCT_KFIFO_PTR(unsigned char, 0, void);
몇 개의 매크로 정의 변환 을 거 친 후에 kfifo 의 정 의 는 다음 과 같 습 니 다.
struct kfifo {
union{
struct __kfifo kfifo;
unsigned char *type;
const unsigned char *const_type;
char (*rectype)[0];
void *ptr;
void const *ptr_const;
}
unsigned char buf[0];
};
그 중 구조 체kfifo 의 정 의 는 다음 과 같 습 니 다.
struct __kfifo {
unsigned int in;
unsigned int out;
unsigned int mask;
unsigned int esize;
void *data;
};
kfifo 관련 조작
원본 주소 1:https://blog.csdn.net/linyt/article/details/53355355 원문 주소 2:http://blog.csdn.net/zmrlinux/article/details/48601877
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.