[Linux] TLPI 책 정리 6 - Chapter 2 : Fundamental Concepts (4)

시온·2023년 6월 19일
0

Linux

목록 보기
6/7
post-thumbnail

Fundamental Concepts

이번 챕터에서는 리눅스 시스템 프로그래밍에 대한 다양한 개념이 소개되어 있다.

File I/O Model

UNIX 시스템의 I/O 모델의 가장 큰 특징 중 하나는 바로 I/O의 보편성이다. 쉽게 말해서, 시스템 상 존재하는 모든 파일과 디바이스를

open();
read();
write();
close();

등의 동일한 시스템 콜 함수로 다룰 수 있다는 점이다.

이러한 시스템 콜 함수를 사용한다면, 프로그램은 모든 종류의 파일을 이용할 수 있게 된다.

File descriptors

I/O 시스템 콜은 파일 디스크립터라는 것으로 열린 파일을 참조하게 된다. 파일 디스크립터는 음이 아닌 정수값을 가진다. (0과 자연수)

파일 디스크립터는 open() 함수의 리턴 값으로 받게 된다.

기본적으로 0, 1, 2의 파일 디스크립터가 고정 값으로 사용되는데, 0은 표준 입력, 1은 표준 출력, 그리고 2는 표준 에러이다.

  • FD 0 : Standard Input
  • FD 1 : Standard Output
  • FD 2 : Standard Error

인터렉티브한 쉘이나 프로그램에서는 이 세 가지 파일 디스크립터는 터미널에 연결되게 된다.

The stdio library

C 프로그램에서 파일 I/O를 사용하기 위해 불러오는 표준 C 라이브러리이다.
stdio 라이브러리에는 다음과 같은 함수들이 포함되어 있다.

fopen();
fclose();
scanf();
printf();
fgets();
fputs();

stdio 라이브러리는 기본적인 I/O 시스템 콜 (open, close, read, write) 위에 얹어져 있다.

Programs

프로그램은 2가지 형태로 존재하게 된다.

  1. 소스코드 (source code)
    사람이 읽을 수 있는 프로그래밍 언어로 되어 있는 코드 그 자체

  2. 바이너리 (binary machine-language instructions)
    컴퓨터만 이해할 수 있는, 실제로 작동가능한 명령어 상태

소스코드가 실행되기 위해서는 두 번째 형태로 변환되어야 한다. 변환되는 과정은 컴파일과 링킹이 있다.

Processes

간단하게 말하면, 프로세스는 현재 실행중인 프로그램의 인스턴스이다.

프로그램이 실행되면, 커널은 프로그램의 코드를 가상 메모리에 올리고, 프로그램 변수를 위한 공간을 할당하고, 다양한 정보들을 저장하고 기록한다.

커널의 시점에서 프로세스는 컴퓨팅 자원을 공유하는 엔티티에 해당한다.

메모리 같은 자원은 한정되어 있기에, 커널은 프로세스의 생애주기 (lifetime)에 맞춰 적절하게 메모리 할당을 조정한다.

Process memory layout

CS에서 꽤나 중요한 내용인 것 같다.

프로세스가 실행 될 때, 메모리 영역의 표시는 다음과 같다.

  • 텍스트 영역 (코드 영역)
    프로그램의 명령어들이 작성된 것
  • 데이터 영역
    프로그램 내 정적 변수 (static variables)이 위치하는 장소
  • 힙 영역
    프로그램이 추가적으로 메모리를 동적으로 할당할 수 있는 장소
  • 스택 영역
    함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 장소
    함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸됨

Daemon processes

데몬 프로세스란 시스템에 의해 생성되고 다루어지는 특별한 목적을 가진 프로세스이다.

  • 오랫동안 지속되는 프로세스이다. 데몬 프로세스는 대부분 시스템 부팅시에 시작되며 시스템 종료시까지 살아있다.
  • 백그라운드에서 실행되며, 입출력과 관련이 없다.

쉽게 요약하자면, 데몬 프로세스란 서비스의 요청에 응답하기 위해 오랫동안 실행중인 백그라운드 프로세스이다.

보통 데몬 프로세스인 경우, 프로세스 이름의 마지막에 데몬을 뜻하는 d가 붙어있다.
예) syslogd, httpd

profile
끊임없이 성장중

0개의 댓글