🧿

프로세스의 개념, 메모리에서 프로세스는 어떠한 상태이며 어떻게 관리될까?

Created
2021/01/19
Tags
Process
발행
초창기 컴퓨터는 작업을 실행하는 일괄처리 시스템이었고, 사용자 프로그램 또는 task를 실행하는 시분할 시스템이 뒤를 이었다. 개인 컴퓨터의 메일, 워드 프로세서도 한꺼번에 실행해야 하며 심지어 임베디드 같이 multi tasking 을 지원하지 않는다 하더라도 운영체제는 내부적으로 메모리 작업등을 지원해야 한다.
이러한 모든 활동을 프로세스라 한다.
작업(task) 도 동일한 언어로 볼 수 있다.
Process (프로세스) 의 정의
Screen_Shot_2020-07-15_at_20.05.23.png
비공식적으로 프로세스는 실행중인 프로그램이다. 프로세스의 메모리 배치는 여러 섹션으로 구분되며 아래 그림과 같다.
크기 고정
text 섹션: 실행 코드
data: 전역변수
동적으로 크기 변경
heap: 프로그램 실행중 동적으로 할당되는 메모리
stack: 함수를 호출할 때 임시 데이터 저장 장소(함수 매개변수, 복귀 주소 및 지역 변수)
함수가 실행될 때 매개변수, 지역 변수, 복귀 주소등 Activation Record 가 stack 에 push 되고 함수로부터 제어가 돌아온다면 pop 된다. stack 과 heap 이 서로의 방향으로 커지더라도 운영체제는 이 두 공간이 겹치지 않도록 한다.
프로그램(수동적): 명령어의 리스트를 내용으로 가진 디스크에 저장된 파일
프로세스(능동적): 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 능동적인 존재
실행 파일이 메모리에 적재될 때 프로세스라 한다.
프로그램 자체가 프로세스인 것이 아니라, 프로그램이 메모리에 적재될 때 프로세스라 한다.
두 프로세스가 동일한 코드와 연결되어 있어도, 두 개의 별도 실행 순서로 간주한다.
text 섹션이 동등하다 할지라도 data, heap, stack 섹션은 다를 수 있다.
동일한 브라우저를 여러 복사본을 호출할 수 있다.
프로세스가 실행되는 과정에서 많은 프로세스를 생성한다
for example, 자바로 compile 된 코드를 실행시킬 때 jvm 이 실행되고, jvm 안에서 코드가 실행된다.
하나의 프로세스가 다른 프로세스의 실행을 위해서 존쟁하는 경우의 예시가 JVM 이다.
Screen_Shot_2020-07-15_at_20.25.38.png
각 메모리 영역에 할당되는 모습
Process status (프로세스 상태)
Screen_Shot_2020-07-15_at_21.12.52.png
프로세스는 실행 되면서 상태가 변한다.
new: 프로세스가 생성 중이다.
running: 명령어들이 실행되고 있다.
waiting: 프로세스가 어떠한 이벤트(입출력 완료, 신호의 수신)가 일어나기를 기다린다.
ready: 프로세스가 처리기에 할당되기를 기다린다.
terminated: 프로세스의 실행이 종료되었다.
Important!!
오로지 하나의 process 가 CPU 의 하나의 core 에서 실행한다.
다른 모든 process 는 ready 혹은 waiting 상태이다.
그렇다면 process 의 상태는 누가 관리하는가?
어디서 그 상태가 저장되어 있는가? → PCB
Process Control Block (PCB 프로세스 제어 블록)
Screen_Shot_2020-07-15_at_21.45.49.png
프로세스 제어 블록 == 태스크 제어 블록
프로세스 제어 블록(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 상태정보: 프로세스에 할당된 입출력 장치들과 열린 파일의 목록 등을 포함한다.
Screen_Shot_2021-01-20_at_0.45.13.png
in summary: 약간의 회계 데이터와 함께 프로세스를 시작 시키거나 다시 시작시키는 데 필요한 모든 데이터를 위한 저장소의 역할을 한다.
PCB는 LinkedList, queue 로 구성되어 있다.
Threads (스레드)
Thread 는 한번에 하나의 작업만 수행한다. 현대 운영체제는 프로세스 개념을 확장하여 한 프로세스가 다수의 실행 thread 를 가질 수 있도록 허용한다. Multi-tasking 에서 이익을 얻을 수 있는데 여러 thread 가 병렬로 실행될 수 있다.
스레드를 지원하는 시스템에서 PCB는 각 스레드에 관한 정보를 포함하도록 확장된다.
Made with 💕 and Oopy