3-1 프로세스와 스레드
- Computer/OS
- 2019. 6. 9. 19:42
1. 프로세스 개요
1-1. 프로세스 개념
프로세스는 '실행 중인 프로그램'이다.
여기서 실행중인 프로그램이란 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태를 말한다. 다시말해, 해당 프로세스가 사용하고 있는 메모리 영역이 존재함을 의미한다.
프로세스는 메모리에 아래와 같은 주소 공간을 갖는 능동적인 개체다.
프로세스 주소 공간의 각 영역
- 실행스택(Stack) : 호출된 프로시저(함수)의 복귀 주소와 지역 변수처럼 일시적인 데이터를 저장하는 영역
- 실행 힙(Heap) : 프로그램 실행 중 시스템 호출을 통해 사용되다가 해지되는 등 자유자재로 사용할 수 있다.
- 데이터(정적 변수) : 프로세스 실행 중에 동적으로 할당받는 영역으로 전역 또는 정적 변수를 저장한다.
- 텍스트(코드) : 프로세서가 실행하는 코드를 저장한다.
1-2. 프로세스의 종류
- 3가지로 구분이 된다.
- 운영체제 프로세스
- 사용자 프로세스
- 병행 프로세스 : 프로세스 여러 개가 동시에 실행되면 병행프로세스라고 부른다. 독립프로세스와 협동 프로세스로 구분된다.
1-3. 프로세스 상태
- 프로세스는 실행과 비실행으로 나눌 수 있다.
- 실행상태 프로세스는 실행, 대기, 준비로 세분화할 수 있다.
- 실행 : 명령어가 실행되는 상태, 즉, 프로세스가 프로세서를 점유한 상태
- 대기 또는 보류 : 프로세서가 이벤트(입출력 종료와 같은 외부 신호)가 일어나기를 기다리는 상태
- 준비 : 프로세스가 프로세서를 할당받으려고 기다리는 상태
- 여기서 중효한 것은 대부분의 프로세스는 준비나 대기(보류) 상태고 어느 한 순간에 한 프로세스만 실행 상태가 된다는 것이다.
1-4. 프로세스의 상태변화
- 운영체제는 작업 스케줄러, 프로세스 스케줄러 같은 프로세서 스케줄러를 이용해 프로세스 상태 변화를 관리한다.
- 실행 프로세스가 자발적으로 프로세서를 반환하기 전에 할당된 시간이 경과하면 준비 상태가 된다.
- 실행프로세스가 프로세서에서 실행을 하다가 입출력 명령이 발생하면 대기(보류) 상태가 된다.
- 대기 프로세스는 보류 이유가 제거되면 준비상태가 되고, 준비 프로세스는 디스패처(Dispatcher)가 프로세서를 할당하면 다시 실행 상태가 된다.
- 실행 -> 준비
운영체제는 특정 프로세서를 계속 독점하는 것을 방지하기 위해 인터럽트 클록(Interrupt Clock) 을 두어 지정 시간 동안만 프로세서를 점유하게 한다.
즉, 특정 프로세스가 일정 시간이 지나도 프로세서를 반환하지 않으면 클록이 인터럽트를 발생시켜 운영체제가 프로세서 제어권을 갖게 한다.
1-5. 프로세스 제어 블록(PCB, Process Control Block)
- 프로세스를 관리하기 위해 유지되는 데이터 블록
- 프로그램 카운터 : 프로세스 실행을 위한 다음 명령의 주소를 표시
- 레지스터 저장 영역 : 인터럽트가 발생하면 프로그램 카운터와 함께 저장되어 다시 실행될 때 원상 복귀할 수 있게 한다.
1-6. 프로세스 교환
- 실행 중인 프로세스가 인터럽트되면 운영체제는 다른 프로세스를 실행상태로 바꾸고 제어를 넘겨준다.
- 이때 프로세서에 있는 레지스터의 내용은 나중에 프로세스가 올바르게 사용될수 있도록 저장해야 한다.
프로세스의 교환은 인터럽트와 트랩, 시스템 호출로 나타낸다.
2. 프로세스 관리
문맥교환
인터럽트는 현재 실행되는 프로세스와 별도로 외부에서 발생되는 여러 종류의 이벤트(예를들면 입출력 동작의 종료)에 의해 발생한다.
트랩은 소프트웨어가 발생시키는 메세지이지만 인터럽트는 하드웨어가 발생시키는 메세지입니다.
트랩은 부적절한 파일 접근이나 현재 실행중인 프로세스에 의해 발생되는 오류나 예외 상황 때문에 발생한다.
인터럽트의에는 대표적으로 입출력 인터럽트, 클록 인터럽트가 있다.
입출력 인터럽트 : 입출력 동작이 발생한 사실을 확인 후 이벤트를 기다리는 프로세스를 준비상태로 바꾸고 실행할 프로세스를 결정한다.
클록 인터럽트 : 현지 실행 중인 프로세스의 할당 시간을 조사하여 실행 중인 프로세스를 준비상태로 바꾸고 다른 프로세스를 디스패치하여 실행 상태로 바꾼다.
프로세스를 다른 프로세스로 교환하려면 이전 프로세스의 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터를 적재해야 하는데, 이런 일련의 과정을 문맥교환(Context Switching) 이라 한다.
예를 들어, 프로세스가 '준비->실행', '실행->준비', '실행->대기' 상태로 변할 때 발생한다.
현대의 운영체제는 스레드(Thread)를 이용하여 문맥교환을 효율적으로 처리한다.
'Computer > OS' 카테고리의 다른 글
1. 컴퓨터 시스템 구성요소 (0) | 2020.07.28 |
---|---|
4. 병행 프로세스와 상호배제 (0) | 2020.02.19 |
3-2 프로세스와 쓰레드 (0) | 2019.06.10 |
2-1 운영체제의 역할과 목적 (0) | 2019.06.09 |
2. 컴퓨터 시스템의 동작 (0) | 2019.06.02 |