컴퓨터구조에서 하드웨어 구성
컴퓨터 구조의 하드웨어 구성은
크게 CPU, 메인메모리, 버스IO로 구성되어있습니다.
아래그림을 보면서 5단계로 설명드리겠습니다.
1.하드저장된 실행파일을 실행시키기 위해
버스IO를 거쳐 메인메모리에 넣습니다.
2. 그리고 메인메모리에 저장된 실행파일의 명령어들을 버스IO를 통해 CPU로 옮깁니다. ( Fetch )
3. 메인메모리에서 받은 명령어를 CPU의 레지스터에 담고 하나씩꺼내서 컨트롤유닛에게 줍니다.
4. 컨트롤 유닛은 이 명령어가 무엇인지 해석하고 ALU에게 그에 해당하는 연산처리를 시킵니다. ( Decode )
5. ALU는 연산을 처리합니다.
( Excution )
위의 5단계를 하나 하나 해석해보겠습니다.
1.하드저장된 실행파일을 실행시키기 위해
버스IO를 거쳐 메인메모리에 넣습니다.
에서 하드디스크의 실행파일을 메모리에 넣는다는것은 어렵지 않을 겁니다.
하지만 버스I/O가 생소할텐데 버스I/O란 데이터의 이동 통로라고 생각하면됩니다.
2. 메인메모리에 저장된 실행파일의 명령어들을 버스IO를 통해 CPU로 옮긴다고 했는데 여기서 명령어란 무엇일까요?
CPU를 만들때 명령어라는 것을 함께 만듭니다.
예를들어 "0101이라는것은 CPU가 덧셈으로 해석하겠다.
0011은 뺄셈으로 해석하겠다" 처럼 CPU가 어떠한 값이 들어왔을때 이를 해석하도록 되어있는데
프로그래머가 0101과 같이 코딩을 하는것은 상당히 복잡한일이 아닐 수 없습니다.
그래서 나온것이 어셈언어입니다.
ADD 0101
MIN 0011
과 같이 정의 해놓은 후 ADD로 코딩을 하면 덧셈명령어가 되는 것입니다.
요즘은 어셈언어를 많이 사용하지않고 C언어와 같은 고급언어를 통해 코딩하는데
이 과정은
컴파일러에의해 번역되고 다시 어셈플러에의해 번역되어 최종적으로 CPU가 해석하고 실행파일을 만들게 되는 것입니다.
그리고 2번과정을 통틀어 Fetch라고 부릅니다.
3. 메인메모리에서 받은 명령어를 CPU의 레지스터에 담고 하나씩꺼내서 컨트롤유닛에게준다 라고 되어있습니다.
여기서 레지스터는 보조메모리로 생각하시면 됩니다.
명령어를 임시로 저장하고 연산결과도 저장합니다.
4. 컨트롤 유닛은 이 명령어가 무엇인지 해석하고 ALU에게 그에 해당하는 연산처리를 시킵니다. ( Decode )
컨트롤유닛은 cpu전반관여하는데 레지스터의 명령어를 가져와 이를 해석하고 ALU에게 연산을 하도록 시킵니다.
이과정을 Dedcode라고 합니다.
5. ALU는 연산을 처리합니다.
( Excution )
그리고 ALU는 연산처리장치로 컨트롤유닛에게 명령받아 연산을 처리합니다.
이 과정을 Excution이라고 합니다.
클럭 신호
클럭신호란 0101010과같이 클럭을 내보내주는 것을 말합니다.
클럭신호가 필요한 이유는
모든 장치들이 제각각 움직이면 문제가 발생할 수 있기때문에
이를 동기화해야할 필요성이 있기 때문입니다.
예를 들어 10+20 연산할때 레지스터에서 명령어를 가져와서 이를 해석하고 연산할때
레지스터에서 명령어를 가져오는 타이밍과 이를 해석하는 타이밍, 그리고 연산하는 타이밍이 모두 제각각이면 처리가 제대로 되지 않을 것입니다.
버스
버스는 데이터의 이동 통로라고 아까 말씀드렸습니다.
이를 조금더 구체적으로 살펴보겠습니다.
버스는 총 3가지로 볼 수있는데
데이터버스
어드레스버스
컨트롤버스
데이터버스는 말그대로 데이터가 이동하는 통로입니다.
어드레스버스는 어느 주소에 있는 데이터를 어느주소로 이동 시킬것인지 알려주는 통로입니다.
컨트롤버스는 데이터의 이동에 순서를 정하는 일종의 규약으로 보면 됩니다.
'프로그래밍' 카테고리의 다른 글
윈도우시스템프로그래밍_03.32비트 64비트 구조 및 차이 (0) | 2017.03.22 |
---|---|
윈도우시스템프로그래밍_02.윈도우에서의 문자셋(SBCS/MBCS/WBCS)(아스키코드,유니코드 등) (0) | 2017.01.18 |
ARM데이터시트_SysTick Timer 레지스터(STK_CTRL/STK_LOAD/STK_VAL) (0) | 2016.12.18 |
ARM데이터시트_Systick 우선순위 및 발생 시점 (0) | 2016.12.18 |
ARM실습_SPL를 이용하여 GPIO를 해보자 (0) | 2016.12.14 |
댓글