RAM에는 실행할 프로그램의 명령어와 데이터가 저장된다.
RAM은 휘발성 저장 장치이기 때문에 전원이 차단되면 저장된 내용이 사라진다.
RAM은 용량이 크면 프로그램을 동시에 실행하는데 유리하다. 여러 프로그램을 실행할 때, RAM 용량이 작다면 보조기억장치로 부터 프로그램 데이터를 가져오는 과정을 반복해야하지만 RAM 용량이 크면 RAM에 충분한 데이터를 저장할 수 있기 때문에 실행 속도가 빨라진다.
메모리에는 물리 주소와 논리 주소가 있다. 물리 주소는 메모리 하드웨어가 사용하는 주소이고, 논리 주소는 CPU와 실행 중인 프로그램이 사용하는 주소이다.
물리 주소는 실제 메모리의 하드웨어상의 주소를 의미한다.
반면 CPU와 실행 중인 프로그램이 0번지 부터 사용하게 되는 주소를 논리 주소라고 한다.
예를 들어 게임과 브라우저가 실행되고 있다고 가정했을 때 게임의 논리 주소는 0번지부터 N번지까지 이고 브라우저는 0번지부터 M번지까지 사용한다. 둘의 주소가 겹치는 주소가 있지만 실제 물리 주소는 다른 주소를 가지게 된다.
CPU가 메모리와 데이터를 주고 받기 위해서 논리 주소는 물리 주소로 변환이 이루어져야한다. CPU와 주소 버스 사이에 위치한 메모리 관리 장치(MMU)에 의해서 수행된다.
만약 하나의 프로그램의 명령어가 다른 프로그램의 메모리 주소에 접근을 하려고 한다면 그 명령어는 실행되어서는 안된다. 프로그램의 논리 주소 영역을 벗어났기 때문이다. 서로 다른 프로그램의 명령어로부터 각 메모리를 보호를 담당하는 한계 레지스터가 있다.
베이스 레지스터는 프로그램의 물리 주소 시작 번지를 저장하고 한계 레지스터는 논리 주소의 최대 크기를 저장한다.
예를 들어 A프로그램은 베이스 레지스터에 100, 한계 레지스터에 150이 저장 되어 있다면
물리 주소 100번지~250번지까지 메모리를 사용하고 있다. 만약 A프로그램의 명령어가 200번지를 삭제하라고 명령한다면 물리 주소 300번지(100+200)를 삭제하라고 명령하는 것이기 때문에 실행되어서는 안된다.
만약 명령어가 논리 주소를 벗어난 접근을 명령했을 때 인터럽트를 발생시켜 중단시킨다.
CPU와 메모리 사이에는 캐시 메모리가 존재한다. CPU가 메모리에 접근하는 시간은 CPU의 연산 속도 보다 느리기 때문에 이를 극복하기 위한 장치가 캐시 메모리다.
CPU가 데이터를 메모리에서 직접 가지고 오는 것이 아닌, 캐시 메모리에 저장된 데이터를 가져오기 때문에 접근 속도를 줄일 수 있다.
컴퓨터에는 여러 개의 캐시 메모리가 있다. L1, L2 캐시는 CPU(코어) 내부에 있고, L3 캐시는 코어 외부에 위치하고 있다.
하드 디스크는 자기적인 방식으로 데이터를 저장하는 보조기억장치이다. 대용량 데이터를 저장하기 위해서 사용하는 장치이다.
하드 디스크 내부에는 플래터라는 원판 장치가 있고 0과 1의 역할을 수행하는 수많은 N극과 S극을 저장한다. 플래터는 스핀들이라는 장치가 회전시키게 된다.
하드 디스크가 저장된 데이터에 접근 하느 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉜다.
플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치이다. 플래시 메모리 기반의 보조 기억 장치는 USB 메모리, SD카드, SSD 등이 있다.
플래시 메모리에는 셀(cell)이라는 단위가 있다. 플래시 메모리에 데이터를 저장하는 가장 작은 단위이다.
하나의 셀에 몇 비트를 저장할 수 있는지에 따라 플래시 메모리 종류가 나뉜다.
플래시 메모리는 읽기/쓰기의 단위와 삭제의 단위가 다르다.
읽기/쓰기는 페이지 단위로 이루어지고 삭제는 블록 단위로 이우렁진다. (셀이 모여 만들어지는 단위가 페이지, 페이지가 모여 만들어지는 단위가 블록)
RAID는 보조기억 장치의 데이터 안정성과 높은 성능을 위해 여러 개의 물리적 보조기억장치를 하나의 논리적 보조기억장치처럼 사용하는 기술이다.
입출력장치는 종류가 다양하고 장치마다 전송률도 다르다. CPU와 메모리, 입출력장치 간의 통신을 어렵게 한다.
이런 이유로 장치 컨트롤러를 사용한다. 입출력 제어기, 입출력 모듈 등으로 다양하게 불린다.
장치 컨트롤러는 CPU와 입출력장치 간의 통신을 중개하고 오류 검출, 데이터 버퍼링 등을 수행한다.
데이터 버퍼링은 전송률이 높은 장치와 낮은 장치 사이에 주고 받는 데이터를 버퍼 라는 임시 공간에 저장하여 한꺼번에 처리하여 전송률을 맞추는 방법이다.
장치 드라이버는 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 해주는 프로그램이다.
CPU는 어떻게 장치 컨트롤러와 정보를 주고 받을까
프로그램 속 명령어로 입출력장치를 제어하는 방법이다. CPU가 장치 레지스터들과 정보를 주고 받는 방식은 두가지다.
이 글은 한빛미디어의 혼공학습단 활동을 하며 적는 글입니다. 혼자 공부하는 컴퓨터 구조+운영체제 책을 참고하여 작성되었습니다.
혼공시리즈: https://hongong.hanbit.co.kr/