본문 바로가기

공부/c언어

컴퓨터 입출력 방식

반응형

컴퓨터의 입출력 방식

= 스트림(운영체제에 의해서 만들어지는 소프웨어적인 다리)

 

주요한 스트림 3가지      스트림

1. 실행중인 프로그램 <---------> 콘솔

2. 실행중인 프로그램 <---------> 파일

3. 실행중인 프로그램 <---------> 네트워크 상의 다른 컴퓨터

 

커널 오브젝트(FILE*, stdout, stdin 등등)(== 논리적 파일)

 

프로그램은 커널 오브젝트에 대한 주소를 알고 있음

커널 오브젝트(논리적 파일)에는 장치(물리적 파일)에 대한 정보가 있고 이를 이용하여 장치를 관리 및 운영함

사용자는 커널 오브젝트(논리적 파일)의 주소를 이용하여 쓰거나 읽는 함수를 호출하면 논리적 파일에 정보를 쓰거나 읽는 동작을 OS가 이를 인지하여 장치(물리적 파일)에 읽거나 쓰는 동작을 함

 

쓰기 동작은 1. 커널 오브젝트의 버퍼에 장치로 보낼 정보를 저장

                 2. 버퍼에서 실제 장치로 정보 이동(언제 일어날 지 모름, 컴퓨터가 필요할 때 시행됨)

의 과정을 거침

 

읽기 동작은 1. 장치로부터 커널 오브젝트의 버퍼로 정보를 읽어옴

                     (언제 일어날 지 모름, 컴퓨터가 필요할 때 시행됨)

                 2. 커널 오브젝트의 버퍼에 정보가 있는지 확인

                     1) 있으면 버퍼로부터 정보를 가져옴

                     2) 없으면 장치로부터 정보를 가져와 버퍼에 채우고 버퍼로부터 정보를 가져옴

의 과정을 거침

 

**특이사항

stdin에서 읽는 동작

키보드로부터 입력받은 정보를 커널오브젝트의 버퍼에 저장함

getc, gets함수는 커널오브젝트의 버퍼에서 정보를 읽어들임

커널오브젝트의 버퍼에 정보가 남아있으면 다음에 getc, gets함수를 호출시 키보드에서 새로 정보를 입력받아 커널 오브젝트의 버퍼에 저장하는 것이 아니라 버퍼에 남아있는 정보를 읽어 들임

 

그리고 읽거나 쓰는 동작이 바로 장치(물리적 파일)에 일어나는 것이 아니라 CPU의 효율적인 사용을 위해 버퍼에 정보를 저장하고 있다가 CPU가 작업을 할 수 있을 때 한꺼번에 모인 버퍼에 있는 내용을 쓰거나 읽어옴

 

또한 버퍼는 컴퓨터와 장치 및 서로 다른 장치 간의 속도 차이를 극복하기 위해 사용함

CPU <----> 버스 <-----> 장치와 같이 서로 연결 되는 중간 중간에 버퍼가 사용됨

         버퍼             버퍼

반응형