본문 바로가기
Programming/C

[따배씨] 섹션 0. 초보 프로그래머를 위한 컴퓨터의 작동원리

by DONGKU 2020. 7. 16.

0.1 컴퓨터의 구성 요소들

 

주 기억장치(Primary Storage – Computer memory)

Random-Access Memory(RAM) : 전원을 끄면 데이터가 사라짐.(속도를 빠르게 하기 위해!, 사라지는 단점은 보조기억 장치로 보완)
Volatile type of memory. ex) SRAM(캐쉬메모리), DRAM
비교) Read-Only Memory(ROM) - 비휘발성 ex)Mask, PROM, EPROM, EEPROM
왜 Random-Access 이냐면, Ram 이 순차적으로 접근하기 보다 임의 접근으로 주소를 알면 곧바로 그곳으로 접근하는 것이 가능하기 때문이다.
그래픽스 카드.GPU(Graphics Processing Unit): 그래픽스카드 안에 들어있는 CPU
그래픽스 카드는 자체적인 cpu 와 메모리를 가지도록 발전함.(like 하나의 컴퓨터)

보조 기억장치(Secondary Storage)

※ 전원을 꺼도 데이터가 유지가 되는 보조기억장치가 별도로 필요하기 때문, 단점은 주기억장치보다 속도가 훨씬 느리다
HDD(Hard Disk drive): 물리적으로 돌아가는 부품이 있음
SSD(Solid-state Drive): 물리적으로 돌아가는 부품이 x, 그래서 속도가 훨씬 빠름
FDD(Floppy Disk Drive): 우리가 아는 플로피 디스크, 뺑글뺑글 드라이빙하면서 데이터를 읽어서 이름이 Drive, 얘보다 딱딱해서 HDD 가 Hard 가 이름으로 붙었고, 얘가 A 드라이브, B 드라이브를 썼었기 때문에 오늘날 컴퓨터가 C 드라이브부터 시작하는, 역사적인 저장장치. 이것보다도 전엔 자기 테이프를 썼었다.

0.2 컴퓨터를 켤 때 일어나는 일들

부팅 절차

전원 공급
부트 프로그램 실행 - ROM BIOS(Basic Input Output System), 메인보드가 처음 시작될때 어떤 내용들이 수행될지 절차들을 담고있음, 여기에 데이터가 저장이 되어야하기 때문에 'ROM' BIOS
하드웨어 검사 - 부트프로그램의 가장 중요한 기능중 하나, 변경이되었는지 업데이트되었는지 확인
운영 체제 로드 - CPU는 주기억장치(Ram) 과만 소통한다. 운영체제도 보조기억장치(Drive)에 저장되어 있기 때문에, 운영체제를 실행 시키려면 주기억장치(Ram)로 운영체제를 복사해옴 cpu 와 소통하면서 실행시킨다.
※ cpu는 계산(저장x)을 하고 메모리는 저장을 한다!
운영 체제 실행 - 주기억장치(Ram)로 운영체제를 복사해와 cpu 와 소통하면서 실행시킨다.
※운영체제의 도움없이 할 수 있는 일은 없다!

0.3 운영체제가 해주는 일들


하드웨어를 어떻게 이용할 것인지 운영체제와 소통하는 것을 중간에서 도와주는 것이 커널(Kernel) 이다. 커널은 ‘핵심’ 이란 뜻이 있는데, 커널이 있기에 운영체제가 컴퓨터 자원(CPU,메모리 등)을 어떻게 배분할지 하드웨어와 소통할 수 있으며, 개발자들도 일일이 하드웨어 관리할 필요 없이 운영체제에 의존할 수 있다.

0.4 컴퓨터는 왜 2진수를 사용할까?(컴퓨터 손가락은 2개?)

에디슨 필라멘트 전구 효과 - 필라멘트에 열을 가하면 전자가 방출되고 양극으로 빨려들어감, 전류: 전자의 이동
진공관 - 전자의 음극에서 양극으로 흐름을 조절(on(1)/off(0) 조절 가능), 진공관에 전자 부품들을 달아 제어하기 시작 -> 컴퓨터가 2진수를 사용하게 되는 근본적인 이유 // 집적회로는 많은 트랜지스터를 넣은 것
트랜지스터 - 진공관과 비슷하나 반도체로 만들어져 소형화와 안정성, 작은 전기 신호로 큰 전기 신호를 제어
순으로 발달함.
-극의 전자를 + 극 쪽으로 이동시키느냐 안 시키느냐 의 두가지 경우의 수에 따라 계산이 되기 때문에 이진법으로 발달.

