프로세스란 무엇일까?
프로세스란 용어에 대한 정의는 몇 가지 존재한다.
1. 실행 중인 프로그램
2. 처리기(프로세서)에 할당되고 실행될 수 있는 entity
3. 명령어의 순차 실행, 현재 상태, 관련된 시스템 자원들의 집합으로 인해 특징지어지는 활성화 단위(a unit of activity)
Program vs Process
1. 실행 중인 프로그램에 집중하자.
대부분 프로그램이라는 단어에는 익숙하지만, 프로세스라는 단어는 낯설 것이다.
프로그램(Program)이란?
프로그램은 디스크에 저장된 정적인 entity입니다.
특정 작업을 수행하는 일련의 명령어들의 모음이다. 특정 문제를 해결하기 위해 처리 방법과 순서를 기술하여 컴퓨터에 입력되는 일련의 명령문 집합체이다. (출처 : 위키백과)
즉, 프로그램 그 자체는 아무것도 할 수 없는 코드 덩어리인 것이다.
예를 들면, 카카오톡, 인텔리제이, 디스코드 등이 있다. 우리는 이를 프로그램이라 부르지 프로세스라 부르지 않는다.
이제 다시 보자. 그렇다면 프로세스란(Process)란?
프로그램은 실행 가능한 파일이 메모리에 적재 될 때 비로소 프로세스가 된다.
"메모리에 적재되었다"는 말은 프로그램이나 데이터가 주기억장치(RAM)에 올라갔다는 뜻이다.
좀 더 쉽게 설명하면:
- 우리가 어떤 프로그램(예: 크롬, 게임, 워드 등)을 실행하면,
- 그 프로그램의 실행에 필요한 코드나 데이터가 하드디스크(SSD/HDD)에 저장된 상태에서,
- 메인 메모리(RAM)로 복사되어 올라가야 실행할 수 있다.
- 이걸 "메모리에 적재되었다"고 표현합니다.
왜 메모리에 올라가야 하냐면,
CPU(처리기, 프로세서)는 직접 하드디스크에 접근해서 명령을 실행하지 못하고,
메인 메모리에 있는 데이터만 빠르게 읽고 실행할 수 있기 때문이다.
더 쉽게 설명하면:
하드디스크(SSD나 HDD)는 창고,
메모리(RAM)는 작업 테이블,
CPU는 작업하는 사람이라고 생각하면
- 프로그램은 창고에 저장되어 있다가,
- 실제 작업을 하려면 테이블 위(메모리)로 꺼내야 하고,
- 작업하는 사람(CPU)은 테이블 위에 있는 것만 다룰 수 있다.
그래서 프로그램을 실행할 때,
그 프로그램의 코드나 필요한 데이터가 메모리(RAM)로 복사(적재)되고,
그걸 기반으로 CPU가 실행을 시작하는 것이다.
이 내용을 바탕으로
2. 처리기(프로세서)에 할당되고 실행될 수 있는 entity
3. 명령어의 순차 실행, 현재 상태, 관련된 시스템 자원들의 집합으로 인해 특징지어지는 활성화 단위(a unit of activity)
"처리기(프로세서)에 할당되고 실행될 수 있는", "~~ 의 집합으로 인해 특징지어지는 활성화 단위"라는 프로세스의 정의를 이해하는데 도움이 될 수 있을 거 같다.
PCB(Process Control Block)
프로세스 제어 블록은 운영체제가 프로세스에 관해 필요한 모든 정보를 포함하고 있는 자료구조이다.
프로세스 제어 블록은 운영체제에 있어서 가장 중요한 자료구조라고 해도 과언이 아니다.
프로세스 제어 블록의 주된 목적은 다음과 같다.
수행 프로세스를 인터럽트한 후 나중에 그 인터럽트가 발생되지 않은 것처럼 프로세스 수행을 재개할 수 있도록 정보를 유지하는 것.(프로세스가 인터럽트되면, 프로그램 카운터(PC), 문맥 데이터(context data, ex: processor register)가 프로세스 제어 블록에 저장된다.)
이를 바탕으로 프로세스 제어 블록은, 운영체제가 다수의 프로세스를 지원하고 멀티 프로세싱을 제공할 수 있게 해준다.
프로세스 제어 블록 구조

