buf 구조
용도
프로그램과 주변 장치 간의 버퍼링 데이터 전송에 대해 설명합니다.
커널 버퍼 소개
블록 장치의 경우 커널 버퍼는 프로그램과 주변 장치 간의 데이터 전송을 버퍼링하는 데 사용됩니다. 이러한 버퍼는 4096바이트 블록으로 할당됩니다. 언제든지 각 메모리 블록은 장치 드라이버와 커널이 유지 관리하는 두 개의 연결 목록 중 하나의 구성원입니다.
| 목록 | 설명 |
|---|---|
| 사용 가능한 버퍼 큐(avlist) | 사용 가능한 모든 버퍼 목록입니다. 이러한 버퍼에는 장치로 또는 장치에서 전송되기를 기다리는 데이터가 포함되어 있지 않습니다. |
| 사용 중인 버퍼 큐(블리스트) | 장치로 또는 장치에서 전송되기를 기다리는 데이터가 포함된 모든 버퍼의 목록입니다. |
각 버퍼에는 버프 그것을 가리키는 구조입니다. 각 버퍼 헤더는 여러 부분으로 구성됩니다.
- 블록에 대한 정보
- 상태 정보를 표시하는 플래그
- 통화 중 목록 앞으로 및 뒤로 포인터
- 사용 가능한 목록 앞으로 및 뒤로 포인터
장치 드라이버는av_forw및av_back커널이 유지하는 동안 (사용 가능한 블록에 대한) 포인터b_forw및b_back포인터(사용 중인 블록용).
블록 I/O를 위한 buf 구조 변수
그만큼 버프 구조는/usr/include/sys/buf.h 파일에는 다음 필드가 포함됩니다.
| 항목 | 설명 |
|---|---|
| b_flags | 플래그 비트. 이 필드의 값은 다음 값 중 0개 이상을 논리적으로 OR하여 구성됩니다.
|
| b_forw | 앞으로 사용 중인 블록 포인터입니다. |
| b_back | 뒤로 사용 중인 블록 포인터입니다. |
| av_forw | 드라이버 요청 큐의 정방향 포인터입니다. |
| av_back | 드라이버 요청 큐에 대한 역방향 포인터입니다. |
| b_iodone | 누구든지 전화를 걸면 전략 루틴은 I/O 완료 루틴을 가리키도록 이 필드를 설정해야 합니다. 이 루틴은 인티오돈 방해하다 I/O가 완료되었을 때의 레벨입니다. |
| b_dev | 메이저 및 마이너 장치 번호입니다. |
| b_bcount | 데이터 전송에 대한 바이트 수입니다. |
| b_un.b_addr | 데이터 버퍼의 메모리 주소입니다. |
| b_blkno | 장치의 블록 번호입니다. |
| b_resid | 오류 이후 전송되지 않은 데이터의 양입니다. |
| b_event | 이벤트 목록의 앵커입니다. |
| b_xmemd | 교차 메모리 설명자. |