프로세스
프로세스의 개념
- 프로그램은 저장장치에 저장되어있는 정적인 상태 -> 프로세스는 실행을 위해 메모리에 올라온 동적인상태
즉 프로그램 실행을 위해 메모리에 올라온 동적인 상태를 말한다.
프로세스는 컴퓨터 시스템의 작업 단위로 태스크(Task)라고 한다.
프로세스 제어 블록(PCB)
- 프로세스를 실행시 운영체제가 만드는 작업 지시서
- 프로세스를 처리하는데 필요한 다양한 정보가 들어 있다.
1. 프로세스 구분자
- 메모리에는 여러개의 프로세스가 존재하는데 이를 구별하기 위한 프로세스를 구분하는 프로세스 구분자(PID)가 있다.
2. 메모리 관련정보
- CPU는 실행하려는 프로세스가 어디에 저장되어 있는지 알아야한다.
- 그래서 프로세스 제어블록(PCB)에 프로세스가 메모리의 어디에있는지 나타내는 메모리 위치정보가 들어있다.
- 또한 메모리 보호를 위해 경계 레지스터와 한계 레지스터도 포함되어있다.
3. 각종 중간 값
- 프로세스가 사용했던 중간 값을 저장(저장기능)
- 다음 작업의 위치값인 프로그램 카운터(PC)도 같이 저장 된다.
프로세스와 프로그램의 관계
프로세스 = 프로그램 + 프로세스 제어 블록(PCB)
프로그램 = 프로세스 - 프로세스 제어 블록(PCB)
프로세스의 상태
일괄 작업 시스템
생성 -> 실행 -> 완료
시분할 시스템
생성 -> 준비 -> 실행 -> 완료
프로세스의 네 가지 상태
- 생성 상태 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태, 제어 블록 색성
- 준비 상태 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
- 실행 상태 : 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태(일정 시간만 부여)
-> 만약 일정시간안에 해결 못할 시 준비상태 <-> 실행 상태를 반복한다.
- 완료상태 : 실행 상태의 프로세스가 주어진 시간 안에 작업을 마친 상태(PCB가 사라진 상태)
- 스케줄러 : 준비상태에 있는 프로세스 중 다음 실행할 프로세스 선정
- 디스패치 : 준비상태 -> 실행 상태로 바꾸는 CPU 스케줄러의 작업
- 타임 슬라이스, 타임 퀀텀 : 프로세스에 배당된 작업시간
- 타임 아웃 : 주어진 시간(타임 슬라이스)안에 작업이 끝나지 않아 준비상태로 돌아간 상태
프로세스의 다섯가지 상태
오늘날 운영체제는 효율성을 고려하여 "대기상태"를 추가
- 대기상태 : 입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태
- 효율성을 높이기 위해 프로세스를 실행 상태에 두지 않고 대기 상태로 옮긴다.
휴식상태와 보류상태
활성 상태 : 대부분의 프로세스는 생성, 준비, 실행, 대기, 완료 상태 (5가지 상태)로 운영된다.
휴식 상태 : 프로세스가 작업을 일시적으로 쉬고있는 상태
보류 상태 : 프로세스가 메모리에서 잠시 쫒겨난 상태 (바이러스 오류등)
프로세스 제어 블록과 문맥 교환
프로세스 제어 블록(PCB)
- 프로세스를 실행하는데 필요한 중요한 정보를 보관하는 자료구조로 (TCB : Task Control Block라고도 한다.)
문맥교환 (context switch)
- CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업
문맥교환이 일어나는경우
- 타임 퀀텀이 지나면서 발생, 인터럽트 때 발생
프로세스의 연산
프로세스의 구조
- 코드 영역
프로그램의 본문이 기술된 곳으로 텍스트 영역이라고도 한다.
- 데이터 영역
코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아 놓은곳
- 스택 영역
운영체제가 프로세스를 실행 하기 위해 부수적으로 필요한 데이터를 모아놓은 곳
프로세스의 생성과 복사
fork()
-
개념
실행중인 프로세스를 그대로 복사하는 함수
-
장점
1.프로세스의 생성 속도가 빠르다.
2.추가 작업 없이 자원을 상속할수 있다.
3.시스템 관리를 효율적으로 할수있다.
-
동작과정
-
프로세스 구분자가 바뀐다.
-
부모 자식이라도 자기 자신을 칭하는 고유한 번호가 존재한다.
-
부모 자식이 차지하고 있는 메모리 위치가 다르므로 메모리 관련 정보도 바뀐다.
프로세스의 전환
exex()
-
개념
기존의 프로세스를 새로운 프로세스로 전환 하려는 함수
-
장점
1.이미 만들어진 프로세스의 구조를 재활용
2.재활용을 하면 프로세스 제어 블록, 메모리 영역, 부모 자식 관계를 그대로 사용 가능하여 편리하다.
3.새로운 코드 영역만 가져오면 되기 때문에 운영 체제의 작업이 수월하다.
-
동작 과정
-
기존 코드 지우고 새로운 코드로 변경
-
데이터 영역이 새로운 변수로 채워지고 스택 영역은 리셋
-
각종 레지스터 정보 모두 리셋
프로세스의 계층 구조
장점
고아프로세스
- 프로세스가 종료된 후에도 비정상적으로 남아있는 프로세스
- 좀비 프로세스라고도 부른다.
스레드
운영체제 작업 단위 = 프로세스
CPU작업 단위 = 스레드
CPU내에 작업 요청을 하는 실행 단위 = 스레드
프로세스(운영체제) > 스레드(CPU) : 프로세스가 더 큰개념
프로세스와 스레드의 차이점
프로세스끼리 연결 : 약한연결
스레드끼리연결 : 강한 연결
스레드 관련 용어
- 멀티 스레드 : 프로세스 내 작업을 여러개의 스레드로 분할 -> 작업 부담이 적어진다.
- 멀티 태스킹 : 운영체제가 CPU에 작업을 줄때 시간을 잘게 나누어 배분하는 기법
- 멀티 프로세싱 : CPU를 여러개 사용하여 여러 개의 스레드를 동시에 처리하는 작업환경
- CPU 멀티 스레드 : 파이프라인 기법을 이용하여 동시에 여러스레드를 처리하는 병렬 처리 기법
멀티 스레드
- 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행 하는 과정
장점
- 응답성 향상
한 스레드가 작업을 안 해도 다른 스레드가 작업을 계속하여 빠르게 응답할수있다.
- 자원 공유
한 프로세스 내에 독립적인 스레드를 생성하면 모든 스레드가 공유
- 효율성 향상
자원의 중복 제거
- 다중 CPU 지원
다중 CPU가 멀티 스레드를 동시에 처리하는 것 -> 프로세스 처리 시간이 낮아진다.
단점
모든 스레드가 자원을 공유 하기때문에 하나의 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.
멀티스레드 모델
사용자 스레드 : 라이브러리에 의해 구현된 일반적인 스레드
- 운영체제가 멀티스레드를 지원하지 않을 때 사용
- 관련 라이브러리를 사용하여 구현
- 사용자 프로세스 내에 여러개의 스레드가 존재 하지만 커널의 스레드 하나와 연결된다 : 1 to N 모델이라고도 한다.
장점
- 문맥 교환이 필요없다. -> 부가 작업이 줄어들어 속도가 빠르다.
단점
- 한 프로세스의 타임 슬라이스를 여러 스레드가 공유 하기 때문에 여러개의 CPU를 동시에 사용할수 없다.
- 보안에 취약하다 : 라이브러리에서 보안 부분을 구현해야 하기 때문이다.
커널 스레드 : 커널이 직접 생성하고 관리하는 스레드
- 커널이 멀티 스레드를 지원하는 방식
- 하나의 사용자 스레드가 하나의 커널 스레드와 연결된다 : 1 to 1 모델이라고도 한다.
장점
- 커널 레벨에서 모든 작업을 지원 -> 멀티 CPU를 사용할수있다.
- 하나의 스레드가 대기 상태에 있어도 다른 스레드는 작업을 계속할수있다.
- 보안에 강하고 안정적으로 작동한다.
단점
- 문맥 교환을 할때 오버 헤드 때문에 느리게 작동한다.
멀티레벨 스레드 : 사용자스레드와 커널 스레드를 혼합한 방식
- 하이브리드 스레드 라고도 한다
- 사용자 스레드에서는 커널 스레드의 개수가 사용자 스레드 보다 적기 때문에 멀티 레벨 스레드에서는 커널 스레드의 개수가 사용자 스레드보다 같거나 적다. : M to N 모델이라고도 부른다.
- 사용자 스레드와 커널 스레드의 장단 점을 모두 가지고있다.
장점
- 유연한 작업처리
단점
- 문맥교환시 오버헤드가 있어 사용자 스레드만큼 빠르지 않다.
빠르게 움직여야하는 스레드는 사용자 스레드로 작동하고 안정적으로 움직여야하는 스레드는 커널 스레드로 작동한다.