reference : [도서] 쉽게 배우는 운영체제

https://velog.io/@mquat/OS-%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0%EC%84%B1%EB%8A%A5

 


 

1.1 하드웨어의 구성

이전 포스팅에서도 언급했듯이, 컴퓨터는 중앙처리장치, 메모리, 입력장치, 출력장치, 저장장치로 구성된다.

메인메모리를 제2저장장치, 하드디스크나 USB를 제2저장장치(보조기억장치) 라고 부른다. 중앙처리장치는 CPU라고 한다.

 

1.1 CPU와 메모리

CPU는 인간의 두뇌와 같은 역할을 하는데, 명령어를 해석하여 실행하는 장치이다. 메모리는 프로그램과 데이터를 저장하는 곳으로, 바이트 단위로 분할되어 있다. 

 

1.2 입출력장치

입력장치는 키보드, 마우스, 터치스크린 등이 있다. 출력장치로는 프린터, 스피커, 모니터 등이 있다. 과거에는 그래픽 계산을 CPU가 담당했으나 최근 들어 3D 게임 등 많은 계산이 필요하게 되면서 그래픽카드에 GPU를 달아 계산하게 되었다. GPU는 그래픽용 CPU이다.

 

1.3 저장장치

메모리가 데이터를 처리할 때 전자가 이동하며 하지만, 하드디스크 등의 저장장치는 구동장치로 이루어지므로 속도가 느리다. 속도가 느린만큼 가격도 저렴하지만 데이터를 영구적으로 저장할 수 있다.

저장장치는 자성, 레이저, 메모리 등 저장방법에 따라 구분되는데 자성은 하드디스크, 레이저는 DVD, CD 등, 메모리는 USB, SD카드, SSD 등이 대표적이다.

 

1.4 메인보드

메인보드는 CPU와 메모리 등 다양한 부품을 연결하는 커다란 판이다. 보드 안에는 데이터를 전송하는 다양한 부품들이 복잡하게 얽혀있으며 전력이 공급되면 부품이 작동한다. 

 

1.2 폰노이만 구조

오늘날의 컴퓨터는 대부분 폰노이만 구조를 따르는데, 위와 같은 그림처럼 버스로 연결되어 있는 구조를 말한다. 존 폰노이만은 하드웨어는 그대로 둔 채 작업을 위한 프로그램만 교체하여 메모리에 올리는 방식을 제안했는데, 덕분에 오늘날 프로그래밍 기술을 통해 다양한 작업을 할 수 있게 되었다.

'모든 프로그램은 메모리에 올라와야 실행할 수 있다.'는 것이 폰노이만 구조에서 가장 중요한 특징이다. 이 특징은 운영체제와 관련된 전반적인 내용의 밑거름이되므로 꼭 기억해두는 것이 좋다.

 

1.3 요리사 모형

요리사가 요리를 하려면 냉장고(저장장치)에 있는 재료를 도마(메모리) 위로 가져와야 한다. 위 그림을 통해 운영체제의 운영방식을 가늠해볼 수 있다. 또 도마(메모리)의 크기가 작으면 재료가 많아도 손질하는 속도가 한정적이다. 

 

1.4 하드웨어 관련 용어

  • 클록
    클록은 CPU의 속도와 관련된 단위로, CPU가 작업할 때 일정한 박자에 따라 작업을 진행한다. 클록이 이 박자를 만드는데, 클록이 만드는 tick(클록틱)에 맞춰 CPU가 작업을 진행한다. 

  • 헤르츠
    헤르츠(Hz)는 틱이 발생하는 속도를 나타내는 단위이다. 만약 CPU명이 3.4GHz라면, CPU가 1초에 34억번의 연산을 할 수 있음을 의미한다. 이 틱에 맞추어 보통 데이터를 전송하기 때문에 메인보드의 성능도 클록으로 표시한다. 메인보드의 클록이 1,333MHz(1.3GHz)라면, 초당 1.3억번의 데이터 이동이 가능하다는 뜻이다. 

  • 시스템 버스와 CPU 내부 버스
    시스템 버스는 시스템과 주변장치를 연결하는 버스로, FSB (Front-Side Bus) 라고 한다. CPU 내부의 버스는 내부에 있는 장치를 연결하는 버스로, BSB (Back Side Bus) 라고 한다. 일반적으로 BSB의 속도는 FSB의 속도보다 훨씬 빠른 편이다. 
    CPU는 BSB 속도로 작동하고 메모리는 FSB 속도로 작동하기 때문에 두 속도의 차이로 인해 작업이 지연되는 경우도 있다.

 

2.1 CPU의 구성과 동작

2.1.1 CPU의 기본 구성

