티스토리 뷰

CS/운영체제

#5 프로그램과 프로세스

RadderNepa 2023. 2. 18. 04:15

● 도입

프로그램이란?

- 하드디스크와 같은 저장 장치(HDD, SSD)에 저장된 명령문의 집합체

- application, app 이라고도 불리고 Window OS에서는 .exe 파일의 모습을 하고있다.

 

프로세스란?

- 간단히 말해 실행중인 프로그램

- 실행중인 프로그램 : 하드디스크에 저장된 프로그램이 메모리(RAM)에 올라갔을 때 실행중인 프로그램이라고 한다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제


- PC의 관점에서 프로그램은 저장 장치만 사용하는 수동적인 존재이다.

- 프로세스는 메모리(RAM)도 사용하고 OS의 CPU 스케줄링 알고리즘에 따라서 CPU도 사용하고 필요에 따라 입출력을 하기 때문에 동적인 존재라고 할 수 있다.

- 이러한 프로세스는 CODE 영역, DATA 영역, HEAP 영역, STACK 영역 등으로 이루어져 있다.

 

CODE 영역에는 자신을 실행하는 코드가 저장되어 있다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

DATA 영역에는 전역 변수와 static(정적) 변수가 저장되어 있다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

HEAP 영역은 프로그래머가 동적으로 메모리를 할당하는데 사용된다.

C에서 malloc, free 함수를 호출하면 Heap 영역의 자원을 할당/해제할 수 있다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

STACK 영역에는 지역 변수와 함수 호출 시 필요한 정보들이 저장된다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제


● 프로세스가 되는 과정

- 개발자가 작성한 코드가 메모리에 올라가서 프로세스가 되는 과정을 알아보자(C언어 기준으로 설명)

- 아래의 코드는 2개의 숫자를 더해주는 매우 간단한 코드이다.(파일명 : test.c)

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- C는 컴파일 언어이기 때문에 컴파일을 필수적으로 해야 실행 가능하다.

- 위의 소스코드(test.c)가 컴파일을 거쳐 test.exe 프로그램으로 만들어지는 과정은 아래와 같다.

 

1. 전처리기를 거쳐서 매크로로 정의한 숫자를 치환하고 필요한 파일을 불려온다.

- 전처리기를 거치면 파일의 확장자는 .i 가 된다.

 

2. 컴파일러가 컴파일을 해준다.

- 컴파일을 마치면 고수준인 C언어가 저수준인 어셈블리어로 바뀐다.

- 어셈블리어는 명령어와 기계어가 일대일 매칭이 되기 때문에 기계어와 가장 가까운 언어이다.

- 컴파일러를 거치면 파일의 확장자는 .s 가 된다.

 

3. 어셈블러가 어셈블리어를 기계어로 바꿔준다.

- 이렇게 되면 해당 파일은 0과 1로 이루어진 기계어로 구성된다.

- 기계어로 구성돼 있기 때문에 text editor로 해당 파일을 열면 텍스트가 깨져서 보인다.

- 파일의 확장자는 .o 가 된다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 

4. 링커가 링킹을 한다.

- 여러가지 라이브러리나 다른 소스코드를 연결해준다고 생각하면된다.

https://ko.wikipedia.org/wiki/%EB%A7%81%EC%BB%A4_(%EC%BB%B4%ED%93%A8%ED%8C%85)

 

5. 링킹까지 거치면 파일의 확장자는 .exe 가 된다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 이제 해당 파일을 더블클릭하면 하드디스크에 있는 test.exe 프로그램이 메모리에 올라가게 되고 이렇게 올라간 프로그램은 프로세스라는 이름으로 불리게 된다.

- 이제 해당 프로세스는 운영체제(OS)에 의해 관리된다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

cf) 어셈블리어는 이렇게 생겼다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제


- OS 전략에 따라 프로세스가 실행되는데 이를 CPU 관점에서 살펴보자

- CPU는 0과 1과 같은 기계어만을 실행하는데 0과 1만을 이용해 CPU 관점을 설명하는 것은 어려우니 기계어와 가장 가까운 어셈블리어를 이용해 알아보자

 

1. CPU내 제어 장치가 숫자 5와 7을 메모리에 저장한다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 

2. 메모리에 저장된 값을 edx, eax 레지스터로 가져온다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 

3. 제어 장치가 레지스터에 저장된 5와 7을 가지고 더하라는 명령을 하면 산술논리 연산장치가 두 숫자를 더하고 그 결과는 eax 레지스터에 저장한다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

 

4. 다시 제어장치가 eax 레지스터에 저장된 값인 12를 가져와서 메모리에 저장시킨다.

 

cf)

https://ko.wikipedia.org/wiki/%EA%B8%B0%EA%B3%84%EC%96%B4

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함