IT/영어 공부노트
[리눅스] 리눅스 개요(프로세스, 커널, 시스템콜) 본문
<그림으로 배우는 리눅스 구조> 책을 읽고 정리한 내용으로,
개인 공부 목적의 포스팅입니다.
1. 프로그램과 프로세스
프로그램
컴퓨터에서 동작하는 관련된 명령 및 데이터를 하나로 묶은 것 (실행파일, 스크립트 소스코드 등)
프로세스
실행되어서 동작 중인 프로그램
컴퓨터를 처음 켜면 커널이 실행되고, 그 외의 모든 프로그램은 커널 이후에 실행된다.
2. 커널이란?
프로세스는 커널을 통해서 간접적으로 장치에 접근한다.
커널은 커널 모드로 동작하면서 다른 프로세스에서 불가능한 장치 제어, 시스템 자원 관리 및 배분 기능을 제공한다.
3. 시스템콜
시스템 콜은 프로세스가 커널에 처리를 요청하는 방법이다.
- 프로세스 생성, 삭제
- 메모리 확보, 해제
- 통신 처리
- 파일 시스템 조작
- 장치 조작
커널에 처리를 요청하기 위해 시스템 콜을 호출하면, CPU에서는 예외 이벤트가 발생한다. 이를 통해 CPU 모드가 사용자 모드에서 커널 모드로 바뀌고, 요청 내용에 따라 커널 처리가 동작한다. 시스템 콜 처리가 끝나면 다시 사용자 모드로 돌아와서 프로세스 동작이 이어진다.
strace
프로세스가 어떤 시스템 콜을 호출하는지 확인하는 명령어
-T 옵션을 이용하여 각종 시스템 콜 처리에 걸린 시간을 마이크로 초 수준으로 정밀하게 측정할 수 있다.
%system 값이 높아 구체적으로 어떤 시스템 콜에 시간이 걸리는지 확인할 때 유용!
sar
시스템 모니터링 명령어로, 시스템에 설치된 논리 CPU가 실행하고 있는 명령 비율을 알 수 있다.
sar -P 0 1 1 (CPU 코어 0이 어떤 종류의 처리를 실행하는지)
=P 0 옵션 : 논리 CPU 0의 데이터를 수집
1 옵션 : 1초마다 수집한다.
마지막 1 옵션 : 한 번만 데이터를 수집한다
위 사진을 보면 모두 % 단위로, 합치면 100%가 되는 구조이다.
- %user + %nice : 사용자 모드에서 프로세스를 실행하는 시간 비율
- %system : 커널이 시스템 콜을 처리한 비율
- %idle : 아무것도 하지 않는 상태 비율
4. 라이브러리
라이브러리는 다수의 프로그램에서 공통으로 사용하는 처리를 라이브러리로 합쳐서 제공하는 기능이다. 효율적으로 프로그램을 개발할 수 있도록 돕는다.
C언어네는 국제 표준으로 정한 표준 라이브러리가 존재한다. 일반적으로 glibc(libc)를 표준 C 라이브러리로 사용한다. C언어로 작성된 대부분의 C 프로그램은 libc를 링크한다.
ldd
프로그램이 어떤 라이브러리를 링크하는지 알 수 있는 명령어이다.
echo 명령어를 살펴보니, 이것 또한 libc를 링크하고 있다.
python3 명령어도 확인해 봤떠니, 이 또한 libc를 링크한다. 이를 통해 파이썬 프로그램을 실행할 때 내부적으로 표준 C라이브러리를 사용하는 것을 알 수 있다.