초창기 컴퓨터는 작업을 실행하는 일괄처리 시스템이었고, 사용자 프로그램 또는 task를 실행하는 시분할 시스템이 뒤를 이었다. 개인 컴퓨터의 메일, 워드 프로세서도 한꺼번에 실행해야 하며 심지어 임베디드 같이 multi tasking 을 지원하지 않는다 하더라도 운영체제는 내부적으로 메모리 작업등을 지원해야 한다.
이러한 모든 활동을 프로세스라 한다.
•
작업(task) 도 동일한 언어로 볼 수 있다.
Process (프로세스) 의 정의
비공식적으로 프로세스는 실행중인 프로그램이다. 프로세스의 메모리 배치는 여러 섹션으로 구분되며 아래 그림과 같다.
•
크기 고정
◦
text 섹션: 실행 코드
◦
data: 전역변수
•
동적으로 크기 변경
◦
heap: 프로그램 실행중 동적으로 할당되는 메모리
◦
stack: 함수를 호출할 때 임시 데이터 저장 장소(함수 매개변수, 복귀 주소 및 지역 변수)
함수가 실행될 때 매개변수, 지역 변수, 복귀 주소등 Activation Record 가 stack 에 push 되고 함수로부터 제어가 돌아온다면 pop 된다. stack 과 heap 이 서로의 방향으로 커지더라도 운영체제는 이 두 공간이 겹치지 않도록 한다.
프로그램(수동적): 명령어의 리스트를 내용으로 가진 디스크에 저장된 파일
프로세스(능동적): 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 능동적인 존재
실행 파일이 메모리에 적재될 때 프로세스라 한다.
프로그램 자체가 프로세스인 것이 아니라, 프로그램이 메모리에 적재될 때 프로세스라 한다.
두 프로세스가 동일한 코드와 연결되어 있어도, 두 개의 별도 실행 순서로 간주한다.
•
text 섹션이 동등하다 할지라도 data, heap, stack 섹션은 다를 수 있다.
◦
동일한 브라우저를 여러 복사본을 호출할 수 있다.
•
프로세스가 실행되는 과정에서 많은 프로세스를 생성한다
for example, 자바로 compile 된 코드를 실행시킬 때 jvm 이 실행되고, jvm 안에서 코드가 실행된다.
하나의 프로세스가 다른 프로세스의 실행을 위해서 존쟁하는 경우의 예시가 JVM 이다.
각 메모리 영역에 할당되는 모습
Process status (프로세스 상태)
프로세스는 실행 되면서 상태가 변한다.
•
new: 프로세스가 생성 중이다.
•
running: 명령어들이 실행되고 있다.
•
waiting: 프로세스가 어떠한 이벤트(입출력 완료, 신호의 수신)가 일어나기를 기다린다.
•
ready: 프로세스가 처리기에 할당되기를 기다린다.
•
terminated: 프로세스의 실행이 종료되었다.
Important!!
오로지 하나의 process 가 CPU 의 하나의 core 에서 실행한다.
다른 모든 process 는 ready 혹은 waiting 상태이다.
그렇다면 process 의 상태는 누가 관리하는가?
어디서 그 상태가 저장되어 있는가? → PCB
Process Control Block (PCB 프로세스 제어 블록)
프로세스 제어 블록 == 태스크 제어 블록
프로세스 제어 블록(PCB)은 특정 프로세스와 연관된 여러 정보를 수록하며, 다음과 같은 것들을 포함한다.
PCB는 약간의 회계 데이터와 함께 process 를 시작시키거나 다시 시작 시키는데 필요한 모든 데이터를 위한 저장소 역할을 한다.
•
Process State: new, ready, running, waiting, halted 가 존재한다. (위 그림에선 halted 가 없었는데?)
•
Program Count: 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
•
CPU Registers: 컴퓨터의 구조에 따라 다양한 수와 유형을 가진다.
◦
accumulator(누산기), index register, stack register, general-purpose registers (범용 레지스터), condition code
◦
Program counter 와 함께 이 상태 정보는, 나중에 프로세스가 다시 스케쥴 될 때 계속 올바르게 실행되도록 하기 위해서 인터럽트 발생시 저장되어야 한다.
•
CPU - 스케쥴링 정보: 우선순위, 스케쥴 큐에 대한 포인터와 다른 스케쥴 매개변수를 포함한다.
◦
현재 실행중인 process 뿐 아니라 다음에 실행해야 하는 process 도 중요하다.
•
메모리 관리 정보: base register, limit register 값 메모리 시스템에 따라 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함한다.
•
회계정보: 이 정보는 CPU 사용 시간과 경과된 실시간, 시간 제한, 계정 번호, job 또는 process 번호 등을 포함한다.
•
I/O 상태정보: 프로세스에 할당된 입출력 장치들과 열린 파일의 목록 등을 포함한다.
in summary: 약간의 회계 데이터와 함께 프로세스를 시작 시키거나 다시 시작시키는 데 필요한 모든 데이터를 위한 저장소의 역할을 한다.
PCB는 LinkedList, queue 로 구성되어 있다.
Threads (스레드)
Thread 는 한번에 하나의 작업만 수행한다. 현대 운영체제는 프로세스 개념을 확장하여 한 프로세스가 다수의 실행 thread 를 가질 수 있도록 허용한다. Multi-tasking 에서 이익을 얻을 수 있는데 여러 thread 가 병렬로 실행될 수 있다.
스레드를 지원하는 시스템에서 PCB는 각 스레드에 관한 정보를 포함하도록 확장된다.