[스터디] 시스템 프로그래밍 - Chapter 16. 컴퓨터 구조의 4번째 이야기
·
독서/뇌를 자극하는 윈도우즈 시스템 프로그래밍
뇌를 자극하는 윈도우즈 시스템 프로그래밍(저자, 윤성우) 보통 컴퓨터 부품 중에서 메모리라고 한다면, 램을 생각하기 쉽다. 하지만, 램 말고도 메모리라고 불릴 수 있는 요소들은 다양하게 있다. 이는 다음과 같다. - 메인 메모리 : D램 계열의 메모리인 램이다. 참고로 모든 메인 메모리가 램을 뜻하는 것은 아니다. 하지만 대부분의 컴퓨터가 메인 메모리로 램을 사용하고 있으므로, 동일한 의미로 작성한다. - 레지스터 : CPU 안에 내장되어 연산을 위한 저장소를 제공한다. - 캐쉬 : 캐쉬는 D램보다 빠른 S램으로 구성한다. CPU와 램 사이에서 중간 저장소 역할을 하는 메모리다. 종종, CPU 안에 캐쉬가 내장되어 있다고 표현되어 있으나, CPU에 근접한 메모리 개념이지, CPU의 일부로 존재하는 개념이..
[스터디] 시스템 프로그래밍 - Chapter 15. 쓰레드 풀링Pooling
·
독서/뇌를 자극하는 윈도우즈 시스템 프로그래밍
뇌를 자극하는 윈도우즈 시스템 프로그래밍(저자, 윤성우) 01. 쓰레드 풀에 대한 이해 쓰레드의 생성과 소멸은 시스템에 많은 부담을 주기 때문에, 잦은 쓰레드 생성과 소멸은 피해야 한다. 이러한 일을 막기 위해서 쓰레드 풀을 사용할 수 있는데, 쓰레드 풀은 쓰레드의 재활용이 주요 개념이다. 할당된 일을 마친 쓰레드를 소멸시키지 않고, 풀에 저장해두었다가 필요할 경우 다시 꺼내 사용한다. 쓰레드 풀은 처리해야 할 일이 등록되기 전에 생성된다. 풀이 생성되면, 쓰레드도 생성되면서 풀에서 대기 상태에 놓이게 된다. 유연한 풀은 처리해야 할 일의 증가 및 감소에 따라 쓰레드의 개수를 늘리거나, 줄이기도 한다. 02. 쓰레드 풀의 구현 // Thread Pool typedef void (*WORK) (void);..
[스터디] 시스템 프로그래밍 - Chapter 14. 쓰레드 동기화 기법 2
·
독서/뇌를 자극하는 윈도우즈 시스템 프로그래밍
뇌를 자극하는 윈도우즈 시스템 프로그래밍(저자, 윤성우) 01. 실행순서에 있어서의 동기화 쓰레드의 실행순서를 동기화한다는 것은 메모리에 접근하는 쓰레드의 실행순서를 동기화한다는 것과 같은 이야기다. 그러므로, 실행순서 동기화는 메모리 접근 동기화를 포함하는 개념이다. 01. A. 생산자/소비자 모델 생산자/소비자 모델을 예시를 통해서 이해해보자. 빵을 구워내는 생산자가 있다. 생산자는 빵을 테이블 위에 올려두고, 소비자는 생산된 빵을 구매하고 먹게된다. 해당 예시에서의 순서는 생산자가 빵을 테이블 위에 올리고, 그 이후에 소비자가 빵을 소비한다는 것이다. 생산자/소비자 모델이 필요한 예시로 문자를 입력받고 문자를 출력하는 기능을 하나의 쓰레드에서 구현을 처리한다고 들어보자. 만약 이럴 경우, 출력속도가..
[스터디] 시스템 프로그래밍 - Chapter 13. 쓰레드 동기화 기법 1
·
독서/뇌를 자극하는 윈도우즈 시스템 프로그래밍
뇌를 자극하는 윈도우즈 시스템 프로그래밍(저자, 윤성우) 쓰레드를 생성하는 것도 중요하지만, 더 중요한 것은 쓰레드 간에 발생할 문제의 소지를 미연에 차단하는 것도 중요하다. 동기화 이슈는 런타임에 발생하기에 사소한 것이라도 쉽게 눈에 띄지 않는다. 그렇기 때문에 미리 런타임에 발생 가능한 오류를 예측하고 이를 방지해야 한다. 01. 쓰레드의 동기화란 무엇인가? 무엇인가를 일치시키는 것을 동기화라 생각할 수 있지만, 쓰레드 동기화에서의 동기화는 순서에 있어서 질서가 지켜지고 있음을 의미한다. 01. A. 실행 순서의 동기화 쓰레드에서는 실행 순서가 중요한 경우가 있다. A 쓰레드가 계산한 결과를 B 쓰레드가 받아서 출력하는 경우, A 쓰레드가 끝나고 B 쓰레드가 실행되어야만 한다. 즉, 쓰레드의 실행 순..
[스터디] 시스템 프로그래밍 - Chapter 12. 쓰레드의 생성과 소멸
·
독서/뇌를 자극하는 윈도우즈 시스템 프로그래밍
뇌를 자극하는 윈도우즈 시스템 프로그래밍(저자, 윤성우) 01. Windows에서의 쓰레드 생성과 소멸 01. A. 쓰레드의 생성 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); 매개변수 명 설명 lpThreadAttributes CreateProcess 함수의 매개변수에도 동일하게 등장한다. 해당 함수에서도 CreateProcess 함수에서의 역할과 동일하게 핸들의 상속 여부를 결정한다. NULL일 경우, 생성되는 핸들은..
[스터디] 시스템 프로그래밍 - Chapter 11. 쓰레드의 이해
·
독서/뇌를 자극하는 윈도우즈 시스템 프로그래밍
뇌를 자극하는 윈도우즈 시스템 프로그래밍(저자, 윤성우) 01. 쓰레드란 무엇인가? 두 개 이상의 일을 동시에 처리하기 위해서 추가적으로 프로세스를 생성하는 것은 막대한 컨텍스트 스위칭Context Switching으로 이어져 성능에 영향을 미치기 때문에 부담스러운 일이다. ▶ 다시, 컨텍스트 스위칭 : 컨텍스트 스위칭Context Switching은 프로세스의 상태 정보를 복원하고 저장하는 과정이다. 호출 횟수는 상황과 시스템에 따라서 변동이 있으나, 초당 수십 회 이상 발생하므로 성능 저하의 원인이 된다. 그렇다면, 컨텍스트 정보의 개수를 줄이는 방법으로 성능 저하를 어느 정도 해결할 수 있다. 컨텍스트 정보는 프로세스의 상태 정보와 관련이 있으므로, 결국 프로세스 상태 정보를 줄여야 한다는 것이다...