컴퓨터 프로그래밍 공부 55

동적 계획법 (1)

동적 계획법이란?1. 메모이제이션2. 타뷸레이션3. 부분집합의 합 문제4. 문자열과 시퀀스에 대한 동적 계획법해당 게시물은 다음 작업을 수행할 수 있는 지식을 담았다. 주어진 문제에 동적 계획법을 적용할 수 있는지 분석하는 능력메모이제이션과 타뷸레이션 기법을 서로 비교하여 적절한 방법을 선택함메모이제이션을 위한 적절한 캐시 사용 방법을 찾을 수 있음직관적인 전수 조사 방법을 사용하여 주어진 문제를 분석점진적으로 최적화 알고리즘을 구현하면서 동적 계획법 해법을 개발할 수 있는 능력 해당 게시글에서는 동적 계획법에 대해 소개하겠다.그리고 컴퓨터 과학 분야에서 널리 알려진몇몇 문제를 동적 계획법으로 해결하는 방법에 대해 알아보겠다. 많은 프로그래머가 좋아하기도하고 동시에 두려워하기도 하는 동적 계획법은분할 정..

에러 처리와 스레드의 상관 관계와 커널 개체

해당 환경은 WINDOWS 환경이며, C/C++에 대해서만 다룬다. 에러 처리와 스레드의 상관 관계 에러처리를 잘 하기 위해서는 일단 윈도우가 제공하는 수많은 기능 중 하나인,윈도우 함수가 에러를 어떻게 처리하는지에 대해 먼저 이해해야 한다. 윈도우 함수를 호출하면 호출된 함수는 먼저 전달된 인자의 유효성을 확인하고함수의 기능을 수행하려 한다. 만일 전달된 인자가 유효하지 않거나 다른 이류로 인해 해당 기능을수행할 수 없으면 함수는 실패를 반환한다. 윈도우 함수가 실패하면 왜 함수가 실패했는지의 여부를 알아내는 과정이 반드시 필요하다.마이크로 소프트는 발생할 가능성이 있는 모든 에러 코드를 32비트 숫자로 정의해 두었다. 윈도우 함수가 실패하게 되면 내부적으로함수를 호출한 스레드의 스레드 지역 저장소에 ..

게임 서버 프로그래밍 입문 - (1)

게임 서버의 정의 우선 목적을 명확이 해야지 서버책 한 권이라도 잘 이겨나갈 수 있을 것이다.서버가 어떤 프로그램인지 먼저 생각해보자. 온라인 게임이라 하면, 다수와 접속해서 즐기는 MMORPG 온라인 게임도 있을 것이고,디아블로3 처럼 특정 몇 명만 같이 즐기는 게임도 있다. 이런 프로그램들을 만들고 관리하는 서버 프로그래머들은 어떤 일을 할까? 신규 게임이라면 당연히 게임 서버를 만들지 않을까? 기획자들이 이것저것 새로운 게임에 대한 콘텐츠 기획을 제안할 것이고그것에 맞게 프로그램 구조를 고려해 서버 프로그램을 작성할 것이다. 물론 신생회사가 아니거나, 기존 코드가 엉망인 아닌 이상 기존에 안전성을 검증받은코드를 계승해서 제작하게 될 것이다. 요약하면, 이미 돌아올 수 없는 강(가정을 고려한 코딩)을..

Tree

Tree + (heap)   트리는 매우 중요한 자료구조 중 하나이다.연결리스트는 노드들이 한 줄로 연결된 선형적인 자료구조인 반면트리는 부모 - 자식 관계를 계층적으로 표현한 보다 일반적인 자료구조이다. 추상적으로 표현하면 연결 리스트처럼 데이터를 저장하고 있는 노드와 노드를 연결하는 에지(또는 링크)로 구성된다.연결 리스트와 차이점은 에지가 부모 - 자식 관계를 표현한다는 점에서 차이가 있다. 트리 용어 부모노드 / 자식노드 : 부모노드는 자식 노드를 위에 있는 노드를 말한다.자식 노드는 1이상의 레벨을 가지는 노드로 부모노드 밑에 있는 노드이다. 조상노드 / 자손노드 : 트리 노드간의 레벨간의 관계가 2이상 차이나는 노드를 말한다.보다 아래면 자손노드 보다 위면 조상노드라고 한다. 루트노드 : 모든..

