관리 메뉴

기억을 위한 기록들

[윈도우즈 시스템 프로그래밍] - 파트1 컴퓨터 구조와 프로그래밍 모델 본문

CS/윈도우즈 시스템 프로그래밍

[윈도우즈 시스템 프로그래밍] - 파트1 컴퓨터 구조와 프로그래밍 모델

에드윈H 2023. 11. 14. 13:09

해당 글은 '뇌를 자극하는 윈도우즈 시스템 프로그래밍-윤성우 저'를 기반하여 해당 인터넷 무료강의를 참고하여 작성되었습니다.

 

 

시스템 프로그래밍이란?

  • 범위는 하드 웨어 + 운영체제
  • 컴퓨터 시스템을 활용하는 소프트웨어 개발
  • Windows 운영체제 자체의 기능을 활용하는 프로그래밍
  • 응용 소프트웨어 개발과의 차이점은 시스템 프로그래밍은 모든 응용 프로그램에 포함되는 요소

 

컴퓨터 시스템의 주요 구성요소

 

 

컴퓨터 하드웨어 구성

 

 

컴퓨터 하드웨어의 구성크게 3가지

1. CPU : 중앙처리 장치,

2. 메인메모리 : "컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역

3. 입, 출력 버스 : 컴퓨터 구성요소의 데이터를 주고받기 위한 경로 어드레스 버스, 데이터 버스, 컨트롤 버스 세 가지로 구분

 

CPU에 대한 이해

1. ALU(Arithmetic Logic Unit) : 직역하면 산술논리장치로 CPU가 덧셈이나 뺄셈과 같은 연산을 진행하는 주체가 되는데  내부에 실제 연산을 담당하는 게 ALU라는 블록이다,. 덧셈이나 뺄셈과 같은 연산과 또 하나가 AND나 OR연산이다.

2. 컨트롤 유닛 : CPU가 해야하는 일들을 해석하는 것이다. 명령어를 보고 ALU에게 신호를 보내준다.

3. 레지스터들 : CPU내에서 임시적으로 데이터를 저장하기 위한 공간

4. 버스 인터페이스 : 위 그림과 같이 입, 출력 버스에서 CPU와 통신을 해주는 역할이다.

etc. 클럭 신호 : CPU의 구성요소는 아니지만, 쉽게 얘기하자면, 동기화라는 걸 필요로 하기에 그에 맞는 타이밍을 제공하기 위해 필요한 것으로, CPU 클럭신호 수치에 따라 높을수록 성능이 좋아진다.

 

 

CPU 동작원리에 대해 굉장히 잘 만들어졌다고 생각한 유튜브 영상도 있다.

https://www.youtube.com/watch?v=Fg00LN30Ezg&ab_channel=bRd3D

 

하나 더 있는데 이 영상은 연산 방법인 게이트 관련된 설명과 역사에 대해도 살짝 짚어줘서 흥미로웠다.

 

https://www.youtube.com/watch?v=WGKHEIpXy5c&ab_channel=%EC%BD%94%EB%94%A9%EC%95%A0%ED%94%8C

 

 

프로그램이 실행과정

 

 

- 전처리기에 작업이 진행 된다 # 이 붙은 지시자 치환하고, 이후엔 컴파일러에 의해 CPU의 명렁어로 번역한다. 그이후엔

 예를 들어, ADD는 0011은 덧셈이고, MIN은 0010이다... 등등 명렁어 자체를 바이너리 코드로 번역 이게 바로 어셈블리 프로그래밍. 그리고 링커에 의해 라이브러리와의 결합을 한다.

 

다시 정리하자면, 특정 언어에 코드를 'CPU의 명령어'로 번역을 해주는게 컴파일러, .CPU의 명령어를 바이너리 코드로 변역하는게 어셈블러. 즉,

컴파일러 : 특정 언어 코드 -> CPU의 명령어 변경
어셈블러 : CPU의 명령어 -> 바이너리 코드로 변경

 

어셈블러에 의해 만든 바이너리와 라이브러리를 묶어 실행파일을 만드는게 링커이다.

 

 

- 폰 노이만의 아키텍처로 'Stored Program Concept' 라는걸로 폰 노이만 아키텍처라고도 함.

 

 

참고 자료 : 

https://www.youtube.com/watch?v=GVX-m3RF-K0&ab_channel=%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4

 

 

 

 

아스키 코드와 유니코드

문자셋(Character Set)의 종류와 특성

  • SBCS(Single Byte Character Set) - 문자 표현에 1바이트 사용. 아스키 코드
  • MBCS(Multi Byte Character Set) - 한글은 2바이트. 영문은 1바이트 사용
  • WBCS(Wide Byte Character Set) - 문자를 표현하는데 2바이트 사용. 유니코드

 

WBCS를 위한 2가지

  • 1. char 대신 wchar_t
  • 2. "ABC" 대신 L"ABC"
  • 예시) wchar_t str[] = L"ABC";

 

 

 

64비트와 32비트의 구분 방법

구분은 아래 2가지 기준으로 나눈다.

  • 한번에 송수신 가능한 데이터 크기(버스)
  • 데이터 처리 능력

프로그래머 입장에서 64비트 컴퓨터

  • 32비트 컴퓨터 -> 포인터가 32비트
  • 64비트 컴퓨터 -> 포인터가 64비트