minhui study
1부 1장 컴퓨터 구조에 대한 전반적인 이해 본문
[목차]
1. 시스템 프로그래밍의 이해와 접근
2. 컴퓨터 하드웨어의 구성
3. CPU에 대한 이해
4. 프로그래밍의 실행 과정
5. 하드웨어 구성의 재접근
Section 01. 시스템 프로그래밍의 이해와 접근
> 시스템 프로그래밍(System Programming)이란?
- 시스템 프로그램 = "컴퓨터 시스템을 동작시키는 프로그램"
ex) Windows, Unix 와 같은 운영체제들
- 시스템 프로그래밍 : Windows 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것
> 컴퓨터 시스템의 주요 구성요소(Main Components)
Section 02. 컴퓨터 하드웨어의 구성
> 컴퓨터 하드웨어의 구성
- CPU(Central Processing Unit) : "중앙 처리 장치 " 연산을 담당한다.
- 메인 메모리(Main Memory) : 램(RAM)이라는 저장장치로 구성이 되어 있으며 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역(프로그램 실행을 위해 존재하는 메모리)
- 입출력 버스(Input/Output Bus) : 컴퓨터를 구성하는 요소 사이에서 데이터를 주고 받기 위해 사용되는 경로로 그 데이터의 종류와 역할에 따라 Address Bus, Data Bus, Control Bus 이렇게 세 가지로 구분이 된다.
Section 03. CPU에 대한 이해
> CPU의 주요 구성요소
: ALU(Arithmetic Logic Unit), Control Unit, CPU 내부 레지스터들(Register Set), Bus Interface, Clock Pulse(클럭 신호)
1) ALU(Arithmetic Logic Unit)
: CPU 내부에서 실제 연산을 담당한다. 크게 두 가지 연산을 하는데 하나는 산술 연산이고 나머지 하나는 논리 연산 이다.
2) Control Unit
: ALU를 대신해서 명령어를 해석해준다. 즉, CPU가 처리해야 할 명렁어들을 해석하는 것이다.
3) CPU 내부 레지스터들(Register Set)
: CPU 내부에 임시적으로 데이터를 저장하기 위한 메모리 공간이 필요한데 그 메모리가 바로 2진 데이터(binary data) 저장하는 레지스터이다. 이들은 CPU가 연산을 하기 위해서 반드시 필요하며 CPU의 종류에 따라서 그 개수와 형태가 다양하다.
4) Bus Interface
: 서로 데이터를 주고 받기 위해서는 어떠한 매개체가 있어야 하는데 그게 바로 I/O BUS이다. CPU내에는 I/O BUS의 통신방식을 이해하고 있는 그 무엇인가가 있어야 하는데 그 역할을 해주는 것이 바로 버스 인터페이스이다.
5) Clock Pulse(클럭 신호)
: CPU에 타이밍을 제공하기 위해서 필요한 것이다. 시스템들을 동기화시켜주는 역할을 한다.
Section 04. 프로그램의 실행과정
> 전처리기 -> 컴파일러 -> 어셈블러 -> 링커
1단계 : 전처리기에 의한 치환작업
-> #include 같이 #으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업을 한다.
2단계 : 컴파일러에 의한 번역
-> 컴파일러에 의해서 어셈블리 코드로 변역된다.
3단계 : 어셈블러에 의한 바이너리 코드 생성
-> 어셈블리 코드는 컴퓨터에 의해 실행되기에 앞서서 바이너리 코드로 번역되어야 한다.
4단계 : 링커에 의한 연결과 결합
-> 프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 작업을 한다. 이 과정이 끝나면 바이너리 코드로 구성된 실제로 실행 가능한 실행파일이 생성되다.
이제 프로그램의 실행 과정을 전체적으로 이야기해보자
그림에 대한 설명을 하자면 우선 실행파일을 보자. 이것은 링커에 의해서 만들어진 파일로서 바이너리 코드 형식의 명령어가 들어있다. 이것이 메모리 공간에 올라가고 난 다음 CPU에 의해서 실행되기 시작한다. 이 명령어들은 순차적으로 실행되는데 메모리상이 아닌 CPU내부로 하나씩 이동한 다음 실행하게 된다. 이 때 3단계의 과정이 있는데 다음과 같다.
① Fetch : 메모리상에서 존재하는 명령어를 CPU로 가져오는 작업이다.
② Decode : 가져다 놓은 명령어를 CPU가 해석하는 단계이다.
③ Execution : 해석된 명령어의 명령대로 CPU가 실행하는 단계이다.
Section 05. 하드웨어 구성의 재접근
지금까지 내용을 바탕으로 질문에 답해 보자
하나 . 명령어 실행을 위해서 제일 먼저 하는 일이 Fetch인데 어떠한 이동 경로를 통해서 명령어의 Fetch가 진행되는 것인가? 버스 시스템
둘 . 명령어를 CPU안에 가져다 놓을 때 어디에 저장하는 것이가? IR(Instruction Register) 레지스터
셋 . CPU안에 가져다 놓은 명령어는 Decode 단계에서 해석되는데 이는 CPU안에 존재하는 누구에 의해서 진행되는 것이가? Control Unit
넷 . 마지막 단계인 Execution은 누구에 의해서 진행되는가? ALU(Arithmetic Logic Unit)
> 데이터 이동의 기반이 되는 버스 시스템
① Data Bus : 데이터를 이동하기 위해 필요한 버스
② Address Bus : 주소값을 이동하기 위해 필요한 버스
③ Control Bus : CPU가 원하는 바를 메모리에 전달할 때 사용한다. CPU와 메모리 사이에 데이터를 보낼 것인지 받을 것인지에 대한 적절한 사인이 오고 가야 한다.
다음 그림은 지금까지 설명한 내용들을 구체화 한 것이다.
출처 : 윈도우즈시스템프로그래밍 (한빛미디어)
'컴퓨터 구조 > Windows System Programming' 카테고리의 다른 글
4부 16장. 메모리의 구성, 관계 및 역할 (0) | 2020.01.31 |
---|---|
3부 10장 - 2. 함수 호출 관점에서의 컴퓨터 구조의 이해 (0) | 2020.01.24 |
3부 10장 - 1. 함수 호출 관점에서의 컴퓨터 구조 이해 (0) | 2020.01.23 |
2부 4장 - 2. 레지스터와 명령어에 대한 깊이 있는 이해 (1) | 2020.01.23 |
2부 4장 -1 . 레지스터와 명령어에 대한 깊이 있는 이해 (0) | 2020.01.22 |