1%의 프로그래밍 작동 원리 - 성공과 실패를 결정하는
가와마타 아키라 지음, 권기태 옮김 / 성안당 / 2019년 8월
평점 :
장바구니담기


프로그래밍에 대한 구체적인 설명이 나오기 전에 아날로그와 디지털의 차이점을 설명하고 왜 디지털을 선호하는지 알려준다.

아날로그는 예를 들면 음계의 도와 레 사이의 음을 짚어낼 수 있는 것이다. 하지만 외부환경에 의해 미묘한 변화를 쉽게 받아드리므로 정확한 답을 도출하려면 철저하게 환경설정을 해야 한다. 디지털은 일정한 값에 대해 일률적으로 수치화 함으로써 주변 환경에 민감하지 않다. 그래서 남극이던 적도 부근이던 동일하게 동작하는 기기를 만들어낼 수 있는 것이다.

값 도출 논리에 대해서는 입력 데이터와 조건에 따라 o,x로 나누고 이것을 true, false라고 표현하며 다시 0,1이라고 한다. 논리의 종류는 양, 음의 논리가 있고 조건의 종류는 and, or, not, xor가 있다. 양, 음이 바뀌면 조건도 반대로 인식하면 된다.

입력 데이터의 종류는 0,1,부호(음,양), 소수점 이하의 수가 있으며 소수점 이하도 이진수로 표현할 수 있다. 예를 들면 -0.5는 -0.1, -0.25는 -0.01이다.

흥미로운 사실은 어차피 디지털은 아날로그와 다르게 미묘한 것을 표현하지 못하기 때문에 각종 오버플로 값을 1을 더하여 동일시 한다. 이렇게 함으로써 CPU의 용량을 줄일 수 있다. 그리고 덧.뺄셈 기능을 모으기 위해 음양의 종류를 통일할 수 있는데 예를 들면 음수를 2의 보수(모든 비트를 반전 후 1을 더함)로 표현하는 시스템이 있다. 현재 컴퓨터나 스마트폰으로 활용되고 있다.

이런 논리의 활용으로 귀결되는 것은 CPU용량을 줄이고 기계 부속품을 줄이는 것이다.

2장에서는 CPU(중앙처리장치) 구조와 활용에 대한 내용이다. 모든 부품이 서로 만나 처리하도록 하려면 부속이 10개 일 때 통신 전선은 90벌, 개개의 통신선은 64비트로 부속 하나와 연결할 경우 64벌의 전선이 필요하고 합계 5,760벌의 전선이 필요하다. 이럴 경우 전선 배열이 복잡하고 고장 없이 가동시키는 것은 매우 어렵다. 이 모든 부품을 한 세트에 전선으로 집속하여 공유할 수 있도록 하는 것이 있는데 이 전선을 '버스'라고 부른다. 동시에 사용하면 쇼크가 일어나므로 시분할 해야하고 시분할에서 사용하는 버스를 시분할 버스라고 한다. 이후 내.외부버스, 주소버스에 대한 설명이 이어진다.

Intel8080은 8진수, 16진수 보다 친숙한 표기를 통해 프로그램을 기술하고 명령을 이행하도록 하는 것이다. 이 언어를 어셈블리 언어라고 하고, 번역하는 것을 어셈블이라고 한다.

이후로 원하는 값을 도출할 수 있는 수단으로써의 논리들을 열거하고 CPU에서의 연산작용에 대해 설명한다.

3장은 시스템 관련이다. 기억장치, RAM, ROM, 백업, 캐시메모리, 특정 주소에서 이용 가능한 메모리 뱅크 전환 등 작동논리, 그리고 입출력 장치의 종류와 설명, 종류별 제어기(컨트롤)에 대한 설명, 이외에도 텍스트 VRAM 과 그래픽 VRAM, 사운드 생성기, 디코더(코드를 컴퓨터가 명령을 이행할 수 있게 변환), 클럭 생성기(동작의 기준이 되는 신호를 만들어 냄), 버스버퍼, 키보드와 마우스 인터페이스, 전원(전력 공급), 각종 기능이 있는 부품 탑재를 위한 보드에 대해 설명 및 초창기부터 현재까지의 활용내용을 덧붙인다.

4장은 펌웨어는 시스템이 리셋될 때 최초로 실행되는 소프트웨어이다. 구동 스타일은 여러 가지일 수 있으며 구동 순서와 그에 대한 설명이 이어진다.

5장은 운영 체제(OS)편이다. 역할은 크게 두 가지인데 인간을 위한 셸 기능과 프로그램을 위한 API(Application Programming Interface 프로그래밍 접근 적용)이 있다.

API처리를 위해 BDOS(Basic Disk Operating System)가 운용되며 하드웨어 접근이 필요할 경우 BIOS(Basic Input/Output System)를 호출한다. BIOS의 기능으로 하드웨어 초기화, 구동스타일 정하기를 들 수 있다.

6장은 어셈블러 편이다. 기계어를 사용하여 컴퓨터를 구동하도록 한다. 기계어를 16진수로 표현하도록 하거나 16진수를 기계어로 번역하도록 한다. 절대.상대.간이 어셈블러가 있으며 장.단점을 설명한다.

7장은 고급언어 편이다. 블로그 이웃 중에 C#언어 강좌를 진행하시는 분이 계시다. 책에서처럼 CPU가 어떤 운영체제든 활용 가능하니 수요가 많은 듯하다. 인터프리터와 컴파일러가 있는데 인터프리터는 입력 코딩을 해석하여 실행하도록 하는 것이고 컴파일러는 입력 코딩을 '실행 파일'로 번역하도록 한다. 최근에는 둘의 절충형 언어를 주로 쓰며 무수한 변종을 갖고 있다. 메모리 호율도 좋고, 활용도가 높다는 뜻이다.

8장은 보안이다. 보안은 기본은 복제인가 보다. 그리고 키입력 감시프로그램, 자기삭제 프로그램을 소개한다.

책은 다정하고 세심하게 풀어나가서 컴퓨터라는 딱딱한 이미지를 잊고 이야기책 읽듯 다가갈 수 있어 좋았다. 하지만 버퍼, 플래그플리플롭, 엔디언 등 각종 논리에 대한 설명과 시스템에 대해서도 아무런 정의 없이 비교나 사용에 대한 역사가 이어지는데 어떨 경우 이런 조건들을 사용하는지에 대한 예시가 부족하여 활용에 대한 이해가 어려웠다. 그리고 분야별 연혁보다는 최신형 프로그램 작동에 대한 설명이 더 자세했다면 더 흥미로웠을 것이다. 아니면역사와 저자의 개인 의견은 때로 부록으로 하고 최신 프로그램의 안내와 설명, 예시 위주로 편성되었다면 더 일목요연하지 않았을까 한다. 부록은 선물같이 느껴졌을 듯.

이 책은 컴퓨터에 대한 전체적인 흐름 체크에 편리하며 프로그래밍 분야 전문대 이상의 지식을 가지고 봐야 각종 논리에 대한 구체적인 사항을 이해하여 원하는 데로 적용할 수 있을 것이다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo