@ Modern OS(UNIX/Linux 등)는 I/O 장치를 크게 세가지로 나눕니다.
// Char(actor) I/O Device
> I/O의 단위가 Byte(charactor)인 장치
.. Ex) 키보드, 마우스
// Block I/O Device
> I/O의 단위가 Block인 장치
.. Ex) 하드디스크
// Network I/O Device
> Network를 제어하는 장치
.. Ex)소켓
@ 왜 위와 같이 3개로 나누었을까요?
// I/O 관리를 어떻게 하는가에 따라서 성능에 굉장한 차이를 만들기 때문입니다.
@ 만약, 어떤 사람이 고가의 스트리밍 서비스를 요청하는데,
// 서비스 제공자가 다른 서비스와 함께 한 큐에 모든 패킷을 같이 보내면
> 당연히 고가의 사용자는 피해를 보게 됩니다. (느려지기 때문에)
.. 그래서, 속도에 민감한 패킷들은 속도에 민감하지 않은 패킷과 나누어 Queue를 만들어야 합니다.
@ 이와 같이 Network은 패킷 스케쥴링을 어떻게 하느냐에 따라서 성능에 영향을 많이 줍니다.
// OS는 이런 것들을 신경 써주어야 하게 되고
> 이는 다른 I/O Device에서 하는 일과는 차이가 크기에 별도의 다른 서브 시스템을 두게 됩니다.
.. 이런 것들을 모아둔 것이 Network System입니다. (related with Quetion)
@ 메모리 계층(Memory Hierarchy)를 생각할 필요도 있습니다.
// 메모리를 필요에 따라 여러가지 종류로 나누어 둠을 의미합니다.
> 이 때 우리가 기억할 점은 CPU 외부에 존재하는 HDD의 정보는 접근 속도가 느리다는 것 입니다.
@ ------------------------------------------> 스케일 차이가 엄청나다
캐시 메인 메모리 디스크
@ 그래서 우리는 캐시에 자주 사용하는 HDD의 정보를 저장해두고 사용하기도 합니다.
// 이는 H/W적으로 구현할 수 있지만, OS적으로도 구현할 수 있습니다.
> HDD의 File의 일부를 main memory에 넣음으로서 구현하는 것이 가능합니다.
@ 결국 그런 디스크 캐시를 제공하느냐, 하지 않느냐는 성능에 있어서 큰 차이를 보이게 됩니다.
// 이렇듯 성능에 민감한 OS 기능 이런 것들이 필요하게 됩니다.
> 이런 것들이 Block I/O Device 위에 존재하게 되고
.. 이러한 것들을 모아 둔 것이 File System입니다. (related with Quetion)