Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- REDIS
- edge trigger
- rfc5508
- DOCKER-USER
- wrefresh
- packet filter
- epoll
- wnourefresh
- mvwin
- 취약점
- iptables
- 어셈블리어
- cbpf
- .net core 7
- C언어
- vtable
- architecture
- Docker
- packet flow
- doupdate
- NAPT
- ncurses
- Compiler
- epoll_wait
- LOB
- .nret core 배포
- level trigger
- BOF
- ioctl
- 풀이
Archives
- Today
- Total
Tuuna Computer Science
컴퓨터 구조( CPU에 대해서 ) 본문
CPU의 주 목적은 무언가를 처리하는 것이다.
CPU는 컴퓨터 주기판에 있는 CPU소켓에 부착된 핀을 통하여 컴퓨터의 나머지 부분과 연결된다.
컴퓨터가 무언가를 실행하려면 실행하려는 프로세스가 메모리에 올라와야하며 이 메모리에 있는 프로세스가 CPU로 복사되어야 실행된다.
즉, CPU에게 데이터를 주기 위해 존재하는게 버스다. (Memory <-> CPU)
버스 : 데이터를 컴퓨터의 한 부분에서 다른 부분으로 전송하는 병렬 와이어 그룹을 의미한다.
즉, 메모리에서 CPU로 데이터를 보낼 때 버스를 사용한다. 이러한 버스들도 각 각의 명칭이 있는데
먼저 메모리와 CPU를 잇는 버스는 System_Bus가 있다. System_Bus를 좀 더 세부적으로 보면
Control_Bus, Address_Bus, Data_Bus가 있다.
1. Control_Bus는 System_Bus에 부착된 모든 장치 동기화에 쓰인다. (주소 정보와 데이터들이 어떻게 관리되어야 하는지 흐름 관리)
2. Address_Bus는 명령어의 Address나 Data의 Address를 전달할 때 사용
3. Data_Bus는 Memory에 있는 Data를 CPU에게 보낼 때 사용된다.
그리고 다른 버스로는 I/O_Bus가 있는데 I/O_Bus는 외부장치 키보드와 마우스등의 이벤트 데이터를 처리할 수 있도록 도와준다.
여기까지가 CPU와 메모리사이와 버스에 대한 간단한 설명이다.
위에서 설명했다싶이 무언가를 실행하기 위해선 메모리에 무언가가 올라와야 하며 올라온 데이터를 CPU에게 보내어 처리해야하는데 이 과정을 자세히 살펴보자
일단 CPU의 동작 방식은 :: (인출 -> 해독 -> 실행) 3가지다. 경우에 따라(피연산자 필요시) 피연산자 호출과 출력 피연산자 지정과정이 추가로 실행된다.
처음엔 인출이라는 것을 실행한다.
인출은 명령어 큐에서 다음 명령어를 인출한다. 그리고 Program Counter을 증가 시킨다.(= 명령어 포인터(IP)
명령어 포인터 : 다음 명령어의 주소를 포함한다.
명령어를 인출했다면 이제 이 명령어가 무엇인지에 대해 해독과정을 거쳐야 한다. 그리고 ALU에게 이게 어떤 명령어인지 알려준 뒤 실행한다.
만약 피연산자가 필요하다면 메모리에 있는 데이터를 Data_Bus를 통해서 내부 레지스터에 복사하여 읽어온다. 그리고 ALU가 연산을 한 후
데이터를 Data_Bus를 통해 다시 메모리로 이동한다.
예시를 들어 설명해 보겠다
아래와 같은 C 코드가 있다고 가정해보자
00041000 a = a + b;
일단 명령어 큐에 있는 00041000번지를 인출하고 Program Counter를 증가시킴
이 명령어가 무엇인지 해독한다. 해독 결과 +와 = 명령어가 있다( 편의상 2개의 명령어를 동시에 처리하겠다)
먼저 해독한 +의 명령을 ALU에게 알려주고 피연산자가 필요하니 메모리에있는 a와 b를 Data_Bus를 통해 내부 레지스터로 복사해 온 뒤 + 연산을 실행한다.
그리고 = 명령어를 실행해서 메모리에 변수 a가 있는 곳에 연산결과를 Data_Bus를 통해 이동시킨다.
지금까지 말한게 CPU가 데이터를 처리하는 과정이다.
'computer architecture' 카테고리의 다른 글
컴퓨터 구조 ( Memory에 대해서 ) (0) | 2018.10.27 |
---|---|
부동소수점 캐스팅(convert int pointer to float pointer (1) | 2018.09.29 |
Comments