bdfgdfg

컴퓨터 구조 - (1) 본문

CS/시스템 프로그래밍

컴퓨터 구조 - (1)

marmelo12 2021. 8. 9. 16:49
반응형

시스템 프로그래밍이란?

● 시스템(컴퓨터 시스템)의 범위

 - 하드웨어 + 운영체제

● 시스템 프로그래밍

- 컴퓨터 시스템을 활용하는 소프트웨어

- Windows 운영체제 자체의 기능을 활용하는 프로그래밍

● 응용 소프트웨어 개발과의 차이점

- 시스템 프로그래밍은 모든 응용 프로그램에 포함되는 요소

 

컴퓨터 시스템의 주요 구성요소

● CPU, 캐시

- 컴퓨터 하드웨어 구조

● 운영체제

- 메인 메모리 -> 메모리 관리 기법

- 하드디스크 ->  파일 I/O(다양한 I/O포함)

 

컴퓨터 하드웨어 구성

간단히 위의 구성을 설명해봄녀.

● CPU(Central Processing Unit, 중앙처리장치)

- 컴퓨터 프로그램의 연산이 이루어지는 곳. 

● 메인 메모리(Main Memory)

- 램(RAM)

- 메인 메모리는 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역이라고 간단히 정의.

- 간단히 게임을 깔아서 우리의 하드디스크에 저장을 하고. 이 게임을 실행하면 해당 프로그램은 메인 메모리로 올라가서 실행된다.

● 입/출력 버스(Input/Ouput Bus)

- 데이터 송수신(어떻게 주고받는지)이 이뤄지는 원리

- 주고받는 데이터의 종류와 역할에 따라서 어드레스 버스, 데이터 버스, 컨트롤 버스 이렇게 세 가지로 구분이 된다.

 

 

CPU에 대한 이해

위 그림에서 컨트롤 유닛은 혼자 동떨어진 느낌이 나는데.

다른 장치와 연관성이 없다는 의미가 아니라. CPU를 전체를 총괄하여서 요소를 갖다가 해야 할 일을 결정짓는 장치이기에 신호를 이리저리 받는다.

 

ALU

- CPU는 덧셈이나 뺄셈과 같은 연산을 진행하는 장치.

- 더 자세히 말하면 CPU 내부에 존재하는 연산을 담당하는 ALU가 존재.

- ALU가 처리하는 기본적인 연산은 크게 두 가지로 나뉜다.

- 하나는 덧셈/뺄셈과 같은 산술 연산, 나머지 하나는 AND/OR와 같은 논리 연산.

 

컨트롤 유닛(Control Unit)

- 프로그램 내에 저장된 일종의 명령어들은 어떤 경로를 거치든 간에 이 명령어가 CPU 내부로 흘러들어 가야 CPU가 일을 할 수 있다.

- 간단하게 2와 3을 더하는 덧셈을 실행하는 아주 간단한 프로그램이 존재한다고 할 때, 어떤 명령어가 전송되지만, 연산 그 자체만을 담당하는 ALU는 CPU까지 도착한 명령어가 무엇을 시키는지 해석해줄 친구가 필요하다.

- 그 도와줄 친구가 바로 컨트롤 유닛.

- 컨트롤 유닛이 하는 일은 CPU가 처리해야 할 명령어들을 해석하는 것이다.

- 이처럼 컨트롤 유닛은 명령어를 해석하고, 그 해석된 결과에 따라 적절한 신호를 CPU의 다른 블록에 보내는 일을 한다.

 

레지스터(Register)

- CPU 내부에 피연산자가 되는 숫자 2와 3이 있을 때, 덧셈을 위해 덧셈 명령어만 넣어준다고 덧셈이 되지 않는다. 덧셈의 대상이 되는 피연산자인 2와 3이 함께 들어가야 연산이 가능하다.

- 그렇다면 명령어는 컨트롤 유닛으로 보내 해석시키고, 피연산자는 바로 ALU에 넘겨주면 되지 않을까?

- 그러나 만약 현재 ALU가 연산중이고 컨트롤 유닛은 앞서 다른 명령어를 해석 중이라면 이것은 불가능한 일이고, 억지로 그 일을 진행시킨다면 앞서 명령어를 해석하고 연산하던 데이터가 손실될 위험성이 존재한다.

- 그래서 이보다는 컨트롤 유닛이나 ALU가 필요로 하는 명령어 및 데이터들을 어딘가에 저장해 둘 필요성이 존재한다.

