Chapter 10. System-Level I/O
- 입출력(I/O)은 주 기억장치와 디스크 드라이브, 터미널, 네트워크와 같은 외부 장치 간 데이터를 복사하는 과정이다.
- 입력 작업은 I/O 장치에서 데이터를 메인 메모리로 복사하고, 출력 작업은 메인 메모리에서 어느 장치로 데이터를 복사한다.
- 모든 언어 런타임 시스템은 I/O 수행을 위한 high- level 함수를 제공한다.
- 예를 들어, ANSI C는 printf 및 scanf와 같은 버퍼링된 I/O를 수행하는 표준 I/O 라이브러리를 제공한다. C++ 언어는 << (“put to”) 및 >> (“get from”) 연산자를 오버로딩하여 유사한 기능을 제공한다. L
- inux 시스템에서는 이러한 high- level I/O 함수가 커널에서 제공하는 시스템 수준 Unix I/O 함수를 사용하여 구현된다. 대부분의 경우, high-level I/O 함수는 잘 작동하며 Unix I/O를 직접 사용할 필요가 없다.
- 그렇다면 Unix I/O를 배우는 것이 왜 중요한 것일까?
- Unix I/O를 이해하면 다른 시스템 개념을 이해하는 데 도움이 된다.
- I/O는 시스템 작동에 본질적인 역할을 하므로, 종종 I/O와 다른 시스템 개념 간에 순환 종속성이 발생한다.
- 예를 들어, I/O는 프로세스 생성 및 실행에 중요한 역할을 한다. 반대로, 프로세스 생성이 서로 다른 프로세스에서 파일을 공유하는 방식에 대해 중요한 역할을 한다. 따라서 I/O를 완전히 이해하려면 프로세스를 이해해야 하고, 그 반대도 마찬가지다.
- 또한, 때로는 Unix I/O를 사용하지 않을 수 없다.
- high-level I/O 함수를 사용할 수 없거나 부적절한 경우가 있다.
- 예를 들어, 표준 I/O 라이브러리에는 파일 크기나 파일 생성 시간과 같은 파일 메타데이터에 접근할 수 있는 방법이 없다. 또한, 네트워크 프로그래밍에 사용하기 위해 표준 I/O 라이브러리를 사용하는 것이 위험할 수 있다.
- 이번 챕터에서는 Unix I/O와 표준 I/O의 일반적인 개념을 소개하고, C 프로그램에서 신뢰성 있게 사용하는 방법을 보여 준다. 이번 챕터는 일반적인 소개뿐만 아니라, 네트워크 프로그래밍과 동시성 연구를 위한 견고한 기반을 마련하는 역할도 하게 될 것.
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
[CSAPP] 10.2 File(파일) (1) | 2023.03.18 |
---|---|
[CSAPP] 10.1 Unix I/O (1) | 2023.03.18 |
[CSAPP] 9.9 Dynamic Memory Allocation(동적 메모리 할당) (0) | 2023.03.08 |
[CSAPP] 4.5 Pipelined Y86-64 implementations (0) | 2023.03.01 |
[CSAPP] 4.4 General Principles of Pipelining (0) | 2023.03.01 |