[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 2007 윤성우 저
" 시스템 프로그래이란 하드웨어를 사용할 수 있도록 도와주는 프로그램"
= Window 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램 구현하는 것
1장 컴퓨터 구조에 대한 이야기
컴퓨터를 구성하는 것
1. CPU
중앙 처리장치
* 메인 메인 메모리 : 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역
2. 입 출력 버스
컴퓨터를 구성하는 구성요소 사이에서 데이터를 주고받기 위해 사용되는 경로
Address Bus
Data Bus
Control Bus
하드디스크, 메인 메모리 CPU 등이 모두 버스에 연결되어 있다.
3. ALU (Arithmetuc Logic Unit)
CPU 내부에 실제 연산을 담당하는 블록
-산술 연산
-논리연산
4. 컨트롤 유닛
실행파일에는 CPU에게 일을 시키기 위한 명령어들이 저장되어 있다.
ALU는 말 그대로 연산만 하기 때문에 명령어를 해석해줘야 하는 것이 필요하다 그것이 컨트롤 유닛이다.
5. CPU 내부의 레지스터
CPU 내부에 임시적으로 데이터를 저장하기 위한 공간이 필요하다. 그것이 레지스터이다.
레지스터는 CPU 내부에 존재하는 바이너리 데이터 저장을 위한 저장장치이다.
6. 버스 인터페이스
CPU 내에 입출력 버스의 통신방식을 이해하고 있는 것
##클럭 신호
ex) 1.6Mhz의 경우 1초당 1600000번의 클럭을 발생, CPU는 클럭이 발생할 때마다 그 클럭에 맞춰서 일을 한다.
클럭 신호에 맞추어 일을 해야 하는 이유 :
컴퓨터 시스템은 동기화를 필요로 하기 때문 (연산속도와 데이터가 가져가는 속도가 일치하지 않는다면? 출력장치는 가져간 데이터를 다시 출력할 수도 있다!)
실행파일의 생성-실행 단계
실행 파일 생성 단계
1. 전처리기 : #으로 시작하는 지시자에 따라 소스코드를 변경
2. 컴파일러에 의한 번역 : 소스코드를 어셈블리 코드를 번역
3. 어셈블러로 바이너리 코드 생성
실행파일 실행 단계
1. Fetch : 메모리상에 존재하는 명령어를 CPU로 가져오는 작업
2. Decode : 가져다 놓은 명령어를 CPU가 해석하는 단계, 명령어를 분석하는 단계
3. Execution : 명령어의 명령대로 CPU가 실행하는 단계
버스 시스템
1. 데이터 버스 : 데이터 이동
2. 어드레스 버스 : 주소 값 이동을 위해 필요한 버스
ex) 1번지에 저장된 데이터를 읽어야 한다면 메모리 영역에 주소 값을 전달, 해당 값은 데이터 버스로 전달받는다.
3. 컨트롤 버스 : CPU와 메모리가 특정 사인을 주고받는 용도로 사용되는 버스 (보내! 받아!)
2장 아스키 코드/유니코드
"흔히 사용되는 문자는 총 256을 넘지 않는다 그래서 1바이트로 충분히 표현 가능하다 하지만 다른 국가 언어는?
그래서 등장한 것이 유니코드이다. 유니코드는 2바이트를 사용한다."
문자셋 종류
SBCS(Single Byte Character Set)
=아스키 코드
MBCS(Multi Byte Character Set) (SBCS를 포함)
= 대부분은 2 바이트를 사용하지만 경우에 따라서 1 바이트를 사용한다.
WBCS(WIde Byte Character Set)
=유니코드
# 한글 읽기
MBCS 한글은 2바이트로 읽기 때문에 문자열, fputc 함수 호출하는데 생각한 대로 동작하지 않는다.
ex) 한글 -> 길이 4
" 이 문제를 해결하는 것이 " WBCS이다.
1. char 대신하는 wchar_t
char 변수는 1 바이트 메모리 공간만 할당되지만 wchar_t는 2바이트 공간이 할당된다.
2. "ABC"(MBCS 기반)=> L"ABC"(WBCS 기반)
wchar_t = L"ABC"
3. strln을 대신하는 wcslen
MBCS와 WBCS 동시 지원하는 방법
매크로 UNICODE가 정의되면 wchar_t 사용
매크로 UNICODE가 정의되지 않으면 char 사용
**개발자 편의를 위해 프로젝트 생성 시 기본적으로 정의된 매크로가 있을 수 있다.
**이미 만들어져 있는 매크로 tchar.h
'Programming' 카테고리의 다른 글
윈도우 시스템 프로그래밍_3 (0) | 2020.09.21 |
---|---|
윈도우 시스템 프로그래밍_2 (0) | 2020.09.13 |
[도서] Code Complete - #2 (0) | 2020.05.18 |
[도서] Code Complete - #1 (0) | 2020.05.06 |
프로세스와 쓰레드 (0) | 2020.05.04 |