버스의 종류
버스는 CPU와 메모리, 주변장치 간 데이터를 주고받을 때 사용한다. 버스의 종류에는 제어 버스, 주소 버스, 데이터 버스가 있다.
- 제어 버스(Control Bus): 다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 간다. 예를 들어, 메모리에서 데이터를 가져올 때는 읽기 신호를 보내고, 처리한 데이터를 메모리로 옮겨놓을 때는 쓰기 신호를 보낸다. 즉, 제어 버스의 신호는 CPU, 메모리, 주변 장치와 양방향으로 오고 간다.
- 주소 버스(Address Bus): 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지를 알려주는 위치 정보가 오고 간다. 주소 버스는 메모리 주소 레지스터와 연결되어 있으며 단방향이다. 따라서, CPU에서 메모리나 주변 장치로 나가는 주소 정보는 있지만 주소 버스를 통해 CPU로 전달되는 정보는 없다.
- 데이터 버스(Data Bus): 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다.
버스의 대역폭은 한 번에 전달할 수 있는 데이터의 최대 크기를 말하는데 CPU가 한 번에 처리할 수 있는 데이터의 크기와 같다. 흔히 32bit CPU, 64bit CPU라고 하는데, CPU가 한 번에 처리할 수 있는 데이터의 최대 크기를 말한다. 32bit의 경우 버스의 대역폭도 32bit이고 레지스터의 크기, 메모리에 한 번에 저장할 수 있는 데이터의 크기도 32bit이다.
참고로 CPU가 한 번에 처리할 수 있는 데이터 최대 크기를 워드(word)라고 한다. 이는 버스의 대역폭과 메모리에 한 번에 저장되는 단위도 워드라는 것을 알 수 있다. 32bit CPU에서 1워드는 32bit이다.
메모리의 종류
모든 프로그램은 메모리에 올라와야 실행될 수 있다. 메모리에는 실행에 필요한 프로그램과 데이터가 존재하며 CPU와 협업하며 작업이 이루어진다. 메모리를 이루는 소자 하나의 크기는 1bit이고 0또는 1이 저장된다. 그러나 소자 하나만으로는 데이터를 표현할 수 없어 메모리 주소는 바이트 단위로 지정되고, 메모리에서 데이터를 읽거나 쓸 때에는 워드 단위로 움직인다.
메모리는 크게 두 종류로 읽고 쓸 수 있는 램(RAM, Random Access Memory)와 읽기만 가능한 롬(ROM, Random Only Memory)로 구분된다.
램은 또한 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 데이터를 ㅂ관할 수 있는 비휘발성 메모리로 나뉜다.
- 휘발성 메모리(Volatility Memory)에는 동적 램(Dynamic RAM)과 정적 램(Static RAM)이 있다. 동적 램은 저장된 0과 1의 데이터가 일정 시간이 지나면 사라지기에 다시 재생해야 한다. 정적 램은 전력이 공급되는 동안에만 데이터를 보관할 수 있다. 속도는 빠르지만 가격이 비싸다. 일반적으로 메인 메모리는 동적 램을, 캐시 같은 고속 메모리에는 정적 램을 사용한다.
- 비휘발성 메모리(Non-Volatility Memory)에는 플래시 메모리(Flash Memory)와 FRAM, PRAM 등이 있다. 플래시 메모리는 디지털 카메라, MP3 플레이어, USB 드라이버 같이 전력이 없어도 데이터를 보관하는 저장장치로 사용한다. 하지만, 플래시 메모리의 각 소자는 최대 사용 횟수가 제한되어 많이 사용하면 기능을 잃는다. 따라서, SD 카드나 USB 드라이버를 오래 사용하면 성능이 저하되거나 데이터를 잃어 버릴 수 있다. 또한, 하드디스크를 대신하도록 만든 SSD는 가격이 비싸지만 데이터 접근 속도, 내구성 때문에 컴퓨터, 노트북, 스마트폰 등에 많이 사용한다.
롬은 전력이 끊겨도 데이터를 보관하는 것이 가능하지만 데이터를 한 번 저장하면 바꿀 수 없다는 단점이 있다. 예를 들어 빈 CD는 CD-ROM이라고도 하며 데이터를 한 번만 저장할 수 있다. 롬의 종류에는 마스크 롬, PROM, EPROM 등이 있다.
메모리 보호
현대의 운영체제는 시분할 기법을 사용하여 여러 프로그램을 동시에 실행하므로 사용자 영역이 여러 개의 작업 공간으로 나뉘어져 있다. 이러한 상황에서 메모리 보호는 매우 중요한 문제이다. 만약 메모리가 보호되지 않으면 어떤 작업이 다른 작업의 영역을 침범하여 프로그램을 파괴하거나 데이터를 지울 수 있으며 최악의 경우에는 시스템을 멈출 수 있다. 이처럼 운영체제 영역이나 다른 프로그램 영역으로 침범하려는 악성 소프트웨어를 바이러스(Virus)라고 한다.
운영체제도 소프트웨어 중 하나이므로 CPU를 사용하는 작업 중 하나이다. 사용자의 작업이 진행되는(사용자 프로세스가 CPU를 차지하는) 동안 운영체제는 잠시 중단된다. 따라서, 운영체제가 중단된 상태에서 메모리를 보호하려면 하드웨어의 도움이 필요하다.
메모리를 보호하기 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터(Bound Register)에 저장한 후 작업을 한다. 또한, 현재 진행 중인 작업이 차지하고 있는 메모리의 크기, 즉 마지막 주소까지의 차이를 한계 레지스터(Limit Register)에 저장한다. 그리고 사용자의 작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어적으로 점검해서 메모리를 보호한다.
B 작업의 메모리 시작 주소 140은 경계 레지스터에, B 작업의 크기인 40은 한계 레지스터에 저장된다. B 작업이 데이터를 읽거나 쓸 때마다 CPU는 해당 작업이 경계 레지스터와 한계 레지스터의 주소값 안에서 이루어지는지 검사한다. 만약 두 레지스터의 값을 벗어나면 인터럽트(Interrupt)가 발생한다. 인터럽트가 발생하면 모든 작업이 중단되고 CPU는 운영체제를 깨워 인터럽트를 처리하도록 시킨다. 운영체제가 실행되면 해당 프로그램을 강제 종료시킨다. 이처럼 메모리 영역은 하드웨어와 운영체제의 협업에 의해 보호받는다.
부팅(Booting)
응용프로그램은 운영체제가 메모리에 올려서 실행하는데, 운영체제는 누가 메모리에 올려서 실행될까? 운영체제도 CPU에 의해 실행되기 때문에 누군가에 의해 메모리에 올라와야 한다. 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅(Booting)이라고 한다.
사용자가 컴퓨터의 전원을 키면 롬(ROM)에 저장된 바이오스(Bios)가 실행된다. 바이오스는 CPU, 메모리, 하드디스크, 키보드, 마우스와 같은 주요 하드웨어가 제대로 작동하는지 확인한다. 만약 이상이 있으면 삐 소리와 함께 오류 메세지를 출력하고, 이상이 없으면 하드디스크 마스터 부트 레코드(Master Boot Record, MRB)에 저장된 작은 프로그램을 메모리로 가져와 실행한다.
마스터 부트 레코드는 하드디스크의 첫 번째 섹터를 가리키며, 운영체제를 실행하기 우한 부트스트랩(Bootstrap) 코드가 이 곳에 저장되어 있다. 부트스트랩 코드는 운영체제를 메모리에 가져와 실행하는 역할을 하는 작은 프로그램이다.
마스터 부트 레코드에 저장되어 있는 부트스트랩이 메모리에 올라오면 하드디스크에 저장된 운영체제를 메모리로 불러온다. 따라서, 마스터 부트 레코드가 손상되면 운영체제를 실행할 수 없다. 이는 컴퓨터 바이러스의 좋은 공격 대상이 된다. 따라서, 일부 바이오스는 사용자 옵션 부분에 운영체제 보호 항목을 만들어 마스터 부트 레코드를 수정할 수 없게 한다.
'운영체제 > 기초' 카테고리의 다른 글
8. 병렬처리 (0) | 2020.10.16 |
---|---|
7. 컴퓨터 성능 향상 기술 (0) | 2020.10.14 |
5. CPU와 메모리(1) (0) | 2020.10.06 |
4. 하드웨어의 기본 구성 (0) | 2020.10.05 |
3. 운영체제의 구조 (0) | 2020.10.05 |