I : 컴퓨터 구조에 대한 첫번째 이야기
뇌를 자극하는 윈도우즈 시스템 프로그래밍 을 읽고 정리한 문서입니다 ;)
시스템 프로그래밍의 이해와 접근
시스템 프로그래밍이란, 하드웨어를 직접 제어하는 OS 등을 개발하는 사람도 포함하지만, 이 OS가 제공하는 API를 사용하여 프로그래밍 하는 것을 포함한다.
컴퓨터 구조와 운영체제를 이해하게 되면, 문법적 요소만을 이해하고 바로 프로그래밍하는 프로그래머들보다 효율적인, Power Programming 이 가능해진다.
램이라는 저장장치로 구성되는 메인메모리는 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역이다. 즉 프로그램 실행을 위해 존재하는 메모리이다.
입 출력 버스는 컴퓨터 구성요소 사이에 데이터를 주고 받기 위해 사용하는 경로이다. 이는 주고받는 데이터의 종류에 따라 어드레스 버스, 데이터 버스, 컨트롤 버스의 세 종류로 구분된다.
CPU에 대한 이해
프로그램이 실행되는 곳은 어디일까 하면 보통 CPU라고 하지만, 좀 더 상세히 볼 필요가 있다. CPU 내부에는 실제 연산을 담당하는 ALU라는 블록이 있다. 이 ALU는 덧셈이나 뺄셈과 같은 산술 연산과, AND나 OR 과 같은 논리 연산을 가능하게끔 한다.
프로그램을 컴파일하게 되면 실행 파일이 생성되고, 여기에는 CPU에게 일을 시킬 명령어들이 순차적으로 저장되어 있다. 비트의 연속으로 이루어진 이 명령어를 ALU가 바로 실행할 수 있을 정도로 똑똑하지 않다. 따라서 이 비트를 ALU에게 해석해 주는 장치가 바로 컨트롤 유닛이다.
또한, 연산의 대상이 되어야 할 피연산 값들이 CPU로 옮겨져야 하기에, CPU 내부에는 임시적으로 혹은 특수한 목적을 위해 데이터를 저장하기 위한 조그마한 메모리 공간이 필요하고, 이를 레지스터 라고 부른다.
또한, 컴퓨터의 기기들이 IO버스를 통해 데이터를 송수신할 때, CPU 또한 이 IO버스로부터 송수신을 해야 하기에, 이에 대한 프로토콜 혹은 통신 방식을 담당해주는 버스 인터페이스가 CPU 내부에 존재하게 된다.
CPU는 클럭 신호를 기반으로 동작하는데, 이는 타이밍을 제공하기 위해 필요하다. CPU 내부에 존재하는 연산 장비들과 다양한 부품들 끼리 동기화를 맞추어야 연산이 정상적으로 이루어지기 때문이다.
프로그램의 실행과정
폰 노이만은, 프로그램이 컴퓨터 내부에 저장되는 구조로서, 프로그램은 컴퓨터 내부에 저장되어 순차적으로 실행되어야 한다는 구조를 제시했다.
프로그램이 작성한 코드는 전처리기에 의해 치환작업이 우선 이루어진다. 이후 컴파일러에 의해 어셈블리 언어로 이 코드가 변경되며, 이후 어셈블러에 의해 바이너리 코드가 생성된다. 이후 링커에 의해 프로그램에서 참조하는 함수나 라이브러리가 연결되게 된다.
이후 이 실행파일은 메모리로 올라가게 되고, 이 메모리에서 명령어가 CPU로 fetch되며, CPU는 가져온 명령어를 decode하여 해석한 명령대로 execute 되게 된다.
데이터 이동의 기반이 되는 버스 시스템
CPU는 메인 메모리와 버스를 통해 데이터를 가져오고 저장하는데, 이는 데이터 버스, 어드레스 버스, 컨트롤 버스로 구성된다.
데이터 버스는 데이터가 이동하는 버스로서, 이는 명령어가 될 수도 있고, 피연산자가 될 수도 있는 모든 데이터를 다룬다.
어드레스 버스는 주소값을 전달하는 버스로서, CPU가 필요로 하는 메모리 주소값을 메모리에게 전달하는 용도로 쓰인다.
컨트롤 버스는 CPU가 원하는 바를 메모리에 전달할 때 사용한다. 데이터가 송신되는 것인지, 수신을 필요로 하는지 등을 의미한다.
이것만은 알고 갑시다
- ALU와 컨트롤 유닛의 기능적 역할
- 명령어가 CPU로 입력되었을 때, 명령어의 내용대로 연산을 하는 주 요소는 ALU지만, 명령어를 분석해서 해야 할 일을 결정하는 요소는 컨트롤 유닛이다.
- 레지스터의 필요성
- 클럭 펄스의 필요성
- Fetch, Decode, Execution
- 메인 메모리에 저장되어 있는 명령어를 버스를 통해 CPU 내부로 가져와서, 컨트롤 유닛으로 분석한 다음 ALU가 실행하게 된다.
- 버스 인터페이스
- 버스의 통신방식에 맞게 데이터 입출력을 돕는 인터페이스 장치가 존재하며, 이를 어댑터 혹은 컨트롤러라고 부르기도 한다.
'공부한 이야기 > 윈도우 OS' 카테고리의 다른 글
IV : 컴퓨터 구조에 대한 두번째 이야기 (0) | 2023.04.29 |
---|---|
III : 64비트 기반 프로그래밍 (0) | 2023.04.29 |
II : 아스키코드 VS 유니코드 (0) | 2023.04.29 |
프로세스 기초 (0) | 2022.08.12 |
운영체제 기초 (0) | 2022.08.12 |