모래성 말고 철옹성

Chapter2. 컴퓨터 구조와 성능 향상 (1) 본문

Computer Science/운영체제

Chapter2. 컴퓨터 구조와 성능 향상 (1)

JDhyeok 2022. 8. 22. 23:05

컴퓨터 기본 구성

필수장치 중앙처리장치(CPU)* 명령어를 해석하여 실행하는 장치
메인메모리* 작업에 필요한 데이터를 저장하는 장소
주변장치 입력장치 외부 데이터를 컴퓨터에 입력하는 장치 e.g. 마우스, 키보드 등
출력장치 사용자가 원하는 상태로 처리결과를 출력하는 장치 e.g. 모니터, 프린터 등
저장장치 데이터를 저장하는 장치.
메인메모리와 저장한다는 개념은 같지만 메인메모리는 전원이 꺼지면 데이터가 없어지는 반면 해당 저장장치는 영구적으로 저장된다. 다만 느리다는 단점이 있다.
그 외 메인보드 컴퓨터의 부품들을 버스라는 통로로 각 장치를 연결해주는 장치

 

폰 노이만 구조

오늘날 대부분의 컴퓨터는 폰 노이만 구조를 따르고 있다.

(a) 폰 노이만 구조 도식화

위 그림(a)처럼 구조화되어있고, 각 장치는 메인보드의 시스템 버스를 통해 데이터를 서로 통신한다. 폰 노이만의 가장 큰 특징은 "모든 프로그램은 메모리에 올라와야 실행할 수 있다."는 특징이다.

 

단, CPU 내부에서는 시스템 버스보다 빠른 CPU 내부 버스를 이용한다.

 

CPU의 구성과 동작***

CPU의 구성*

중앙처리장치 CPU는 컴퓨터의 두뇌 역할로 산술논리연산장치, 제어장치, 레지스터 구성되어있다. 이것들의 협업으로 작업을 처리한다.

이름 설명
산술논리연산장치 (ALU) 데이터 연산하는 장치
제어장치 CPU의 모든 작업을 명령하는 장치
레지스터 CPU 내 사용될 데이터를 가져와 임시로 저장할 저장장치

각각의 장치들의 역할을 알았으니 예시를 통해 구성 요소들이 어떻게 동작하는지 알아보겠다.

CPU의 동작

아래와 같이 코드1이 컴퓨터에서 동작하게 되면

// 코드1
int num1 = 3, num2 = 5, sum;
sum = num1 + num2;

제어장치는 다음 단계와 같이 명령을 내린다.

   (1)  100번지 메모리의 값을 레지스터4 로 옮겨라

   (2)  104번지 메모리의 값을 레지스터5 로 옮겨라

   (3)  레지스터4와 레지스터5에 있는 값을 더하고 레지스터8에 저장해라

   (4)  레지스터8에 있는 값을 메모리 112번지에 옮겨라

 

위의 명령어를 도식화해 그림(b)와 같이 나타내봤다. 점선은 제어장치의 명령이고 실선은 데이터의 실제 흐름을 보여준다.

(b) 더하기 코드가 수행될 때 명령과 데이터의 흐름

 

레지스터와 버스

레지스터의 종류와 특징을 알고 명령어 실행 시 예시를 들어 어떻게 활용되는지 알아보도록 한다.

레지스터의 종류와 특징

레지스터 특징
사용자 가시
레지스터
데이터 레지스터 (DR) CPU가 일을 처리하는데 필요한 데이터를 메모리로부터 가져와 임시로 저장하는 범용 레지스터 (or 일반 레지스터)
주소 레지스터 (AR) 데이터 또는 명령어가 존재하는 메모리를 저장
사용자
불가시
레지스터
프로그램 카운터 (PC) 다음에 실행할 명령어의 위치정보를 가지고 있음
명령어 레지스터 (IR) 현재 실행 중인 명령어를 가짐
메모리 주소 레지스터 (MAR) 메모리 관리자가 접근해야 할 메모리의 주소를 저장
메모리 버퍼 레지스터 (MBR) 메모리 관리자가 메모리로부터 가져온 데이터를 데이터 레지스터로 가기 전 임시로 저장
프로그램 상태 레지스터 (PSR) 연산 결과 (양, 음)을 저장

