https://www.acmicpc.net/problem/12763 12763번: 지각하면 안 돼 1호관에서 3호관, 4호관을 거쳐 5호관으로 간다면, 3시간만에 3500원의 지출로 도착할 수 있다. (다행히 이번 수업은 휴강이었다고 합니다.) www.acmicpc.net 문제 준하는 평범한 대학생이다. 이번 학기는 수강신청에 완전히 실패했다. 그러다 보니 수업시간표가 엉망이라 수업마다 옮겨 다닐 건물이 많다. 이런 건물들에는 모두 이름이 있지만, 매번 건물의 이름까지 모두 적기엔 잉크가 아까웠다. 그래서 편의상, 옮겨다닐 건물이 \(N\)개가 있다면 1호관 ~ \(N\)호관이라 부르기로 했다. 이렇듯 건물이 많다 보니 지각을 하는 경우가 빈번했는데, 1호관에 있는 준하는 \(N\)호관에서 듣는 이번 수..
1. 멀티 프로세스 vs 멀티 스레드 동일한 작업을 수행하는 단일 스레드 프로세스를 여러 개 실행하는 멀티 프로세스와 하나의 프로세스를 여러 스레드로 실행하는 멀티 프로세스는 어떤 차이가 있을까? 중요한 것은 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유함녀서 실행된다는 점이다. (1) 멀티 프로세스 프로세스를 fork하면 코드/데이터/힙 영역 등의 모든 자원이 복제되어 저장된다. 즉, 저장된 메모리 주소를 제외하면 모든 것이 동일한 프로세스 2개가 통째로 메모리에 적재되는 것이다. 가령 fork를 4번 한다면 메모리에는 같은 프로세스가 통째로 4개가 적재된다. 하지만 fork 직후 같은 프로세스를 통째로 메모리에 중복 저장하지 않으면서 동시에 프로세스끼리..
1. 스레드 스레드는 프로세스를 구성하는 실행 흐름의 단위이다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다. (1) 단일 스레드 프로세스 단일 스레드 프로세스는 실행 흐름이 하나인 프로세스를 말한다. 이제까지의 프로세스는 모두 단일 프로세스에 대한 이야기이다. (2) 멀티 스레드 프로세스 멀티 스레드 프로세스는 실행 흐름이 여러 개인 프로세스로써 프로세스를 이루는 여러 명령어를 동시에 실행할 수 있다. (2) 스레드의 구성 요소 스레드는 스레드ID, 프로그램 카운터를 비롯한 레지스터 값, 스택 등 스레드마다 실행에 필요한 최소한의 정보를 가지고 있다. 각 스레드의 스택이 따로 있고 각 스레드의 프로그램 카운터가 따로 있어, 스레드마다 서로 각기 다른 프로그램에 있는 부분을 실행하면서 각기 다른..
프로세스 : 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업(Task)이라는 용어와 거의 같은 의미로 쓰인다. 스레드 : 프로세스 내 작업의 흐름을 지칭 위의 그림처럼 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다. 1. 프로세스와 컴파일 과정 프로세스는 프로그램이 메모리에 올라가 인스턴스화된 것을 말한다. 예를 들어 프로그램은 구글 크롬 프로그램(chrome.exe)과 같은 실행 파일이며, 이를 두 번 클릭하면 구글 크롬 프로세스로 변환되는 것이다. 프로그램을 만드는 과정은 만드는 언어마다 다를 수 있으며 컴파일 언어인 C 언어 기반의 프로그램을 기준으로 설명하면 컴파일러가 컴파일 과..
논문 링크 : Efficient Estimation of Word Representations in Vector Space 0. Abstract 단어의 연속 벡터 표현을 계산하기 위한 2가지 새로운 모델 아키텍처를 제안한다. 결과는 이전에 다양한 유형의 신경망을 기반으로 최고 성능을 발휘했던 기술들과 비교되며, 우리가 제안하는 방식을 통해 훨씬 낮은 비용으로 정확도가 크게 향상하는 것을 관찰했다. 16억 개의 단어 데이터세트에서 고품질의 단어 벡터를 학습하는데 하루가 채 걸리지 않으며, 이러한 벡터는 구문 및 의미 단어 유사성을 측정하기 위한 우리의 테스트셋에서 최첨단 성능을 제공한다. 1. Introduction현재 많은 NLP 시스템과 기술은 단어를 원자 단위로 다루며, 단어 사이의 유사성에 대한 개..
동기와 비동기의 차이는 프로그램의 흐름 제어와 관련이 있다. 동기 방식은 I/O 작업이 완료될 때까지 프로그램의 흐름이 멈추지만, 비동기 방식은 I/O 작업을 백그라운드에서 진행하면서 메인 프로그램의 흐름을 계속 진행한다. 이처럼 동기 I/O는 요청한 작업이 완료될 때까지 기다리는 반면, 비동기 I/O는 요청한 작업이 처리되는 동안 다른 작업을 계속해서 수행한다. 동기 I/O 동기 I/O는 프로그램이 I/O 작업을 요청하고, 해당 작업이 완료될 때까지 기다리는 방식이다. 데이터의 입/출력 작업이 진행되는 동안 프로그램은 다른 작업을 진행하지 않고 기다린다. 가장 간단하고 직관적이지만, I/O 작업이 오래 걸리는 경우 프로그램의 효율성이 크게 저하될 수 있다. 비동기 I/O 비동기 I/O는 프로그램이 I/..
기본적인 입출력 제어 방식 메모리에서 데이터를 꺼낸 후 시스템 버스를 통해 CPU 레지스터에 옮겨지고 다시 시스템 버스를 통해 다시 시스템 버스를 통해 CPU 레지스터에서 메모리로 이동한다. 이처럼 모든 메모리 접근 연산이 CPU에 의해서만 이루어질 경우 주변 장치가 메모리 접근을 원할 때마다 인터럽트를 통해 CPU의 작업이 방해받게 되어 사용 효율성이 떨어진다. DMA 메모리 버퍼, 포인터, 카운터를 사용해 장치 제어기가 CPU의 도움없이 DMA 컨트롤러를 이용해 데이터를 직접 메모리로 전송하는 입출력 방식을 말한다. DMA의 필요성 고속의 I/O 장치의 경우 인터럽트로 CPU의 실제 프로세스 작업 시간 감소 디스크 같은 많은 데이터를 입/출력하는 장치를 위해 CPU가 매번 전송을 제어하는 방법의 비효..
1. 폴링(Polling) 폴링이란 CPU가 작업을 진행하면서 입출력 명령을 만나면 직접 입출력 장치에서 데이터를 가져오는 방식이다. CPU가 직접 일을 작업을 하기 때문에 입출력을 하는 동안 다른 작업은 할 수 없다. 따라서 입출력이 처리되는 동안 기다려야 하는데 시간이 오래 걸리며 작업 효율이 떨어져 현재는 사용하지 않는다. 2. 인터럽트(Interrupt) 인터럽트는 프로그램을 실행하는 도중에 예기치 못한 상황이 발생할 경우 CPU를 잠깐 정지시켜 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것을 말한다. 인터럽트가 발생되면 인터럽트 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 인터럽트 핸들러 함수가 실행된다. 인터럽트 간에는 우선 순위가 있고..