목록System Programming (12)
I'm FanJae.
[멀티 스레드 시리즈 글][Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드)[Multi Thread] 2. 호출 스택과 실행 흐름[Multi Thread] 3. 스레드는 어떻게 동작하는가 (컨텍스트 스위칭과 데이터 레이스)[Multi Thread] 4. 경쟁 상태와 동기화 (원자성, 일관성, 뮤텍스)[Multi Thread] 5. 교착 상태(Deadlock)와 해결 방법 (잠금 순서, 재귀 뮤텍스)1. 교착 상태- 멀티스레드 프로그래밍에서 교착 상태란 여러 스레드가 서로가 점유한 자원을 기다리며, 더 이상 진행하지 못하는 상태를 의미한다.- 이때, 교착 상태는 다음 4가지 조건이 동시에 만족될 때 발생한다. 1) 교착 상태가 발생하는 조건① 상호 배제 - 특..
[멀티 스레드 시리즈 글][Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드)[Multi Thread] 2. 호출 스택과 실행 흐름[Multi Thread] 3. 스레드는 어떻게 동작하는가 (컨텍스트 스위칭과 데이터 레이스)[Multi Thread] 4. 경쟁 상태와 동기화 (원자성, 일관성, 뮤텍스)[Multi Thread] 5. 교착 상태(Deadlock)와 해결 방법 (잠금 순서, 재귀 뮤텍스)1. 스레드에 대한 주의 사항1) 경쟁 상태(Race Condition)- 멀티 스레드 환경에서는 2개의 스레드가 값 하나에 동시에 접근하는 경우(정확히는 스레드 2개가 값 하나를 번갈아 가면서 접근하는 경우)가 종종 발생한다.- 두 스레드가 한 값에 접근하는 것에..
[멀티 스레드 시리즈 글][Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드)[Multi Thread] 2. 호출 스택과 실행 흐름[Multi Thread] 3. 스레드는 어떻게 동작하는가 (컨텍스트 스위칭과 데이터 레이스)[Multi Thread] 4. 경쟁 상태와 동기화 (원자성, 일관성, 뮤텍스)[Multi Thread] 5. 교착 상태(Deadlock)와 해결 방법 (잠금 순서, 재귀 뮤텍스)1. 멀티스레드를 사용하는 이유와 주의점- 멀티 스레드는 성능을 개선하기 위한 대표적인 기법이다.- 하지만 모든 상황에서 좋은 결과를 보장하는 것은 아니며, 적절한지 정리할 필요가 있다. 1) I/O 대기 시간 숨기기(Latency Hiding)- CPU가 아니라 ..
[멀티 스레드 시리즈 글] [Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드)[Multi Thread] 2. 호출 스택과 실행 흐름[Multi Thread] 3. 스레드는 어떻게 동작하는가 (컨텍스트 스위칭과 데이터 레이스)[Multi Thread] 4. 경쟁 상태와 동기화 (원자성, 일관성, 뮤텍스)[Multi Thread] 5. 교착 상태(Deadlock)와 해결 방법 (잠금 순서, 재귀 뮤텍스) 1. 호출 스택(Call Stack)1) 호출 스택의 기본 개념프로그램은 많은 서브루틴 혹은 함수로 구성되어 있다.프로그램이 실행될 때 C/C++에서는 main() 함수가 실행되고, C#에서는 메인 클래스의 Main() 함수가 실행된다. 메인 함수에서 다른 함..
[멀티 스레드 시리즈 글][Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드)[Multi Thread] 2. 호출 스택과 실행 흐름[Multi Thread] 3. 스레드는 어떻게 동작하는가 (컨텍스트 스위칭과 데이터 레이스)[Multi Thread] 4. 경쟁 상태와 동기화 (원자성, 일관성, 뮤텍스)[Multi Thread] 5. 교착 상태(Deadlock)와 해결 방법 (잠금 순서, 재귀 뮤텍스)1. 프로그램과 프로세스1) 프로그램컴퓨터에서 실행되는 명령어 모음이 들어 있는 데이터 덩어리다.프로그램 안에는 CPU가 실행할 명령어인 코드와, 실행에 필요한 정적 데이터가 포함되어 있다. 2) 프로세스프로그램 자체는 아직 실행 중인 상태가 아니다.프로그램을 실..
1. 컴퓨터 구조의 접근 방법 1-1. 컴퓨터를 디자인 하자- 여기서 디자인할 요소는 CPU를 의미한다.- 실제로 존재하는 컴퓨터를 디자인 하는게 아닌 가상의 컴퓨터를 디자인 한다고 생각해보자.- 일반적으로 컴퓨터(CPU) 디자인은 레지스터와 명령어에 대한 디자인이다.- CPU를 디자인 하기 위해서는 H/W Logic 전문가, Algorithm 전문가, Interface 전문가, 컴퓨터 구조의 특성을 고려할 수 있는 프로그램 전문가 등이 참여한다. 명령어 : 프로그래밍 언어로 프로그래밍한 것을 컴파일 했을때 번역되어 나오는 명령어들의 집합명령어의 구성에 따라서 레지스터 셋이 결정되서 레지스터 셋이 나와야 H/W 구성이 나올 수 있다. 1-2. 레지스터 디자인의 핵심① 레지스터를 몇 비트로 구성할 것인가?..
1. 64비트 기반 프로그래밍- 64비트 시스템을 고려한 프로그래밍으로 자료형에 대해서 고려해야 한다. 1-1. LLP64 vs LP64운영체제모델charshortintlong포인터WindowsLLP641바이트2바이트4바이트4바이트8바이트LinuxLP641바이트2바이트4바이트8바이트8바이트- 핵심은 64비트에서는 포인터가 8바이트로 표현된다.- 또한, Linux의 경우 long은 8바이트로 표현된다는 차이가 있다. 1-2. 64비트와 32비트 공존의 문제점- 데이터 손실의 문제#include int main(void){ int arr[10] = {0, }; int arrVal = (int) arr; // 데이터 손실이 발생할 수 있다. printf("pointer : %d \n", arr..
1. 64비트와 32비트의 구분 방법1-1. 구분의 두 가지 기준① 한 번에 전송 및 수신할 수 있는 데이터의 크기 (I/O BUS)- 한 번에 송수신 가능한 데이터의 크기에 따라서 32비트 시스템과 64비트 시스템이 나뉜다.② 데이터 처리 능력 (CPU)- CPU는 외부로부터 들어오는 데이터를 처리하는 능력에 대한 차이가 있다. 1-2. 32비트 -> 64비트① 프로그래머 입장에서 볼 때 32비트->64비트- 프로그램으로 표현할 수 있는 범위의 증가- 표현할 수 있는 메모리의 전체 크기- 여기서 고려할 점은 포인터의 크기는 크면 클 수록 좋다는 점과 버스의 크기를 고려해야 한다.② 포인터 크기가 무작정 크면 발생하는 문제점- 포인터의 크기는 128bit로 두었는데 버스를 64bit이면, 주소 정보를 전..
1. MBCS와 WBCS 동시지원1-1. 동시 지원의 필요성과 Windows 스타일 자료형- 프로그램 구현시 여러 측면을 고려해야한다. - 기존 개발된 프로그램과의 호환성 및 사용자 시스템에서 지원하지 못하는 경우로 인해 유니코드로만 동작 시킬 수 없다. typedef char CHAR;typedef wchar_t WCHAR;#define CONST const;typedef CHAR * LPSTR;typedef CONST CHAR * LTCSTR;typedef WCHAR * LPWSTR;typedef CONST WCHAR * LPCWSTR;- Windows에서는 typedef 키워드를 통하여 몇몇 기본 자료형에 Wind..
본 내용은 뇌를 자극하는 윈도우즈 시스템 프로그래밍(윤성우 저) 책을 보고 정리한 내용입니다.개인이 학습한 내용을 정리할 목적으로 게시한 것으로 책의 상세한 내용은 직접 구매하여 확인을 부탁드립니다. 1. 문자셋(Character Sets)의 종류와 특성① SBCS(Single Byte Character Set)- 문자를 표현하는데 1바이트를 사용한다.- 아스키 코드는 SBCS의 종류 중 하나이다.② MBCS(Multi Byte Character Set)- 문자를 표현하는데 있어서 동일한 바이트 수를 적용하는 것이 아닌, 다양한 바이트 수를 사용해서 멀티다.- 한글은 2바이트, 영문은 1바이트를 사용한다.- 우리나라의 경우 MBCS를 기반으로 문자를 표현한다.- 안정성의 문제가 발생할 수 있음.③ WB..