본문 바로가기

분류 전체보기28

쓰레드의 생명주기 운영체제를 공부하다보면 이런 이미지를 봤을 것 이다. 쓰레드의 생명주기이다. 쓰레드는 크게 6개의 상태로 나뉜다. NEW : 스레드가 생성된 상태, 아직 start() 되지 않음. RUNNABLE : start()가 호출되어 실행 대기, CPU를 점유하기 전의 상태이다. Runnable pool 에 모여있다. RUNNING : 실제로 쓰레드가 CPU를 점유하고 실행되고 있는 상태, WAITING : 다른 스레드의 통지를 기다림 wait 을 한 상태로, Notify를 기다린다. TIMED_WAITING : 주어진 시간동안 기다림 BLOCK : I/O 요청에 의한 블락 TERMINATED : 실행마치고 종료, run()이 끝나면 TERMINATED가 실행되며 소멸 2022. 11. 29.
얕은 복사, 깊은 복사? 아마 이 키워드는 복사생성자와 이동생성자를 다루면서 들어봤을 것 이다. 복사생성자가 무엇이냐? 일반적으로 클래스를 선언할 때 컴파일러가 내부적으로 자동적으로 만들어준다. A라는 클래스가 있다면, A(const A& )라는 생성자가 자동으로 만들어진다. 즉, 동일한 클래스의 인스턴스를 받으면 고대로 그 인스턴스가 가진 값을 복사한다. 이 때, 이 자동으로 생성된 생성자가 사용된다면 내부적으로 얕은 복사가 사용이된다. 얕은 복사는 무엇이냐? 만약 A클래스가 메모리가 할당된 부분의 포인터변수를 들고있어야 한다고 가정하자, 그렇다면 이미 만들어진 인스턴스를 복사생성자의 인자로 넣게되면, 원래 존재하던 인스턴스의 포인터 주소를 새롭게 복사된 인스턴스도 포인터가 가리키게 되는것이다. 이미지에서는 왼쪽 부분이 얕은복.. 2022. 11. 29.
운영체제 페이징 기법 학교다닐 때 운영체제 시간에 배웠던건데, 진짜 헬파트였다고 생각한다. 운영체제 페이징 기법은, 기존 메모리들이 들쑥날쑥하게 할당되면서 실제로 할당해제된 공간이 충분히 큼에도 불구하고 메모리가 구멍구멍으로 나누어져 있어서 사용하지 못하는 메모리가 되어버리는 현상을 의미하는데, 이걸 외부단편화 현상이라고 한다. 이미지를 가져오자면 이런느낌, 이러다 보니까 프로세스들을 계속해서 연속적으로 위치하도록 밀어넣어주지 압축하지 않으면 중간에 구멍나있는 부분들을 채울수가 없게 되는 것이다. 그래서 이를 방지하기위해 메모리 할당 사이즈를 고정적인 사이즈로 분할 시키는 것이다. 이게 뭔소리냐? 그림을 보자 프로세스에서 할당요청하는 메모리들은 사실 실제 메모리상에서 연속적으로 붙어있지 않다. 그 메모리들은 사실 가상메모리 .. 2022. 11. 27.
렌더링 파이프라인 다이렉트 X를 공부하거나 게임엔진을 사용하려면 이건 무조건 알아야 할 내용이다. 적어도 자기가 프로그래밍한 오브젝트가 화면상에 어떻게 그려지는지 정도는 알고 있어야 하지 않나? 렌더링 파이프라인은 그림이 있으면 딱 설명하기 편하다. 오브젝트의 렌더링은 이 과정을 거쳐서 진행된다. 오브젝트 하나를 렌더링 하기 위해서 위 과정이 만들어진다는 의미이다. 물론 렌더링 툴이 무엇이냐에 따라서 다른 과정이 추가될 수 있겠지만, 기본적으로 큰 토대는 이정도로 정리하면 될 것 같다. 사실 이 연산들은 오브젝트를 구성하는 하나의 점에 대해서 벌어지는 일이다. 로컬 스페이스는 무엇이냐? 로컬스페이스는 오브젝트 자신만의 공간으로, 좌표의 기준을 오브젝트의 기준으로 설정된 공간이라 보면된다. 예를 들어 내 옆에 있는 물통을 .. 2022. 11. 27.
Overlapped IO와 IOCP Overlapped IO 모델 IOCP는 Overlapped IO모델을 기반으로 확장한 것으로 뗄레야 뗄 수 없는 사이 Overlapped IO모델은 어플리케이션은 입출력 함수를 호출하면 그 사이 무관하게 다른 작업을 진행할 수 있다. 그렇다 비동기 논블로킹이다. 이게 어떻게 가능하냐면, 입출력 작업이 끝나면 운영체제는 작업완료를 어플리케이션에 알려준다. 그럼 어플리케이션은 다른 작업을 중단하고 입출력 결과를 처리하면 되는 것이다. IOCP에서 보면, Completion Port를 만들어 두고 소켓을 그곳에 등록하면, 소켓이 입출력작업이 완료된 것을 Worker 쓰레드를 이용해서 GetQueuedCompletionStatus로 완료된 소켓이나 어떤 이벤트인지(이건 Overlapped Event로 구현) .. 2022. 11. 27.
셀렉트 모델 강의로 IOCP만 급하게 만들어보다 보니까 기본기가 안되어있는 것 같아서 정리한다. 일단 Select 모델을 정리해보자 Select모델의 경우, API중 Select라는 함수를 핵심적으로 이용하는 방식이라 Select 모델이라고 한다. 셀렉트 모델을 사용하면 여러 소켓을 한 스레드로 처리를 할 수 있다고 한다. 그게 어떻게 가능한거냐면, 셀렉트 모델에서는 여러 소켓들을 셋(Set)에 넣어두고, Select 함수를 호출하면 하나의 소켓이라도 동작이 완료되면 정상적인 함수를 반환하여, 이를 처리하는 방식이다. 그렇다면 사용법은? FD_ZERO, FD_SET, FD_CLR, FD_ISSET 같은 셀렉트와 같이 쓰이는 방식의 매크로함수가 있고, 이것들을 Select와 같이 사용하는 방식으로, 조금 더 구체적으로.. 2022. 11. 27.