CPU는 앞서 말한 요리사 모형에서의 요리사에 해당한다. 산술논리 연산장치, 제어장치, 레지스터로 구성되어 있는데 각 구성요소들을 살펴보도록 하자.

  • 산술논리 연산장치
    요리사가 재료를 삶거나 찌거나 볶거나 튀기는 등 다양한 방법으로 조리하듯이 산술논리 연산장치는 데이터의 산술 연산과 AND, OR 등의 논리 연산을 수행한다.

  • 제어장치
    요리사의 머릿 속에서 '양파를 다져라.', '고기를 삶아라.' 등의 지시가 이루어지듯 CPU에서 작업을 지시하는 부분을 제어장치라고 한다.

  • 레지스터
    양파, 마늘 등의 재료를 필요한만큼 후라이팬에 넣는데, 이처럼 CPU내에 필요한 데이터를 임시로 보관하는 곳을 레지스터라고 한다.

 

2.1.2 CPU의 명령어 처리 과정

int i = 1, j = 8, sum;
sum = i + j;

위의 코드는 i와 j의 값을 더하여 sum에 넣으라는 의미인데, 여기서 i, j, sum은 데이터를 저장할 수 있는 메모리 주소의 다른 이름이다. 모든 주소를 외울 수 없기 때문에 주소 대신 이름을 붙인 것이다.

 

CPU는 기계어만 인식하기 때문에, 컴파일러를 통해 위의 코드를 기계어로 바꾸어야한다. 어셈블리어는 기계어를 사람이 이해하기 쉽게 기호화한 언어이다.

LOAD mem(100), register 1;
LOAD mem(120), register 8;
ADD register 9, register 1, register 8;
MOVE register 9, mem(160);

어셈블리어로 바꾼 것이 위의 코드이다. CPU가 연산을 하려면 데이터를 CPU로 가져와 레지스터에 임시로 보관해야 한다. 그래서 메모리의 100번지의 값(1)과 120번지의 값(8)을 더한 값을 레지스터 9에 저장하고, 그 값을 최종 메모리 160번지에 옮기는 과정이 필요하다. 위의 코드는 그러한 과정을 그대로 보여주고 있다.

 

2.1.3 레지스터의 종류

CPU는 필요한 데이터를 메모리에서 가져와 레지스터에 저장했다가 연산장치로 연산을 한 후, 다시 결과값을 레지스터에 저장했다가 메모리로 옮긴다. 이 때 사용되는 레지스터는 데이터 레지스터와 주소 레지스터가 있다.

  • 데이터 레지스터(DR) : 메모리에서 가져온 데이터를 임시로 보관한다. CPU의 대부분의 레지스터가 데이터 레지스터이다. 일반적으로는 레지스터라고 하면 데이터 레지스터를 칭한다.

  • 주소 레지스터(AR) : 데이터, 명령어가 저장된 메모리의 주소는 주소 레지스터(Address Register)에 저장된다.

위 두 레지스터는 사용자 프로그램에 의해 변경되므로 사용자 가시 레지스터 (user-visible register)라고 부른다. 그 외에도 특별한 용도로 사용되는 레지스터가 있는데, 특수 레지스터 혹은 사용자 불가시 레지스터 (user-invisible register) 라고 부른다.

  • 프로그램 카운터(PC) : CPU는 다음에 처리할 명령어를 알아야 하는데, 프로그램 카운터는 다음에 실행할 명령어의 주소를 제어장치에 알려준다. 명령어의 주소를 가리키기 때문에 명령어 포인터라고도 한다.

  • 명령어 레지스터(IR) : 현재 실행중인 명령어를 저장한다.

  • 메모리 주소 레지스터(MAR) : 메모리에서 데이터를 가져오거나 메모리로 데이터를 보낼 때 주소를 지정하기 위해 사용한다. 

  • 메모리 버퍼 레지스터(MBR) : 메모리에서 가져온 데이터나 메모리로 옮길 데이터를 임시로 저장하기 위해 사용한다.  MAR가 항상 함께 동작한다.

이외에도 프로그램 상태 레지스터가 있다. 산술논리 연산장치와 연결되어 있는데, CPU엔 무궁무진한 레지스터가 있기 때문에 각 기능이 필요하거나 궁금하다면 찾아보는 것도 좋다.

 

2.1.4 버스의 종류

버스는 CPU와 메모리, 주변장치 간에 데이터를 주고받을 때 사용한다.

  • 제어 버스
    다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 간다. 메모리에서 데이터를 가져올 땐 읽기, 데이터를 메모리에 옮길 땐 쓰기 신호를 보낸다. 제어 버스의 신호는 양방향으로 오고 간다.

  • 주소 버스
    메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지를 알려주는 위치 정보(주소)가 오고 간다. 메모리 주소 레지스터와 연결되어 있으며 단방향이다.

  • 데이터 버스
    데이터가 데이터 버스에 실려 목적지까지 이동한다. 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다.

 

