![디스크 I/O 읽기 비용과 쓰기 비용](https://rvso.com/image/1288715/%EB%94%94%EC%8A%A4%ED%81%AC%20I%2FO%20%EC%9D%BD%EA%B8%B0%20%EB%B9%84%EC%9A%A9%EA%B3%BC%20%EC%93%B0%EA%B8%B0%20%EB%B9%84%EC%9A%A9%20.png)
디스크에 쓰는 작업은 디스크에서 읽는 작업보다 비용이 더 많이 듭니다. 예를 들어 전체 파일을 읽는 것과 비교하여 1GB의 레코드 파일을 쓰는 것입니다.
답변1
드라이브 수준에서 읽기 섹터 작업은 쓰기 섹터 작업과 거의 같은(또는 조금 더 긴) 시간이 소요됩니다. 읽기 섹터의 경우 명령은 드라이브 인터페이스(예: SATA)를 통해 도착해야 하며, 명령이 디코딩되고, 발행된 검색을 수행하고, 섹터를 찾을 때까지 주소 표시 및 레코드 ID를 스캔하고, 섹터 데이터를 버퍼로 읽고, ECC를 사용하여 섹터를 검증해야 합니다( 오류 수정 코드), 마지막으로 섹터 데이터를 보냅니다. (섹터 데이터가 읽기 헤드에서 인터페이스로 직접 전송될 수 있다는 오해가 널리 퍼져 있습니다. 완전히 거짓입니다. 섹터 데이터는 항상 완전히 버퍼링되며 전체 섹터를 읽은 후에만 항상 최대 인터페이스 속도로 전송됩니다. 미리 읽기가 수행되고 캐시되면 후속 순차 읽기에는 탐색 및 회전 지연이 발생하지 않습니다. 쓰기 섹터의 경우 명령 및 섹터 데이터는 드라이브 인터페이스를 통해 도착해야 하며, 명령이 디코딩되고, 검색되고, 섹터가 발견될 때까지 주소 표시 및 레코드 ID를 스캔하고, ECC로 섹터를 쓰고, 호스트에 완료 알림이 전달되어야 합니다.
OS 또는 파일 시스템 수준에서 새 파일이 생성될 때 쓰기가 더 복잡해집니다. 기존 디스크 파일을 읽거나 다시 쓰려면 데이터 섹터(또는 클러스터)가 있는 위치만 조회하면 됩니다. 새 파일을 쓰거나 파일에 추가하려면 먼저 여유 목록에서 섹터/클러스터를 할당하고 해당 섹터/클러스터를 파일에 할당(디렉터리 항목 업데이트?)한 다음 데이터를 써야 합니다. 디스크 할당 테이블은 일반적으로 파일 시스템 무결성을 유지하기 위해 가능한 한 빨리, 어쩌면 파일 데이터 이전에도 업데이트(즉, 디스크에 기록)됩니다. 파일을 생성하는 동안 많은 디스크 탐색을 발견/들은 적이 있다면 헤드가 할당 테이블과 새 파일 사이를 이동하고 있다고 가정할 수 있습니다.