본문 바로가기

Study

(153)
[git] git 협업하기 (코드잇 git으로 배우는 버전관리 강의를 보고 작성한 글 입니다.) 1. push 전에는 pull을 하라git으로 협업을 하다보면 이미 누군가 수정한 파일을 내가 다시 수정하는 경우가 발생한다. 위 사진은 그 때 발생하는 에러이다.이런경우에는 git pull을 먼저 해주는 것이 좋다.(pull과 rebase문제는 아래 접은글 확인)더보기하지만 pull을 하려고 봤더니, 나의 'premium' branch가 가장 최근 commit을 가리키고 있지 않아서 git rebase를 통해서 branch가 가장 최근 commit을 가리키도록바꾼다. fatal: Need to specify how to reconcile divergent branches 오류 해결 방법 참고 :https://devum.tistory...
일하면서 알게 된 것 - 1 보호되어 있는 글입니다.
[Windows via c/c++] 7. 스레드 스케줄링, 우선순위, 그리고 선호도 이 글은 "제프리 리처의 Windosw via c/c++"을 보고 작성한 글입니다. 윈도우는 언제라도 특정 스레드를 정지하고 다른 스레드를 수행할 수 있어 선점형 멀티스레드 기반 운영체제라고 불린다. 1. 스레드의 정지와 계속 수행 스레드의 정치 카운트가 0이 되면 이 스레드는 어떤 일이 발생사기를 기다리는 상태(키보드 입력을 기다리는 것과 같은)가 아니라면 스케줄 가능한 상태가 된다. 2. 프로세스의 정지와 계속 수행 SuspendProcess라는 프로세스 익스플로러를 사용하여 프로세스 내의 모든 스레드를 정지시키는 효과를 낼 수 있다. 3. 슬리핑 스레드는 Sleep함수를 호출하여 일정 시간 동안 자신을 스케줄하지 않도록 운영체제에게 명령을 내릴 수 있다. 4. 다른 스레드로의 전환 SwitchToT..
[Windows via c/c++] 8. 유저 모드에서의 스레드 동기화 이 글은 책 "제프리 리처의 Windows vis c/c++"를 읽고 작성한 글 입니다. 스레드 상호 통신이 필요한 경우 1. 다수의 스레드가 공유 리소스에 접근해야 하는 경우 2. 특정 스레드의 작업이 끝났음을 다른 스레드가 알아야 하는 경우 1. 원자적 접근 : Interlocked 함수들 스레드 동기화를 수행하기 위해서는 리소스에 원자적으로 접근해야 한다. 원자적 : 어떤 스레드가 특정 리소스를 접근할 때 다른 스레드는 접근할 수 없는것. 인터락 계열 함수들은 모두 원자적으로 값을 다룬다. InterlockedExchange함수는 스핀락을 구현해야 하는 경우에 유용하게 사용될 수 있다. while (InterlockedExchange (공유리소스, TRUE) == TRUE) 스핀락은 보호된 리소스가..
[Windows via c/c++] 6. 스레드의 기본 이 글은 책 "제프리 리처의 Windows via c/c++"을 보고 작성한 글입니다. 프로세스가 프로세스 커널 오브젝트와 주소 공간으로 구성되어 있듯이 스레드도 OS가 스레드를 다루기 위해 사요하는 스레드 커널 오브젝트와 스레드가 코드를 수행할 때 함수의 매개변수와 지역변수를 저장하기 우한 스레드 스택이 존재한다. 하나의 프로세스 안에 존재하는 스레드들은 단일 주소 공간을 공유하며 동일한 코드를 수행할 수도 있고, 동일 데이터를 조작할 수도 있다. 스레드들은 커널 오브젝트 핸들 역시 공유하게 된다. 1. 스레드를 생성해야 하는경우 CPU가 유휴상태인 경우 2. 스레드를 생성하지 말아야 하는 경우 다수의 스레드를 이용하여 사용자 인터페이스를 다루는 경우 3. 처음으로 작성하는 스레드 함수 주 스레드의 진..
[Windows via c/c++] 5. 잡 (job) 이 글은 "제프리 리처의 windows via c/c++"를 읽고 작성한 글 입니다. Windosw는 잡 커널 오브젝트를 이용하여 프로세스들을 하나의 그룹으로 묶어서 다루거나 샌드박스를 만들어서 프로세스들이 수행하는 작업에 제한을 가할 수 있다. StartRestrictedProcess 함수는 잡 내에 프로세스를 배치하여 프로세스의 일부 기능을 제한하는 기능을 가지고 있다. 만약 프로세스가 이미 다른 잡 내에 포함되어 있는 경우라면 이 프로세스를 다른 잡으로 옮길 수 없다. 1. 잡 내에 프로세스에 대한 제한사항 설정 잡 내의 프로세스가 시스템 리소스를 독점적으로 사용하지 못하게 하기위해, 사용자 인터페이스를 사용하지 못하게 하기위해, 보안 제항사항에 접근할 수 없게 하기위해 제한사항을 설정한다. Sch..
[Windows via c/c++] 4. 프로세스 책 "제프리 리처의 Windows via c/c++"을 보고 작성한 글 입니다. 프로세스는 일반적으로 수행 중인 프로그램의 인스턴스(instance)라고 정의하며, 두 개의 컴포넌트로 구성된다. 1. 첫 번째 윈도우 애플리케이션 작성 윈도우는 GUI/CUI기반의 어플리케이션을 지원한다. 둘의 진입점은 _tWinMain과 _tmain이다. 진입점에 들어가기 전에, 1. 새로운 프로세스의 전체 명령행과 환경변수를 가리키는 포인터를 획득하고 2. 런타임 라이브러리의 전역변수와 힙 메모리 공간을 초기화하며 3. 모든 전역 오브젝트와 static C++ 클래스 오브젝트의 생성자를 호출한다. 모든 실행파일과 DLL파일은 프로세스의 메모리 공간 상에 로드될 때 고유의 인스턴스 핸들을 할당받는다. 2. CreatePr..
[Windows via c/c++] 3. 커널 오브젝트 이 글은 책 "제프리 리처의 Windows via c/c++"을 보고 작성한 글 입니다. 1. 커널 오브젝트란? 커널 오브젝트는 커널에 의해 할당된 간단한 메모리 블록이다. 윈도우는 이벤트 오브젝트, 파일 오브젝트, 프로세스 오브젝트 등 여러 커널 오브젝트를 생성하고 조작한다. 이 메모리 블록은 커널에 의해서만 접근이 가능한 구조체로 구성되어 있으며, 커널 오브젝트에 대한 세부 정보들을 저장하고 있다. 커널 오브젝트의 데이터 구조체는 커널에 의해서만 접근이 가능하기 때문에 애플리케이션에서 데이터 구조체가 저장되어 이쓴 메모리 위치를 직접 접근하여 그 내용을 변경하는 것은 불가능하지만, 구조체의 내용에 접근할 수 있도록 일련의 함수 집합을 제공하고 있어서 이를 통해 커널 오브젝트의 내부적인 값에 접근할 수..