# 컴파일 후, 터미널에서 실행파일 앞에 strace를 입력한다.strace ./a.out
strace: 리눅스 시스템에서 프로세스와 커널 간의 상호 작용을 추적하는 데 사용되는 도구다. 시스템 호출, 시그널, 프로세스 상태 변화 등을 감시한다.
WOW
운영체제의 핵심 서비스
1) 프로세스 관리
프로세스: 실행 중인 프로그램
CPU는 프로세스들을 조금씩 번갈아 가며 실행한다.
이 후에 배울 것
프로세스 동기화: 여러 프로세스가 동시에 실행되는 환경에서 필요한 것
교착 상태: 프로세스가 꼼짝도 못하고 더이상 실행되지 못하는 상황
2) 자원 접근 및 할당
CPU
한 번에 하나의 프로세스만 실행할 수 있다.
CPU 스케쥴링(어떤 프로세스부터? 얼마나 오래 이용하게 할지?)
메모리: 페이징, 스와핑
입출력장치
3) 파일 시스템 관리
관련된 정보를 파일이라는 단위로 저장 장치에 보관
파일들을 묶어 디렉터리 단위로 저장 장치에 보관
10 프로세스와 스레드
10-1 개요
프로세스 직접 확인하기
포그라운드 프로세스(foreground process)
사용자가 보는 앞에서 실행되는 프로세스
1) 윈도우에서는 .. 작업관리자->프로세스
2) 리눅스에서 ps -ef 명령어
ps: process status
-e(all): 시스템에 존재하는 모든 프로세스
-f(full): UID, PPID, C, TIME, CMD 등 상세한 필드까지 출력
백그라운드 프로세스(background process)
사용자와 상호작용하지 않고 그저 묵묵히 정해진 일만 수행하는 백그라운드 프로세스
1) 윈도우에서는 서비스
2) 유닉스에서는 데몬(daemon)
프로세스 제어 블록
프로세스들은 돌아가면서 한정된 시간만큼만 CPU 이용
이를 위해 사용하는 자료 구조가 프로세스 제어 블록(PCB)이다.
PCB: Process Control Block
프로세스와 관련된 정보를 저장하는 자료 구조
마치 상품에 달린 태그와 같음
커널 영역에 생성됨
PCB에 담기는 정보
1) 프로세스 ID (PID:Process ID)
특정 프로세스를 식별하기 위해 부여하는 고유한 번호
🤔 책과 다르게 고유 번호가 아닌 프로세스 이름이 나오는 상황.
작업관리자를 뒤적여보니 PID는 [자세히]에서 찾을 수 있다.
2) 레지스터 값: 프로세스는 자신의 실행차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원하고 실행 재개
3) 프로세스 상태: 생성상태, 준비상태, 실행상태, 대기 상태, 종료 상태
4) CPU 스케줄링 정보: 프로세스가 언제 어떤 순서로 CPU를 할당받을지에 대한 정보
5) 메모리 관리 정보: 프로세스가 어느 주소에 저장되어 있는지. 페이지 테이블
6) 사용한 파일과 입출력장치 목록
# 위 코드를 cc 소스코드명.c 컴파일 하고# 차례대로 실행하면 아래와 같이 나온다(그림 일부)
./a.out
ps -ef |grep a.out (3번째 컬럼이 PID)cat /proc/PID/status
문맥 교환(context switching) ⭐⭐⭐
1) 기존 프로세스의 문맥을 PCB에 백업하고 새로운 프로세스를 실행하기 위해 문맥을 PCB로부터 복구하여 새로운 프로세스를 실행하는 것
너무 자주 하면 오버헤드 발생
2) 프로세스 A에서 프로세스 B로 실행 순서가 넘어가면?
프로세스 A는 지금까지의 중간 정보를 백업
문맥(context): 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력 장치 등
context를 백업해두면 언제든 해당 프로세스의 실행을 재개할 수 있다.
프로세스 B 문맥 복구
프로세스의 메모리 영역
1) 코드 영역(텍스트 영역)
기계어로 이루어진 명령어가 저장
read-only
정적 할당 영역(크기가 고정된 영역)
2) 데이터 영역
프로그램이 실행되는 동한 유지할 데이터가 저장되는 공간
(프로그램이 실행되는 동안 유지할 데이터)
예) 전역변수(global variable)
정적 할당 영역(크기가 고정된 영역)
3) 힙 영역
프로그래머가 직접 할당할 수 있는 저장 공간
메모리 누수 발생: 프로그래밍 과정에서 힙 영역에 메모리 공간을 할당했다면, 언젠가는 해당 공간을 반환해야 한다. 하지만 반환하지 않는다면 메모리 낭비를 초래한다.
동적 할당 영역(프로세스 실행 과정 중 크기가 변할 수 있는 영역)
메모리가 낮은 주소에서 높은 주소로 할당
4) 스택 영역
데이터를 일시적으로 저장하는 공간
예) 매개 변수, 지역변수
동적 할당 영역
메모리가 높은 주소에서 낮은 주소로 할당
10-2 프로세스 상태와 계층 구조
프로세스 상태
PCB에 기록
1) 생성 상태(new): 곧바로 실행 x, 준비 상태가 되어 CPU 할당을 기다림
2) 준비 상태(ready): 기다리는 상태
자신의 차례가 된다면 실행 상태로 전환되고 dispatch라고 함.
3) 실행 상태(running): 할당된 일정 시간 동안만 cpu 사용 가능. 할당된 시간을 모두 사용하면(타이머 인터럽트 발생) 다시 준비 상태가 됨. 실행 도중 임출력 장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 됨.
4) 대기 상태(blocked): 일반적으로 프로세스 실행 도중 입출력 장치의 작업(느림)을 기다리는 상태
5) 종료 상태(terminated): 운영체제는 PCB와 프로세스가 사용한 메모리 정리
프로세스 상태 다이어그램
프로세스 계층 구조
프로세스가 프로세스를 낳는 계층적인 구조(트리 구조)로써 프로세스들을 관리
일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID(Parent PID)가 기록되기도 함