Thread 실행의 가장 작은 단위 스레드마다 별도의 stack과 register set이 있다. Code영역과 data영역은 공유한다. 왜 스레드를 사용해야 하는가? 더 나은 병렬성(Parallelism)으로 성능이 향상된다. 프로세스보다 스레드를 생성하는 것의 오버헤드가 더 적다. 자원을 더 효율적으로 사용한다. 동일한 작업을 병렬적으로 실행할 때, 별개의 프로세스를 생성하는 것은 자원 낭비이다. 데이터 공유가 더 쉽다. IPC를 사용할 필요가 없다. Concurrency vs. Parallelism Parallelism (병렬성) 다중 작업을 동시에 수행할 수 있는 능력 Concurrency (동시성) Time sharing으로 인해 단위시간마다 다중작업을 빠르게 진행하여 동시에 수행하는 것처럼 보..
Process Memory Layout Normal function을 실행하면 stack영역을 사용한다. System call은 kernel stack에서 사용 후 결괏값을 stack 영역에 저장한다. System call을 호출할 때마다 프로세스 1개당 kernel stack 1개를 할당한다. Stack 영역 함수들이 호출될 때 아래로 차면서 데이터가 저장된다. Heap 영역 동적 메모리가 요청될 때 위로 차면서 데이터가 저장된다. Data segment 전역변수가 저장된다. Text segment 바이너리 프로그램 코드가 저장된다. 왜 프로세는 Physical memory의 같은 Kernel memory 영역을 공유하지? 물리적으로는 1대의 컴퓨터에 1개의 OS만 사용 가능하다. 하지만 1개의 프로세..
System call 프로그래머들은 API를 통해 간접적으로 system call을 사용한다. System call을 직접적으로 호출하지 않고 API를 사용하는 이유 매우 많은 종류의 파라미터가 있기 때문에, system call을 직접적으로 사용하기 어렵다. 이식성 (다른 컴퓨터를 쓰더라도 API를 통해 똑같이 실행할 수 있는 능력) Windows API가 Linux에서 작동하지 않는 이유 OS가 다르기 때문에 전혀 다른 system call을 사용하기 때문. System call types: Communications Message passing 메시지 교환에 기반함 Sender와 Receiver가 우선적으로 확인되어야 한다. Shared memory 프로세스가 system call을 통해 다른 프로..
운영체제란? 하드웨어를 관리하기 위한 프로그램 컴퓨터 하드웨어와 사용자 사이에서 중간자 역할을 하는 프로그램 운영체제의 목표 사용자 프로그램을 실행하고 사용자 문제를 더 쉽게 해결한다. 컴퓨터 시스템을 더 사용하기 쉽게 만든다. 컴퓨터 하드웨어를 효율적으로 사용한다. 컴퓨터 시스템 구조 CPU와 Device controller는 동시에 작동한다. Memory controller는 메모리에 대한 접근을 동기화한다. (CPU 클럭에 의해 메모리 접근이 이루어진다. 아무 때나 메모리에 접근해서 값을 가져올 수 있는 게 아님) 컴퓨터 연산 Start-up Bootstrap 프로그램: 컴퓨터 전원이 켜질 때 가장 먼저 실행되는 프로그램 ROM이나 EEPROM에 저장된다. CPU 레지스터, device contro..
문제 보기이 문제는 백준에 알고리즘 분류가 따로 되어있지 않지만 나는 BFS로 푼 문제이다.상어가 먹을 물고기를 찾기 위해서 BFS를 사용하였고, 상어가 어디로 이동할 지 결정하는 방법은 다음과 같다.먹을 물고기를 정하기 위해서 나는 우선순위 큐(Priority Queue)를 사용했다.문제를 풀기 위한 로직은 다음과 같다. 1. 현재의 상어위치로부터 BFS를 시작한다. (17~20번째 줄)2. BFS를 진행하면서, 상어가 지나갈 수 있으면 현재까지의 거리, 행과 열을 큐에 넣고, 먹을 수 있는 물고기가 있으면 우선순위 큐에 우선순위를 현재까지의 거리, 행, 열 순으로 삽입한다. (30~36번째 줄)3-1. 우선순위 큐가 비어있으면(=먹을 수 없는 물고기가 없으면) 종료한다. (38~40번째 줄)3-2. ..
문제 보기백준에 이 문제는 따로 알고리즘 분류가 없지만, 나는 BFS로 푼 문제이다. 두 나라의 인구가 이동하는 조건은 다음과 같다.위에 해당하는 단계들이 1번의 인구이동이다.여기서 실수할 수 있는 부분이 있다.나는 문제를 풀 때, 한 개의 연합국에서 인구이동이 끝날 때 1번의 인구이동이라고 카운트를 세었지만, 정답은 주어진 맵에서 가능한 모든 연합국들의 인구이동이 끝나는 것이 1번의 인구이동이었다.따라서 문제를 해결하기 위한 로직은 다음과 같다. 1. 주어진 맵의 각 위치마다 BFS를 진행한다. 이 때, 한 번의 인구이동동안 연합국에 해당하는지 확인하기 위한 집합 변수(unions)를 둔다. (11번째 줄)2. 연합국이 아닌 모든 나라들에 대해서 BFS를 진행한다. (12~33번째 줄)3. 한 번의 B..
문제 보기이 문제는 시뮬레이션 문제이다.처음에 이 문제에서 요구하는 바가 무엇인지 이해를 하지 못했다.. 그러나 문제를 이해하고 나니 구현은 매우 쉬웠다.드래곤 커브는 다음과 같은 세 가지 속성으로 이루어져 있다. 1. 시작 점2. 시작 방향3. 세대 (Generation) 다음 세대로 넘어갈 때마다 변화하는 드래곤 커브는 문제의 설명을 보면 이해할 수 있다.드래곤 커브의 진행방향은 다음과 같이 정의되어 있다.드래곤 커브의 방향을 살펴보면 다음과 같은 규칙이 있다.0세대: 01세대: 01 -------------- 0 12세대: 0121 ----------- 01 213세대: 01212321 ------ 0121 2321 위의 규칙을 보면, 다음 세대의 드래곤 커브는 현재 세대의 드래곤 커브에서 거꾸로 ..
- Total
- Today
- Yesterday