LISTORY

[윈도우즈 시스템 프로그래밍] 컴퓨터 구조에 대한 이야기 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 컴퓨터 구조에 대한 이야기

LiStoryTeller 2018. 5. 12. 17:40

최근, 회사에서 윈도우 프로그래밍을 하면서 본인의 실력과 기초적인 지식에 대한 부족함을 많이 느꼈다.


어떤 것을 공부하는 것이 좋을가 생각해보다가 다시 기본부터 공부하는 것이 좋을 것이란 생각이 들었다.


이에 이번에 공부하게 된 책이 뇌를 자극하는 윈도우즈 시스템 프로그래밍이다.





뇌를 자극하는 윈도우 시스템 프로그램은 컴퓨터 구조, 운영체제, 프로그래밍 등으로 구성되어 있다.


이 책에 관련된 강의가 유투브에 올라와 있어서, 이 동영상들을 보고 간단히 요약하는 글을 앞으로 올릴까 한다.


강의는 여기서 확인할 수 있다.


 YouTube 주소 ⊙ ☞ 1장. 시스템 프로그래밍의 이해와 접근/ 컴퓨터 하드웨어의 구성/CPU에 대한 이해


이번 포스팅은 당연히 1강에 대한 정리이다.



1장. 시스템 프로그래밍의 이해와 접근/컴퓨터 하드웨어의 구성/CPU에 대한 이해


우리가 일반적으로 프로그래밍에 대해 공부를 시작한다 치면 C언어, JAVA등과 같은 언어를 공부하곤 한다.


하지만 이 언어들은 그저 프로그래밍을 할 수 있게 해줄 뿐, 컴퓨터 시스템에서 제공하는 기능들을 활용할 수 있는 언어는 아니다.


하지만 프로그래밍을 할 때엔 컴퓨터 시스템에서 제공하는 기능을 활용할 줄 알아야 한다.


그러므로 우리는 이러한 언어들을 바탕으로 시스템에서 제공하는 기능을 활용할 줄 알기 위해  시스템 프로그래밍을 공부해야 한다.


즉, 컴퓨터 시스템에서 동작하는 프로그램을 작성하기 위해선 시스템 프로그래밍을 공부해야 한다.


이 강의는 윈도우 시스템에서 돌아가는 프로그램을 작성하는 개발자를 위한 강의이다.




1장. 컴퓨터 구조


◎ 시스템 프로그래밍이란?


시스템 하면 보통 하드웨어만 생각하는 경향이 있다. 하지만 시스템의 범위는 하드웨어 + 운영체제이다.


시스템 = 하드웨어 + 운영체제


그렇기에 시스템 프로그래밍은 하드웨어와 운영체제를 기반으로 하는 시스템에서 동작하는 소프트웨어라 할 수있다.


대부분의 언어들은 시스템과 독립적으로 구성되어 있다. 무슨말이냐 하면 일반적으로 언어의 문법에 시스템의 기능을 활용하는 부분은 없다.


그러므로 우리는 언어를 사용하여 시스템의 기능을 활용하는 방법을 알아야 한다.


즉, 응용 소프트웨어를 프로그래밍 하기 위해 시스템 프로그래밍을 알아야 하는 것이다.



◎ 컴퓨터 구조


컴퓨터 시스템(하드웨어 + 운영체제)는 크게 CPU, 캐시, 메인 메모리, 하드디스크로 구성되어 있다.


  • CPU와 캐시를 크게 묶어 컴퓨터 구조라 하고 메인 메모리와 하드디스크를 크게 묶어 운영체제라 한다.



◎ 하드웨어 구성


하드웨어는 이렇게 크게 CPU, 메인 메모리, 입출력 버스 이렇게 세개로 분류할 수 있다.


이를 간단히 정리해보겠다.


⊙ CPU

- 중앙처리장치

- 연산이 이뤄지는 원리는 무엇인가?


⊙ 메인메모리

- RAM

- 프로그램 실행 방식을 이해하는 것


⊙ 입출력 버스

- 데이터 송 수신이 이뤄지는 원리


프로그램 실행 방식과 연산이 이루어지는 원리가 무엇이 다르냐라는 의문이 있을 수 있다. 하지만 프로그램 실행 방식에 있어 연산은 일부일 뿐이다. 



CPU에 대해 좀 더 세부적으로 정리해보겠다.


◎ CPU에 대한 이해


    ⊙ ALU                     : 실질적인 연산

    ⊙ 컨트롤 유닛           : 무엇을 해야할지 결정

    ⊙ 레지스터               : 데이터 저장

    ⊙ 버스 인터페이스     : 어떻게 데이터를 주고받는가?


간단한 예제가 있다.


하드디스크에 숫자 2와 5를 더하는 A라는 실행파일이 있다고 가정해보자.


A 실행파일이 클릭되었을 경우, 실행을 위해 메인메모리로 이동하게 된다.


메인메모리에 있는 것만이 CPU를 기반으로 해서 연산을 할 수 있다.


이게 실제 실행이 되려면 실제 연산이 이루어지는 CPU안으로 들어가야 한다.


접근은 버스를 통해 이루어진다. 버스를 통해 데이터가 이동하기 위해서는 나름의 통신 규약이 있는데, 그 규약에 따라 데이터를 주고받는다.


이 규약에 맞춰 데이터를 보내고, 또 데이터를 해석하기 위해 필요한 장치가 버스 인터페이스이다.



여하튼 이렇게 CPU에 덧셈, 숫자 2, 숫자 5가 들어온다.


CPU에서 실제 연산을 하는 것은 ALU이다. 그러므로 숫자 2, 5는 연산이 이루어 져야 하므로 ALU로 가야한다.


반면 덧셈이라는 명령어는 컨트롤 유닛으로 가야한다.


컨트롤 유닛은 명령어를 해석하는 역할을 한다. 컨트롤 유닛은 덧셈이라는 명령어를 해석하여 ALU에게 알려주는 역할을 한다.


즉, 컨트롤 유닛은 CPU가 해야 하는 일을 결정짓는 역할을 한다.


이러한 과정은 CPU에 명령어가 들어오자마자 바로바로 이루어 지지않는다. 이미 CPU는 하고 있는 일이 있기 때문이다.


그래서 이러한 일을 저장해두기 위한 장치가 레지스터이다.


컨트롤 유닛은 레지스터에 저장된 명령어를 가져오고, 해석하고, 명령어를 실행하기 위해 컨트롤 한다.



* 클럭 신호(Clock Pulse)


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


컴퓨터를 보면 클럭 발생기가 있고, 일정한 시간마다 신호를 준다.


모든 장치들은 그 신호에 맞춰 연산을 한다. 즉, 클럭 신호는 동작 타이밍을 결정한다.


클럭을 높이면 일은 빨리 할 수 있지만 열이 발생하고, 이렇게 되면 시스템이 불안해진다.


클럭은 요소들의 동기화를 위해 필요하다.








Comments