우리가에 대한 구체적인 논의하기 전에 pdflush
, kjournald, and
kswapd`을의 첫 번째 정확히 우리가 리눅스 커널의 관점에서 무슨 말을하는지의 내용에 약간의 배경을 얻을 수 있습니다.
GNU / 리눅스 아키텍처
GNU / 리눅스 아키텍처는 2 개의 공간으로 생각할 수 있습니다.
사용자 공간 과 커널 공간 사이에는 GNU C 라이브러리 ( glibc
)가 있습니다. 커널을 사용자 공간 응용 프로그램에 연결하는 시스템 호출 인터페이스를 제공합니다.
커널 공간은 3 단계로 세분화 될 수 있습니다.
- 시스템 호출 인터페이스
- 아키텍처 독립적 인 커널 코드
- 건축 종속 코드
이름에서 알 수 있듯이 시스템 호출 인터페이스glibc
는 커널과 커널 사이에 인터페이스를 제공합니다 . 건축 독립적 인 커널 코드는 같은 VFS (가상 파일 시스템) 및 VMM (가상 메모리 관리)와 같은 논리 단위로 구성되어 있습니다. 건축 종속 코드는 특정 하드웨어 아키텍처 프로세서와 플랫폼 별 코드가있는 구성 요소입니다.
GNU / 리눅스 아키텍처 다이어그램
이 기사의 나머지 부분에서는 커널 공간 내의 VFS 및 VMM 논리 장치에 중점을 둘 것입니다.
GNU / 리눅스 커널의 서브 시스템
VFS 서브 시스템
GNU / 리눅스 커널의 구조에 대한 높은 수준의 개념을 통해 VFS 하위 시스템에 대해 좀 더 심도있게 탐구 할 수 있습니다. 이 구성 요소는 궁극적으로 실제 장치 (HDD / etc.)의 파일 시스템 (ext3 / ext4 / etc.)에 매핑되는 다양한 블록 저장 장치에 대한 액세스를 제공합니다.
VFS의 다이어그램
이 다이어그램은 write()
사용자 프로세스의 프로세스가 VFS를 통과하여 궁극적으로 실제 저장 매체에 기록되는 장치 드라이버로 작동하는 방식을 보여줍니다 . 이것은 우리가 처음 만난 곳 pdflush
입니다. 이것은 더티 데이터 및 메타 데이터 버퍼 블록을 백그라운드의 저장 매체로 플러시하는 데 사용되는 데몬입니다. 다이어그램은 이것을 보여주지 않지만 다른 데몬이 있으며 kjournald
, 옆에 앉아 pdflush
더티 저널 블록을 디스크에 쓰는 비슷한 작업을 수행합니다. 참고 : 저널 블록은 ext4 및 JFS와 같은 파일 시스템이 변경 전에 파일의 디스크 변경 사항을 추적하는 방법입니다.
위의 내용은 이 백서 에서 더 자세히 설명 합니다 .
write()
단계 개요
I / O sybsystem 조작에 대한 간단한 개요를 제공하기 위해 write()
User Space 애플리케이션 이 함수 를 호출 하는 예제를 사용합니다 .
- 프로세스가
write()
시스템 호출을 통해 파일 쓰기를 요청합니다 .
- 커널은 파일에 매핑 된 페이지 캐시를 업데이트합니다.
- pdflush 커널 스레드는 페이지 캐시를 디스크로 플러시합니다.
- 파일 시스템 계층은 각 블록 버퍼를 하나로 모으고
bio struct
( 23 페이지의 1.4.3 절 "블록 계층"참조 ) 쓰기 요청을 블록 장치 계층에 제출합니다.
- 블록 디바이스 계층은 상위 계층에서 요청을 가져오고 I / O 엘리베이터 조작을 수행하고 요청을 I / O 요청 큐에 넣습니다.
- SCSI와 같은 장치 드라이버 또는 기타 장치 특정 드라이버는 쓰기 작업을 처리합니다.
- 디스크 장치 펌웨어는 탐색 헤드, 회전 및 플래터의 섹터로 데이터 전송과 같은 하드웨어 작업을 수행합니다.
VMM 서브 시스템
심층 다이빙을 계속하면서 이제 VMM 하위 시스템을 살펴볼 수 있습니다. 이 구성 요소는 주 메모리 (RAM), 스왑 및 실제 저장 매체 간의 일관성을 유지합니다. 일관성을 유지하기위한 기본 메커니즘은 bdflush
입니다. 메모리 페이지가 더티로 간주되면 저장 매체에있는 데이터와 동기화되어야합니다. 이 데이터를 저장 매체와 동기화하기 위해 데몬 bdflush
과 조정 pdflush
합니다.
VMM의 다이어그램
교환
시스템 메모리가 부족하거나 커널 스왑 타이머가 만료되면 kswapd
데몬은 페이지를 비우려고 시도합니다. 너무 오래 사용 가능한 페이지의 수 위 유지되는 한 free_pages_high
, kswapd
아무것도하지 않는 것입니다. 그러나 사용 가능한 페이지 수가 아래로 떨어지면 kswapd
페이지 교정 프로세스가 시작됩니다. kswapd
재배치 bdflush
할 페이지를 표시 한 후 pdflush
데몬을 통해 저장 매체에 대한 미해결 변경 사항을 동기화하도록주의를 기울 입니다.
참고 문헌 및 추가 자료