본문 바로가기

공부/IT

IT_CS 용어

프로그램(Program)과 프로세스(Process) 차이

프로그램(Program)

- 하드 디스크, SSD같은 보조기억장치에 저장되어있는 실행 코드를 의미

(실행 코드가 실행 파일(.exe)만 의미하는 것은 아님)

 

 

프로세스(Process)

- 프로세스는 프로그램이 메모리에 상주해 있는 상태를 의미(즉, 주기억장치에 있는 상태를 의미)

- 일반적으로 수행 중인 프로그램의 인스턴스라고 정의함

 

 

프로세스 구성요소

프로세스 커널 오브젝트

- 프로세스 관리 목적으로 운영체제가 사용하는 커널 오브젝트

- 시스템은 프로세스에 대한 가종 정보를 프로세스 커널 오브젝트에 저장하기도 함

 

주소 공간

- 실행 모듈이나 DLL(Dynamic-Link Library)의 코드와 데이터를 수용하는 주소공간

- 이러한 주소 공간은 스레드 스택이나 힙 할당과 같은 동적 메모리 할당에 사용되는 공간도 포함함

 

스레드

- 프로세스의 작업 실행 흐름의 단위를 의미

- 프로세스는 자력으로 수행이 될 수 없음

- 프로세스가 어떤 일을 처리하기 위해서는 프로세스의 컨텍스트(Context) 에 스레드(Thread)가 있어야 함

- 스레드는 프로세스의 주소 공간상에 존재하는 코드를 수행함

- 하나의 프로세스는 다수의 스레드를 가질 수 있음

(여러 스레드들은 프로세스 주소 공간내에서 동시에 코드를 처리함, 때문에 스레드들은 자신만의 CPU레지스터 집합과 스택을 가지고 있다)

- 프로세스는 프로세스 주소 공간 내의 코드를 수행 하기위해서 반드시 하나 이상의 스레드를 가지고 있어야한다

