Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

승쨩개발공부

[OS] 프로그램 실행과정 및 하드웨어 구성 본문

OS

[OS] 프로그램 실행과정 및 하드웨어 구성

Unknowns 2022. 5. 16. 19:35

프로그램의 실행과정

 

실행파일의 생성 과정

전처리기 -> 컴파일러 -> 어셈블러 -> 링커

 

1. 전처리기의 치환 작업

전처리기는 '#include' , '#define' 과 같이 '#'으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히

변경하는 작업을 한다.

 

2. 컴파일러에 의한 번역

전처리기에 의해 변경된 소스코드는 여전히 C언어로 구성되어 있다.

이 소스코드는 컴파일러에 의해서 어셈블리 코드로 번역된다.

 

3. 어셈블러에 의한 바이너리 코드 생성

바이너리 코드는 1과 0으로만 구성되는 코드이다. 컴파일러에 의해 번역된 어셈블리 코드는

컴퓨터에 의해 실행되기 앞서서 바이너리 코드로 번역 되어야 한다. 컴퓨터는 1과 0만 이해하기 떄문이다.

이처럼 CPU가 이해할 수 있는 바이너리 코드로 바꾸어 주는 프로그램이 어셈블러이다.

 

4. 링커에 의한 연결과 결합

링커는 프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는(혹은 연결시켜 주는) 

작업을 한다고 설명할 수 있다.

이과정이 끝나면 실행파일이 생성된다. 실행파일은 바이너리 코드로 구성된다.

 

위 과정을 통한 프로그램 실행 과정

 

위 실행파일은 링커에 의해서 최종적으로 만들어진 파일이다. 실행 파일 안에는 컴퓨터에게 일을

시키기위한 명령어(바이너리 코드)가 들어있다. 실행파일이 메모리에 올라가고 난 다음 CPU에 의해

실행되기 시작한다.

 

메모리에 올라간 명령어들은 CPU에 의해서 순차적으로 실행된다.

명령어 A, 명령어 B, 명령어 C 순서대로 이다.

이 명령어 들은 메모리에서 실행되는 것이 아니라 CPU내부로 하나씩 이동한 다음 실행시킨다.

 

 

명령어 실행 과정

1. Fetch : 메모리상에 존재하는 명령어를 CPU로 가져오는 작업이다.

2. Decode : 가져온 명령어를 CPU가 해석하는 단계이다. 즉, 무슨일을 하라는 명령어인지 분석하는 단계

3. Execution : 해석된 명령어의 명령대로 CPU가 실행하는 단계이다.

 

단계 1.Fetch : 메모리에 있는 데이터를 버스시스템에 있는 데이터 버스, 어드레스 버스, 컨트롤 버스

를 통해 데이터와 주소, 줄건지 보낼건지, 처리해서 CPU 레지스터에 저장한다.

 

단계 2.Decode : CPU에 컨트롤 유닛에 의해 가져온 명령어를 해석한다(무슨일을 하는 명령어인지 분석)

 

단계 3.Excution : 산술 및 논리연산을 한다면 CPU에 ALU(Arithmetic Logic Unit)에 의해 실행한다. 

 

 

 

 

'OS' 카테고리의 다른 글

[OS] 컨텍스트 스위칭(Context Switching)  (0) 2022.05.16
[OS] 쓰레드, 커널  (0) 2022.05.16