[ 프로그램(Program) vs 프로세스(Process) ]
프로그램 그 자체로는 아무 일도 할 수 없다.
프로그램은 그저 하드디스크에 저장되어 있는 하나의 파일로써 생명이 없습니다.
즉, 수동적인 존재일 뿐이다.
프로그램이 사용자에게 유용한 기능을 제공하기 위해서는 메모리에 로드 되어서
프로그램 카운터(PC) 및 관련 자원의 집합을 가진 능동적인 존재로서 동작 해야 한다.
예를 들어 바탕화면에 있는 Word 프로그램은 그 자체로는 아무 의미가 없다.
우리가 마우스를 올려서 더블클릭을 하고 실행이 되어서,
흰 바탕에 커서가 깜빡거리는 순간 유용한 무언가가 되는 것이다.
그래서 프로세스는 비공식적으로 실행 중인 프로그램(Program in execution)이라고 불린다.
[ 프로그램이 하나의 프로세스가 되는 과정 ]
사용자가 프로그램을 시작 해달라는 요청 (아이콘을 더블클릭 하는 등)을 보내면
OS(운영체제)는 하드디스크에서 해당 프로그램을 메인 메모리로 로드하면서, 필요한 자원을 할당한다.
그림으로 나타내면 다음과 같다.
메모리 상에 존재하는 프로세스는 위 그림에서 나타난 것과 같은 구조를 가지는데,
각 섹션에 저장되어 있는 내용들은 다음과 같다.
- Text - 실행 가능한 코드 집합
- Data - 전역 변수들
- Heap - 런타임에 동적으로 메모리에 할당되는 데이터, 예를 들어 실행 중에 생성되는 인스턴스들에 대한 정보
- Stack - 함수가 실행될 때 일시적으로 생기는 데이터들, 예를 들어 지역 변수, 파라미터, 복귀 주소 등
Text와 Data 영역의 크기는 고정되어 있지만 Heap과 Stack 영역의 크기는 런타임에 수시로 변경된다.
[ 프로세스의 상태 ( 프로세스 전이도 ) ]
프로세스는 다섯 가지 상태 중 하나를 가진다.
- 생성(new): 갓 생성된 상태, OS의 커널에 PCB 등이 생성된다.
- 준비(ready): CPU의 서비스를 받기 위해 Ready Queue에서 대기하고 있는 상태
- 실행(running): CPU에 의해 실행되고 있는 상태
- 대기(waiting or blocked): I/O나 다른 event를 기다리며 멈춰있는 상태
- 종료(terminated): 실행을 완료하는 등의 이유로 종료된 상태
[ 스레드란? ]
하나의 프로세스에서 다시 여러가지 일을 하는것,
프로세스(process) 내에서 실제로 작업을 수행하는 주체를 말합니다.
예를 들어 파일을 전송하면서 채팅을 하고 있고, 동일한 채팅 프로그램에서 파일 전송과 채팅을 동시에 하고 있는 것을 말합니다.
기본적으로 모든 프로세스는 한 개 이상의 스레드가 존재하여 작업을 수행(객체 하나당 하나의 스레드가 존재하는 방식)합니다.
또한 두 개 이상의 스레드를 가지는 프로세스를 멀티 스레드 프로세스(객체 하나를 n개의 스레드가 공유하는 방식)라고 합니다.
'항해 후 > 예상 질문' 카테고리의 다른 글
Array vs LinkedList (0) | 2022.02.04 |
---|---|
GET vs POST (0) | 2022.02.04 |
Life Cycle Method (라이프 사이클 메소드) (0) | 2022.02.04 |
TCP/UDP (0) | 2022.02.03 |
HTTP vs HTTPS (0) | 2022.02.03 |
댓글