- 즉 CPU 내부에도 임시적으로 데이터를 저장하기 위한 조그마한 메모리 공간이 레지스터.

 

버스 인터페이스(Bus Interface)

- 앞에서 명령어와 데이터들이 어떻게 CPU로 잘 흘러들어 갈 수 있을까? 이것이 가능한 이유가 버스 인터페이스.

- 컴퓨터 내부의 장치 cpu, 하드디스크, ram, 사운드 카드, 그래픽 카드 등 이들이 서로 독립적으로 존재하는 게 아닌, 서로 데이터를 주고받으면서 동작한다. 그렇기에 어떠한 매개체가 필요한데 그것이 바로 I/O 버스. 

- CPU는 I/O 버스에 접근이 가능한 것으로 설명이 되고, 실제로도 이 I/O 버스에 접근해서 데이터를 전송하고 입력받기도 한다.

- 하지만, 그렇게 간단하게 주고받는 게 아니라 I/O 버스의 통신방식을 이해하고 있는 그 무엇인가가 필요하기에 CPU 내부의 버스 인터페이스가 존재하는 것이다.

- 이 버스 인터페이스 장치는 버스가 어떻게 데이터를 전송하는지, 그에 대한 통신방식을 알고 있고 CPU는 버스 인터페이스를 통해서 CPU 내부에 저장되어 있는 데이터를(레지스터에 저장된) I/O 버스에 실어 보내고, I/O 버스를 통해서 전송되어오는 데이터들을 수신하기도 한다.

 

클럭 신호(Clock Pulse)

- 컴퓨터의 모든 장치에는 이 클럭 신호가 들어간다.

- 클럭 신호란 클럭 발생기의 클럭.

- CPU를 구성하는 요소가 아니지만, CPU를 구성하는 구성 요소에 제공되어야 하는 신호로서 아주 중요한 의미.

- 클럭 신호는 동작 타이밍을 제공하기 위해서 필요하다.

- 간단히 말하면 클럭 발생기에 의해 발생되는 클럭 신호는 CPU를 구성하는 각 요소에 제공되며, 이 신호에 맞춰서 CPU가 일을 한다.

- 우리가 흔히 말하는 CPU의 클럭은 몇이냐? 1.6 Mhz이다!라고 하면 클럭 발생기는 초당 160만 번의 클럭을 발생시킨다.

즉 클럭 속도가 1.6 Mhz이면 CPU는 초당 160만 번의 연산을 하게 된다. 따라서 CPU의 클럭 속도가 높으면 초당 처리하는 명령어의 개수가 많아지므로 컴퓨터의 성능은 좋아진다.

 

- 그렇다면 왜 이런 클럭 신호에 맞춰서 CPU가 일을 해야 할까?

-> 간단히 말하면 요소들의 동기화를 위함.

위 그림에서 실제로는 존재하지 않지만 있다고 가정해보고. + 연산장치가 있다고 보자.

인풋 값으로 2와 3이 들어오고 덧셈을 하고 버퍼(메모리)에 저장을 한 다음 출력장치에 전달해 출력을 한다.

 

근데. + 연산장치는 초당 10번의 작업을 하고 출력장치는 초당 5번 작업을 한다고 보자.

그럼 출력장치가 가져가기도 전에 +연산자가 버퍼에 데이터를 가져다 놓기 때문에. 기존에 저장된 데이터를 덮어 씌운다는 문제점이 발생할 수 있다.

(즉 +연산장치가 연산하는 속도와 출력장치가 데이터를 가져가는 속도가 불일치할 때 -> 동기화의 필요성!)

 

이것이 클럭이 필요한 이유.

 

그렇다면 위의 문제를 해결하기 위해서. 

+연산장치는 초당 10번의 작업을 하기에 무리가 없고, 출력장치는 초당 5번의 작업을 하기에 무리가 없다고 하면.

 

클럭신호는 초당 몇 번을 발생시켜야 할까? 

10번을 한다고 가정하면 출력장치가 작동을 할 수도 있고 안 할 수도 있지만, 더 큰 문제는 열이 발생하면서 시스템이 불안정해질 수도 있다.

 

그렇기에 시스템 요소요소에 요구하는 가장 낮은 클럭을 기준으로 클럭 신호를 제공해준다.

 

이 이후엔 문서는 비공개 처리입니다.

반응형

'CS > 시스템 프로그래밍' 카테고리의 다른 글

5장 프로세스의생성과 소멸  (0) 2021.08.20
Comments