커널은 어떻게 하드 디스크에 I/O 요청을 보냅니까?

커널은 어떻게 하드 디스크에 I/O 요청을 보냅니까?

여러 섹터에 걸쳐 파일이 분산되어 있다고 가정해 보겠습니다. 예를 들어 물리 섹터와 논리 섹터가 모두 512B라고 가정합니다. 사용자 프로세스는 커널에 파일 읽기 요청을 보냅니다. 파일이 하드 드라이브의 3개 분산 섹터를 사용한다고 가정합니다.

1) 하드 드라이브가 모든 섹터를 한 번에 읽고 전체(512*3) 데이터를 커널로 전송합니까?

*하드 디스크는 먼저 3개 섹터를 완전히 읽은 다음 데이터를 코어로 전송합니다. 512 * 3바이트가 HDD에서 코어로 전송됩니다.

2) HDD는 한 번에 여러 섹터를 읽을 수 있습니까? 하지만 이는 하드웨어 관련 문제에 더 가까운 것 같습니다.

답변1

때에 따라 다르지. 최신 Unix 계열 운영 체제의 커널은 I/O 속도를 높이기 위해 상당히 복잡한 코드를 사용하는 경향이 있습니다. 가장 잘 알려진 기능은 캐싱입니다. 과거에 특정 섹터를 읽었더라도 여전히 메모리에 복사본이 남아 있을 수 있으며, 이 경우 하드 디스크에 요청이 전혀 전송되지 않습니다. 다른 일반적인 가속 기능으로는 비순차적 액세스(보류 중인 요청이 많을 때 커널이 검색을 최소화하거나 하드웨어에서 허용하는 병렬 처리를 더 잘 활용하기 위해 다른 순서로 요청을 실행할 수 있음) 및 프리페치(커널은 섹터가 0인 경우 가정함)가 있습니다. 파일 중 5개를 읽었다면 아마도 섹터 6을 읽을 것이며 더 나은 조치가 없으면 캐시로 읽어들일 것입니다.

섹터 0 읽기 요청이 완료되기 전에 섹터 1 읽기 요청을 실행할 수 있는지 여부는 디스크 버스와 디스크의 성능에 따라 다릅니다. 일반적인 대답은 없습니다.

관련 정보