
누구나 프로그래밍을 공부하면서 어떤 책이나 강의에 있는 코드를 똑같이 따라 작성했는데도 제대로 작동하지 않았던 경험이 있을 것이다.
또는 개발 환경에서 잘 돌아가던 코드도 배포 환경에서는 실행이 되지 않을 수도 있다.
코드상의 문법적인 오류가 아닐 확률이 높은데, 이럴 때
컴퓨터 구조에 대해서 파악하고 있다면 원인을 빠르게 찾고 문제 해결의 실마리를 빨리 찾을 수 있을 것이다.
결국 개발자란 코드를 작성하는 사람이 아니라 컴퓨터와 관련된 다양한 이슈를 해결할 수 있는 사람을 칭하기 때문에 컴퓨터 구조에 대해서 반드시 알고 있어야 한다.
어떤 웹사이트를 개발했다고 가정해보자. 혼자만을 위한 프로그램이라면 로컬환경에서만 실행하면 되고 잘 돌아가기만 하면 큰 문제가 없을 것이다.
그런데 회사에서 개발한 프로그램이라면 서비스를 누군가에게 선보여야 하고 배포환경 구축을 필수이다. 배포를 하려면 서버 컴퓨터가 필요하고 서버 컴퓨터는 종류마다 다양한 성능,용량,비용을 지니고 있다.
너무 저렴한 컴퓨터를 고르면 성능이 부족하고 너무 고사양의 컴퓨터를 고르면 비용이 늘어난다. 개발자는 한정된 자원안에서 최적의 선택을 해야한다.
그런데 컴퓨터 구조에 대해 무지하다면 어느 정도 성능의 cpu, 어떤 크기의 메모리를 골라야하는지 알 수 가 없다.
프로그래밍 공부를 시작할 때 한번씩은 들어본 적이 있을 것이다.
"컴퓨터는 0과 1로 표현된 정보만을 이해한다" 이 때 0과 1로 표현되는 정보는 크게 두가지가 있는데 데이터와 명령어입니다.
컴퓨터가 이해하는 숫자,문자,이미지,영상 같은 정적인 정보를 데이터라고 한다. 이 데이터만으로는 어떤 것도 할 수 없지만, 컴퓨터는 데이터 외에도 명령어를 가지고 있다.
컴퓨터를 한마디로 정의 한다면 "명령어를 처리하는 기계"라고 말할 수 있다.
컴퓨터를 이루는 핵심 부품은 크게 네가지로 나눠지는데 중앙처리장치(cpu),주기억장치(메모리),보조기억장치,입출력장치가 있다.
컴퓨터가 이해하는 정보는 명령어와 데이터이다.
메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다. 즉 프로그램이 실행되려면 메모리에 저장되어 있어야한다.
메모리에 명령어와 데이터가 중구난방으로 저장되어 있으면 컴퓨터의 처리속도가 느려지기 때문에 정돈되어 있어야하는데 이 역할을 도와주는 것이 주소이다.
CPU는 컴퓨터의 두뇌라고 할 정도로 중요한 역할을 담당한다.
메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어를 해석하고, 실행하는 역할을 한다.
CPU는 크게 세가지로 구성되는데 산술논리연산장치(ALU),레지스터,제어장치이다.
제어신호라는 전기 신호를 보내고 명령어를 해석하는 장치이다.메모리는 실행되는 프로그램의 명령어와 데이터를 저장한다고 했지만 이 메모리는 비싸서 용량이 적고, 전원이 꺼지면 저장된 내용을 잃는 휘발성을 띄고 있다.
이 때 메모리가 상대적으로 저렴하여 용량이 크고 전기가 없어도 내용을 잃지 않는 메모리를 보조할 저장 장치가 필요했는데 이것이 보조기억장치이다. (ex. 하드디스크, SSD, USB,DVD)
입출력장치는 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치를 의미한다.
우리가 일상에서 흔히 사용하는 마이크, 스피커, 키보드, 마우스를 예로 들 수 있다.
위에 설명한 모든 핵심 부품들은 메인보드라는 판에 연결되는데 마더보드라고 부르기도 한다.
메인보드에 연결된 부품들은 서로 정보를 주고 받을 수 있는데 이는 메인보드 내부에 버스라는 시스템이 있기 때문이다.
여러 버스 가운데 컴퓨터의 네 가지 핵심 부품을 연결하는 가장 중요한 버스는 시스템 버스이다.
시스템 버스는 주소 버스, 데이터 버스, 제어 버스로 나뉘어진다.
정리

참조 : 혼자 공부하는 컴퓨터구조 + 운영체제