컴퓨터를 크게 두 부분으로 나눈다면 하드웨어와 소프트웨어로 구분할 수 있다
쉽게 생각해 우리가 손으로 만질 수 있는 물리적인 장치를 하드웨어라고 하며
이런 하드워드에 기록된 순수한 정보(information)를 소프트웨어(정보화기기)라고 한다
하드웨어와 소프트웨어가 함께 상호작용을 하며 원하는 일을 수행하게 된다
컴퓨터가 어떻게 일을 하는지 아주 간략하게 설명해보자면,
유저가 게임을 할 때 입력장치(키보드와 마우스 등)을 사용해
컴퓨터에게 어떤 정보를 제공한다
"내가 로그인을 할거야", "내가 게임 캐릭터를 만들거야", "내가 이쪽으로 이동할거야"
우리가 의도한 기능을 컴퓨터가 수행한 다음
출력장치(모니터, 스피커 등)을 통해 수행한 결과를 내보내게 된다
이러한 과정은 아래에서 더 다루기로하고, 본체 내부에 대해 조금 더 자세히 알아보자
ROM
과 RAM
으로 나누어진다 ROM
과 휘발성 메모리인 RAM
의 특성 때문에 데이터를 읽는 속도가 보조기억장치에 비해 상대적으로 빠름HDD
와 SSD
가 있음
가장 먼저 전원을 누르면 전원 공급장치(power supply)가 메인보드에 전기를 공급하게 되고, 그 안에 있는 부품들까지 쭉 전기가 공급된다
제일 먼저 보게 되는 것은 메인보드 제조사의 로고이며, 그 후 처음으로 작동하는게 ROM BIOS
이다
BIOS는 운영체제 중 가장 기본적인 소프트웨어이자 컴퓨터의 입출력을 관리하는 펌웨어로, 주변 장치(하드웨어)와 컴퓨터 운영체제(소프트웨어) 사이의 데이터 흐름을 관리한다
즉, 메인보드가 처음 시작될 때의 절차들을 담고 있는 것이다.
이 때 하드웨어가 정상적인지? 그래픽 카드를 업그레이드 하지 않았는가 등등을 검사한다.
그 다음 단계에서는 운영체제가 실행이 되는데 이 운영체제도 하나의 프로그램이며, 데이터 형태로 존재하기 때문에 보조기억장치에 저장이 된다
CPU는 보조기억장치에 직접 접근할 수 없다
운영체제는 보조기억장치에 저장되어 있는데, 그렇다면 CPU가 운영체제를 어떻게 실행시킬까?
밑에서 자세히 설명하겠지만 간단하게 설명하자면, 보조기억장치에 있는 운영체제를 주기억장치로 복사를 하여 CPU가 주기억장치와 교류하며 작동을 하게된다
부팅을 시킨다는 것은 운영체제를 주 기억장치로 옮기고,
CPU는 주기억장치와 교류하며 운영체제를 실행시키는 것을 의미한다
운영체제가 없으면 우리가 기능을 수행하는데 매우 어려움을 겪는다
운영체제가 어떤 일을 해주는지 간단하게 알아보자
예를 들어 우리가 포토샵으로 작업을 하고싶다고 가정해보자
우리는 하드웨어로 입력을 하고 출력을 받게되는데
과거에는 하드웨어를 다루는 장치를 각각 따로 만들었다
그래서 프로그래머가 프로그램을 만드는 데 있어서 해야할 일이 엄청나게 많았다
어떤 프로그램을 실행시키기 위해선 카드를 집어넣고, 카드의 구멍에 따라 명령을 받고 계산하여 출력하는 식이었다
이러한 배경이 OS의 개발로 이어지게 된 것이다
예전의 컴퓨터는 용도에 따라 기기를 다르게 쓰고, 카드도 다르게 써야했다면
지금의 컴퓨터는 컴퓨터 한 대로 모든 프로그램을 실행시킬 수 있다
즉, 운영체제가 수많은 하드웨어와 소프트웨어를 제어하는 기능을 하게된 것이다
이 때 커널이라는 부분이 중요한데, 운영체제에서 가장 중요한 부분이다
커널은 응용프로그램과 하드웨어를 중재해주는 일을 한다
우리가 컴퓨터를 사용할 때 프로그램을 하나만 실행시키는 것이 아니라,
여러 프로그램을 실행시키며 작업을 하게되는데
이 때 여러개의 프로그램이 작동하고, 단 하나의 CPU를 사용한다면
어떤 일을 먼저 수행할지에 대한 경쟁을 하게된다
이 때 CPU와 메모리 자원들을 관리해 주는 것도 운영체제가 하는 일이다
여기서 말하는 bus는 우리가 생각하는 그 bus와 같은 의미이다
이 bus들은 데이터를 싣고 다니는데, 더 구체적으로 말해서 이진수를 싣고 다니는 bus이다
CPU와 메모리가 직접적으로 왔다갔다 할 수 없기때문에
이 bus를 통해 교류를 한다
앞에서 보았듯 연산은 CPU가, 정보저장은 메모리가 한다는 것을 알았다
여기서 캐시 메모리는 무엇일까
메인 메모리와 CPU간의 데이터 속도 향상을 위한 중간 버퍼역할을 하는 메모리이다
이를 통해 전체 시스템의 성능 개선을 시킬 수 있다
실제 메모리와 CPU 사이에서 빠르게 데이터 전달을 하기 위해 미리 데이터들을 저장해두는 메모리이다
메모리에서 CPU에서 정보를 보낼 때 자주 보내는 것들을 미리 저장해 두었다가 캐시 메모리에서 바로 들고온다고 이해하면 쉽다
자기테이프 같이 데이터를 순차적으로 접근하는 방식이다
데이터의 위치에 따라 시간이 달라진다
예를 들어 데이터가 살고 있는 집 주소를 1번지 2번지 3번지.. 라고 가정하자
원하는 데이터를 찾아가고 싶은데 집 주소를 모른다면
우리는 순차적으로 모든 집을 다 방문하게 될 것이다
이렇듯 순차적으로 데이터에 접근하는 것이 순차접근의 개념이다
우리가 데이터가 살고 있는 집 주소를 알면 바로 가서 찾을 수 있다
어디든 접근할 수 있다고 해서 임의접근, 랜덤접근이라고도 불린다
기억 장소에 관계없이 동일한 접근 시간이 걸리는 접근방식이다
임의접근이 잘 되도록 만든 장치가 위에서 말한 RAM이다
CPU와 메모리가 어떻게 정보를 주고받을까?
임의 접근이 가능하도록 구조가 만들어졌기 때문에,
data bus와 address bus가 나누어 져있는 것이 핵심이다
몇 번지에 데이터가 존재하는지 주소를 싣고다니고(address bus)
그 번지수의 데이터를 받아 싣고다닌다(data bus)
그리고 이 데이터를 보낼건지 받을건지의 신호를 싣고 다닌다(control bus)
C언어에 포인트가 있는 이유가 address bus 때문이다
더 자세한 내용은 공부를 해봐야하겠지만...
하드웨어 제어는 포인터가 더 유리할 수 있으며,
속도가 다른 언어에 비해 훨씬 빠른 이유가 여기에 있다
CPU가 사용하는 언어는 기계어(2진수)이다
머신코드라고도 불리고, 머신랭귀지라고도 불린다
우리는 기계어를 이해하지 못한다
기계어로 프로그래밍한다는 것은 현실적으로 불가능한 이야기다
사람에게 조금 더 가까운 언어가 어셈블리 언어인데,
우리는 load, add, store와 같은 언어는 이해할 수 있다
이렇듯 기계어로 되어있는 언어를 인간이 인식할 수 있는 것으로 바꾸어 주는 것이 니모닉
이라 한다
CPU가 기본적으로 수행하는 명령은 그렇게 많지 않다
숫자를 더하고, 비교하고, 저장하고, 받아오는 등의
기본적인 작업들을 조합해서 복잡한 기능을 수행하는 것이다
제어 장치는 프로세서의 조작을 지시하는 역할을 해준다
산술 논리장치는 우리가 생각하는 연산작업을 하고 논리를 따지는 부분 즉 계산을 하는 역할을 해 준다
레지스터는 CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치를 말한다
너무 유익해요