전체 글 96

5-1. 프로세스의 생성과 소멸

프로세스의 이해 * 프로세스란? - 메인 메모리로 이동하여 실행 중인 프로그램? → 일반적인 정의 프로세스 구체적인 이해 * 프로세스의 범위 - 메모리 구조 + 레지스터 Set - 프로세스 별 독립적인 대상은 프로세스의 범주에 포함시킬 수 있음 Code 영역 명령어 (Instruction Code) Data 영역 전역변수 Static 변수 Heap 영역 프로그래머 할당 Stack 영역 지역변수 전달인자 정보 cf) Context Switching : A프로세스와 B프로세서가 함께 실행되어 질 때, 레지스터 정보(레지스터 Set)는 프로세스에 따라서 저장&불러오기를 하여 레지스터를 사용함. 이는 1초에 수십번 이뤄져 프로세스가 동시 진행되도록 함. 프로세스마다 레지스터 Set이 할당되어 레지스터를 사용. ..

4-3. Direct Addressing Mode & Indirect Addressing Mode

Direct Addressing Mode의 문제점 * 명령어 구성의 또 다른 문제점 - 명령어의 구조상 한정적인 주소값을 저장할 수 있는데, 따라서 메모리 주소가 0x0100라면 구성이 불가하게 됨 Direct Addressing Mode & Indirect Addressing Mode 메모리의 주소값을 직접 지정하여 가져오는 것에 대한 여부에 따라 나뉘어진다. - 메모리에 데이터가 있고 주소로 직접 가져오는 것이면 Direct 모드 - 메모리에 값이 아닌 다른 참조 값이 있어서 참조 값의 주소를 통해 데이터를 가져오는 것이면 Indirect 모드 문제해결 - ARM이나 임베디드에 사용되는 CPU의 문제해결법 MUL r0, 4, 4 // 16 MUL r2, 4, 4 // 16 MUL r3, r0, r2 ..

카테고리 없음 2022.05.12

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) - 중앙처리장치 - 연산이 이뤄지는 원리 ◇..

선택/버블 정렬

정렬의 개요 1. 실행 방법에 따른 분류 1) 비교식 정렬과 분산식 정렬 - 비교식 정렬(Comparative Sort) ▪ 비교하고자 하는 각 키 값들을 한번에 두 개씩 비교하여 교환하는 방식으로 정렬을 실행하는 방법 - 분산식 정렬(Distributive Sort) ▪ 키 값을 기준으로 하여 자료를 여러 개의 부분 집합으로 분해하고, 각 부분 집합을 정렬함으로써 전체를 정렬하는 방식으로 실행하는 방법 2. 정렬 장소에 따른 분류 1) 내부 정렬과 외부 정렬 ① 내부 정렬(Internal Sort) ▪ 정렬할 자료를 메인 메모리에 올려서 정렬하는 방식 ▪ 정렬 속도가 빠르지만 정렬할 수 있는 자료의 양이 메인 메모리의 용량에 따라 제한됨 ▪ 내부 정렬 방식 ② 외부 정렬(External Sort) ▪ ..