개요
•
우리는 프로그래밍을 공부하는 프로그래머이기 때문에, 프로그램 실행 과정에 대해서 잘 알고 있어야 원활한 프로그래밍이 가능하다.
•
이 글은 우리가 프로그램을 실행시켰을 때, 어떠한 절차에 의해 프로그램이 실행되는지 컴퓨터의 구조와 함께 간단하게 설명한 글이다.
•
먼저 이 글을 통해 컴퓨터의 전체적인 구조를 눈에 익혀두고, 추후 각 장치의 상세 동작 과정 또는 운영체제 공부에 도움이 되었으면 좋겠다.
컴퓨터 구조
•
컴퓨터는 크게 CPU, Memory, 보조기억장치, I/O Device로 구성되어있다.
•
각 장치별 역할은 아래와 같다.
1.
CPU
•
실제로 연산을 수행하는 장치이다.
2.
Memory
•
프로그램 실행시, 실행된 프로그램이 적재되는 곳이다.
•
CPU는 Memory에 적재된 프로그램 내용을 가져와서 연산을 수행한다.
•
주기억장치(Main Memory)라고 부른다.
3.
보조기억장치
•
HDD, SSD와 같은 저장 장치들을 말한다.
•
프로그래머에 의해 만들어진 프로그램을 저장하는 공간이며, 아직 실행 중이지 않은 프로그램들이 저장되어 있는 곳이다.
•
프로그램 뿐만 아니라, 프로그램에 필요한 데이터 파일(텍스트 파일, 사진, 동영상 등)도 저장되어 있다.
4.
I/O Device
•
입력 또는 출력을 위한 장치들을 말한다.
•
입력 장치의 대표적인 종류로는 키보드, 마우스가 있다.
•
출력 장치의 대표적인 종류로는 모니터, 프린트가 있다.
왜 컴퓨터는 저장 장치를 Memory와 보조기억장치 두 종류로 나눠서 사용할까?
•
Memory와 보조기억장치는 속도와 용량의 차이가 있다.
•
Memory는 속도가 빠르지만 용량이 작기 때문에, 많은 프로그램들을 저장해둘 수 없다.
•
보조기억장치는 속도가 느리지만 용량이 크기 대문에, 많은 프로그램들을 저장해둘 수 있다.
•
따라서, 우선 만들어진 프로그램을 보조기억장치에 저장해두고, 프로그램이 실행되면 Memory에 적재해서 사용한다.
•
또한, 실제로 연산을 수행하는 CPU는 속도가 엄청 빠르기 때문에, 훨씬 느린 속도의 HDD, SSD로부터 직접 데이터를 가져와 연산하는 경우, CPU는 놀게되고 프로그램 실행 속도도 느릴 것이다.
•
효율적인 프로그램 실행을 위해 Memory와 보조기억장치를 병행하여 사용한다.
•
아래는 HDD, SSD, Memory(RAM)의 속도 차이를 보여준다.
단계별 컴퓨터 동작 과정
1. 프로그램 실행 (보조기억장치 → Memory)
•
프로그램을 실행한다는 것은, 보조기억장치에 저장되어 있는 프로그램을 Memory에 복사한다는 것이다.
•
실행된 프로그램의 내용은 Memory에 복사되어 적재된다.
•
Memory에 적재된 프로그램이 Memory의 어디에 있는지 알기 위해, Memory는 주소라는 개념을 사용하여 특정 주소에 프로그램을 적재한다.
•
하나의 프로그램은 여러 메모리 주소에 나뉘어져 적재된다.
2. 연산 수행 (CPU Memory)
•
프로그램이 실행되어 Memory에 적재되면, CPU는 Memory에 적재된 프로그램의 내용을 차례대로 읽어가며 연산을 수행한다.
•
CPU는 프로그램의 첫 시작부분이 저장된 Memory 주소의 데이터부터 읽어와서 연산을 시작한다.
•
프로그램의 내용은 CPU가 수행가능한 명령어들로 채워져 있으며, CPU가 해당 명령어들을 차례대로 수행하면서 연산을 하는 것이다.
3. 입출력 처리 (I/O Device CPU)
•
프로그램 실행 중, I/O Device를 통해 데이터를 입력받거나 출력할 수 있다.
•
이때 CPU는 I/O Device로부터 데이터를 받아들이거나, 출력하기 위해 프로그램 실행을 잠시 멈추고, I/O Device에게 명령을 보낸다.
•
데이터 입출력을 할 때에는, 데이터를 잠시 저장해두는 버퍼(Buffer)를 사용한다.
•
입출력 처리가 완료되면, CPU는 다시 연산을 수행하거나 프로그램을 종료한다.
4. 인터럽트 처리
•
프로그램 실행 중에는, 입출력 처리와 같은 이유로 CPU가 특정한 시점에 인터럽트(Interrupt)를 받을 수 있다.
•
이때 CPU는 현재 실행 중인 명령어를 멈추고, 해당 인터럽트에 대한 처리를 수행한다.
•
인터럽트 처리가 끝나면, CPU는 원래 수행하던 명령어부터 다시 실행을 시작한다.
•
예를 들어, 프로그램 실행 중 키보드 입력이 들어오면, CPU는 키보드 입력을 처리한 뒤 다시 연산을 수행한다.
5. 프로그램 종료
•
프로그램의 모든 내용을 실행한 경우, 프로그램의 실행이 끝나고 Memory에서 해당 프로그램의 내용을 지운다.
•
만약 프로그램 실행 중에 오류가 발생하면, 프로그램이 비정상적으로 종료되고, 에러 메시지 등이 출력된다.