> php教程 > PHP开发 > Linux 시스템 커널의 장치 매퍼 메커니즘 (1) (3)

Linux 시스템 커널의 장치 매퍼 메커니즘 (1) (3)

黄舟
풀어 주다: 2016-12-23 14:08:03
원래의
1476명이 탐색했습니다.

3. 사용자 공간 명령은 ioctl을 통해 table_load 함수를 호출합니다. 이 함수는 사용자 공간에서 전달된 매개변수를 기반으로 지정된 매핑된 장치와 매핑된 대상 장치의 매핑 테이블을 구축합니다. 이 함수는 먼저 해당 dm_table 및 dm_target 구조를 구축한 다음 dm-table.c에서 dm_table_add_target 함수를 호출하여 사용자가 전달한 매개변수에 따라 이러한 구조를 초기화하고 매개변수에 지정된 대상 유형을 메모리에 대상 장치에 해당하는 구조로 구축한 후 설정된 dm_target 구조를 기반으로 dm_table에 유지되는 B-트리를 업데이트합니다. 위 과정이 완료되면 생성된 dm_table을 매핑된 디바이스의 글로벌 해시 테이블에 해당하는 hash_cell 구조체에 추가합니다.

4. 마지막으로 ioctl을 통해 do_resume 함수를 호출하여 매핑된 장치와 매핑 테이블 간의 바인딩 관계를 설정합니다. 실제로 프로세스는 현재 dm_table 구조 포인터 값을 해당 맵 필드에 할당하는 것입니다. dm_swap_table 함수를 통해 mapped_device를 처리한 다음 현재 상태를 나타내는 mapped_device 필드를 수정합니다.

위의 네 가지 주요 단계를 통해 장치 매퍼는 사용자에게 제공할 수 있는 매핑된 장치 논리 블록 장치를 커널에 생성합니다.

IO 스트림

디바이스 매퍼의 핵심 기능은 타겟이 기술한 매핑 관계와 IO 처리 규칙을 기반으로 논리적 디바이스 매핑된 디바이스의 IO 요청을 해당 타겟 디바이스로 전달하는 것입니다. 운전사. 장치 매퍼는 커널에 있는 블록 수준 IO 하위 시스템의 generic_make_request 및 submit_bio 인터페이스에서 매핑된 장치로 전달되는 모든 블록 읽기 및 쓰기 IO 요청을 처리합니다. IO 요청은 요청 전달을 통해 장치 매퍼의 장치 트리에서 위에서 아래로 처리됩니다. 바이오 요청이 장치 트리의 매핑된 장치 아래로 전달되면 하나 이상의 바이오 클론이 생성되어 하위 대상 장치로 전송됩니다. 그런 다음 장치 트리의 각 수준에서 동일한 프로세스가 반복됩니다. 장치 트리가 충분히 크면 이론적으로 이 전달 프로세스가 무한정 계속될 수 있습니다. 장치 트리의 특정 수준에서 대상 드라이버는 바이오 요청이 종료된 후 상위 매핑된 장치에 바이오 요청이 끝났음을 알리는 이벤트를 보고합니다. 이 프로세스는 해당 이벤트가 최종적으로 업로드될 때까지 각 수준에서 수행됩니다. 루트 매핑된 장치 지금까지 장치 매퍼는 루트 매핑된 장치에 대한 원래의 바이오 요청을 종료하고 전체 IO 요청 프로세스를 종료합니다.

Bio가 디바이스 매퍼의 디바이스 트리에서 레이어별로 전달하면 최종적으로 하나 이상의 리프 대상 노드로 전달되고 종료됩니다. 바이오 요청은 여러 타겟 디바이스(즉, 물리적 공간 세그먼트)에 걸쳐 있을 수 없기 때문에 각 레벨에서 디바이스 매퍼는 사용자가 미리 알려준 매핑된 디바이스의 타겟 매핑 정보를 기반으로 하나 이상의 바이오스를 복제하고 이를 분해한다. bios 분할 후 해당 대상 장치로 전달됩니다. 이러한 복제된 BIOS는 먼저 처리를 위해 매핑된 장치의 해당 대상 드라이버로 전달됩니다. IO 요청은 대상 드라이버에 정의된 IO 처리 규칙에 따라 필터링 및 처리된 다음 완료를 위해 대상 장치에 제출됩니다. 위의 과정은 dm.c 파일의 dm_request 함수에서 완료됩니다. 대상 드라이버는 다음과 같이 이러한 BIOS를 처리할 수 있습니다.

1. 나중에 처리하기 위해 드라이버 내부에 이러한 BIOS를 대기열에 넣습니다.

2. BIOS를 하나 이상의 대상 장치 또는 각 대상의 다른 섹터로 리디렉션합니다.

3. 장치 매퍼에 오류 상태를 반환합니다.

IO 요청은 IO 요청이 완료될 때까지 위에서 설명한 프로세스에 따라 그림 2에 표시된 장치 트리에서 계층별로 처리됩니다.

요약

장치 매퍼는 커널에서 논리적 장치에서 물리적 장치로의 매핑 아키텍처를 제공합니다. 사용자가 사용자 공간에서 매핑 전략을 수립하는 한 그에 따라 처리 세부 사항을 작성할 수 있습니다. IO 요청을 위한 대상 드라이버 플러그인은 LVM과 유사한 논리 볼륨 관리자를 쉽게 구현할 수 있습니다. 장치 매퍼는 ioctl 형식의 외부 인터페이스를 제공합니다. 사용자는 내부 통신을 완료하기 위해 사용자 공간의 장치 매퍼 라이브러리를 사용하여 ioctl 명령을 장치 매퍼의 문자 장치로 보냅니다. 또한 ioctl을 통해 원하는 이벤트 알림 메커니즘을 제공하여 대상 드라이버가 특정 IO 관련 이벤트를 사용자 공간으로 전송할 수 있도록 합니다.

위 내용은 Linux 시스템 커널의 Device Mapper 메커니즘(1)(3)의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