2. 프로세스와 쓰레드
1. 프로세스
프로세스 개요
- 프로세스 : 실행 중인 프로그램
- 프로그램 : 동작을 하지 않는 정적, 수동적 개체
- 프로세스 : 동작을 하는 능동적 개체
- PID (프로세스 아이디) : 같은 한글 파일이라도 여러 개 실행 가능하기 때문에 구분하는 아이디
- 저장장치에선 2mb 인데 프로세스가 되면 메모리 공간은 용량이 더 커짐 (부가적인 내용들 때문에)
- 저장장치에 들어있던 파일 형태의 프로그램이 어떻게 동작이 되는지?
- 운영체제로부터 자원을 할당 받아 동작
- 자원 : CPU, 메모리, 입출력 장치, 파일 등의 자원, 공간 할당
- 동작 : CPU가 프로세스의 명령 실행
- 운영체제로부터 자원을 할당 받아 동작
- 운영체제(프로세스 관리자) 가 처리하는 작업
- 프로세스 생성 및 종료
- 프로세스 실행 위한 스케줄링 작업
- 프로세스 상태 관리
프로세스 구성
(1) 프로세스의 메모리 구조
- 프로그램 실행에 직접적으로 필요한 코드 & 데이터
(2) 프로세스 제어 블록 (Process Control Block : PCB)
- 운영체제가 프로세스를 관리하기 위해 필요한 정보
- PC: 현재 실행 중인 명령어에 바로 다음 명령어의 위치값을 가지고 있음. 다음번에 뭐 처리하면 되는지, 어떤 순서에 어디 처리 중인지의 제어의 흐름 볼 수 있는 것
- 레지스터 : 저장되어있는 상태 값. 그 때 프로세스에 들어있던 값들을 보관했다가 복원해주는 역할(여러 개 번갈아서 실행할 때)
- 각 프로세스마다 존재
- 여러 프로세스가 번갈아 실행되는 경우 PCB에 저장된 정보 활용
프로세스 상태 관리
운영체제에 따라서 더 상세하게 나눠진 상태를 쓰기도 하고 축약된 형태를 쓰기도 하지만 가장 기본적인 형태로는 다섯 가지의 상태가 있다.
(1) 생성 : 처음 작업이 시스템에 주어진 상태
생성 상태에 들어가게 되면
바탕화면에서 아이콘 실행하면 프로세스를 만들어야 하는데, 그 때 프로세스의 상태가 생성 상태가 됨. 제일 먼저 하는 일은 메모리 구조, PCB를 만들어내야함. 처음에 PID 할당 시켜주고, 지금은 생성 상태다 라는 상태를 저장함. 메모리 공간 할당 받아야 함. PCB, 메모리 구조도 준비가 되면 프로세스 상태는 생성이 아니라 준비 상태로 바뀜
(2) 준비 : 실행 준비가 되어 CPU 할당을 기다리는 상태
필요한 정보들은 다 만들어지고, 준비 큐에 이 프로세스가 들어와 있는 상태. 자기 순번이 되어서 CPU만 할당 받게 되면 실행 상태로 들어감
(4) 대기 : 프로세스가 I/O 작업이 끝날 때까지 또는 특정 자원을 할당 받을 때까지 보류되는 상태
프로세스 실행을 하다가 다른 이벤트가 생길 경우. 입출력 작업 걸리면 CPU를 사용하지 못하고 데이터만 읽어옴. CPU를 다른 프로세스에게 양보해주고 대기 상태로 가는 게 효율적으로 작업이 되는 것. 기다리는 상태
(3) 실행 : 프로세스가 처리되는 상태
(5) 종료 : 프로세스가 더 이상 실행되지 않도록 끝난 상태
** 프로세스 상태 변화
생성→준비→실행→종료
- 디스패치 : 특정 프로세스 에다가 CPU를 할당해주는 과정. 준비→실행 단계에서 생김
- 실행→준비 : 실행되고 있는데 우선순위가 높거나, 할당 받은 CPU 다 쓰면 실행→준비 단계로 되돌아감
- 실행→대기 : 실행하다가 입출력, 페이지 변환 등의 내가 필요한 작업을 하다가 입출력이 필요한 이벤트가 생긴다면 알아서 CPU를 내어주고 실행→대기 상태로 들어감
*** 실행→준비 단계와 실행→대기 상태로 갔을 때의 차이 존재
- 대기→준비 : 재개 조건 만족하면 대기에서 준비 큐로 들어가고, 순번이 되면 실행이 됨
- 실행→종료 : 더 이상 실행할 게 없을 때. 근데 치명적인 오류로 처리할 수 없을 때도 종료로 감. 잘 처리 중인데 부모 프로세스가 멈추라고 하면 종료로 갈 수 도 있음.
부모 프로세스와 자식 프로세스
- 프로세스 생성 방법
- 사용자가 프로그램 직접 실행
- 한 프로세스가 다른 프로세스 생성 : 프로세스 생성 시스템 호출 이용
- 부모 프로세스 : 시스템 호출을 하는 프로세스
- 자식 프로세스 : 시스템 호출을 통해 새로 생성된 프로세스
- 프로세스 생성 시스템 호출
- 시스템호출 : 사용자모드 → 커널모드
- UNIX, Linux : fork() : 자식 프로세스는 부모 프로세스의 복제본코드영역, 데이텅 영역 다 복제해옴 자식이
- 다만 부모와는 다르게 PID 값만 달라짐
- UNIX, Linux : exec() : 자식 프로세스는 부모 프로세스와는 다른 프로그램 실행
- Windows : CreateProcess() : 자식 프로세스는 새로운 프로그램으로 생성
- 프로세스 종료 방법
- 프로세스가 모든 처리를 완료 (정상적 종료)
- 부모 프로세스에 의해 자식 프로세스가 강제 종료
- 프로세스 종료 시스템 호출 이용
- 자식 프로세스 생성 시 얻은 자식 PID 이용
- 부모 프로세스가 종료되는 경우 운영체제가 자식 프로세스 종료
2. 쓰레드
프로세스와 쓰레드
- 프로세스 : 하나의 프로그램을 실행하기 위한 기본적인 단위
- 자원 소유의 단위 : 하나의 메모리 구조
- 디스패칭의 단위 : 하나의 제어 흐름
- 프로세스 내에서 다중처리 불가능
- 쓰레드 : 프로세스 내 에서의 다중 처리를 위해 제안된 개념
- 하나의 프로그램을 실행하기 위한 기본적인 단위
- 디스패칭의 단위 (디스패치 : CPU를 할당 받는 것)
- CPU를 할당받으면(디스패칭되면) 처리할 수 있는 위치가 다름(화살표 위치 참고)
- 자원소유의 단위 : 프로세스 가 되고
- 디스패칭의 단위: 쓰레드 가 됨.
- 하나의 프로세스 내에는 하나 이상의 쓰레드 존재
- 프로세스에는 PC가 PCB 안에 있는데 쓰레드 안에 PC가 있음
프로세스 비교
- 쓰레드가 있는 경우 : 디스패칭의 위치를 다 따로따로 잡고 제어를 따로따로 할 수 있도록 됨.
- 쓰레드 : 실행에 필요한 최소한의 정보만 가짐
- PC를 포함한 레지스터 값
- 상태정보
- 스택영역이 각 쓰레드별로 생김(프로세스는 스택이 메모리 구조에 있었음)
- 나머지 정보는 프로세스에 두고 다른 쓰레드와 공유
다중 쓰레드로 구성된 프로세스
- 멀티 CPU 또는 멀티 코어 컴퓨터 시스템
- 다중 쓰레드를 병렬로 처리 가능 : 병렬로 여러 처리 가능해서 효율적
- 처리 속도 별로 쓰레드가 나눠진 경우 : 계산용 , 입력용, 백업용 쓰레드 용도별로 나눠서 효율적 처리 가능
'RECORDING > 💿운영체제' 카테고리의 다른 글
1. 운영체제 소개 (1) | 2024.09.25 |
---|