이렇게 하면 $ cat ssd/file1 > hdd/file1
SSD에서 읽는 것이 HDD에 쓰는 것보다 빠릅니다. 고양이가 읽는 데이터는 어떻게 되나요? 고양이에게 속도를 늦추라고 지시하는 입력과 출력 사이의 통신이 있습니까?
답변1
(자체)가 수행하는 작업을 고려하십시오 cat
. 입력에서 메모리의 버퍼(크기는 에 의해 결정됨 cat
)로 읽은 다음 표준 출력에 씁니다. 이것읽다그리고쓰다차단을 수행합니다. 입력 끝에 도달할 때까지 읽기가 중지되고 데이터(필요한 경우)를 기다립니다. 마찬가지로 쓰기가 중지되고 데이터가 기록될 때까지 기다립니다(필요한 경우). 이는 출력과 입력 사이에 일부 통신을 제공합니다. 입력이 출력이 흡수할 수 있는 것보다 더 빠르게 데이터를 제공하는 경우 쓰기가 차단되고 cat
다시 쓸 수 있을 때까지 읽기가 중지됩니다.
운영 체제 캐시는 상황을 약간 복잡하게 만들지만 동작을 크게 바꾸지는 않습니다. 특히 쓰기의 경우 운영 체제는 대상이 데이터를 저장할 때까지 기다리지 않고 쓴 데이터를 캐시에 저장하고 나중에 플러시하는 경우가 많습니다. 관점에서 볼 때, 이를 통해 cat
중지하기 전에 더 많은 데이터를 쓸 수 있습니다(반대쪽에 입력 데이터가 있는 한). cat
그러나 기본 원칙은 변하지 않습니다. 쓰기가 읽기보다 느리면 OS는 결국 쓰기를 차단하기로 결정합니다(예를 들어캐시에 쓰기 대기 중인 데이터가 너무 많거나 대기 시간이 너무 길기 때문입니다.