1. 프로세스 개요
1.1 프로세스 개념
폰노이만 구조에 따르면 프로그램 실행은 해당 코드가 메모리에 올라와야 진행됨
즉, 프로그램이 실행되면 프로세스가 됨
- 프로그램 : 저장장치에 저장되어 있는 정적인 상태
- 프로세스 : 실행을 위해 메모리에 올라온 동적인 상태
1.2 프로그램에서 프로세스로의 전환
프로세스 제어 블록(PCB) : 작업 지시서
프로그램이 프로세스가 되었다는 것은 운영체제로부터 프로세스 제어 블록을 받았다는 의미이며, 운영체제 영역에 생성됨
프로세스 종료 시 프로세스 제어 블록 폐기됨
-
프로세스 구분자
-
메모리 관련 정보
-
각종 중간값
1.3 프로세스 상태
활성 상태
- 생성 상태 : 프로그램이 메모리에 올라오고 운영체제로부터 프로세스 제어 블록을 할당받은 상태이다.
- 준비 상태 : 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태이다. 프로세스 제어 블록은 준비 큐에서 기다리며 CPU 스케줄러에 의해 관리된다.
- 실행 상태 : 프로세스가 CPU를 할당받아 실행되는 상태이다. 준비 상태에서 실행 상태로 들어가는 프로세스는 CPU 개수만큼이다. 타임 슬라이스 동안만 작업 가능하며, 시간을 다 사용하면 timeout(PID)가 실행된다. 만약 작업이 완료되면 exit(PID)가 실행되어 프로세스가 정상 종료된다.
- 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때가지 기다리는 상태이다. 입출력이 완료되면 인터럽트가 발생하여 대기 상태에서 준비 상태로 이동한다.
- 완료 상태 : 프로세스가 종료되는 상태이다. 사용했던 데이터를 메모리에서 삭제하고 프로세스 제어 블록을 폐기한다.
휴식상태
프로세스가 작업을 일시적으로 쉬고 있는 상태이다. 사용하던 데이터가 메모리에 그대로 있고 프로세스 제어 블록도 유지되므로 멈춘 지점에서부터 재시작할 수 있다.
보류 상태
프로세스가 메모리에서 잠시 쫓겨난 상태이다.
2. 프로세스 제어 블록과 문맥 교환
2.1 프로세스 제어 블록
프로세스 제어 블록 구성
2.2 문맥 교환
CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업으로, 두 프로세스 제어 블록의 내용이 변경된다.
문맥 교환 절차
실행 상태에 있는 프로세스 P1이 타임아웃되면 P1의 프로세스 제어 블록에 현재까지의 작업 결과가 저장되고 P1은 준비 상태로 쫓겨난다. 준비 상태에 있던 프로세스 P2가 실행 상태로 가면 CPU의 레지스터가 P2의 프로세스 제어 블록 값으로 채워져 다음 작업을 하게 된다.
문맥교환은 타임아웃이나 인터럽트 처리 시 발생한다.
3. 프로세스 연산
3.1 프로세스 구조
- 코드 영역 : 프로그램 본문이 기술된 곳(읽기 전용)
- 데이터 영역 : 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳(읽기/쓰기)
- 스택 영역 : 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳(숨김 영역)
3.2 프로세스 생성과 복사
fork() 시스템 호출
실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수이다. 이때 실행하던 프로세스는 부모 프로세스, 새로 생긴 프로세스는 자식 프로세스로서 부모-자식 관계가 된다.
fork() 시스템 호출의 동작 과정
부모 프로세스 영역과 자식 프로세스 영역과 다른 부분
- 프로세스 구분자(PID)
- 메모리 관련 정보
- 부포 프로세스 구분자(PPID)와 자식 프로세스 구분자(CPID)
fork() 시스템 호출 장점
- 프로세스 생성 속도가 빠르다.
- 추가 작업 없이 자원을 상속할 수 있다.
- 시스템 관리를 효율적으로 할 수 있다.
3.3 프로세스 전환
exec() 시스템 호출
기존의 프로세스를 새로운 프로세스로 전환하는 함수로 기존 프로세스의 구조를 재활용한다.
exec() 시스템 호출의 동작 과정
- 프로세스 구분자(PID, PPID, CPID)를 제외하고 프로세스의 나머지 내용을 새로운 것으로 바꿈
3.4 프로세스 계층 구조
프로세스 계층 구조의 장점
미아 프로세스
프로세스가 종료된 후에도 비정상적으로 남아 있는 프로세스
4. 스레드
스레드
프로세스 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위
프로세스와 스레드의 차이
프로세스는 여러 개의 스레드로 구성되고 프로세스끼리는 약하게 연결되어 있는 반면 스레드끼리는 강하게 연결되어 있음
멀티스레드
프로세스 내 작업을 여러 개의 스레드로 분할하여 작업의 부담을 줄임
멀티태스킹
CPU에 작업을 줄 때 시간을 잘게 나누어 배분(시분할 시스템)
멀티프로세싱
CPU 여러 개 사용하여 여러 개의 스레드를 동시에 처리
병렬 처리에서의 슈퍼스칼라 기법과 동일
CPU 멀티스레드
한 번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법
4.2 멀티스레드
프로세스는 크게 정적인 영역과 동적인 영역으로 구분되는데 하나의 프로세스 내에 여러 개의 스레드를 생성하는 멀티스레드는 자원의 낭비를 막고 효율성을 향상한다.
멀티스레드 장단점
- 장점
- 응답성 향상 : 한 스레드가 입출력으로 인해 작업이 진행되지 않더라도 다른 스레드가 작업을 계속하여 사용자의 작업 요구에 빠른 응답 가능
- 자원 공유 : 한 프로세스 내에서 독립적인 스레드 생성 시 프로세스가 가진 자원을 모든 스레드 공유 가능
- 효율성 향상 : 불필요한 자원 중복 방지
- 다중 CPU 지원 : CPU 사용량이 증가하고 프로세스 처리 시간 단축
- 단점
- 한 스레드에 문제 발생 시 전체 프로세스에 영향을 미침
출처