커널이 파일 액세스를 위한 동기화 기술을 구현하는 방법

커널이 파일 액세스를 위한 동기화 기술을 구현하는 방법

파일에 액세스할 때 커널이 동기화 메커니즘을 구현한다는 내용을 읽었습니다. 예를 들어, read()다른 프로세스에서 동시에 파일 시스템의 파일을 사용하거나 쓰거나 읽으 려고 하면 커널은 경쟁 조건을 방지합니다.write()

어떻게 구현되나요? 나는 코드를 작성할 때 서로 다른 스레드나 프로세스가 코드의 일부를 동시에 실행하는 것을 방지하는 뮤텍스와 세마포어를 사용했습니다.

이 경우 커널은 여러 프로세스나 스레드가 동일한 파일 설명자를 읽거나 쓰려고 할 때만 잠금 메커니즘을 구현해야 한다고 가정합니다. 이는 언제든지 호출 read()되거나 write()파일 설명자에 적용될 수 있습니다. 이 목표를 달성하는 방법은 무엇입니까?

답변1

Linux 커널의 파일 시스템에 대한 잠금 규칙은 다음과 같습니다.커널 문서에 설명되어 있습니다., 철저하지만 VFS 코드에 아직 익숙하지 않은 경우 이해하기 어려울 수 있습니다.

대부분의 파일 작업은 inode에 대한 잠금을 사용하여 동기화됩니다.i_rwsem. 이 자물쇠는 일반적으로 직접 작동하지 않지만다양한 잠금 기능. inode_lockExt4에서 검색하여 어떻게 사용되는지 확인할 수 있습니다 .ext4/file.c.

일부 작업에는 잠금도 사용됩니다 struct file.f_lock;바라보다llseek예를 들어.

관련 정보