회고록 블로그

[공부 쉬어가기] 컴퓨터 구조에 대한 궁금증 본문

3. Computer Science 공부/준비사항

[공부 쉬어가기] 컴퓨터 구조에 대한 궁금증

김간장 2021. 8. 24. 16:30

Java 공부하다가 자꾸 다른 생각에 빠져서 잠시 쉬어가려고 한다..ㅠ


학부시절, 컴퓨터 구조를 배웠는데

그때 자주 들었던 말은 "컴퓨터에서는 정보가 0과 1로 표현된다"는 말이었다.

 

그리고 그 정보의 가장 작은 단위는 비트(bit)이고,

컴퓨터가 정보를 처리할 때 사용하는 가장 기본적인 단위는 바이트(단위로는 'B'로 표현한다)인데

비트가 8개 모이면 바이트이다. 등등.

 

그러면서

'1킬로바이트(단위로는 'KB'), 1메가바이트(단위로는 'MB'), 1기가바이트(단위로는 'GB')를 바이트로 표현하시오'와 같은 문제를

풀기 위해 항상 암기를 하고, 손으로 1024*1024를 계산하려고 했던 (ㅜㅜ) 기억이 남아있다.

(참고로, 1킬로바이트는 1024바이트이며 1메가바이트는 1024*1024바이트이다)

 

 


 

CPU와 메모리에 대해 배웠을 때, 솔직히 멘붕에 빠졌었다.

당시 1학년이었고, 처음 배우는 내용이니까 혼란스러울만 하긴 했다.

 

멘붕에 빠지며 가장 많이 고민했던 내용은

1) "고작 그 작은 반도체(=CPU, 메모리 등) 안에서 어떻게 산술연산처리가 가능하다는 거지?'

2) "정보가 0과 1로 되어 있는데 어떻게 전깃줄을 통해서 전달된다는거야?' 였다.

 

솔직히 아직도 첫번째 고민에 대한 완벽한 해답은 못찾았다.

컴퓨터를 뜯어본 사람들은 알겠지만 CPU는 정말 작다. 안에 여러가지 납땜이 되어 있는 것 같긴 한데

운영체제와 같은 특정 기능을 하는 프로그램을 심어둔 것도 아닐텐데...

 

어떻게 그 작은 반도체 안에 납땜(?) 몇 백번, 몇 천번, 몇 십만번으로 인해서

비트의 연산(쉬프트 연산, AND연산, OR 연산 등)이 가능하다는 것인지 이해가 되지 않았다.

 

 

※ 컴퓨터는 정보를 0과 1로 표현한다고 했다.

개발자가 소스코드를 작성하고 만들어진 프로그램도 컴파일하면 0과 1로된 바이너리 코드가된다.

(컴퓨터는 이 바이너리 코드를 이해할 수 있음)

 

그리고 그 0과 1을 CPU가 이리저리 잘 연산했을 때 우리가 컴퓨터로 하는 작업들이 가능한 것이다.

학생 시절, C언어 배울 때 '왜 비트(bit)연산자를 배우지?', '굳이 개발자가 비트(bit)를 연산할 일이 있나?' 싶었는데

최근에는 개발자가 CPU와 더 가깝게 일을 할 수록 비트 연산이 필요할 수 있겠다는 생각이 들었다.

 

 

당시에는 진짜 너무 궁금해서 밤잠을 설칠 정도였다. 삼성전자에 무작정 전화해서 물어보고 싶을 정도였다.

지금이야 뭐...

'그것이 심도 깊은 전자공학의 영역'인 것을 알게 되어서, 세부적으로 이해하는 것을 포기했다.

 


 

어쨌든 첫번째 고민은 그렇다고 하고,

두번째 고민에 대한 대답은 나중에 전산기 구조와 네트워크에 대해 공부할 때 스스로 깨달았다.

물론 심도 깊고 정확하게 알아 낸 것은 아니고 얼추 이럴 것이다 하면서 이해했다.

 

'0과 1로 정보를 표현한다'는 것은 컴퓨터(리눅스의 커널이나 운영체제 등)가 정보를 표현하는 방법이었다.

 

예를 들어 사용자가 "안녕하세요"를 누군가에게 보내고 싶다면

컴퓨터는 그 내용을 0000111000101010100010100011101011101...과 같이 컴퓨터가 이해할 수 있는 방식으로 표현한다.

 

그리고 '0일 때에는 전압이 발생하지 않도록 하고, 1일 때는 전압이 발생하도록 하자' 라는 구분점을 이용해서 전류를 만들고,

물리적인 전깃줄로 그 전류를 흘려 보내고,

흘러흘러 리피터, 스위치, 라우터 등 장비를 거쳐 그렇게 목적지로 전기신호가 도착하는 것 같다.

 


최근에 다시 정확한 내용이 궁금해져서 서칭을 좀 했는데

역시 사람 사는 곳은 다 비슷한지 이 궁금증을 해결할 수 있는 글을 발견했다.

 

https://m.blog.naver.com/azure0777/221375130714

 

컴퓨터의 작동 원리

이 게시물은 https://www.a-mean-blog.com/ko/blog/자바스크립트로-프로그래밍-입문/_/자바스크립트로-프로...

blog.naver.com

 

1과 0은 "전압이 충분함", "전압이 충분하지 않음"으로 표현되는 것이라고 한다.

자세한 내용은 글을 찬찬히 읽어보면 좋을 듯 하다.


또한, 글을 읽다보니 첫번째 궁금증에 대한 답을 찾은 것 같은데

트랜지스터(작은 소자)는 전류의 흐름을 컨트롤하는 회로구성에 있어서 정말 중요한 요소인데

베이스, 이미터, 컬렉터로 이루어져 있다고 한다.

그 작은 소자들을 이리저리 연결하고, 잘 배치(?)해서 논리 게이트라는 것을 만들 수 있는 것 같다.

 

그리고나서 그 논리 게이트를 수십개, 수백개 이리저리 잘 배치하고, 잘 연결하고,

정해진 규칙(특정 전압 이상의 전류가 통과하면 이미터에 어떤 신호를 줌 등)에 따라 움직이도록 하면

아무 기능도 없는 금속덩어리에서 산술연산처리를 할 수 있는 뛰어나고도 놀라운(?) CPU로 변신하는 것 같다.

 

 

예전에 CPU를 뜯어본 적이 있는데, 그 네모 반듯한 칩 안에는 금색의 오돌토돌한(?) 것들이 있었다.

그것들이 트랜지스터 였나보다.


고등학교 때, 물리 교육에서 베이스/이미터/컬렉터를 배웠던 것 같은데 여기서 다시 볼 줄 몰랐다.

 

알면 알수록 전자/전기공학의 세계는 정말 대단한 것 같다.

그걸 응용해서 반도체를 만들어낸 사람도 정말 대단하고..

 

 

Comments