1. 프로세스
프로세스 (Process)란?
- 실행 중인 프로그램
프로세스 메모리 영역
- 하나의 프로세스는 크게 Code 영역, Data 영역, Stack 영역으로 나뉘어 저장
→ Code 영역 : 코드가 기계어 명령어 형태로 변환되어 저장되는 영역
→ Data 영역 : 전역 변수 등 프로그램이 사용하는 데이터가 저장되는 영역
→ Stack 영역 : 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 지역변수나 매개변수 등의 데이터가 임시로 저장되는 영역
문맥 (Context)
- 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보
문맥의 구성요소
- 프로세스 메모리 영역
- 하드웨어 문맥
→ CPU의 수행 상태를 나타내는 문맥
→ 예) 프로그램 카운터값, 그 외 레지스터값 - 커널 문맥
→ 운영체제가 프로세스를 관리하기 위해 유지하는 자료구조
→ 예) PCB, 커널 스택 (커널 영역의 Stack 영역에 저장되며 각 프로세스 별 커널 스택이 존재)
2. 프로세스 상태 다이어그램
프로세스 상태 (Process State)
- Running : CPU를 할당받아 명령어를 실행 중인 상태
- Ready : CPU를 기다리는 상태 (CPU를 할당받으면 즉시 명령어를 실행 가능)
→ Dispatch : Ready 상태인 프로세스가 Running 상태로 전환되는 것 - Blocked :입출력장치의 작업 등을 기다리는 상태 (CPU를 할당받아도 명령어를 실행 불가능)
- New : 프로세스가 생성 중인 상태
- Terminated : 프로세스가 종료된 상태 (운영체제가 PCB와 메모리 정리 중)
3. PCB
PCB (Process Control Block)란?
- 운영체제가 프로세스를 관리하기 위해 프로세스마다 유지하는 정보를 저장하는 자료구조
→ 커널 영역의 Data 영역에 저장됨
→ 문맥의 일부분
PCB의 구성 요소 (구조체 형식)
- 1. 운영체제가 관리상 사용하는 정보
→ 프로세스 상태, 프로세스 번호
→ 스케줄링 정보, 우선순위 - 2. CPU 수행 관련 하드웨어값
→ 프로그램 카운터값, 그 외 레지스터값 - 3. 메모리 관련
→ 프로세스 메모리 영역의 위치 정보 - 4. 파일 관련
→ 프로세스가 오픈한 파일 정보
4. 문맥 교환
문맥 교환 (Context Switch)이란?
- 하나의 프로세스로부터 다른 프로세스로 CPU 제어권이 이양되는 과정
→ 1. 기존 프로세스의 문맥을 PCB에 백업
→ 2. 새로운 프로세스의 문맥을 PCB로부터 복구 및 실행
모든 인터럽트 발생 시 반드시 문맥 교환이 일어나는 것은 아님
- (1)의 경우 : 인터럽트 또는 시스템 콜 발생
→ CPU 제어권이 운영체제로 넘어와 원래 실행 중이던 프로세스의 업무를 잠시 멈추고 운영체제 커널의 코드를 실행 후 복귀 (사용자 모드 → 커널 모드 → 사용자 모드)
→ 문맥 중 일부를 PCB에 저장하지만 이러한 과정을 문맥 교환이라고 하지는 않음 - (2)의 경우 : Timer 인터럽트 또는 I/O 시스템 콜 발생
→ Timer 인터럽트의 경우 실행 중인 프로세스를 Ready 상태로 만든 후 다른 프로세스에 CPU 제어권을 넘겨줌
→ I/O 시스템 콜의 경우 시간이 오래 소요되므로 해당 프로세스를 Blocked 상태로 만든 후 다른 프로세스에 CPU 제어권을 넘겨줌
→ 그러므로 문맥 교환이 발생 - (1)의 경우보다 (2)의 경우가 오버헤드가 더 큼
5. 스케줄러
스케줄러 (Scheduler)란?
- 어떤 프로세스에 자원을 할당할지를 결정하는 운영체제 커널의 코드
Job Scheduler (장기 스케줄러)
- 시작 프로세스 중 어떤 프로세스를 Ready Queue로 보낼지 결정
- 시분할 시스템에는 보통 장기 스케줄러가 없음 (프로세스는 무조건 Ready 상태가 되기 때문)
CPU Scheduler (단기 스케줄러)
- 어떤 프로세스에 CPU 제어권을 넘길지 결정
- 매우 빨라야 함
Swapper (중기 스케줄러)
- 어떤 프로세스를 메모리에서 디스크로 Swap Out할지 결정
→ Blocked 상태의 프로세스가 곧 0순위 프로세스 - 중기 스케줄러 때문에 프로세스 상태에 Suspended (Stopped) 상태가 추가됨
→ 외부적인 이유로 프로세스의 수행이 정지된 상태
6. 프로세스를 스케줄링하기 위한 큐
운영체제는 프로세스를 스케줄링하기 위해 다양한 큐를 사용
- 커널 영역의 Data 영역에 저장됨
- 큐 헤더가 각 프로세스의 PCB를 연결 리스트 형태로 관리하며 포인터를 사용해 스케줄링
Job Queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
Ready Queue
- Ready 상태 프로세스의 집합
Device Queue
- Blocked 상태 프로세스의 집합
Resource Queue
- 앞서 언급한 큐들은 하드웨어 자원을 기다리는 프로세스들을 줄 세우기 위해 필요
- 이와 같은 큐는 소프트웨어 자원을 기다리는 경우에도 필요 (공유 데이터 등)
- 데이터에 대한 일관성 유지를 위해 공유 데이터는 매 시점 하나의 프로세스만이 접근할 수 있어야 함
- 즉, 공유 데이터에 접근 중인 프로세스가 Ready 상태나 Blocked 상태가 되어도, 작업을 완전히 끝내기 전까진 다른 프로세스가 CPU를 할당받았다 하더라도 접근하지 말고 기다려야 함
7. 스레드
스레드 (Thread, Light Weight Process)란?
- 한 프로세스 내에서 독립적으로 실행되는 흐름의 단위
- 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유
스레드의 구성요소
- 프로그램 카운터
- 레지스터 세트
- 프로세스 메모리 영역 중 Stack 영역
→ 독립적인 함수 호출을 가능하게 함으로써, 독립적인 실행 흐름을 보장
스레드끼리 공유하는 부분 (= Task)
- 운영체제 자원
- 프로세스 메모리 영역 중 Code 영역
- 프로세스 메모리 영역 중 Data 영역
스레드의 장점
- 1. 응답성
- 하나의 스레드가 Blocked 상태가 되어도 동일한 Task 내의 다른 스레드가 Running 상태에서 처리 가능 - 2. 자원 공유
- 여러 프로세스를 병행 실행하는 것보다 메모리를 효율적으로 사용 가능
- 단, 멀티스레드 환경에서는 하나의 스레드에 문제가 생기면 프로세스 전체에 문제가 생길 수 있는 점과 동기화를 고려해야 한다는 단점이 존재 - 3. 경제성
- 프로세스 생성이나 프로세스 간 문맥 교환보다 오버헤드가 적음
- 메모리의 특정 영역을 공유하기 때문
이화여자대학교 반효경 교수님의 운영체제 강의를 정리한 글입니다.
http://www.kocw.net/home/cview.do?cid=3646706b4347ef09
또한 반효경 교수님의 "운영체제와 정보기술의 원리" 책을 참고하였습니다.
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=238716482
'운영체제' 카테고리의 다른 글
6. 프로세스 동기화 (0) | 2024.01.03 |
---|---|
5. CPU 스케줄링 (0) | 2023.12.30 |
4. 프로세스 생성 (0) | 2023.12.27 |
2. 컴퓨터 시스템 구조 & 프로그램 실행 (0) | 2023.12.21 |
1. 운영체제 소개 (2) | 2023.12.20 |