일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘
- 제노블레이드 2
- GitHub Desktop
- 프로콘 갈림현상
- Github
- 자소서
- Python
- Algorithmus
- 프로그래머스
- SRE
- 네이버 검색 시스템
- 취준
- C++
- Ultimate Search
- git
- ASF-110
- 백준
- 백트래킹
- 프로콘
- algorithm
- programmers
- 격리수준
- 리트코드
- DP
- 코딩테스트
- Pro-Con
- 알고리즘 종류 정리
- python3
- LeetCode
- baekjoon
- Today
- Total
목록Computer Science (21)
산타는 없다
비선점 스케줄링 알고리즘은 이미 할당된 CPU를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스캐줄링 기법입니다. 프로세스가 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용하게 됩니다. 모든 프로세스에 대한 요구를 공정하게 처리할 수 있고 프로세스 응답 시간의 예측이 용이하며, 일괄 처리 방식에 적합하다는 장점이 있습니다. 하지만 중요한 작업(짧은 작업)이 중요하지 않은 작업(긴 작업)을 기다리는 경우가 발생할 수 있다는 단점이 있습니다. 비선점 스케줄링 알고리즘으론 FCFS, SJF, 우선순위, HRN, 기한부 등의 알고리즘이 있습니다. 그 중 FCFS, SJF, HRN 알고리즘에 대해서 알아보겠습니다. 성능 기준 스케줄링 성능은 평균 대기 시간, 평균 실행 시간, 평균 반환 시간으로..
프로세스 프로세스는 실행되고 있는 프로그램의 인스턴스라고 생각할 수 있습니다. 즉, 실행중인 프로그램을 의미하며, 작업(job), 태스크(Task)라고도 합니다. (인스턴스[instance] : 컴퓨터 저장공간에서 할당된 실체) 이러한 프로세스는 운영체제로 부터 CPU 시간 메모리 등의 시스템 자원을 할당받아 실행됩니다. 운영체제는 자원을 할당해준 프로세스를 관리하기 위해 PCB(Process Control Block)를 생성하여 저장하고 프로세스가 완료되면 제거합니다. 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수가 자료구조에 접근할 수 없습니다. 만약, 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC, inter-process communi..
공유 자원의 동기화 프로세스 안에서 생성된 스레드들은 코드, 데이터, 힙 메모리 영역을 공유하고 스택 영역만 스레드 별로 고유하게 가지게 됩니다. 스레드가 서로 데이터를 공유할 수 있다는 점은 장점이긴 하지만 두 스레드가 같은 자원을 동시에 변경하는 경우에는 문제가 발생할 수 있습니다. 때문에 공유 자원에 대한 접근을 제어하기 위한 동기화 처리를 하게 됩니다. MFC Api에선 CCriticalSection 클래스를 제공하여 동기화 처리를 할 수 있습니다. 이런 동기화 처리는 여러 스레드가 같은 객체를 동시에 실행하는 것을 방지해 줍니다. 세밀하게 제어한다면 lock(or monitor)를 사용하여 접근을 동기화 할 수 있습니다. 특정 시점에 락을 쥐고 있을 수 있는 스레드는 하나뿐이며 따라서 해당 공유..
Select문은 SELECT [ALL(생략가능) / DISTINCT / DISTINCTROW] [테이블명.]속성명, [테이블명.]속성명, … FROM 테이블명 [AS 별칭] [, 테이블명…] [[RIGHT / LEFT] [OUTER] JOIN 테이블명 [AS 별칭]] [ON 조건] [WHERE 조건] [GROUP BY [CUBE / ROLLUP()] 속성명, 속성명, …] [HAVING 조건] [ORDER BY 속성명 [ASC(생략가능) / DESC]] [LIMIT 갯수]; 의 순서로 작성할 수 있습니다. ([]는 생략가능) 하지만 실제로 실행되는 순서는 다릅니다. 실행되는 순서를 정확하게 파악하고 있어야 정확한 Select Query를 작성할 수 있으므로 실행 순서를 알아보겠습니다. Select Que..
동적/공유 라이브러리는 런타임에 링크/로드되는 라이브러리입니다. 공유 라이브러리(Dynamic Linking)와 동적 라이브러리(Dynamic Loading)는 똑같이 런타임에 메모리에 적재되는데 공유 라이브러리는 응용 프로그램이 시작되는 순간에 메모리에 적재되고 동적 라이브러리는 응용 프로그램이 라이브러리의 내용이 필요할 때 적재하게 됩니다. 동적 라이브러리는 이를 사용하고자 하는 실행 바이너리에서 필요시 사용할 수 있도록 최소한의 정보만 포함하여 링크하거나, 아예 독립적으로 로드/사용/해제할 수 있습니다. 동적 라이브러리의 특징 동적 라이브러리는 정적 라이브러리와 다르게 컴파일할 때 코드가 복사되지 않고 프로그램 시작 시 로딩됩니다. 이때 메모리에 이미 로딩되어 있다면 라이브러리 코드 영역을 공유해서..
정적 라이브러리는 컴파일타임에 링킹되는 라이브러리입니다. 정적 라이브러리가 링킹되는 것을 정적 링킹(Static Linking)이라고 합니다. 정적 링킹은 실행파일을 만들 때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하는 방식을 말하며 링커에 의해 이루어집니다. 즉, 자신이 작성한 프로그램에서 A라는 외부 함수를 사용했다면, A라는 외부 함수에 대한 정보를 자신이 작성한 프로그램의 실행파일을 만들 때 복사해 옵니다. 이렇게 모든 라이브러리 모듈을 복사하기 때문에 실행시 별도의 라이브러리 파일이 필요하지 않습니다. 하지만 실행 파일 내에 라이브러리 코드가 저장되기 때문에 프로그램 크기가 커지고 메모리 효율이 좋지 않습니다. 여기서 메모리 효율이 좋지 않다는 것은 각각의 프로세스에서 라이브러리가 할당..
라이브러리(Library)는 다른 프로그램들과 링크되기 위하여 존재하는 하나 이상의 서브루틴(subroutine)이나 함수(function)들의 집합 파일입니다. 라이브러리는 재사용이 필요한 기능이 반복적인 코드 작성을 하지 않고 언제든지 필요한 곳에서 호출하여 사용한다는 목적을 가지고 만들어집니다. 링크될 수 있도록 보통 컴파일된 형태인 목적 코드(object code)형태로 존재하며 미리 컴파일 되어 있기 때문에 컴파일 시간도 단축됩니다. 라이브러리는 크게 정적 라이브러리와 동적 라이브러리 두 종류로 사용됩니다. 두 라이브러리의 가장 큰 차이점은 실행파일에 링킹되는 시점입니다. 정적 라이브러리 / Static Library / Lib 작성된 소스 코드는 번역 프로그램(컴파일러, 인터프리터 등)을 통해..
데이터베이스 인덱스 자료구조로 B-tree를 사용합니다. 균형 트리 중 B-tree를 사용하는 이유는 B-tree는 하나의 노드에 여러 개의 데이터 요소를 저장할 수 있는 점과 데이터 탐색뿐 아니라 저장, 수정, 삭제에도 항상 O(logN)의 시간 복잡도를 가지기 때문이라고 생각됩니다. 또 항상 정렬된 상태를 유지하고 있고 참조 포인터가 적어 방대한 데이터 양에도 빠른 메모리 접근이 가능하다는 장점도 가지고 있습니다. B Tree 인덱스 특징 B Tree 인덱스는 다음과 같은 특징을 가지고 있습니다. (차수가 n일 경우) 루트 블록은 리프 블록이 아닌 이상 적어도 두 개의 서브 트리를 갖는다. 루트 블록과 리프 블록을 제외한 각 블록은 최소 n/2개의 포인터를 갖고 적어도 n/2-1개의 키 값을 갖는다...