2024.11.10 - [컴퓨터 과학/프로그래밍 기초] - 0-컴퓨터란?
0-컴퓨터란?
컴퓨터란 무엇일까?A computer is a machine that can be programmed to automatically carry out sequences of arithmetic or logical operations (computation).출처: https://en.wikipedia.org/wiki/Computer -> 위키 백과의 설명을 보
coding-journal-by-log.tistory.com
이전 글에서 보다시피 컴퓨터는 '계산'을 위한 기계고 이를 위해서는 저장, 연산, 입출력의 기능을 해야하고, 이 기능을 구현하기 위해서는 '회로' 나 다른 기술들이 필요했다
저장(flip-flop)
이렇게 사람이 자주 쓰는 10진법을 컴퓨터로 표현하기 어렵기 때문에
간단하게 특정 전압을 넘기면 1이라고 생각하고, 특정 전압 아래라면 0이라고 생각하기로 하는 이진법이 컴퓨터에 도입되었다.
이전 글에서 생각해보면 컴퓨터가 이진법을 사용하기 위해서 저장해야하는 것은 '특정 전압을 넘긴 상태', '특정 전압보다 아래인 상태' 이 2가지 상태를 저장해야한다는 것을 알 수 있다.
이 2가지 상태는 서로 겹치지 않는다 (특정 전압을 넘겼는데 그것보다 전압이 아래인 경우는 생기지 않는다)
그렇기 때문에 '특정 전압을 넘기는지 아닌지' 여부만 저장하면 되는 것이다.
이 기준을 저장하는 최소 단위를 'bit' 라고 약속했다.
그리고 이 최소 단위를 저장하기 위해 고민을 하다가 '플립플롭(래치)' 라고 불리는 회로를 만든 것이다.
플립플롭(래치) : 1bit 의 값을 저장할 수 있는 회로
이렇게 1개의 bit 로 0, 1 이라는 값을 표현할 수 있게되었다.
하지만 사람들이 필요로 하는 계산은 0과 1에 대한 계산만 있는게 아니었다.
0과 1보다 더 큰 수를 이진수로 변환해서 계산하기 위해서는 여러 개 의 bit 가 필요했다.
그래서 여러 개의 bit 를 묶어놓은 단위를 만들었는데, 이렇게 우리에게 익숙한 byte 라는 단위가 생겨난 것이다.
byte 라는 단위는 bit 가 8 개 모여있는 단위로, 마치 1mm 가 10개 모이면 1cm 로 부르기로 약속한 것과 같은 것이다.
이 bit 를 담을 수 있는 저장 장치는 다양하게 발전해서 현대 컴퓨터의 레지스터, 캐시 메모리, 램, SSD, HDD 가 만들어졌다
연산(AND, OR, XOR)
저장하는 부분은 정해졌다. 그렇다면 이 두 0과 1만 가지고 어떻게 복잡한 계산을 해야할까?
다행이도 참과 거짓을 0 과 1로 대입해서 계산하는 '불 대수' 가 있어서 이걸 사용하면 될 것 같다
불 대수는 참과 거짓을 다루기 위한 논리체계 였고, AND, OR, XOR, NOT 같은 연산이 정의되어 있었다.
그렇기 때문에 논리 체계를 위해서 만들어졌던 AND, OR, XOR, NOT 등의 연산 개념을 비슷한 성질을 가진 전기회로에서의 연산을 위해 도입한 것이다.
그렇다면 연산을 하기 위해서 또 어떤 것이 필요할까?
연산을 하기 위해서는 실제로 '전압(전위차)' 를 변경할 수 있어야한다.
즉, 상황에 따라 0인 상태를 1로, 1인 상태를 0으로 만들 수 있어야한다는 것이다.
그렇게 하기 위해서 만든 것이 '논리회로(논리 게이트)' 인 것이다
불 대수의 논리연산을 차용했기 때문에 논리 회로 역시 동일한 연산을 한다
AND : 입력값 2개 중 하나라도 0 이면 0
OR: 입력값 2개 중 하나라도 1이면 1
XOR: 입력값 2개가 같으면 1, 아니면 0
NOT: 입력값이 1 이면 0 으로, 0 이면 1 로 반전시킴
이렇게 만들어진 논리 회로들을 조합해서 다양한 계산 회로를 만들 수 있다
예를 들면 AND, OR, XOR 논리회로를 조합해서 '반가산기' 를 만들고
반가산기 + 반가산기 + OR 논리회로를 조합해서 '전가산기' 를 만드는 것들이 가능한 것이다.
이렇게 여러 논리회로의 조합을 통해서 컴퓨터에서 사용되는 산술연산과 논리연산을 수행할 수 있는 '산술 논리 장치 (ALU: Arithmetic and Logical Unit)' 가 생겨났다
이제 계산을 위해서 값을 '저장' 하고 '연산' 하는 방법을 알았다.
만약 계산을 위해서 컴퓨터 전체에 저장되어있는 값이 2개밖에 없고(저장 공간이 2개 뿐인 상황), 이 값들을 저장하는 저장공간에 연산을 수행하는 회로가 연결되어있다면(계산을 위한 논리회로가 1개만 지정된 상황) 컴퓨터는 '저장' 과 '연산' 만으로 계산을 수행할 수 있을 것이다.
하지만 이렇게 단순히 저장공간이 2개 밖에 없고 연산 회로가 1개만 있는 경우에는 그 값들만 계산하기에는 더 복잡한 계산을 수행할 수 없고, 중간 결과 값이나 최종 결과값을 저장하기 위해서 기존의 값을 덮어써야하는 등의 문제가 생길 수 있다
그렇기 때문에 추가적인 저장공간이나 논리회로가 필요하게 되는데, 이 순간부터 문제가 생긴다.
- 저장장치의 어디에 저장된 값을 가져올 것인지
- 여러 연산 중에 어떤 연산을 수행할 것인지
- 계산한 결과를 저장장치의 어디에 저장할 것인지
그렇기 때문에 이 '어디에서 값을 가져오고 어떻게 처리할지' 에 대한 문제를 해결하기 위해 '제어' 라는 요소도 컴퓨터에 필요하게 되었다.
제어 (CU - Control Unit)
예를 들어 전쟁이 끝나고 실제로 들어간 군사비용을 계산하는 프로그램을 작성하는 상황이라고 가정해보자
- 본국이 지출한 무기와 식량 비용을 합친다
- 적국이 지출했을 무기와 식량 예상 비용을 합친다
- 적국이 지출한 비용에서 본국이 소모한 비용을 뺀다
- 빼서 나온 결과값에 따라 '(손해/이득) 봤습니다' 라고 알려준다
간단하게 이런 계산들이 필요하다고 가정해보면 아마 아래와 같은 과정을 거치게 될 것이다.
- 본국이 소모한 무기와 식량 비용을 합친다
- 저장공간의 위치 1에 있는 값을 가져와서 첫 번째 인자로 넣는다
- 저장공간의 위치 2에 있는 값을 가져와서 두 번째 인자로 넣는다
- 첫 번째 값과 두 번째 값을 더한다
- 더한 결과값을 저장공간의 위치 3에 저장한다
- 적국이 지출했을 무기와 식량 예상 비용을 합친다 - 저장공간의 위치 4에 있는 값을 가져와서 첫 번째 인자로 넣는다
- 저장공간의 위치 5에 있는 값을 가져와서 두 번째 인자로 넣는다
- 첫 번재 값과 두 번째 값을 더한다
- 더한 결과값을 저장공간의 위치 6에 저장한다
- 적국이 지출한 비용에서 본국이 지출한 비용을 뺀다 - 저장공간의 위치 6에 있는 값을 가져와서 첫 번째 인자로 넣는다
- 저장공간의 위치 3에 있는 값을 가져와서 두 번재 인자로 넣는다
- 저장공간의 위치 6에 있는 값에서 위치 3에 있는 값을 뺀다
- 뺀 결과값을 저장공간의 위치 7에 저장한다
- 결과값에 따라서 '(손해/이득) 봤습니다' 문구를 띄운다 - 저장공간의 위치 7에 저장된 값을 불러온다
- 저장공간의 위치 7의 값이 양수면 저장공간의 위치 8에 있는 '이득 봤습니다' 라는 값을 불러온다
- 저장공간의 위치 7의 값이 음수면 저장공간의 위치 9에 있는 '손해 봤습니다' 라는 값을 불러온다
이 일련의 명령 과정들이 컴퓨터의 저장공간에 적히게 될 것이고, 컴퓨터는 이 명령과정을 해석하면서 하나씩 실행하게 될 것이다.
즉, 컴퓨터에서의 제어란 '어떤' 위치에 있는 값을 '어떻게' 계산할 것이냐를 정해주는 것이고
추가적으로 해당 명령이 끝나고 난 다음에 어떤 위치로 가는지 알려주는 것이 필요하다.
나중에 다양한 입출력 장치들도 컴퓨터에 연결되게 되면서 컴퓨터의 제어 기능은 이런 입출력 장치들의 제어도 포함하게 되었다.
이로써 간단하게 초기 컴퓨터의 저장, 연산, 제어에 대해서 알아보았다.
'컴퓨터 과학 > 프로그래밍 기초' 카테고리의 다른 글
4 - 서브루틴과 함수 (+ 컴파일러) (0) | 2025.03.27 |
---|---|
3- 초기 프로그래밍의 변수 (0) | 2024.12.17 |
2- 컴퓨터의 구조와 핵심 (0) | 2024.12.17 |
0-컴퓨터란? (1) | 2024.11.10 |