(스레드가 하나면 - 단일 스레드(Single thread), 두개이상이면 - 다중 스레드(Multi thread)

 

- 프로세스 생성시 시스템이 첫 번째 스레드를 만들어 준다

(주 스레드(Primary Thread)라고 부른다)

- 주 스레드로 여러 스레드를 추가로 생성할 수 있고, 이렇게 만들어진 스레드를 통해서도 또다른 스레드를 생성할 수 있다

- 시스템은 프로세스의 주소공간에 코드를 수행할 스레드가 존재하지 않을 경우 자동적으로 프로세스와 프로세스 주소 공간을 파괴한다

 

 

스케줄링

- 모든 스레드가 동시에 작업하는 것처럼 보이기 위해서 운영체제는 각스레드에 CPU점유 시간을 조금씩 나누어줌

- 각 스레드들은 라운드 로빈(Round-Robin) 방식으로 주어지는 단위 시간(Quantum)만큼만 CPU를 점유할 수 있다

(동시는 아니지만 빠른 순환을 통해 마치 동시에 작업을 하는것처럼 보인다)

- 윈도우 운영체제에서는 스레드에 대한 모든 관리와 스케줄링을 윈도우 커널이 담당

- 여러개의 CPU를 가진 머신을 최대한 활용하기위해서는 어플리케이션의 알고리즘을 적절하게 수정하는 것이 불가피하다

 

 

흐름

- 보조기억장치에 있는 프로그램 실행 - 주기억장치에 프로그램을 포함한 프로그램과 관련된 정보를 로드함

(DLL도 이 때 로드함)

 

 

로더(Loader)

- 운영체제의 내부 프로그램을 의미

- 프로그램을 프로세스로 만들어 주는 작업을 담당

(프로그램을 메모리로 불러오는 작업, 로더가 불러오는 시간을 로드 타임(Load Time)이라고 함)

 

 

런타임(Run-Time)

- 프로그램이 실행되는 동안의 시간을 의미

 

 

커널(Kernel)

- 운영체제의 핵심 부분을 의미

- 무분별한 하드웨어의 조작을 막기위해 존재(여러 이유가 존재함)

- 유저 모드에서 커널 모드에 요청하는 것을 시스템 콜(System Call)이라고 한다.

 

 

바인딩(Binding)

- 속성과 개체 사이의 또는 연산과 기호 사이와 같은 연관(Association)

 

 

바인딩 타임(Binding Time)

- 프로그램에서 변수들이 갖는 속성이나 값이 완전히 결정되는 시간

- 이름에 속성이 연결되는 시간을 의미

 

 

바인딩 타임의 종류

1. 언어 정의 시간(Language Definition Time)

- 자료구조나 프로그램 구조를 등을 확정

(int를 정수형으로 나타낸다고 정의)

 

2. 언어 구현 시간(Language Implementation Time)

- 언어를 정의할 때 이루어지는 형태

(표현 자리수, 범위, 크기 등을 정함)

- 렉싱(Lexing) : 키워드를 문법대로 분리하는 것

(int num 을 4바이트로 결정, int, char 등 사전에 정의된 키워드를 렉싱한다고 함)

 

3. 컴파일 시간(Compile Time)

- 프로그램을 번역할 때 이루어짐

(Data, Stack 등 메모리에 들어갈 변수가 정해짐)

- 정적 바인딩

- 변수의 이름, 자료형과 프로그램 문장 구조 결정

- 고급 언어를 Binary File, Obj 파일로 변환

- 코드를 파싱(Parsing)하여 Obj 파일로 변환하는 과정에서 문법에 어긋나지 않는지 확인

 

4. 링크시간(Link Time)

- 프로그램을 라이브러리와 링크할 때

- 라이브러리와 모듈을 합침

 

5. 적재 시간(Load Time)

- 변수를 메모리로 적재할 때

(메모리 주소 결정)

- 시스템이 메모리로 프로그램을 상주시켜 실행할 때

 

6. 실행 시간(Run Time)

- 프로그램을 실행 할 때

(변수값이 확정됨)

- 변수의 메모리 장소 할당

- 프로그램 실행 시점부터 종료 시점까지 변수값을 바인딩

 

 

 

정적 바인딩(Static Binding)

- 실행 시간(Run Time)전에 일어나 실행 중에 변하지 않는 상태로 유지되는 바인딩을 의미

(int num, num을 정수 타입(Integer Type)으로 바인딩)

 

 

동적 바인딩(Dynamic Binding)

- 실행 시간(Run Time)중에 발생하거나 프로그램을 실행하는 과정 에서 변경되는 것을 의미

(정적 바인딩된 변수들이 실행 중에 변결되면 동적 바인딩으로 볼 수 있다)

(int *ptr = malloc(sizeof(int) * 10); // int(4byte_시스템에 따라 다를 수 있음) * 10 = 40byte의 메모리 동적 할당

 

 

할당(Allocation)

- 기억장소 할당(변수에 메모리 공간을 바인딩하는 과정)

 

 

정적 할당(Static Allocation)

- 메모리에 적재될 크기를 미리 아는 것

(int num = 4; // num에 int(4byte_시스템에 따라 다를 수 있음)만큼 메모리 공간 할당)

- 실행 시간(Run Time)에 각 자료형에 맞는 메모리 영역(Segment)에 할당

 

 

 

동적 할당(Dynamic Allocation)

- 프로그램 실행중에 유저에 의해 변화하여 크기를 미리 알 수 없는 것

- 유저의 명령에 의해 실행되는 할당

- 동적할당하여 가리키게 되는 공간은 힙 영역(Heap Segment)

- 포인터 또는 참조 변수를 통해 접근 가능

'공부 > IT' 카테고리의 다른 글

IT_진법 변환  (0) 2023.03.20
IT_ASCII(아스키)  (0) 2023.03.18
IT_프로그램 실행  (0) 2023.03.13
IT_실행파일이 만들어지기 까지  (0) 2023.03.07
IT_Visual Studio 폴더 시스템  (0) 2023.03.05