블로그 이미지
하루, 글. 그림. 영상매체. 표현을 도와주는 기기들. 도전 중. 동화다아아
    동화다아아

    카테고리

    분류 전체보기 (176)
    잡담 (1)
    IT 기기-리뷰&뉴스 (7)
    리뷰 - 도서 (1)
    리뷰 - 영상 (0)
    리뷰 - 그림/음악 (1)
    내장형 하드웨어 (163)
    Total
    Today
    Yesterday
     

    CPU 구조

    CPU는 Central Processing Unit, 한글로는 중앙처리장치라고 한다. 보통 컴퓨터의 핵심적인 업무를 담당하며 인간에게 있어서 뇌와 같다고 볼 수 있다.


    - CPU의 성능

    CPU의 성능은 곧 CPU의 속도를 말한다. CPU의 속도에 영향을 미치는 요소들을 살펴보면.

    1. Clock

     컴퓨터는 수행되는 모든 연산의 타이밍을 맞추기 위해 펄스를 출력하는데 이것을 시스템 클락이라고 한다. 하지만 우리가 흔히 말하는 것은 클락 주파수라는 것으로 컴퓨터가 명령어를 수행하는 속도를 말한다. 즉 하나의 클락 동안에 instruction 부 사이클이 수행된다.

     ※ 클락 주파수는 특정 시간 동안 완수할 수 있는 instruction의 수를 제한한다.

     ※ 측정 단위는 MHz.

     ※ 클락 주기는 각 단계에서의 소요 시간을 뜻한다. 클락 주기와 주파수는 반비례한다.

    2. 캐쉬 메모리

     메인 메모리와 CPU 사이의 속도차이를 감안해서 그 사이에 있는 고속 메모리. CPU의 읽기와 쓰기 능력을 향상시켜 CPU 속도를 향상시킨다.

    3. 워드 크기

     CPU가 읽기 또는 쓰기 한번에 사용되는 비트 수를 말한다. 워드 크기가 크다는 말은 한 instruction이 더 많은 데이터를 처리 가능하다는 것을 뜻한다.

      cf:) 32 비트 프로세서라고 하면, 여기서 32비트는 워드 크기를 뜻한다.

    4. Pipelining

     이전 instruction이 끝나기 전에 그 다음 명령어 수행을 시작하는 방법이다. 즉, 1번 instruction이 2단계 수행을 시작할때 2번 instruction은 1단계 수행을 시작하고, 1번이 3단계일때, 2번은 2단계, 3번은 1단계를 수행한다.

    5. 명령어 집합의 복잡성

     RISC와 CISC의 차이점을 알아야 한다. RISC는 Reduced Instruction Set Computer의 약자로 CPU에 빠르게 수행되는 제한된 수의 간단한 instruction만 내재된 컴퓨터를 뜻하고, CISC는 Complex Instruction Set Computer의 약자로 많고 복잡한 instruction이 내재된 컴퓨터를 말한다.

    6. Parallel Processing

     여러 개의 CPU가 있어서 control device가 일을 하지 않고 있는 적당한 CPU에 data를 보내 처리하는 방법. CPU가 하나 밖에 없으면 다른 instruction을 수행하는 동안 기다려야 되서 CPU의 속도가 떨어지게 된다.


    - CPU의 구조

     CPU는 크게 ALU와 Register Set, Control Unit 세 개로 나뉜다. 이 세 개는 Internal CPU bus(ALU와 Register 간 데이터 이동을 담당하는 버스)를 통해서 데이터를 주고받는다.

    - CPU 동작 순서 예

    1. 데이터는 RAM으로부터 레지스터 1번으로 external CPU bus를 통해 전송된다.

    2. Control Unit이 레지스터 1번 데이터에서 레지스터 2번에 저장되어 있는 데이터를 빼라고 Control Signal을 보낸다.

    3. ALU에서 뺄셈을 한 다음 Accumulator에 그 결과를 저장한다.

    4. 결과값은 다시 external CPU bus를 통해 RAM으로 전송된다.


    ※ Control Unit

    연산들을 차례로 수행키 위해 제어 신호를 보내는 장치. Control Unit은 다음 순서를 따라 수행된다.

    1. instruction fetch 후에 Control Unit 내에 있는 IR에 저장.

    2. 다음에 실행될 instruction의 주소가 저장된다(Program Counter).

    3. IR의 instruction decode.

    4. Instruction signal을 전송해서 ALU 동작.


    ※ Register

    레지스터는 CPU에서 사용되는 임시적인 저장장치이다. CPU 레지스터는 두 가지로 분류된다.

    1. User-visible register

     어셈블리 프로그래밍을 위해 알아야 하는 레지스터이다. 어셈블리 프로그래머들이 알아야 하기에 사용자에게 보이는 레지스터라고 부른다.

     그 예로는 General-purpose register(Operand들이 저장되는 레지스터), data register(예를 들면 Accumulator), Address Register(특정 주소 지정하는 레지스터) 등이 있다.


    2. Control and State Register

     프로그램 실행 시, CPU 내에서 사용되는 레지스터로 PC, IR, MAR, I/O AR 등이 여기에 속한다.



    - CPU의 단계적 이해.

    1. ALU

     - CPU내에서 실제 연산을 담당.

     - 산술연산 및 논리연산을 담당.

    2. 컨트롤 유닛

     - CPU가 처리해야 할 명령어들을 해석.

     - 그 해석된 결과에 따른 적절한 신호를 CPU의 다른 블록에 보내줌.

    3. 레지스터

     - CPU 내부의 임시적 2진 데이터 저장소.

    4. 버스 인터페이스

     - CPU 내에서 I/O 버스의 통신방식을 이해하고 있는 것.

     - CPU 내부의 저장된 데이터를 I/O 버스에 실어 보내기도 하고, 전송되어 오는 데이터를 수신.

    5. 클럭 신호

     - 타이밍을 제공.

     - 신호 속도가 높을수록 초당 처리 명령개수가 많음.

     - 클럭 신호에 맞추어서 CPU가 모든 연산 및 작업을 수행한다.

     - 연산장치간의 충돌을 막기 위한 신호.


    - 프로그램의 실행 과정

    1. 폰 노이만의 컴퓨터 구조

    * 프로그램이 존재하고 이 프로그램은 컴퓨터 내부에 저장되어 순차적으로 실행되어야 한다.

    2. 프로그램의 실행과정

    전처리기 ----> 컴파일러 -----> 어셈블러 -----> 링커

    단계1 : 전처리기에 의한 치환작업. (#으로 시작하는 지시자의 지시에 따라 소스코드를 적절히 변경)

    단계2 : 컴파일러에 의한 번역. (소스코드를 컴파일러에 의해 어셈블리코드로 변경됨)

            어셈블리코드 : 이러한 명령어를 조합해서 만들어진 프로그램 코드.

    단계3 : 어셈블러에 의한 바이너리 코드 생성. (어셈블러를 010110 과 같은 이진수 바이너리 코드로 변환함)

    단계 4: 링커에 의한 연결과 결합. (링커: 프로그램내에서 참조해야되는 함수나 라이브러리들을 하나로 묶는 작업을 함.)

    이 작업이 끝나면 실제로 실행 가능한 실행파일이 생성됨.

    - 실행파일이 실행되는 과정

    1. Fetch

     메모리상에 존재하는 명령어를 CPU로 가져오는 작업.

    2. Decode

     가져놓은 명령어를 CPU가 해석.

    3. Execution

     해석된 명령어의 명령대로 CPU가 실행하는 단계.


    - 하드웨어 구성의 재접근

    1. 폰노이만의 컴퓨터구조 VS 오늘날의 컴퓨터 구조.

     

     - Fetch 시에는 CPU의 버스 인터페이스를 통하여 CPU로 명령어가 이동해 온다.

     - 명령어가 CPU에 오면 CPU내의 저장장소인 레지스터에 저장된다.

     - Decode 단계에서 명령어를 해석하는 것은 CPU내에 있는 컨트롤 유닛이다.

     - Execution은 CPU내의 계산 장치인 ALU에 의하여 진행된다.

    2. 데이터 이동의 기반이 되는 BUS 시스템

     - 버스 시스템 : 데이터를 이동하는 데 있어서 사용되는 전송 경로. 데이터의 종류에 따라서 어드레스 버스, 데이터 버스, 컨트롤 버스로 구분됨.

      1) 데이터 버스 : 데이터를 이동하기 위해 필요한 버스 .

      2) 어드레스 버스 : 주소값을 이동해 주기 위해 필요한 버스.

      3) 컨트롤 버스 : CPU의 명령을 메모리에 전달시 사용 됨.


    - 폰노이만의 컴퓨터 구조 구체화 2단계

     


    ※ RISC 구조와 CISC 구조의 핵심적인 차이점 4가지.


    1. CISC 방식의 경우 사용되는 모든 명령어들을 내장하고 있지만 실제 주로 사용되는 명령어들은 그중 10% 이하에 불과하다. 이에 착안해서 만들어진 것이 RISC 방식으로서 사용빈도가 높은 명령어들만을 내장하여 CPU를 구성한다. RISC를 간단하게 설명하면 CISC처럼 많은 수의 단순한 명령어들을 탑재하는 것이 아니라 여러 종류의 명령을 포괄해 처리할 수 있는 적은 수의 단순한 명령어만을 탑재하는 방식이라고 할 수 있다. 그래서 Opcode의 Decode와 레지스터 Operand의 엑세스가 동시에 일어나는 게 가능하다.

    2. RISC는 instruction이 단순하여 사이클 당 명령어 실행이 가능하다(One instruction per cycle). 그만큼 빨리 수행된다.

    3. RISC는 많은 비트를 요구하지 않아 레지스터 간 연산이 가능하다(Register to register operations). Memory를 엑세스하는 동작들이 간단한 LOAD와 STORE과 같은 instruction에 의해 레지스터 연산으로 대체된다.

    4. Control Unit의 단순화, 주소 지정 방식에서도 단순하게 레지스터 주소 지정 방식을 사용하므로 적은 수의 간단한 주소 지정 방식을 사용할 수 있다.


    # 그 외에도 RISC는 일반적으로 제한적이고 간단한 instruction set를 가진다. 캐시가 아닌 레지스터 최적 사용을 위해 많은 수의 범용 레지스터들을 사용한다. 그리고 instruction pipeline의 최적화를 강조할 수 있다.


    # CISC와 RISC, 이 둘은 다 각기 장단점이 있다. CISC는 복합 명령을 가짐으로써 하위 호환성을 충분히 확보할 수 있고 RISC의 경우 효율적인 CPU 구조를 가지고 있다. 다만 CISC는 트랜지스터 집적에 있어서 효율성이 결여되어 있고, 그 결과 성능 향상에 난점을 겪고, RISC의 경우 하위 호환을 위해 에뮬레이션 방식을 채택해야 하고, 일정한 환경에서만 성능을 발할 수 있는 단점이 있는 것이다. 따라서 호환성이 절대적으로 필요한 PC 환경에서는 CISC가, 전문적인 일에 있어서는 RISC가 서로 독보적인 우위에 점하고 있는 것이다.


    # 일반적으로 프로그램의 성능은 프로그램의 크기, IPC, clock speed에 의해 결정된다. 그래서 만약 RISC와 CISC가 같은 IPC와 clock speed를 가지면 CISC가 성능이 더 우수하다. 왜냐하면 instruction이 복잡하여 더 적은 프로그램 크기를 갖기 때문이다.


    -용어 정리.


    파이프라인

    파이프라인컴퓨터에서, 파이프라인이란 프로세서로 가는 명령어들의 움직임, 또는 명령어를 수행하기 위해 프로세서에 의해 취해진 산술적인 단계가 연속적이고, 다소 겹치는 것을 말한다. 파이프라인이 없다면 컴퓨터의 프로세서는 메모리에서 첫 번째 명령어를 가지고 와서, 그것이 요구하는 연산을 수행하고, 그리고 나서 다음번 명령어를 메모리로부터 가져오는 식으로 동작한다. 명령어를 가져오는 동안에, 프로세서의 산술연산부분은 다음 명령어가 도착되기를 기다리며 쉬어야만 한다. 파이프라인을 쓰면, 컴퓨터 구조는 프로세서가 산술연산을 수행하는 동안에 다음번 명령어를 가져올 수 있으며, 그것을 다음 명령어 연산이 수행될 수 있을 때까지 프로세서 근처의 버퍼에 가져다놓는다. 명령어를 가져오는 단계는 끊임없이 계속된다. 그 결과, 주어진 시간동안에 수행될 수 있는 명령어의 수가 증가한다.


    파이프라인은 이따금, 한 제품을 이루는 각기 다른 부품들이 조립공정에서 동시에 만들어지는 것에 비유된다. 비록 거기에는 다소 순차적인 한계가 있지만, 전체 공정에 있어서는 동시에 진행될 수 있는 동작들의 장점을 취할 수 있다.


    컴퓨터 프로세서의 파이프라인은, 때로 명령어 파이프라인과 연산 파이프라인으로 나뉘는 경우도 있다. 명령어 파이프라인은 명령어가 프로세서를 통해 움직이는 단계를 의미하는데, 여기에는 가져와서, 필요한 경우 버퍼에 저장되었다가, 실행되어지는 것들을 포함한다. 산술연산 파이프라인은 나뉘어지고, 중복해서 수행될 수 있는 산술연산의 일부를 의미한다. 파이프라인은 메모리 단계별로 여러 가지 장소로 데이터를 옮기는 메모리 콘트롤러에도 적용된다.

    아키텍처


    컴퓨터 아키텍처는 입출력, 저장, 통신, 제어, 처리 등 다섯 개의 기본요소로 나뉠 수 있다. 실제로 이러한 각 요소들(때로는 서브시스템이라고 불린다)는 아키텍처를 가지고 있다고 말하는 경우가 간혹 있다. 그러므로, 다른 경우와 마찬가지로 이러한 경우에는 관용적인 의미의 하나이다.


    비교해보면, 설계라는 용어는 아키텍처보다 더 적은 범위의 의미를 내포하고 있다. 아키텍처는 하나의 설계이지만 대부분의 설계들이 아키텍처는 아니다. 하나의 단일요소 또는 어떤 새로운 기능은 전체적인 아키텍처 내에 맞추어지도록 설계된다.


    비슷한 용어로서, 프레임웍이라는 용어가 있는데, 아키텍처의 일부 구조물이라고 생각할 수도 있다.



    module(모듈)


    일반적으로 컴퓨터 분야에서의 모듈이라는 용어는, 독립되어 있는 하나의 소프트웨어 또는 하드웨어 단위를 지칭하는데 사용된다. 그렇지만, 원래 이 용어는 건축학에서 처음 사용되었다.


    컴퓨터 프로그래밍에서는, 특히 PL/1과 같이 오래된 언어에서, 원시언어로 작성된 문장들로부터 컴파일러의 출력물을 구분해 지칭하기 위해 오브젝트 모듈이라는 용어를 썼다. IBM의 OS/360과 같은 메인프레임 시스템에서 오브젝트 모듈은 하나의 로드 모듈 (load module)을 이루기 위해 다른 오브젝트 모듈들과 함께 연결되었다. 여기서 말하는 로드 모듈이란 컴퓨터에서 실행될 수 있는 실행코드를 말한다. 모듈러 프로그래밍이란, 비슷한 기능을 갖는 코드들은 같은 단위 프로그램 코드 내에 함께 포함시켜야 하며, 다른 기능들은 별도의 독립적인 단위 코드로 개발됨으로써, 유지보수와 타 프로그램들에서 쉽게 이 코드들을 재사용할 수 있도록 개발해야한다는 개념이다. 객체지향 프로그래밍은 본래부터 모듈러 프로그래밍의 개념을 포함하고 있는 새로운 아이디어이다.


    소프트웨어에서 모듈이란 한 프로그램의 일부분이다. 프로그램들은 하나이상의 독립적으로 개발된 모듈로 구성되며, 이들은 그 프로그램이 링크되기 이전까지는 결합되지 않는다. 또한, 모듈은 하나 이상의 루틴을 포함할 수 있다.


    컴퓨터 하드웨어나 전자공학에서 말하는 모듈이란, 커다란 장치나 배열 내에서 비교적 작은 크기의 부품으로서 독립적으로 설치되고, 교체되고, 사용될 수 있도록 설계된 구성요소를 말한다. 예를 들어, SIMM은 여러 개의 메모리 칩들을 하나의 작은 보드에 서로 연결하여 설치함으로써, 사용자들이 별도로 구입하여 개인용 컴퓨터에 쉽게 추가할 수 있도록 만들어 놓은 램을 말하는데, 이를 메모리 모듈이라고 부른다. 



    library ; 라이브러리


    라이브러리는 다른 프로그램들과 링크되기 위하여 존재하는, 하나 이상의 서브루틴이나 함수들이 저장된 파일들의 모음을 말하는데, 함께 링크될 수 있도록 보통 컴파일된 형태인 목적코드 형태로 존재한다. 라이브러리는 코드 재사용을 위해 조직화된 초창기 방법 중의 하나이며, 많은 다른 프로그램들에서 사용할 수 있도록, 운영체계나 소프트웨어 개발 환경제공자들에 의해 제공되는 경우가 많다. 라이브러리 내에 있는 루틴들은 두루 쓸 수 있는 범용일 수도 있지만, 3차원 애니메이션 그래픽 등과 같이 특별한 용도의 함수로 설계될 수도 있다. 라이브러리들은 사용자의 프로그램과 링크되어, 실행이 가능한 완전한 프로그램을 이룬다. 이러한 링크는 대개 정적 연결되지만, 시스템에 따라 동적으로 연결(DLL)될 수도 있다. 




    FPU (floating point unit) ; 부동소수점 처리장치


    수치연산 보조프로세서로도 알려져 있는 FPU는 컴퓨터가 사용하는 기본 마이크로프로세서보다 더 빠르게 숫자를 다를 수 있는 특별한 회로 설계 또는 마이크로프로세서를 말한다. FPU는 전적으로 대형 수학적 연산에만 초점을 맞춘 특별한 명령 셋을 가지고 있어서 그렇게 빠르게 계산을 수행할 수 있는 것이다. FPU는 오늘날의 거의 모든 PC에 장착되고 있지만, 실은 그것은 그래픽 이미지 처리나 표현 등과 같은 특별할 일을 수행할 때에만 필요하다. FPU가 장착되어 있지 않은 PC는 FPU 에뮬레이터를 설치함으로써 간간이 이러한 장치를 필요로 하는 소프트웨어를 처리할 수 있다.


    부동소수점 숫자들은 어떤 소수점 위치를 가지고 있는 숫자를 말한다 (2.17986 등과 같이). 이것은 "부호"(양 또는 음), 의미 있는 숫자들인 "가수", 그리고 크기를 나타내면서 결국은 소수점이 찍힐 위치를 정하게 되는 "지수" 등 세 부분으로 저장된다. 부동소수점 숫자들은 이진수이다.


    웹에서 다운로드할 수 있는 매크로미디어사의 쇽웨이브와 같은 프로그램들을 사용하려면, 자신의 컴퓨터에 FPU가 장착되어 있어야만 한다. 만약 자신의 컴퓨터에 FPU가 장착되어 있지 않다면, 마치 하드웨어적으로 FPU가 장착되어 있는 것처럼 보이게 해주는 FPU 에뮬레이터를 다운로드해서 사용하면 된다.



    [참고]

    CPU 입문(http://blog.naver.com/cernos?Redirect=Log&logNo=70097748659)

    Posted by 동화다아아
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함