1장 컴퓨터 구조
1. 시스템 프로그램이의 이해와 접근
- windows 시스템 프로그래밍이란?
- windows 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것
- 이를 위해서는 windows가 제공하는 라이브러리를 이해해야하고, 이를 이해하기 위해서는 운영체제, 컴퓨터 구조에대한 기본지식이필요하다.
- 따라서 하드웨어적인 이해부터 공부해보자.
- 컴퓨터 시스템의 주요 구성요소
- CPU-Cache : 컴퓨터 구조 과목에서 다룸
- main memory - hard disk : 운영체제 과목에서 다룸
* CPU
: 중앙처리 장치로써 연산을 담당한다.
: 컴퓨터의 머리
* Main Memory
: RAM이라는 저장장치로 구성되는 메인 메모리는 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역이다.
: 프로그램 실행을 위해 존재하는 메모리
* input/output Bus (입출력 버스)
: 컴퓨터를 구성하는 구성요소 사이에서 데이터를 주고 받기 위해 사용되는 경로
: Address Bus, Data Bus, Control Bus 세가지로 구분된다.
: 하드디스크, CPU, 메인메모리등 모두가 버스에 연결되어있어 전송, 입출력을 가능하게 한다.
3. CPU에 대한 이해
* ALU(Arithmetic Logic Unit)
: CPU에서 연산을 담당하는 블록
: 산술연산(덧셈, 뺄셈...)과 논리연산(AND, OR...)의 처리를 담당
* Control Unit
: CPU가 처리해야할 명령어들을 해석
: ALU가 동작할 수 있도록 실행파일의 명령어를 해석해주는 블록
- ALU는 단순해서 명령어를 해석할 수 없고 명령에 따른 연산만 담당한다.
: CPU의 총 사령관
* Register Set
: Control Unit이나 ALU가 필요로 하는 명령어 및 데이터들을 저장해두는 공간
: 임시적으로 저장하는 아주 작은 메모리
: CPU에 따라서 16bit, 32bit, 64bit 정도의 크기를 가지게 되고, CPU 내부에 여러개가 존재하며, 각각의 레지스터의 용도는 일반적으로 정해져있다.
* Bus Interface
: I/O BUS
:컴퓨터 안에는 CPU, Hard Disk, RAM, Sound Card, GPU 등등이 있는데, 이들이 서로 데이터를 주고받으면서 동작할 수 있도록 하는 통로
: Bus Interface는 I/O 버스가 어떻게 데이터를 전송하는지에 대한 프로토콜 혹은 통신방식을 알고 있는 블록
: I/O버스와 연결되는 각각의 기기들은 연결하기위한 자신만의 Interface가 필요하다.
* Clock Pulse (클럭)
: CPU를 구성하는 요소는 아니지만, Timing 을 제공하기 위해서 필요하다.
: 1.6Mhz인 CPU는 1초에 1백 6십만번의 연산을 하게 된다. 즉, CPU의 클럭속도가 높으면 초당 처리하는 명령어의 개수가 많아지므로 컴퓨터의 전체적인 성능은 좋아지게된다.
: 왜? 클럭신호에 맞추어서 CPU는 동작해야하는가?
: 다른 장치, 블록과의 동기화를 위해서 필요하다. 뒤처지거나 밀리는 작업이 없도록 가장 느린 장치의 속도에 맞추어 진행하면 밀리지 않는다.
4. 프로그램의 실행과정
* 위대한 수학자 폰 노이만
: 오늘날 우리가 사용하고 있는 컴퓨터의 기본 모델을 제시한 사람
: 이전까지 프로그램이란 단순히 진공관 회로의 스위치 구성을 의미하는 것이었다. 하지만, 폰 노이만은 프로그램이 컴퓨터 내부에 저장되는 구조를 생각해내었다.
: CPU <-> Memory <== LOAD == Program
: 폰 노이만 구조의 가장 큰 특징은 '실행되어야 할 프로그램이 컴퓨터 내부에 저장된다는 것'
: 그래서 Stored Program Concept이라고 불리기도 한다.
* 프로그램 실행과정
- 실행파일의 생성단계
: 전처리기 => 컴파일러 => 어셈블리 => 링커
1단계 : 전처리기에 의한 치환 작업
: #include나 #define과 같은 #지시자에 따라 소스코드를 적절히 변경한다
2단계 : 컴파일러에 의한 번역
: 여전히 C언어로된 소스코드가 컴파일러에 의해 어셈블리 코드로 번역된다.
: 어셈블리 코드란, CPU에 일을 시키기 위한 명령어를 조합해 만들어진 프로그램 코드이다.
: 이게 없다면 직접 명령어체계를 익혀서 명령해야했을 것이다.
3단계 : 어셈블러에 의한 바이너리 코드 생성
: 1과 0으로만 구성되는 코드, 어셈블리와 매칭되는 바이너리 코드로 변환된다.
4단계 : 링커에 의한 연결과 결합
: 프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 작업
: 이 작업이 끝나면 실행파일이 생겨난다. (실행파일은 바이너리 코드로 구성된다.)
- 시나리오
: 실행파일에는 컴퓨터에게 일을 시키기위한 바이너리 코드 형식의 명령어가 있다.
: 이를 실행시키면 메모리 공간에 올라간 다음 CPU에 의해서 순차적으로 CPU내부에서 실행되기 시작한다
단계 1. Fetch
: 메모리상의 명령어를 CPU로 가져오는 작업
단계 2. Decode
: 가져온 명령어를 CPU가 해석하는 단계
: 그림을 참조하면, 명령어 A가 덧셈!으로 해석되어지는 것을 볼 수 있다,
단계 3. Execution
: 해석된 명령어대로 CPU가 실행하는 단계
: Fetch > Decode > Execution 으로 실행되어지고 있다. 이는 중요한 개념이다.
5. 하드웨어 구성의 재접근
* 폰노이만의 컴퓨터 구조 vs 오늘날의 컴퓨터 구조
: Fetch 는 어떠한 이동경로를 통해 이루어지는가?
- I/O BUS
: 명령어를 CPU 내부로 가져다 놓을 때 어디에 저장되는가?
- Register Set
: Decode는 누구에 의해 실행되어지는가?
- Control Unit
: Execution은 누구에 의해 실행되어지는가?
- ALU
이는 다음과 같은 그림으로 요약된다.
* 데이터 이동의 기반이 되는 버스(BUS) 시스템
: 데이터를 이동하는데 있어서 사용되는 전송 경로를 가리켜 버스 시스템이라고 한다.
- Data Bus
: 데이터를 이동시키기 위한 버스
: 명령어, 피연산자 등이 속한다.
- Address Bus
: 주소값을 이동하기 위한 버스
: 주소값을 통해 해당 주소에 있는 데이터를 반환할 수 있다.
- Control Bus
: CPU가 원하는 바를 메모리에 전달할 때 사용한다
ex)
CPU : 데이터 보내! (contorl bus)
메모리 : 알았어 어디 있는걸 줄까?
CPU : 0x1200 에 있는거 (Address Bus)
메모리 : 자 데이터 받아! (Data Bus)
총 정리
|
'독후감 > 컴퓨터구조+운영체제+시스템프로그래밍' 카테고리의 다른 글
6. 커널 오브젝트와 오브젝트 핸들 (0) | 2017.03.06 |
---|---|
5. 프로세스의 생성과 소멸 (0) | 2017.03.03 |
4. 컴퓨터구조에 대한 두번째 이야기 - Part2 프로세스와 IPC (0) | 2017.03.03 |
3. 64비트 기반 프로그래밍 (0) | 2017.03.02 |
2. 아스키코드 vs 유니코드 (0) | 2017.03.02 |