해결된 질문
작성
·
476
0
이벤트 기반 파일 입/출력 강의에서 예제를 통해 프로세스가 요청한 작업의 순서와 운영체제가 실제로 해당 작업들을 처리하는 순서가 달라질 수 있다는 것을 보여주셨습니다.
저는 이 예제의 결과를 보면서 프로세스에서 요청한 작업들이 커널 레벨의 큐에 순차적으로 삽입된다고 하더라도, 결국 운영체제도 큐에서 꺼낸 작업들을 비동기로 처리한다는 것으로 이해했는데요. 서로 다른 작업들을 비동기로 처리하기 위해서는, 결국 각 작업들이 서로의 완료 여부와는 관계 없이 독립적으로 수행되기 위해 멀티 Threading과 같은 방식을 처리될 것으로 예상됩니다.
궁금한 점은 여기서 생겨났는데요, 이렇게 최종 작업마저 비동기로 처리하게 되면 I/O 작업의 순서가 꼬여 프로세스 입장에서 기대하는 파일의 최종 상태와 실제로 모든 작업을 끝마친 파일의 상태가 달라지는 경우가 발생할 수 있지 않나요?
만약에 발생하지 않는다면, 왜 발생하지 않는지 궁금합니다.
답변 2
0
순서가 중요하지 않게 입/출력을 요구하면 됩니다. 특히 쓰기의 경우 쓰는 위치가 겹치지 않도록 맞춘다면 파일의 앞쪽에서 먼저 쓰기가 완료되고 뒷쪽 쓰기가 늦게 완료된다 해서 문제가 될 것은 없겠습니다. 그러나 읽기는 사정이 다르겠지요. 특히 무조건 파일의 처음부터 순차적으로 읽어야 한다면 비동기 처리는 의도하지 않는 문제가 발생 할 수 있습니다.
결과적으로 순서가 매우 중요한 경우라면 그 순서를 잘 맞추는 것은 응용 프로그램 개발자가 그에 맞춰 개발해야 합니다. 비동기 입/출력이 동기 입/출력에 비해 상대적으로 좋은 성능을 보여준다지만 순서가 중요한 경우라면 굳이 비동기 입/출력을 선택할 이유는 없겠습니다.
0
네, 발생 할 수 있습니다. 만일 무조건 순차적 처리를 원한다면 여러 입출력을 중첩하지 말고 하나의 비동기 입출력 요청에 대한 완료가 확인 될 때 다음 요청을 이어가도록 개발하거나 아예 비동기 입출력을 포기하고 동기 순차 입/출력을 수행하면 됩니다.
답변 감사합니다!
추가적으로, 만일 커널 레벨의 큐에 삽입된 i/o 요청마저 그 순서가 보장되지 않는다면 하나의 파일을 대상으로 하는 i/o 작업들은 무조건 동기로 처리해야되지 않나요? 특히 쓰기 작업이 존재하는 경우는 그 순서가 꼬이면 큰일이 날 것 같습니다.
답변 감사합니다. 큰 배움이 되었습니다.