Computer Science

    Join 알고리즘

    조인 알고리즘 다수의 테이블에서 조인을 수행할 때는 동시에 여러 개의 테이블에 접근할 수 없기 때문에, 내부적으로 접근할 순번을 정해서 차례로 테이블에 접근한 결과를 다음 순번의 테이블로 전달한다. 이때 테이블에 접근하는 선후 관계에 따라 드라이빙 테이블과 드리븐 테이블로 구분한다. 드라이빙 테이블에서 많은 건수가 반환되면 해당 결과를 가지고 드리븐 테이블에 접근하게 되므로, 가능하면 적은 결과가 반환될 것으로 예상되는 드라이빙 테이블을 선정하고, 조인 조건절의 열이 인덱스로 설정되도록 구성해야 한다. 중첩 루프 조인 (NL 조인) 드라이빙 테이블의 데이터 1건당 드리븐 테이블을 반복해 검색하며 최종적으로는 양쪽 테이블에 공통된 데이터를 출력한다. 인덱스는 인덱스로 정의된 열 기준으로 순차 정렬되지만, ..

    프로세스 생성

    프로세스 생성 프로세스는 실행 중인 프로그램으로, 프로그램을 실행하기 위해서는 디스크 상에 존재하는 프로그램을 메모리에 탑재해야 한다. 과정 1. 운영체제는코드와 정적 데이터를 메모리로 탑재한다. 프로그램은 디스크에 특정 실행 파일 형식으로 존재하는데, 코드와 정적 데이터를 메모리에 탑재하기 위해서 운영체제는 디스크의 해당 바이트를 읽어서 메모리의 어딘가에 저장한다. 초기 운영체제들은 프로그램 실행 전에 코드와 데이터를 모두 메모리에 탑재하였으나, 현대의 운영체제는 프로그램을 실행하면서 코드나 데이터가 필요할 때 필요한 부분만 메모리에 탑재한다. 2. 스택과 힙을 생성하고 초기화한다. 코드와 정적 데이터가 메모리로 탑재된 후, 프로세스를 실행시키기 전에 운영체제는 일정량의 메모리를 프로그램의 의 스택 용..

    NoSQL과 종류

    RDB vs NoSQL RDB 관계형 데이터베이스는 엄격한 스키마를 요구하는 테이블 기반 데이터 구조를 갖습니다. [장점] 데이터의 형태와 크기를 미리 정하고 테이블 단위로 구분하여 데이터를 저장할 수 있다. 트랜잭션을 통해 ACID를 보증하여 안정적인 데이터 관리가 가능하다. 조인을 포함해 복잡한 조건을 포함하는 데이터 검색이 가능하다. 엄격한 스키마로 인해 데이터 중복이 없기 때문에 데이터 update가 많을 때 유리하다. [문제점] 웹이 기하급수적으로 성작하면서, SNS를 통해 작성되는 자유로운 형태의 텍스트와 로그 기록 같은 다양한 유형의 비정형 데이터가 빠른 속도로 대량 생산되고 있습니다. 관계형 데이터베이스는 이러한 대량의 비정형 데이터를 저장하고 처리하기에 맞지 않습니다. 또한 여러 컴퓨터가..

    CPU 스케줄링

    스케줄링 스케줄링은 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원을 어떻게 배정할지 결정하는 일을 말한다. CPU 스케줄링은 규모에 따라 고수준, 중간, 저수준 스케줄링으로 구분할 수 있다. 고수준 스케줄링 어떤 작업을 시스템이 받아들일지 거부할지를 결정하는 단계로, 작업 요청이 오면 스케줄러가 시스템의 상황을 고려하여 승인 여부를 결정한다. 고수준 스케줄링에 따라 시스템 내에서 동시에 실행 가능한 프로세스의 수가 정해지기 때문에, 고수준 스케줄링은 멀티 프로그래밍 정도를 제어하는 역할을 한다. 중간 수준 스케줄링 고수준 스케줄링이 프로세스를 활성화할지 말지를 결정하여 전체 프로세스의 수를 조절하더라도, 프로세스가 활성화 된 후에 여러가지 사정으로 시스템에 과부하가 걸릴 수 있다. 중간 수준 스케..

    프로세스 제어 블록과 문맥교환

    프로세스 제어 블록 특정 프로세스에 대한 중요한 정보를 저장하고 있는 자료구조로, 모든 프로세스는 고유의 프로세스 제어 블록을 가진다. 프로세스 제어 블록은 프로세스 생성 시 만들어져서 프로세스가 실행을 완료하면 폐기된다. 프로세스는 CPU를 할당받아 작업을 처리하다가 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환한다. 이때 작업의 진행 상황을 프로세스 제어 블록에 저장하고 다시 CPU를 할당받게 되면 저장된 내용을 불러와 이전에 종료했던 시점부터 작업을 다시 수행한다. 프로세스의 상태 생성 상태 프로그램을 메모리에 가져와 실행 준비가 완료된 상태 준비 상태 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태로, CPU 스케줄러가 실행될 프로세스를 선택한다. 실행 상태 선택된 프..

    프로세스와 스레드

    프로세스 운영체제로부터 시스템 자원을 할당받는 작업의 단위로, 실행을 위해 메모리로 올라온 프로그램 프로세스는 각각의 독립된 메모리 영역을 할당받고, 별도의 주소 공간에서 실행된다. 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없으며, 다른 프로세스의 자원에 접근하려면 프로세스 간 통신을 이용해야 한다. 메모리 구조 코드 영역 - 프로그램의 코드가 저장되는 곳으로, 텍스트 영역이라고도 한다. - 프로그래머가 작성한 프로그램은 코드 영역에 탑재되며, 읽기 전용으로 처리된다. 데이터 영역 - 코드가 실행하면서 사용하는 변수나 파일 등 각종 데이터를 저장한다. - 데이터는 변하는 값이기 때문에 기본적으로 읽기와 쓰기 모두 가능하다. 스택 영역 - 함수의 호출과 함께 할당되며, 함수의 호출이 완료..

    병렬 처리

    병렬 처리 병렬 처리는 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방법으로, CPU의 핵심 기능을 가진 코어를 여러 개 만들거나 동시에 실행 가능한 명령의 개수를 늘리는 방식을 이용한다. 병렬 처리에서 작업을 N개로 쪼갰을 때 N을 병렬 처리의 깊이라고 한다. 예를 들어 병렬 처리의 깊이가 4인 경우는 작업을 네 단계로 나눈 것으로 동시에 처리할 수 있는 작업의 개수가 최대 4개이다. 따라서 병렬 처리의 깊이 N은 동시에 처리할 수 있는 작업의 개수를 의미한다. 이론적으로는 N이 커질수록 동시에 작업할 수 있는 작업의 개수가 많아져서 성능이 높아지지만, 작업을 너무 많이 나누면 각 단계마다 작업을 이동하고 새로운 작업을 불러오는데 시간이 너무 많이 걸려서 오히려 성능이 떨어진다. 이러한 오버..

    컴퓨터 성능 향상 기술

    현대 컴퓨터 구조 현대 컴퓨터 구조에서 메인보드 내 메모리와 주변장치는 시스템 버스로 연결되어 있고, CPU 내 레지스터, 연산장치, 제어장치는 CPU 내부 버스로 연결되어 있다. 즉, 메모리의 속도는 시스템 버스의 속도와 같고, CPU의 속도는 CPU 내부 버스의 속도와 같다. 따라서 CPU 내부 버스의 속도가 시스템 버스의 속도보다 빠르기 때문에, 메모리를 비롯한 주변장치의 속도가 CPU의 속도를 따라가지 못하는 문제가 발생한다. 버퍼와 스풀러 버퍼는 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 하는 장치로, 일정량의 데이터를 모아 롬김으로써 속도의 차이를 완화한다. 스풀은 CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼로, 대표적인 예로 프린터에 사용되는 스..

    컴퓨터 구조

    하드웨어 구성 컴퓨터는 중앙처리장치, 메인메모리, 입력장치, 출력장치, 저장장치로 구성된다. 컴퓨터로 하는 작업은 대부분 중앙처리장치와 메인메모리의 협업으로 이루어지기 때문에, 중앙처리장치와 메인메모리는 필수 장치로 분류되고, 그 외의 부품은 주변장치라고 한다. 메인메모리는 전력이 끊기면 데이터를 잃어버리기 때문에 데이터를 영구 보관하려면 하드디스크나 USB를 사용해야 하며 메인메모리를 주기억장치, 하드디스크나 USB 같은 메모리를 보조저장장치라고 부른다. CPU CPU는 명령어를 해석하여 실행하는 장치로 산술논리 연산장치, 제어장치, 레지스터로 구성된다. 산술논리 연산장치 데이터를 연산하는 곳으로 데이터의 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산과 AND, OR 같은 논리 연산을 수행한다. 제어장치..