I/O 스케줄러를 배우는 과정에서 Linux 커널의 I/O 스케줄러에 대한 일부 문서를 읽었습니다. 특히 Kyber Scheduler에는 헷갈리는 부분이 있습니다. 아래 링크된 기사에서 (https://lwn.net/Articles/720675/), Kyber Scheduler에는 동기 요청용 큐와 비동기 요청용 큐 두 개가 있습니다. 그 기사에는 이렇게 나와있어요
읽기 요청을 발행하는 프로세스는 일반적으로 요청이 완료되고 데이터를 사용할 수 있을 때까지 계속될 수 없으므로 이러한 요청은 동기식으로 간주됩니다.
동기식 및 비동기식 요청은 다양한 I/O 작업보다는 CPU 및 장치 드라이버에 의존한다고 생각합니다.
이 문제에 대한 의견이 있으십니까?
답변1
이는 "개념적으로 동기화"되거나 "생각하고 있는 것보다 더 높은 추상화 수준에서 동기화"되는 것과 비슷합니다. 프로그램은 어떤 방식으로든 처리하기 위해 데이터를 읽으므로 해당 데이터가 있을 때까지 처리할 수 없습니다. 따라서 읽기는 동기 작업이어야 합니다.
반면, 다른 작업이 데이터를 최종 대상에 쓰는 것과 동일하게 "인식"하는 한 쓰기 요청은 연기될 수 있습니다. 즉, 모든 읽기 작업은 먼저 쓰기 캐시를 확인하여 읽고 싶은 데이터의 수정된 버전이 있는지 확인하고, 그렇다면 캐시에서 해당 버전을 "읽어야" 합니다.