0. 시작하기전에
- 프로그램, 프로세스, 스레드에 대해서 간략하게 복습해보자.
▶ 프로그램
- 바이너리, 코드이미지, 응용프로그램, application, 실행파일 등의 다양한 형태로 존재한다.
▶ 프로세스
- 현재 실행중인 프로그램으로, 메모리에 적재되어 있으며 프로세스 상태정보(PCB)를 사용하여 처리한다.
▶ 스레드
- 프로세스 내부에 나뉘어져 있는 세부 작업을 가리킨다.
- 리눅스 프로세스는 기본적으로 싱글스레드 형식을 가진다.
- 싱글스레드 프로세스: 기본 프로세스
- 멀티스레드 프로세스: 여러 스레드가 존재하는 프로세스
1. 프로세스 ID
- 각 프로세스에 부여되는 프로세스 고유번호, PID
- PID의 최대값은 32768이다. (2의 15승)
- 부호형(signed) 16비트 정수값을 사용하여 표현한다.
a) 최대 PID를 확인하는 방법
sudo vi /proc/sys/kernel/pid_max
- 위의 시스템파일을 조회해보면 다음과 같이 출력되는 것을 확인할 수 있다.
2. 프로세스 계층
- 일반적으로 프로세스는 기존의 프로세스를 복사해서 새로운 프로세스를 생성한다.
- 새로운 프로세스에는 다른 코드들이 덮어쓰기 되어 사용된다.
- 복사의 대상이 되는 프로세스를 부모(parent)프로세스라고 지칭한다.
- 복사되어 생성된 새로운 프로세스를 자식(child) 프로세스라고 지칭한다.
- 프로세스는 이와 같은 방식으로 새로운 프로세스를 생성하며, 이로인해 프로세스 계층이 형성된다.
- 최초의 프로세스는 운영체제에 의해 만들어지며, pid 1번을 부여받은 이 프로세스를 init 프로세스라고 한다.
- 즉, init 프로세스는 모든 프로세스의 가장 상위 프로세스다.
- 부모의 프로세스 번호를 ppid(parent pid)라고 지칭한다.
a) ppid 확인하기
ps -ef
# -e 옵션: 시스템상의 모든 프로세스에 대한 정보를 출력한다.
# -f 옵션: 다음 목록을 출력한다(UID, PID, PPID, CPU%, STIME, TTY, TIME, CMD)
3. 프로세스와 소유자 관리
- 리눅스는 내부적으로 프로세스의 소유자(사용자, UID)와 그룹(GID)을 매핑시킨다.
- 사용자에게 출력해서 보여줄 때, UID와 사용자 이름 매핑정보를 기반으로 사용자 이름으로 제공한다.
a) 소유자와 소유자 이름 매핑정보 확인하기
# 사용자의 비밀번호를 관리하는 파일, UID와 GID가 함께 매핑되어있다.
sudo vi /etc/passwd
- vi 에디터의 /(슬래시) 기능을 이용하여 찾고싶은 문자열을 검색할 수 있다.
- 위의 빨간색으로 밑줄친 부분이 비밀번호를 표시한 내용이다.
- 그러나 비밀번호가 그대로 출력되는 것이 아니라, 다른 파일에 매핑되어 있다.
- 위의 표는 passwd 파일을 통해서 설정할 수 있는 정보다.
b) 비밀번호 매핑 파일 확인하기
# 사용자의 암호화된 비밀번호와 실제 비밀번호가 매핑되어있는 파일
sudo vi /etc/shadow
- 패스워드가 문자열 그대로 출력되는 것이 아니라, 위의 사진처럼 암호화 되어 표시된다.
- 만약 패스워드가 존재하지 않는다면, 위의 사진에서 보이는바와 같이 *로 표시된다.
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
19. 프로세스 - 프로세스 생성(fork) (0) | 2021.09.15 |
---|---|
18. 프로세스 - 시스템 콜 (0) | 2021.09.15 |
16. 시스템 프로그래밍 - ABI와 표준 (0) | 2021.09.10 |
15. 시스템 프로그래밍 핵심개념 (0) | 2021.09.10 |
14. shell - 소프트링크와 특수파일 (0) | 2021.09.10 |
댓글