[3일차](홍정모의따배c)컴퓨터의 작동원리
*본 강의수기는 교수님의 모든 ppt나 코드 화면을 붙인게 아닙니다.
정리는 다시한번 제가 복습할 때 보기위함과 어떤강의인지 알려드리는 것이고
제가 적은건 이해를 돕기 위한 부연설명과 제가 이해한 몇개의 중심적인 내용이 다소
생략이 되었습니다. 이 수기를 통해 공부하려 하지말고 흥미로운 내용이라면
'인프런- 따라하며 배우는 c' 과정을 수강하시길 바랍니다.
본격적인 vs강의에 앞서 컴퓨터의 작동원리에 대해서 설명한다.
소프트웨어를 관리하고 만드는 사람이 컴퓨터 하드웨어에 정통하진 못하더라도 꼭 알아야할것은 알아야 한다.
컴퓨터의 구성요소들
컴퓨터에는 정보 입력장치와 정보 출력장치가 있다.
정보를 입력하면 출력장치에서 화면이나 여러 수단으로 띄워준다
컴퓨터는 정보를 쓰고 전달받는 장비이다.
컴퓨터를 정석적으로 배워가는 구조다
자료구조나 운영체제 객체지향같은 경우는
비전공자가 아니면 제대로 공부하기가 사실상 힘들다.
하지만 비전공자라도 어떠한 수단을통해 알아야 컴퓨터 친화적인 프로그래머가 된다고 생각한다. 그냥 내 생각이다.
c언어는 컴퓨터의 구조에 대해서 이해할 수 있는 컴퓨터와 가장 가까운 언어다.
본체를 뜯어보면 우선 가운데 회색판이 있는데 저게 중앙처리장치다
본체 맨 중앙에서 각종정보를 빠르게 처리한다.
그리고 가장근접해서 주 기억장치가 있고
보조 기억장치가 있다
주기억장치는 전원을 끄면 데이터가 사라진다.
그런데 빠르다.
보조기억장치는 전원을 꺼도 데이터가 남아있다
그런데 느리다.
주기억장치와 보조기억장치는 상호간의 장단점을 보완하는 사이다.
컴퓨터를 켤 때 일어나는 일들
우선 컴퓨터를 키면 어떻게되던가
본체가 달린 컴퓨터를 안쓴지는 오래됐지만 친근하게 직접 강의에서 컴퓨터를 켜주신다.
요롷게 불빛이 들어오게 튜닝한사람은 불빛이 들어오고 팬소리가 들릴거다.
바이오스 화면이 나온다
바이오스란 Basic Input Output System 의 약자인데 주로 컴퓨터를 만든 회사 화면이 나오고
기본적인 입출력기능만 되어있다. 여기서 운영체제를 설치해야 우리가 흔히 아는
윈도우화면이나
맥os 화면이 나온다.
정리하면 콘센트를 꼽아 전기를 공급하고 전원공급장치를 통해 전원을 키면
바이오스를 키게되고
하드웨어가 이상이있는지 없는지 판단하고
보조기억장치로부터 주기억장치를 통해 CPU가 운영체제를 실행시킨다
cpu는 보조기억장치에 직접적 접근이 불가능하다.
무조건 주기억장치를 통해서!
그래서 주기억장치의 메모리는 크면 클수록 좋다👍
운영체제가 해주는 일들
앞서 운영체제를 실행시킨다고 했다
이 운영체제에는
요러한 것들이 있다.
유닉스는 생소할텐데 내가알기로는 맥의 기반이 유닉스고
리눅스는 유닉스에서 파생되었다고 한다
많은 사용자들이 부트캠이나 패러럴즈로 리눅스를 병행해서 설치한다.
나도 필요하면 설치하겄지
구시대 프로그래머들은 일일이 하드웨어를 하나하나 조정하는 코드를 만들어서 프로그래밍 했다고 한다.
근데 그러한 것들을 편리화해서 만들어논게 운영체제라는 것이다.
컴퓨터는 왜 2진수를 사용할까?
컴퓨터는 정보를 주고받을때 이진법 즉 0,1 두가지의 숫자만 사용한다.
2진법을 사용하게 된 스토리가 궁금하다?
인프런의 따라하며 배우는 c! (광고아님)
현대적 컴퓨터의 기본구조
옛날엔 이런컴퓨터를 썼다.
바로 에니그마이시다
오우야 저 플러그보드라고 적힌곳에 배선을 연결하는것이 프로그래밍이었고 저 플로그보드 자체가 프로그램이다. 들고 다녀야 했고 실수를해도 알아보기 쉽지않다
저거를 2차세계대전때 훔쳤는데
그걸로 효율적인 프로그래밍을 만드신분이 있다
바로 엘런 튜링이다. 코드를 입력하면 결과값이 저렇게 정갈한 모양으로 용지에 인쇄되는 구조의 프로그래밍을 했다. 그의 나이 당시 열여섯, 나는 저나이 때 뭘했는가 😭
그리고 현대적 프로그래밍의 기반을 닦으신 분이 바로바로
dc인사이드 ps(problem solving)갤러리의 갤주
폰 노이만 되시겠다.
당시 맨해튼프로젝트를 진행하다가 고안해냈다고 한다.
입출력 가운데 과정에서 cpu라는 처리장치와 메모리유닛이라는 기억장치와 정보교환을 하며 처리하여 결과를 출력하는 구조다.
안에는 제어유닛, 산술유닛, 논리유닛이다.
폰노이만 구조라고만 하면 오른쪽에 그걸 발전시킨 분들이 억울하실수도 있으니 사람이름갖고만 명칭을 붙이지 말라는 의견도 있다.
쨋든 저렇게 입출력과정 사이에 기억장치와 cpu를 달아버린게 내장형 프로그램 방식의 컴퓨터다.
이거는 제대로 이해를 못했는데 하나의 시스템버스에 세가지 각각 통로가 있는데 입출력장치말고 좀더 cpu와 memory에 집중할수있게 해주는게 운영체제이고 저렇게 세가지 통로와 상단의 세가지 과정이 서로서로 교류한다.
컴퓨터 메모리의 기본구조
컴퓨터안에 있는 정보는 주기억장치에의해 복사되어서 CPU에 처리해달라하고 던져주고 CPU가 다시 뱉어낸다
내가 이해한게 맞다면 이게맞다 ㅋㅋㅋㅋ.... 죄송합니다 선생님
주기억장치엔 과거에 순차접근 방식이 있었다.
노래방책에서 원하는 곡을 검색하는걸로 예를들어보자
순차접근방식은 노래방책을 1페이지부터 하나하나 찾아가는거고
임의접근방식은 노래제목이 '삭제'다 그러면 'ㅅ'이 있는페이지로 바로 찾아가서 확인하는거다.
cpu가 일하는 과정을 보자.
주소가 왔다갔다하는 통로랑
데이터가 왔다갔다하는 통로가 분리 되어 있다.
아파트 동호수에 원하는사람을 찾는걸로 예를 들어보자
주소가 왔다갔다하는 address bus 가 있고 거기에 누가사는지 구성원은 몇명이고 평수가 얼만지 데이터가 왔다갔다하는 data버스가 있다.
컨트롤 버스를 통해 cpu가 그것을 찾는걸 제어해준다
컴퓨터의 두뇌 'CPU'의 기본구조
프로그램은 보조기억장치에 저장되어있다가 실행을 시키면 주기억장치에 복사해서 주기억장치가 사본을 가지게된다.
그 사본가지고 CPU와 상호 정보교류를 한다!
거기에 사용되어지는 것이 컴퓨터 언어인데 기계가 직관적으로 사용하는 이진법부터
지금현대에 많은 사람들이 사용하는 c c++ 파이썬 자바 자바스크립트 등이있다.
기계어에서보단 약간 인간 친화적인 어셈블리 언어는 CPU에서 사용하는 언어다.
이런데 나중에 필요하면 하나씩 배운다고 하신다.
CPU는 이렇게 움직인다 산술논리장치는 여러가지 산수를 처리하고
여러가지 레지스터들은 CPU의 책상이라고 생각하면 된다 CPU가 책상에 앉아서 여러종류의 업무를 하다니.. 설명이 너무 귀엽고 친근하다..!
자세한 강의내용이 궁금하다면 인프런-따라하며 배우는 c언어! 검색창에 따라하며 치면나온다. 광고아님
작고 소중한 CPU가 일을 하는방법
프로그램 카운터에 100을 넣어보자
주소 100부터 프로그램이 세어진다는거다 무조건 하나씩 순차적으로 센다.
100에 해당하는 프로그래밍이끝나면 다음엔 101이되고 이렇게 하다가 103까지 넘어왔을때
103의 값이 0이니 103을 세고 처리하는것을 완료했다면 프로그램은 종료된다.
100카운트 하면 일단 주소를 인지하기 위해 메모리 주소 레지스터로 보낸다
주소 100을 인식하고 메모리 데이터 레지스터로 보냈다
주소 100에는 LOAD 10이 있네? 메모리 데이터 레지스터는 주소100이 LOAD 10이라는 정보밖에 해석할 수 없다
근데 LOAD 10이 명령이라는건 알아서
명령어 레지스터로 해석한 LOAD 10이라는 정보를 보낸다
메모리 데이터 레지스터에서 주소 100의 명령을 처리하려고 보내면
그 즉시 프로그램 카운터는 1 오른다
그리고 명령어 레지스터에서 제어장치로 보내고
명령어를 처리한다. LOAD 10을 해보니 10이라는 주소가 나왔네? 주소는 어디보낼까
그렇다 메모리 주소 레지스터로 보낸다.
주소10 에해당하는 3을 메모리 데이터 레지스터에 던져줬다
주소는 주소만받고 데이터레지스터는 메모리만 받는다.
메모리 데이터 레지스터는
명령어나 주소가 아닌 메모리를 받았으면 어큐뮬레이터에 던져준다.
어큐뮬레이터가 뭔지 헷갈리는데 나는 그냥 명령어와 주소가아닌 메모리로만 되어진값을 받는 곳이라 생각했다
똑같은 작업을 프로그램이 끝날 때 까지 한다.
진짜 경이로울 정도로 설명이 훌륭한것같다.
정보의 단위
클라우드 엘우드 샤논 형님께서 정보의 단위는 비트라고 했다.
이게 그 당시 큰 파장이었다고 한다.
나도 파장을 일으키는 큰 사람이 되고 싶다 캬
CPU가 다루는 기본단위를 word라고 한다
8비트 컴퓨터 16비트 컴퓨터 32비트 컴퓨터 64비트 컴퓨터까지 현재는 나왔다.
할수있는 연산의 차이라고 나는 이해했다.
2진수
토대로 하나 실습을 해보자
럭키세븐을 -7로 만들고싶다
7을 8비트 이진수로 바꾸면
0000 0111
이거의 보수는 / 보수라는게 별다른 의미가 있는게 아니고 까뒤집어주면 된다
1111 1000
여기서 1을 더하자
1111 1001
그럼 이게 -7이란 소린데 도대체 저게 -7이란걸 어케아냐
원래 양수였던 0000 0111 을 더해보면 된다
그럼 1 0000 0000 인데 8비트에선 삐져나온 1은 없는 숫자다
그래서 0!
-7과 7을 더하면 0이니까
저게 음수가 맞다! WOW
반대로 음수가 몇인지 계산해보자
임의로 1111 0110 이라는 숫자를 내놨다
똑같이 보수로 만들고
0000 1001
더하기 1한다
0000 1010
10진법으로 바꾸면 9이다
1111 0110 더하기
0000 1010 은
1 0000 0000 이다
섹션0. 컴퓨터의 작동후기 완강 후기
재밌다.. 진짜 재밌게 배웠다.
고철덩어리들을 이렇게 쉽고 재밌게 설명해주는건 처음이다
내가 이해가 조금 늦은 편이라
주기억장치 부분이랑 CPU부분에서는
나프잘에서 두세번보면서 고민하는 과정이 없었다면 어려웠었을거 같다. 거듭 말하지만 나프잘은 좋은 책이다.
내가 책으로 하는 공부가 안맞을 뿐이다.
결론은 CPU가 어떻게 레지스터라는 책상에 앉아서 분류하고 처리하고 계산하는지 완벽히 이해했다.
이제 컴퓨터가 렉이 걸린다면 나는 이렇게 말할 수 있다
"cpu 자식아 일 좀해!!!!!"