시스템 프로그래밍 27

4-1. 컴퓨터 구조의 접근방법

컴퓨터를 디자인 하자 * 프로그래머 관점 - 컴퓨터 구조를 잘 아는 프로그래머도 컴퓨터 디자인에 참여 - 컴퓨터 디자인은 레지스터와 명령어 디자인 * 레지스터 디자인의 핵심(기본 구성) - 레지스터는 몇 비트로 구성할 것인가? ㄴ n 비트 시스템이라면 명령어 길이에 따라 레지스터도 n비트로 구성 - 몇 개 정도로 레지스터를 구성할 것인가? - 레지스터 각각을 무슨 용도로 사용할 것인가? ㄴ 레지스터는 특별한 목적을 가진 저장장치 ㄴ 따라서 용도를 정하면 명령어가 단순해지고, 속도가 빨라짐 ex) 레지스터 디자인 예 r0 r1 r2 r3 r4 ir r5 sp r6 lr r7 pc - r0 ~ r3: 범용(연산) 레지스터로 구성 - ir: instruction register - sp: stack point..

3. WIN32 & WIN64

64비트와 32비트의 구분 방법 * 구분의 2가지 기준 - 한 번에 송수신이 가능한 데이터 크기(I/O 버스에 의존적) - 데이터 처리 능력 ex) 메모리에서 명령어를 I/O 버스로 Fetch할 때 한번에 처리할 수 있는 데이터 크기가 32비트인지 64인지를 구분한다. 명령어 스택에서 컨트롤 유닛으로 Decode할 때도 동일하다. cf) 32비트 시스템은 32비트(4바이트) 포인터를 사용하고, 64비트 시스템은 64비트(8바이트) 포인터를 사용. 포인터가 클수록 메모리에 접근할 수 있는 범위가 크다는 것을 의미. 만약 32비트 시스템에서 64비트 어드레싱을 할 경우 32비트 x 2회를 해야 하기 때문에 성능이 저하됨. 따라서 버스에서 한번에 처리할 수 있는 크기만큼 어드레싱 크기를 제한해야 함. 프로그래..

2-2 MBCS와 WBCS 동시 지원

#include 안에는 * Window 정의 자료형 typedef char -> CHAR; typedef wchar_t -> WCHAR; 프로젝트 별로 네이밍을 달리하기도 해서 적절한 타입의 네이밍을 사용하면 된다. * MBCS와 WBCS 동시 지원 매크로 - 조건부 컴파일을 사용 #ifndef UNICODE typedef WCHAR TCHAR; ... #else typedef CHAR TCHAR; ... #endif #ifndef _UNICODE #define __T(x) L## #else #define __T(x) x #define _T(x) __T(x) #define _TEXT(x) __T(x) * MBCS와 WBCS 동시 지원 함수 #ifdef _UNICODE #define _tmain wmain..

2-1 Windows의 유니코드(UNICODE)

문자셋의 종류와 특성 * SBCS(Single Byte Character Set) - 문자를 표현하는데 1바이트 사용 - 대표적인 예는 ASCII 코드 * MBSC(Multi Byte Character Set) - 문자열을 구성하는 내용에 따라 다른 크기의 바이트 사용 - 예를 들어 한글은 2바이트, 영문은 1바이트 사용 - 문자열에 영어와 한글이 섞여 있을 경우 개발자의 실수 여부가 있음 * WBCS(Wide Byte Character Set) - 문자를 표현하는데 2바이트 사용 - 대표현인 예는 UNICODE - 실수 여부를 해소 WBCS 기반의 프로그래밍 * WBCS를 위한 3가지 1) char를 대신하는 wchar_t 2) "ABC" 를 대신하는 L"ABC" 3) WBCS 기반의 문자열 입출력 함..

1-2. 프로그램의 실행과정/하드웨어 구성의 재접근

프로그램 실행과정 [전처리기] => [컴파일러] => [어셈블러] => [링커] 1) 전처리기에 의한 치환작업 - #으로 시작하는 지시자 2) 컴파일러에 의한 번역 - CPU의 명령어로 번역 3) 어셈블러에 의한 바이너리 코드 생성 - CPU의 명령어를 바이너리 코드로 번역 ex) ADD: 0011, MIN: 0010, MUL: 0100, DIV: 0101 4) 링커에 의한 연결과 결합 - 라이브러리와의 결합 - 실행파일을 만듦 Stored Program Concept : 명령어는 메모리에 저장이 되어 CPU에 의해 Fetch->Decode->Execution 되어야 한다. 1) Fetch - CPU 내부로 (버스 인터페이스를 통해) 명령어 이동 2) Decode - 컨트롤 유닛에 의해 명령어 해석 3)..

1-1. 시스템 프로그래밍의 이해와 접근

※ 한빛미디어에서 출간한 "뇌를 자극하는 윈도우즈 시스템 프로그래밍" 서적의 유튜브 강의를 기반으로 작성 시스템 프로그래밍이란? ◇ 시스템(컴퓨터 시스템)의 범위 - 하드웨어 + 운영체제 ◇ 시스템 프로그래밍 - 컴퓨터 시스템을 활용하는 소프트웨어 개발 - Window 운영제체 자체의 기능을 활용하는 프로그래밍 ◇ 응용 소프트웨어 개발과의 차이점 - 시스템 프로그래밍은 모든 응용 프로그램에 포함되는 요소 컴퓨터 시스템의 주요 구성요소 ◇ CPU, 캐쉬 : 컴퓨터 구조(Compute Architecture) ◇ 메인 메모리, 하드디스크 : 운영체제(Operating System) 컴퓨터 하드웨어 구성(전체) ◇ CPU(Central Processing Unit) - 중앙처리장치 - 연산이 이뤄지는 원리 ◇..