파일 시스템

파일 시스템파일 시스템은 보조기억장치에 있는 파일과 디렉터리가 어떻게 할당하고 접근되는지에 관한 것이다. 파일 시스템은 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고접근할 수 있게 하는 운영체제 내부 프로그램이다.이러한 파일 시스템에는 다양한 종류가 있고,하나의 컴퓨터에서 여러 파일 시스템을 사용할 수 있다. 해당 게시글에서는파일 시스템이 파일과 디렉터리를 보조기억장치에 어떻게 할당하고 접근하는지 알아보자.이러한 이론을 기반으로 만들어진 대표적인 파일 시스템인FAT 파일 시스템과 유닉스 파일 시스템이 있다. 파티셔닝과 포매팅 이제 막 공장에서 생산되어 한 번도 사용된 적이 없는새 하드 디스크 또는 SSD가 있다고 가정해보자.이 보조기억장치에 곧바로 파일을 생성하거나 저장할 수 없다.왜냐하면 보조기..

파일과 디렉터리

파일과 디렉터리 파일 시스템은 파일과 디렉터리를 관리한다. 해당 게시글에서는 파일 시스템의 개념을 잡기 이전에, 파일과 디렉터리가 무엇인지 알아보고자 한다. 파일 일상적으로 컴퓨터를 이용할 때는 파일 단위로 이용한다. 파일이란 하드 디스크의 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합을 의미한다. 달리 표현하자면 파일은 의미 있고 관련 있는 정보를 모은 논리적 단위를 의미한다. 그렇다면 파일을 이루는 정보는 어떤 것들이 있을까? 모든 파일에는 이름과 파일을 실행하기 위한 정보, 그리고 파일 관련의 부가 정보가 있다. 이 부가 정보를 속성 도는 메타데이터라고 부른다. 윈도우 운영체제를 사용한다면 파일 속성을 한 번쯤 접해 본 경험이 있을 것이다. 임의의 파일에서 마우스 오른쪽 버튼을 클릭한 뒤 [..

페이지 교체와 프레임 할당

가상 메모리를 통해 작은 물리 메모리보다 큰 프로세스도 실행할 수 있다고는 하지만, 그럼에도 불구하고 여전히 물리 메모리의 크기는 한정되어 있다. 운영체제는 프로세스들이 한정된 메모리를 효율적으로 이용할 수 있도록 기존 메모리에 적재된 불필요한 페이지를 선별하여 보조기억장치로 내보낼 수 있어야 하고, 프로세스들에 적절한 수의 프레임을 할당하여 페이지를 할당할 수 있게 해야한다. 이번 게시글에서는 요구 페이징의 개념과 페이지 교체 알고리즘, 그리고 프레임 할당에 대해 학습하며 운영체제가 이러한 기능을 어떻게 수행하는 알아보자. 요구 페이징 프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법을 요구 페이징이라고 한다. 이름 그대로 실행에 요구되는 페이..

가상 메모리 - 연속 메모리 할당

연속 메모리 할당 프로세스에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당 방식이라고 한다. 프로세스들을 메모리에 연속적으로 할당할 때 무엇을 고려해야 하는지, 그리고 어떤 잠재적인 문제가 있는지 알아보자. 스와핑 메모리에 적재된 프로세스들 중에는 현재 실행디지 않는 프로세스가 있을 수 있다. 입출력 작업의 요구로 대기 상태가 된 프로세스라던지, 오랫동인 사용되지 않은 프로세스가 이런 프로세스들에 속한다. 이러한 프로세스들을 임시로 보조기억장치 일부 영역으로 쫒아내고, 그렇게 해서 생긴 메모리상의 빈 공간에 도 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다. 이때 프로세스들이 쫒겨나는 보조기억장치의 일부 영역을 스왑 영역이라고 한다. 그리고 현재 실행되지 않는 프로세스가 메모리에서..