들어가기 앞서 해당 글은 혼자 공부하는 컴퓨터구조 + 운영체제, 반효경교수님의 운영체제 공개강의를 참고로 작성되었습니다. 

 

컴퓨터 구조

 

 컴퓨터 동작방식

 기본적으로 컴퓨터의 모든 동작은 cpu를 거쳐 시작한다. 부끄러운 이야기지만 전엔 이런 기본적인 것 조차 알지 못했다. 그냥 막연하게 각 장치마다 알아서 독립적으로 작동하는 줄 알았다. 때문에 결국은 dx12 또한 cpu에서 그래픽카드에 명령을 내리는 동작들을 코딩하는 것인데 이게 뭐하는 짓인가 하며 어리둥절했던 것이다.

 

여튼 프로그램이 실행되면 메모리에 프로그램의 명령어, 데이터 등이 할당되고, cpu는 메모리에 저장된 명령어와 데이터를 토대로 계산하여 요청을 하거나 결과 값을 도출한다. 

 I/O장치(Input/Outpu. 입출력장치)와 디스크(보조기억장치)는 cpu에 비해 속도가 아주아주 느린데 이 간극을 메우기 위한 것이 바로 버퍼캐시라는 개념이다. 

 

 또한 cpu는 입출력장치에 읽기/쓰기 명령을 내리고 그 명령이 완료되었으면 입출력장치의 작은 cpu라고 불리는 Device controller에서 명령을 완료하였다는 신호인 인터럽트를 cpu에게 보내는데 cpu는 현재 하고 있는 동작을 백업한 후 잠시 멈추고, 인터럽트를 건 명령을 실행한 후 백업했던 동작으로 다시 돌아가 작업을 한다.  

 

 다만, 컴퓨터에는 많은 입출력장치가 있고 cpu가 이 많은 인터럽트 작업을 하면 안그래도 많은 연산을 수행해야하는 cpu가 효율적이게 동작하지 못한다. 때문에 따로 입출력 역할을 수행하는 DMA(Direct Memory Access) controller가 등장했다. DMA는 cpu에서 받은 명령을 입출력장치와 상호작용하여 명령을 수행하고 그 명령이 끝났다는 인터럽트만 cpu에게 보내면 되기 때문에 cpu의 부담은 줄어들게 되었다.

 

  위 그림에 보면 cpu와 크기는 다르지만 색이 같은 파란 장치(controller)들이 있는데, 이들은 각장치들의 작은 cpu라고 생각하면 되며, 실질적으로 각 장치와 cpu의 상호장용에 사용되는 장치다. 때문에 당연히 cpu와 동일하게 각 장치마다 레지스터영역이 존재하며 dx12에서 Rootsignature로 테이블을 올리는 영역이 이 레지스터라고 볼 수 있겠다.

 

 

 

cpu 구조

CPU동작 방식

 

 모든 동작은 cpu에서 제어하지만 정확하겐 cpu안의 제어장치가 제어한다. ALU에서 연산을 하고 임의로 그 결과값을 레지스터에 저장하거나, 메모리에서 값을 읽어오는 등 모든 동작들은 제어장치의 전기신호로 이루어진다.  

 

 레지스터는 ALU가 연산을 할 때 필요한 명령어와 데이터들을 임시로 저장하는 공간이다. 기본적으로 프로그램 카운터, 명령어 카운터, 메모리 주소 레지스터, 플레그 레지스터, 범용 레지스터, 스택 포인터, 베이스레지스터 등이 있는데 레지스터는 cpu 제조사마다 종류와 이름이 다르다. 

 

 

 

 이상이 컴퓨터 구조와 그 동작의 큰 틀이다. 이제 다음 글부터 하나하나 뜯어보겠다. 

+ Recent posts