들어가며
컴퓨터 구조에 대한 자세한 내용을 살펴보기에 앞서서 머리 속에 컴퓨터에 대한 큰 그림이 필요하다는 생각이 들었다. 컴퓨터가 전체적으로 어떻게 구성되어 있고, 어떻게 연결되어 있는지를 파악하면 서로 간의 상호 작용이 더 잘 그려질 것 같았기때문이다. 머릿 속에 파편화되어 둥둥 떠다니는 내용을 한 글로 정리해보고자 한다.
컴퓨터의 네가지 핵심 부품 | |||
중앙처리장치(CPU) | 주기억장치(메모리) | 보조기억장치 | 입출력장치 |
컴퓨터의 핵심부품이라면 보통 4가지 정도를 이야기한다. 바로 CPU, 메모리, 보조기억장치, 입출력장치이다. 프로세스의 실행 원리를 파악하기 위해서 우선적으로 CPU와 메모리를 중점적으로 이야기해보고자 한다.
주기억장치 (메모리)
* 주기억장치에는 크게 RAM과 ROM이 있지만, 메모리라는 용어는 보통 RAM을 지칭한다.
메모리는 현재 실행되는 프로그램을 저장하는 부품이다.
더 자세하게는, 프로그램의 명령어와 데이터를 저장하는 부품이다. 1과 2를 더한 후 저장하는 프로그램이 있다고 생각해보자. 여기서 명령어는 '더하다' 와 '저장하다'이고, 데이터는 '1', '2' 일 것이다. 즉 메모리 상에 '더하다', '저장하다', '1', '2'를 저장해두는 것이다.
* 더 알아보기
명령어는 명령어가 수행할 연산인 연산코드와 연산에 사용할 데이터나 데이터의 저장위치인 오퍼랜드로 구성되어 있다. 예시에는 설명을 위해 연산코드만 서술하였지만, 정확히는 피연산자인 오퍼랜드가 포함되어 있어야 한다. 예를 들면 '더해라 / 메모리 3번지의 데이터와 / 메모리 4번지의 데이터를' 이런 식으로 서술하는 것이 더 정확하겠으나 설명을 위해 오퍼랜드 부분은 생략하였다.
프로그램의 명령어와 데이터는 매우 많으며, 심지어 여러 개의 프로그램이 한꺼번에 실행되기도 한다. 메모리에 명령어와 데이터가 정돈되어 있지 않으면 '더하다' 라는 명령어를 수행하기 위한 재료인 데이터를 찾기가 매우 어려울 수 있다. 그래서 메모리는 주소(address)라는 개념을 사용한다. 더하다라는 명령을 수행할 때 데이터의 주소 정보를 통해 손 쉽게 데이터에 접근할 수 있게 된다.
CPU
CPU의 내부 구성 요소 | ||
산술논리연산장치(ALU) | 제어장치 | 레지스터 |
CPU는 메모리에 저장된 명령어를 읽고, 해석하고, 실행한다. 이를 위해 CPU는 크게 산술논리연산장치(ALU), 제어장치, 레지스터로 구성된다.
1과 2를 더하여 저장하는 프로그램을 실행하기 위해 메모리 상에 명령어와 데이터가 저장되어 있는 상태라고 생각해보자.
메모리 | |
1번지 | 더하다 |
2번지 | 저장하다 |
3번지 | 1 |
4번지 | 2 |
CPU의 제어장치는 제어신호를 내보내고 명령어를 해석하는 역할이다. 우선 메모리에게 '메모리 읽기' 제어신호를 보낸다.
그러면 메모리는 '더하다'라는 명령어를 CPU에게 건네준다. 이 명령어는 프로그램을 실행하는데 필요한 값들을 저장하는 레지스터 상에 저장된다.
제어장치가 이 명령어를 해석해보니, 3번지와 4번지에 있는 데이터가 필요하다고 판단하게 된다. 다시 한 번 메모리에게 메모리 읽기 신호를 보내고, 메모리가 보낸 1과 2라는 데이터는 또다시 레지스터 상에 저장된다.
이제 더하는 일만이 남았다. 이러한 계산과정은 ALU라는 산술논리연산장치에서 실행된다. ALU가 레지스터에 저장된 값을 이용해 3이라는 계산결과를 산출해내면 3이라는 데이터도 레지스터 상에 저장된다.
제어장치가 다음 명령어를 읽어보니 '저장하다'가 나왔다. 그러면 이제 메모리상에 '메모리 쓰기' 제어 신호를 보내서 메모리 상에 3이라는 값을 저장하게 된다.
메모리 | |
1번지 | 더하다 |
2번지 | 저장하다 |
3번지 | 1 |
4번지 | 2 |
5번지 | 3 |
시스템 버스
메모리와 CPU는 떨어져있는 장치인데 어떻게 서로 소통할 수 있을까? 바로 메인보드에 데이터를 주고 받기 위한 버스라는 통로가 있기 때문이다. 특히나 CPU와 메모리의 연결에서 가장 중요한 역할을 하는 것은 시스템 버스이다.
시스템 버스의 구성 | ||
주소 버스 | 데이터 버스 | 제어 버스 |
시스템버스는 주소 버스, 데이터 버스, 제어 버스로 구성되어 있다. 주소 버스는 주소를, 데이터 버스는 명령어와 데이터를, 제어버스는 제어장치가 보낸 제어 신호를 주고 받는다.
주소버스 | 5번지 |
데이터버스 | 3 |
제어버스 | 메모리 쓰기 |
1+2한 결과인 3을 메모리에 저장하는 경우를 생각해보자. CPU에서는 시스템 버스를 통해 위와 같은 정보를 메모리에게 전달한다. 이처럼 컴퓨터의 핵심 부품은 시스템 버스를 통해 서로 데이터를 주고 받는다.
마무리
이와 같은 컴퓨터 구조는 폰노이만에 의해 정리되었기 때문에 폰노이만 구조라고도 불린다. 이전까지는 미리 정한 기능만을 수행하는 하드웨어를 만들어서 사용했기 때문에 다른 프로그램을 수행하기 위해서는 하드웨어 자체를 변경해야했다. 하지만 메모리 상에 프로그램의 명령어와 데이터를 올리고 CPU에서 연산을 처리하는 구조를 채택하면서 소프트웨어만 변경하더라도 다른 프로그램들의 실행이 가능해진 것이다.
위의 내용은 개괄적인 내용을 최대한 쉽게 풀어쓴 내용이다. 자세하고 정확한 정보가 필요하다면 이후 포스팅을 참고해주시길!
2023.10.31 - [CS/컴퓨터구조] - [컴퓨터구조] CPU는 어떻게 작동할까? - ALU
[컴퓨터구조] CPU는 어떻게 작동할까? - ALU
CPU가 무엇인지 알지 못한다면 이전 포스팅을 먼저 보고 오시길 바란다. 2023.10.30 - [CS] - [컴퓨터구조] CPU와 메모리의 역할 개괄 [컴퓨터구조] CPU와 메모리의 역할 개괄 들어가며 컴퓨터 구조에 대
kyeong8139.tistory.com
'CS' 카테고리의 다른 글
[네트워크] 네트워크의 기초 (1) | 2023.11.03 |
---|---|
[컴퓨터구조] CPU는 어떻게 작동할까? - ALU (2) | 2023.10.31 |
[운영체제] 파일 시스템 + 하드링크 / 소프트링크 (2) | 2023.10.21 |
[운영체제] 스레드와 멀티 스레드 (2) | 2023.10.13 |
[운영체제] 프로세스의 구조와 컨텍스트 스위칭 (2) | 2023.10.13 |