1. 윈도우는 유니코드 문자를 UTF-16로 인코딩 : 각 문자를 2바이트(16비트)로 구성함. : 몇몇 소수 언어들은 2바이트도 부족한 경우가 존재. 그래서 4바이트 인코딩 방법도 존재는 함 2. 유니코드 문자열 선언 :wchar_t name = L'Ronaldo'; :wchar_t dataBuf[100] = L"Cristiano Ronaldo"; //99개의 16비트 문자와 16비트 문자열 종결 문자 0 : 윈도우를 개발한 팀에서 c언어의 자료형과 윈도우 자료형을 구분하기 위해 WinNT.h에 아래와 같이 정의해둠 typedef char CHAR; // 8비트 문자 typedef wchar_t WCHAR // 16비트 문자 : 또한 문자와 문자열을 가리키는 포인터 자료형에 대해서도 아래와 같이 정의함..
- 저장하는 기능은 사실 다 memory 이다. (통상 RAM을 메모리라고 부름) - 메모리라고 할 수 있는건 RAM , 레지스터(cpu안에 있는) , 캐쉬(cpu에 근접해 있는 것.CPU에 남는 공간에 존재) 디스크 등등이 존재. cpu(레지스터) - 캐시 - 메모리 - 하드 디스크 이렇게 생각하면 됨 1. 캐시 메모리 - 프로그램의 특성(한번 접근하면 다시 또 접근하는 것) --> Temporal Locality - 프로그램의 특성2(이미 접근을 한 곳 근처에 접근하는 것, 배열을 for문 돌린다고 생각해보자) --> Spacial Locality 2. 가상 메모리 - 페이지 : 가상메모리 블럭 - 페이지 프레임 : 실제 RAM 블럭 - MMU : 메모리 관리하는 유닛 - 스왑파일 : 하드디스크가 이..
1. 유저 모드 동기화 vs 커널 모드 동기화 - 유저 모드는 시스템콜을 하지 않기 때문에 성능이 좋음. 다만 기능 제한 - 커널 모드 동기화는 시스템콜을 하기 때문에 상대적으로 불리. 다만 유저모드에서 사용하지 못하는 기능 사용 가능 1. 유저모드 동기화 - Critical Section : 원하는 영역을 Enter Leave로 잠금 - Interlocked : 전역으로 생성된 단 하나의 변수를 ++ 하거나 -- 하는 것이라면 동기화는 이게 더 낫다. 단 한줄로 동기화가 가능하기 때문 LONG interlockedIncrement(LONG volatile* 변수) LONG interlockedDecrement(LONG volatile* 변수) 다른 인터락 함수도 있음 MSDN https://docs.m..
1. 쓰레드와 프로세스의 차이 스레드는 하나의 프로그램안에서 여러 실행 흐름을 둔다. 가령 배틀그라운드라는 하나의 프로그램을 실행한다고 치자. 렌더링 작업만 하는 스레드 , 통신을 담당하는 스레드 입력을 처리하는 스레드 등 뭐 이런식으로 생각할 수 있다. 멀티 프로세스(가령 카톡 크롬 게임)는 독립적인 구조이다.(보통 그렇다는 이야기) 반면에 쓰레드는 공유하는 요소들이 있다. --> 이것때문에 컨텍스트 스위칭 비용(시간이)이 더 효율적이다. --> 캐쉬 메모리에 있는걸 그대로 갖다 쓰면 되니까 set을 할일이 별로 없고 get만 해오면 된다 메모리의 관점에서 스레드와 프로세스를 비교하는 것이 이해하기 쉽다. 프로세스는 생성하면 자체적으로 독립적인 메모리 공간을 가진다(그래서 통신이 필요하다면 IPC 인가..
아래의 내용은 윈도우 종속적 1. 커널 오브젝트란 무엇인가? IOCP와 같은 것들을 실습해보면서 자주 접한 용어 이다. 한마디로 정의하면 '커널에서 관리하는 데이터 블록' 프로세스가 생성이 되면 -> 프로세스를 관리하는 구조체변수가 생기고 -> 초기화 --> '커널 오브젝트' 그 밖에도 스레드를 생성할 때나, 프로세스들간의 통신을 위한 파이프 등을 생성할 때도 커널오브젝트를 생성한다. 이쯤되면 HANDLE 이라는 변수명을 본적이 있지 않나? 그것과 밀접한 연관이 있을 것이다. 2. 커널 오브젝트로 조작을 할 수 있는가? 일반적으로 우리가 직접 구조체의 내용을 변경하거나 하지는 못한다. 다만, 시스템 콜(System Call)을 이용해 간접적으로 조작이 가능하다. 어떻게 조작하나? 가령 프로세스의 우선순위..
1. 프로세스란 ? 아주 쉽게 말해서 실행중인 프로그램. 윈도우에서 .exe 파일을 실행 시켜본 기억은 누구나 있을 것이다. 그게 프로세스다. 2. 어찌 동작하는가? 프로그램을 실행하는 순간. 메모리에 할당이 이루어지고 (윈도우에서 메모리 점유율이 올라간다) 이 메모리 공간으로 바이너리 코드가 올라간다. 3. 무엇으로 이루어져 있는가? c, c++ 을 개발하는 프로그래머의 관점에서 생각해보자 프로세스를 구성하는 요소는 크게 4가지 Data 영역 : 전역변수 , static 변수의 할당 Stack 영역 : 지역변수 할당과 함수 호출 시 파라미터들, Heap 영역 : 동적 할당 (new, malloc) Code 영역 : 나머지 실행파일을 구성하는 명령어들이 올라가는 영역 하나의 프로세스당 저 4가지의 요소를..