운영체제 기본/파일과 입출력: 두 판 사이의 차이
디렉터리 탐색 예시를 /home/ldmsys 기준으로 통일 |
BIOS GRUB 부팅 경로 보강과 각론 형식 통일 |
||
| 33번째 줄: | 33번째 줄: | ||
== 버퍼링과 비동기로 기다리는 비용 줄이기 == | == 버퍼링과 비동기로 기다리는 비용 줄이기 == | ||
프로그램이 작은 입출력 요청을 하나씩 보내고 완료를 기다리면 그 스레드의 다음 작업이 지연된다. 기다리는 동안 다른 스레드는 CPU를 사용할 수 있다. 버퍼는 속도가 다른 두 쪽 사이에서 데이터를 잠시 보관한다. 작은 쓰기를 모아 보내면 요청 횟수를 줄이고, 읽은 내용을 캐시에 남기면 같은 데이터를 다시 가져오는 비용을 줄인다. 대신 버퍼가 RAM을 차지하며, 모아서 보내기를 기다리는 동안 개별 데이터의 전달은 늦어질 수 있다. 처리량의 개선과 한 요청의 지연 시간 단축은 항상 같은 방향이 아니다. | |||
비동기 입출력은 요청과 완료 확인을 분리해, 장치가 일하는 동안 프로그램이 다른 일을 하게 한다. 버퍼링과 함께 사용할 수 있지만 서로 같은 개념은 아니다. 비동기로 실행한 작업도 완료 결과를 확인해야 하며, 완료 전까지 사용 중인 버퍼의 수명을 보장해야 한다. 동시에 너무 많은 요청을 쌓으면 대기열과 메모리 사용량이 늘어난다. 읽기 캐시 역시 원본이 다른 경로로 바뀔 수 있다면 갱신을 어떻게 알아낼지 정해야 한다. 재사용의 이득에는 최신성 관리 비용이 따른다. <ref name="source-4">[https://docs.kernel.org/admin-guide/mm/concepts.html 커널 문서: 페이지 캐시].</ref><ref name="source-5">[https://man7.org/linux/man-pages/man7/aio.7.html Linux man-pages: 비동기 입출력].</ref> | 비동기 입출력은 요청과 완료 확인을 분리해, 장치가 일하는 동안 프로그램이 다른 일을 하게 한다. 버퍼링과 함께 사용할 수 있지만 서로 같은 개념은 아니다. 비동기로 실행한 작업도 완료 결과를 확인해야 하며, 완료 전까지 사용 중인 버퍼의 수명을 보장해야 한다. 동시에 너무 많은 요청을 쌓으면 대기열과 메모리 사용량이 늘어난다. 읽기 캐시 역시 원본이 다른 경로로 바뀔 수 있다면 갱신을 어떻게 알아낼지 정해야 한다. 재사용의 이득에는 최신성 관리 비용이 따른다. <ref name="source-4">[https://docs.kernel.org/admin-guide/mm/concepts.html 커널 문서: 페이지 캐시].</ref><ref name="source-5">[https://man7.org/linux/man-pages/man7/aio.7.html Linux man-pages: 비동기 입출력].</ref> | ||