Computer Science/컴퓨터 구조

[CSAPP] 10.3 Opening and Closing Files
10.3 Opening and Closing Files #include #include #include int open(char *filename, int flags, mode_t mode); /*Returns: new file descriptor if OK, −1 on error*/ 프로세스는 open 함수를 호출하여 기존 파일을 열거나 새 파일을 생성한다. open 함수는 파일 이름을 파일 디스크립터로 변환하고 디스크립터 번호를 반환한다. 반환된 디스크립터는 프로세스에서 현재 열려 있지 않은 가장 작은 디스크립터 번호이다. flags 인자는 프로세스가 파일에 액세스하는 방식을 나타낸다: O_RDONLY. 읽기 전용 O_WRONLY. 쓰기 전용 O_RDWR. 읽기 및 쓰기 예를 들어, 다음과 같이 존재..

[CSAPP] 10.2 File(파일)
10.2 File(파일) 각 Linux 파일은 시스템에서의 역할을 나타내는 type을 가지고 있다. 일반 파일(regular file)은 임의의 데이터를 포함한다. 응용 프로그램은 종종 텍스트 파일과 이외의 바이너리 파일을 구분한다. 그러나 커널의 입장에서는 텍스트와 바이너리 파일 사이의 차이는 없다. 디렉토리(directory)는 링크(link) 배열로 구성된 파일이며, 각 링크는 파일 이름을 파일로 매핑한다. 각 디렉토리는 최소한 두 개의 항목을 포함한다. "."(점)는 디렉토리 자체를 가리키는 링크이고, ".."(점-점)는 디렉토리 계층 구조에서 부모 디렉토리를 가리킨다. mkdir 명령어로 디렉토리를 생성하고, ls로 내용을 확인하며, rmdir로 삭제할 수 있다. 소켓(socket)은 네트워크를..
[CSAPP] 10.1 Unix I/O
10.1 Unix I/O 리눅스 파일은 B0, B1, ..., Bk, ..., Bm-1과 같이 m바이트의 시퀀스이다. 모든 I/O 장치(네트워크, 디스크, 터미널 등)는 파일로 모델링되며, 모든 입력과 출력은 적절한 파일을 읽고 쓰는 것으로 수행된다. 이러한 파일과 장치 간의 우아한 매핑으로 인해 리눅스 커널은 Unix I/O라고 하는 간단하고 low-level의 응용 프로그램 인터페이스를 내보낼 수 있다. 이 인터페이스를 통해 모든 입력과 출력이 일관되고 균일하게 수행된다. 파일 열기. 응용 프로그램은 커널에 해당 파일을 열 것을 알리고, 커널은 파일을 식별하는 작은 양의 양의 정수인 디스크립터를 반환한다. 커널은 열린 파일에 대한 모든 정보를 추적하며, 응용 프로그램은 디스크립터만 추적한다. 리눅스 ..
[CSAPP] Chapter 10. System-Level I/O
Chapter 10. System-Level I/O 입출력(I/O)은 주 기억장치와 디스크 드라이브, 터미널, 네트워크와 같은 외부 장치 간 데이터를 복사하는 과정이다. 입력 작업은 I/O 장치에서 데이터를 메인 메모리로 복사하고, 출력 작업은 메인 메모리에서 어느 장치로 데이터를 복사한다. 모든 언어 런타임 시스템은 I/O 수행을 위한 high- level 함수를 제공한다. 예를 들어, ANSI C는 printf 및 scanf와 같은 버퍼링된 I/O를 수행하는 표준 I/O 라이브러리를 제공한다. C++ 언어는 > (“get from”) 연산자를 오버로딩하여 유사한 기능을 제공한다. L inux 시스템에서는 이러한 high- level I/O 함수가 커널에서 제공하는 시스템 수준 Unix I/O 함수를 ..

[CSAPP] 9.9 Dynamic Memory Allocation(동적 메모리 할당)
9.9 Dynamic Memory Allocation(동적 메모리 할당) 로우 레벨의 mmap과 munmap 함수를 사용하여 가상 메모리의 영역을 만들고 삭제하는 것이 가능하지만, 동작 중(런타임에) 가상 메모리를 얻고싶을 때는 동적 메모리 할당자(ex. malloc 함수)를 쓰는 것이 더 편리하고 portable(이식성이 좋다)하다. 동적 메모리 할당자(allocator)는 heap으로 알려진 프로세스의 가상 메모리 영역을 유지한다. (아래 그림 참고) 상세 내용은 시스템마다 다르지만 일반성의 손실 없이 힙은 uninitialized data area(초기화되지 않은 데이터 영역)의 끝 부터 시작하여 위쪽(높은 주소)로 증가하는 demand zero 메모리 영역이라 가정한다. 각 프로세스에서 커널은 힙..