0.5 현대적 컴퓨터의 기본 구조


옛날에는 프로그램역할을 하는 Plugboard,Enigma등이 컴퓨터 안에 들어 있는 것이 아니라 실행을 시킬 때마다 외부에서 갖다 꽂음

Stored-program computer
프로그램이 내장형으로 바뀜


cpu(연산장치)와 메모리(기억장치)가 분리되어 서로 통신하며 작업 수행
※직접 통신 하는 것이 아닌 System bus를 통해 통신

0.6 컴퓨터 메모리의 기본 구조:

 


※임의 접근이 가능하도록 만들어진 구조이기 때문에 Address bus(송신만함)와 Data bus가 분리되어 있음(몇번지에 살고 있는 누구 데이터를 갖고와라!)
메모리의 기능은 2가지뿐 - CPU에게 데이터 전송 및 CPU로부터 데이터 받아서 저장


CPU 와 RAM 은 3가지 버스를 통해 소통한다. 3가지 버스를 System bus 라고 통칭하며, address bus, control bus, data bus 가 있다. address bus 는 메모리 주소가 오가는 통로고, data bus 는 데이터가 오가는 통로다.
cpu 와 RAM은 control bus 를 통해 데이터를 저장할지, 받아올지 정하고, 각기 상황에 따라 주소와 데이터를 교환한다.
이렇게 메모리 주소가 오가는 통로를 통해 cpu 가 데이터를 저장하거나 불러오기 때문에 메모리 주소를 컨트롤하는 것은 아주 중요하고, address bus 때문에 '포인터'가 존재하는 것이다.

0.7 CPU의 기본 구조

 


어셈블리 언어의 니모닉은 사람이 이해할 수 있는 정도로 기계어를 대치 ex) LOAD 11 : 11번지에 있는 데이터를 불러옴
※cpu는 기계어를 사용


니모닉은 cpu가 수행하는 최소 단위의 작업들


구성요소: 산술 논리 장치(ALU, Arithmetic Logic Unit) + 제어 장치(Control Unit) + 여러가지 레지스터들(Registers) 로 이루어짐.

cpu에도 램(주기억장치)과 같은 특정 정보를 임시적으로 저장할수 잇는 메모리 공간이 필요한데요 이를 레지스터라고 부름
레지스터는 메모리와 가깝게 일을 함
레지스터와 메모리는 속도면에서 차이가 있음

  • 레지스터 종류:
    주소 레지스터 - 임의 접근 특징 때문에 생겨남, 포인터!
    프로그램 카운터 : 다음 명령어의 메모리 주소 저장
    데이터 레지스터 : 메모리에서 읽어온 데이터 저장
    명령어 레지스터 : 메모리에서 읽어온 명령어 저장
    어큐뮬레이터 : 연산에 사용되는 데이터 저장.

0.8 CPU 가 일하는 방법

전반적으로 제어장치(Control Unit)이 관리

LOAD 과정

0123456789

'프로그램 카운터(pc)'에 프로그램의 시작점(주소)을 던져줌(시작점이 필요하다는 개념!) 
'메모리 주소 레지스터'로 번지수 옮겨감 
메모리 주소 레지스터에 있는 주소의 접근을 해서 LOAD10을 갖고와 '메모리 데이터 레지스터'에 집어넣음 
메모리 데이터 레지스터가 읽어온 인스트럭터(LOAD 10)를 '명령어' 레지스터로 옮겨감 
'프로그램 카운터' +1(다음 번에 읽어 와야 하는 인스트럭션이 존재하는 메모리 주소를 갖고 있어야하기 때문) 
'명령어 레지스터'에 있는 인스트럭션 명령어가 '제어장치'로 들어감 
'제어장치'에서는 LOAD 10 명령어를 해독을 함 
'메모리 주소 레지스터'에 10이라는 주소를 넣어줌 
10번지 주소에 있는 데이터를 '메모리 데이터 레지스터'로 가져옴 
산술 논리 장치에서 계산할 때 도움을 받는 '어큐뮬레이터'로 감

 

ADD 과정

012345678910

제어장치로 들어가기 전까지 위과정을 반복하고 '제어장치'에 ADD 11 인스트럭터가 들어가게되면 어큐뮬레이터에 있는 데이터 3을 산술 논리 장치로 옮겨놓음
'메모리 주소 레지스터'에 11번지 주소값 넣음
'메모리 데이터 레지스터'에 11번지 주소 데이터값 '4'를 넣음
'어큐뮬레이터'에 4를 넣음
'산술 논리 장치'에 들어가 7이됨
'어큐뮬레이터'에 계산 결과 7이 감

 