버스의 대역폭은 한 번에 전달할 수 있는 데이터의 최대 크기를 말한다. 32bit, 64bit 등의 숫자도 마찬가지로 대역폭의 크기이다. 데이터의 최대 크기를 워드(word)라고 하며, 버스의 대역폭이나 메모리에 저장되는 단위도 워드이다.

 

2.2 메모리의 종류와 부팅

모든 프로그램은 메모리에 올라와야 실행될 수 있다. 메모리에는 실행에 필요한 프로그램과 데이터가 존재하며, CPU와 협업하여 작업이 이루어진다.

2.2.1 메모리의 종류

메모리는 읽고 쓸 수 있는 램 (Random Access Memory) 과 읽기만 가능한 롬 (Read Only Memory) 로 구분된다. 램은 데이터 저장 위치와 상관 없이 같은 속도로 읽는다는 의미에서 나온 이름이다. 램은 전력이 끊기면 휘발성 메모리와 전력이 끊겨도 데이터를 보관할 수 있는 비휘발성 메모리로 나뉜다.

  • 휘발성 메모리
    동적 램(Dynamic RAM)과 정적 램(Static RAM)이 있는데, DRAM은 일정 시간이 지나면 데이터가 사라지기 때문에 재생이 필요하다. SRAM은 전력이 공급되는 동안 데이터를 보관할 수 있어 재생할 필요가 없다. 보통 메인메모리에는 DRAM, 고속 메모리에는 SRAM을 사용한다.
    SDRAM은 클록틱이 발생할때마다 데이터를 저장하는 DRAM이다. 

  • 비휘발성 메모리
    플래시 메모리, FRAM, PRAM 등이 이에 속하는데, 플래시 메모리가 이 중 많은 저장장치로 사용된다. 플래시 메모리의 각 소자는 사용 횟수가 제한되어 그 횟수를 초과하면 기능을 잃게 된다. SSD도 하드디스크를 대신하도록 만들어진 비휘발성 메모리이다. 

롬은 데이터를 한 번 저장하면 바꿀  수 없다. 롬의 종류에는 데이터를 지우거나 쓸 수 없는 Mask ROM, 한 번만 데이터 저장이 가능한 PROM, 데이터를 여러 번 쓰거나 지울 수 있는 EPROM 등이 있다.

 

2.2.2 메모리 보호

일괄 작업 시스템에서는 메모리가 운영체제 영역과 사용자 영역으로 구분된다. 이 시스템에서의 메모리 보호란 사용자 영역의 작업이 운영체제 영역을 침범하지 않도록 막는 것이다.

현대의 운영체제는 사용자가 여러 프로그램을 동시에 실행하므로 사용자 영역을 여러 개의 작업 공간으로 나누는데, 여기서 메모리가 보호되지 않으면 사용자의 데이터가 다른 작업의 영역을 침범하거나 데이터를 지울 수 있다. 이처럼 다른 프로그램 영역을 침범하는 소프트웨어를 바이러스라고 한다.

운영체제 또한 소프트웨어이기 때문에 사용자의 작업이 진행되는 동안에는 운영체제의 작업이 잠시 중단된다. 이 때 사용자의 작업 메모리를 보호하려면 하드웨어의 도움이 필요하다.

CPU는 진행중인 작업의 메모리 시작 주소를 경계 레지스터에, 메모리의 크기를 한계 레지스터에 저장한다. 그리고 사용자가 작업하는 동안 이 두 레지스터의 범위를 벗어나는지 점검한다. 만약 레지스터 범위를 벗어난다면 메모리 오류와 관련된 인터럽트 (interrupt) 가 발생하고, 그러면 모든 작업이 중단되고 CPU는 운영체제를 깨워서 이를 처리하도록 시킨다. 이렇게 될 경우 운영체제가 해당 프로그램을 강제 종료시킨다.

 

2.2.3 부팅

컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅(booting) 이라고 한다.

전원을 켰을 때 롬에 저장된 바이오스(bios) 가 실행되고 바이오스는 하드웨어가 잘 작동하는지 확인한다. 만약 이상이 없으면 마스터 부트 레코드(MBR)에 저장된 프로그램을 메모리로 가져와 실행한다.

하드디스크의 첫번째 섹터를 마스터 부트 레코드라고 하며, 부트스트랩이 이곳에 저장되어 있다. 부트 스트랩은 운영체제를 메모리로 가져와 실행하는 역할을 한다. 만약 마스터 부트 레코드가 손상되면 운영체제를 실행할 수 없다. 

+ Recent posts