레지스터의 역할

아래와 같은 어셈블리어가 동작한다고 할 때,

LOAD MEM(100) reg3 // 메모리 100번지에 있는 값을 레지스터3에 저장해라

그림(c)와 같이 CPU가 동작하게 된다.

   (1)  프로그램 카운터에서 실행할 명령어 행 번호가 제어장치에 전송된다.

   (2)  명령어 레지스터에 LOAD 명령어가 저장되고 제어장치는 이를 해석 후 데이터를 가져오라고 명령한다.

   (3)  메모리 주소 레지스터에는 해석된 명령어를 통해 100번지가 저장이 되고, 메모리 관리자가 이 레지스터를 참조해

          100번지 메모리에 있는 데이터를 메모리 버퍼 레지스터에 가져온다.

   (4)  제어장치는 메모리 버퍼 레지스터에 있는 값을 reg3에 저장한다.

(c) LOAD 명령 시 레지스터 간 데이터 흐름도

이 외의 플래그 레지스터, 상태 레지스터, 컨디션 레지스터 등의 다양한 레지스터가 존재한다.

버스의 종류

버스 특징
제어버스 CPU의 제어 장치에서 나온 모든 제어신호가 제어버스를 타고 이동한다. 제어신호와 그에 대한 응답신호도 받기 때문에 양방향이다.
주소버스 CPU의 메모리 주소 레지스터와 연결된 버스로 모든 주소정보가 주소버스로 오간다. 위치정보를 전달하기 위한 버스로 CPU로 들어오는 정보가 없기 때문에 단방향이다.
데이터버스 CPU의 메모리 버퍼 레지스터와 연결된 버스로 모든 데이터가 이 버스를 통해 오간다. 당연히 양방향이다.

CPU의 종류에 따라 버스의 대역폭도 차이가 생기는데, 보통 32bit-CPU에는 32bit 대역폭을, 64bit-CPU에는 64bit 대역폭을 갖는다. 참고로 CPU가 한 번에 처리할 수 있는 데이터의 크기를 Word라고 한다(32bit CPU : 1word = 32bit).

 

메모리의 종류와 부팅

메모리의 종류

메모리의 종류는 난 전기/전자과가 아니기 때문에 램, 롬, 휘발성, 비휘발성에 대한 개념 정도만 짚고 넘어가겠다.

RAM: Random Access Memory

ROM: Read Only Memory

휘발성: 전력이 끊기면 데이터가 사라지는 메모리

비휘발성: 전력이 끊겨도 데이터를 보관할 수 있는 메모리

 

메모리 보호

프로그램이 메모리에 올라가면 프로그램 각각은 모두 독립적인 공간에 위치하게 된다. 이때 다른 프로그램이 다른 프로그램 혹은 운영체제 영역의 메모리 공간에 침범하지 못하게 해야 한다. 운영체제 영역으로 접근하는 것을 바이러스라고 부른다.

 

위와 같은 재난을 막기 위해서는 하드웨어단에서 보호해줘야 하는데, 경계(Boundary)를 저장하는 방법이다. 메모리에 올라간 프로그램의 시작 주소 경계 레지스터(bound register)에 저장하고 (마지막 주소 - 시작 주소)한계 레지스터(limit register)로 저장한다.

 

두 레지스터를 가지고 하드웨어는 지속해 범위를 벗어나는지 확인하고 벗어난다면 작업을 중지한다.

부팅

운영체제도 어떻게 보면 하나의 프로그램이며 프로세스다. 따라서 컴퓨터 시작과 동시에 운영체제를 누군가가 메모리에 올려주어야 하는데, 이 역할을 부트스트랩(bootstrap)이라는 친구가 해준다.

 

부팅과정을 간단하게 작성해보고 포스팅을 마무리 짓겠다.

 

바이오스가 컴퓨터 HW 자원 점검 메모리에 부트스트랩 코드 올려 실행 부트스트랩 코드가 OS 메모리에 올려 실행

 

반응형
Comments