1. 식별자 : 각 프로세스를 다른 모든 프로세스로부터 구별하게 해주는 유일한 식별자 (PID)
2. 상태 : 프로세스가 현재 수행 중이면, 그 프로세스는 Running(수행) 상태이다.
3. 우선순위 : 다른 프로세스들에 대해 상대적인 우선순위 수준
4. 프로그램 카운터 : 프로그램에서 다음에 수행될 명령어의 주소
5. 메모리 포인터 : 프로세스와 연계된 프로그램 코드 및 데이터, 다른 프로세스들과 함께 공유되는 메모리 블록들에 대한 포인터를 포함
6. 문맥 데이터(context data) : 프로세스가 수행 중일 때, 처리기의 레지스터에 존재하는 데이터
7. 입출력 상태 정보 : 미해결 입출력 요청, 프로세스에 할당된 입출력 장치. 프로세스에 의해 사용 중인 파일들의 리스트 등을 포함
8. 어카운팅 정보(accounting information, 계정 정보) : 사용자 처리기 시간 및 클록 시간, 시간 제한, 계정 번호 등을 포함
어떤 프로세스가 인터럽트될 때, 프로그램 카운터 및 문맥 데이터의 현재 값이 해당 프로세스 제어 블록의 적절한 필드에 저장되고, 그 프로세스의 상태가 Block 또는 Ready로 변경된다. (다음 글에서 설명)
그 다음, 운영체제는 어떤 다른 프로세스를 수행(Running) 상태로 만들게 되는데, 그 프로세스의 프로그램 카운터와 문맥 데이터를 처리기 레지스터로 적재하여 수행을 시작하게 되는 것이다.
'운영체제(OS, Operating System)' 카테고리의 다른 글
[운영체제(OS, Operating System)] Computer System Overview #2 (0) | 2023.04.07 |
---|---|
[운영체제(OS, Operating System)] Computer System Overview #1 (0) | 2023.04.07 |
프로세스란 무엇일까?
프로세스란 용어에 대한 정의는 몇 가지 존재한다.
1. 실행 중인 프로그램
2. 처리기(프로세서)에 할당되고 실행될 수 있는 entity
3. 명령어의 순차 실행, 현재 상태, 관련된 시스템 자원들의 집합으로 인해 특징지어지는 활성화 단위(a unit of activity)
Program vs Process
1. 실행 중인 프로그램에 집중하자.
대부분 프로그램이라는 단어에는 익숙하지만, 프로세스라는 단어는 낯설 것이다.
프로그램(Program)이란?
프로그램은 디스크에 저장된 정적인 entity입니다.
특정 작업을 수행하는 일련의 명령어들의 모음이다. 특정 문제를 해결하기 위해 처리 방법과 순서를 기술하여 컴퓨터에 입력되는 일련의 명령문 집합체이다. (출처 : 위키백과)
즉, 프로그램 그 자체는 아무것도 할 수 없는 코드 덩어리인 것이다.
예를 들면, 카카오톡, 인텔리제이, 디스코드 등이 있다. 우리는 이를 프로그램이라 부르지 프로세스라 부르지 않는다.
이제 다시 보자. 그렇다면 프로세스란(Process)란?
프로그램은 실행 가능한 파일이 메모리에 적재 될 때 비로소 프로세스가 된다.
"메모리에 적재되었다"는 말은 프로그램이나 데이터가 주기억장치(RAM)에 올라갔다는 뜻이다.
좀 더 쉽게 설명하면:
- 우리가 어떤 프로그램(예: 크롬, 게임, 워드 등)을 실행하면,
- 그 프로그램의 실행에 필요한 코드나 데이터가 하드디스크(SSD/HDD)에 저장된 상태에서,
- 메인 메모리(RAM)로 복사되어 올라가야 실행할 수 있다.
- 이걸 "메모리에 적재되었다"고 표현합니다.
왜 메모리에 올라가야 하냐면,
CPU(처리기, 프로세서)는 직접 하드디스크에 접근해서 명령을 실행하지 못하고,
메인 메모리에 있는 데이터만 빠르게 읽고 실행할 수 있기 때문이다.
더 쉽게 설명하면:
하드디스크(SSD나 HDD)는 창고,
메모리(RAM)는 작업 테이블,
CPU는 작업하는 사람이라고 생각하면
- 프로그램은 창고에 저장되어 있다가,
- 실제 작업을 하려면 테이블 위(메모리)로 꺼내야 하고,
- 작업하는 사람(CPU)은 테이블 위에 있는 것만 다룰 수 있다.
그래서 프로그램을 실행할 때,
그 프로그램의 코드나 필요한 데이터가 메모리(RAM)로 복사(적재)되고,
그걸 기반으로 CPU가 실행을 시작하는 것이다.
이 내용을 바탕으로
2. 처리기(프로세서)에 할당되고 실행될 수 있는 entity
3. 명령어의 순차 실행, 현재 상태, 관련된 시스템 자원들의 집합으로 인해 특징지어지는 활성화 단위(a unit of activity)
"처리기(프로세서)에 할당되고 실행될 수 있는", "~~ 의 집합으로 인해 특징지어지는 활성화 단위"라는 프로세스의 정의를 이해하는데 도움이 될 수 있을 거 같다.
PCB(Process Control Block)
프로세스 제어 블록은 운영체제가 프로세스에 관해 필요한 모든 정보를 포함하고 있는 자료구조이다.
프로세스 제어 블록은 운영체제에 있어서 가장 중요한 자료구조라고 해도 과언이 아니다.
프로세스 제어 블록의 주된 목적은 다음과 같다.
수행 프로세스를 인터럽트한 후 나중에 그 인터럽트가 발생되지 않은 것처럼 프로세스 수행을 재개할 수 있도록 정보를 유지하는 것.(프로세스가 인터럽트되면, 프로그램 카운터(PC), 문맥 데이터(context data, ex: processor register)가 프로세스 제어 블록에 저장된다.)
이를 바탕으로 프로세스 제어 블록은, 운영체제가 다수의 프로세스를 지원하고 멀티 프로세싱을 제공할 수 있게 해준다.
프로세스 제어 블록 구조