STORE 과정

0123456

'프로그램 카운터'에서 메모리 주소 레지스터에 번지수 102 넣음
102번지 데이터값 'STORE 12' 인스트럭션이 '메모리 데이터 레지스터'로 들어감
'명령어' 레지스터로 'SOTRE 12' 들어감
'프로그램 카운터' +1
명령어 레지스터 인스트럭션(STORE 12)이 제어 장치로 들어감
'제어장치'는 STORE 12 해독 (12번지에 저장하라고 해독)
'메모리 주소 레지스터'에 번지수 12 넣음
※계산결과를 CPU에서 메모리로 보냄
'어큐뮬레이터'값 7이 '메모리 데이터 레지스터'로 들어감
12번지에 데이터 7이 저장

 

0.9 정보의 단위


word라는 단위는 시스템마다 다르다

윈도우의 계산기 -> 프로그래머용 계산기

음수 표현은 2의 보수를 사용

-5(맨 앞자리1)의 이진수 표현은 5(맨 앞자리0)를 2진수로 표현한 후 보수를 취하고 더하기 1

 

signed정수에서 +(맨앞자리0)일 때를 구하고 거기에 -를 붙여 값을 확인

반대라고 -1 해주는게 아니네?

 

-2^7 + 2^4 + 2^3 + 2^2 + 2 = -98
signed와 unsigned


signed 정수가 -128~127인 이유는 양수의 최대값인 11111111은 부호가 -인 01111111 이다. signed 정수의 양수는 첫비트가 1이될수 x 무조건 0!
부호가 있든 없든 256가지의 숫자 표현

 

※ 1.5의 2진수 표현은?  1.1

https://m.blog.naver.com/PostView.nhn?blogId=winzone&logNo=70175202044&proxyReferer=https:%2F%2Fwww.google.com%2F

 

소수점을 이진수로

십진수의 소수점은 2를 곱하여 계산하고 그 계산된 수의 정수 부분을 취하면 이진수의 소 수점이 됩니다 직...

blog.naver.com

십진수의 소수점은 2를 곱하여 계산하고 그 계산된 수의 정수 부분을 취하면 이진수의 소수점

 

0.625*2=1.25

 

여기서 정수 부분 1이 이진수 소수점 첫째 자리가 됩니다

 

다음엔 1을 버리고 그럼 0.25가 되네요 다시 2를 곱하고 같은 방식으로 계산하면

 

0.25*2=0.5

 

정수부분 0 이 이진수 소수점 둘째자리

 

정수부분이 0이므로 그대로 2를 또 곱합니다

 

0.5*2=1.0

 

정수부분 1이 이진수 소수점 셋째자리가 되고 이제 계산은 마무리 됩니다

 

소수부분이 0이므로 2를 곱해도 0이 되겠죠 즉 2를 계속곱하면서 1.0이 나오면 계산이 종

 

료 됩니다

 

따라서 구하려는 답은

 

0.625(10)=0.101

 

※-5.75의 2진수 표현은?

https://stackoverrun.com/ko/q/11674173

 

binary - 음수 소수 십진수를 이진수로 변환하는 방법

음수 소수 십진수를 부호있는 이진수로 나타내는 방법에 대해 질문하고 싶습니다. 예를 들어 바이너리에서는 -0.5입니다.

stackoverrun.com

예를 들어 -5.75를 이진수로 먼저 변환하려면 점의 위치와 이진수의 길이를 결정해야합니다. 숫자의 길이를 8 비트, 10 진수 4 비트, 분수 부분 4 비트로 정의 해 보겠습니다.

먼저 (양수) 5.75의 이진 표현을 찾으십시오.

 

5=0101

0.75=.1100 then

5.75=0101.1100 in 8 bits

 

음수로 변환하려면 프로 시저가 표준이며 모든 비트를 반전하고 최하위 숫자에 1을 더합니다.

 

number: 0101.1100

inversion: 1010.0011

addition of 1: 1010.0011 + 0.0001=1010.0100

 

우리의 표현이 올바른지 확인합시다.

 

bin(1010.0100) = -8 + 2 + 0.25 = -5.75   // -8이 어떻게 나오지? -> 말그대로 -2^3 = -8

 

십진수와 마찬가지로 이진수 소수점 왼쪽의 숫자는 밑수의 상승 거듭 제곱이고 오른쪽의 숫자는 감소 제곱

댓글