1. 식별자 : 각 프로세스를 다른 모든 프로세스로부터 구별하게 해주는 유일한 식별자 (PID)
2. 상태 : 프로세스가 현재 수행 중이면, 그 프로세스는 Running(수행) 상태이다.
3. 우선순위 : 다른 프로세스들에 대해 상대적인 우선순위 수준
4. 프로그램 카운터 : 프로그램에서 다음에 수행될 명령어의 주소
5. 메모리 포인터 : 프로세스와 연계된 프로그램 코드 및 데이터, 다른 프로세스들과 함께 공유되는 메모리 블록들에 대한 포인터를 포함
6. 문맥 데이터(context data) : 프로세스가 수행 중일 때, 처리기의 레지스터에 존재하는 데이터
7. 입출력 상태 정보 : 미해결 입출력 요청, 프로세스에 할당된 입출력 장치. 프로세스에 의해 사용 중인 파일들의 리스트 등을 포함
8. 어카운팅 정보(accounting information, 계정 정보) : 사용자 처리기 시간 및 클록 시간, 시간 제한, 계정 번호 등을 포함
어떤 프로세스가 인터럽트될 때, 프로그램 카운터 및 문맥 데이터의 현재 값이 해당 프로세스 제어 블록의 적절한 필드에 저장되고, 그 프로세스의 상태가 Block 또는 Ready로 변경된다. (다음 글에서 설명)
그 다음, 운영체제는 어떤 다른 프로세스를 수행(Running) 상태로 만들게 되는데, 그 프로세스의 프로그램 카운터와 문맥 데이터를 처리기 레지스터로 적재하여 수행을 시작하게 되는 것이다.
'운영체제(OS, Operating System)' 카테고리의 다른 글
[운영체제(OS, Operating System)] Computer System Overview #2 (0) | 2023.04.07 |
---|---|
[운영체제(OS, Operating System)] Computer System Overview #1 (0) | 2023.04.07 |