본문 바로가기

분류 전체보기

(146)
Race Condition Race condition은 공유자원을 얻기 위해 경주하는 상황을 일컫는 용어로, multi-proccesing 모듈에서 여러개의 process나 thread가 공유하고 있는 메모리에 동시에 접근할 때 발생한다. 이 상황이 발생하는 부분을 critical section이라고 하며, critical section에서는 보통 공유 자원을 검사 후 행동(check-then-act)을 취하는 일련의 과정이 진행되는데, 이 공유 자원에 대한 아무런 제어가 없다면 원하는 결과를 보장받을 수 없다. 다음 코드는 x라는 공유 자원의 조건 검사 후에 그 값을 이용해 다른 변수의 값을 갱신한다. if (x == 1)// Check { y = x + 1;// Act } process나 thread의 실행 순서는 schedu..
Memory Layout of a Program(Process) Text Text segment(혹은 Code segment)는 실행가능한 명령어를 포함하고 있는 메모리 영역이다. 이 영역은 Heap이나 Stack 영역보다 아래에 위치하는데, 이는 두 영역으로부터 덮어씌어지는 것을 방지하기 위함이다. 텍스트 영역은 공유가능하기 때문에 메모리에 한번의 복사로 프로세스를 동작시킬 수 있다. 이 역역은 read-only로 프로그램에 의해 명령어가 변경되지 않는다. Data Data segment는 초기화 된 data segment로서, 프로그래머에 의해 초기화된 전역(global)변수와 정적(static)변수를 포함하고 있다. 이 공간은 런타임에 변경이 가능하므로 not read-only이지만, 정확히 말하면 read-only 공간과 read-write 공간이 분리되어 있..
Process와 Thread의 비교 및 차이 Program(혹은 Application)은 어떠한 일을 수행하는 명령어의 집합으로, 프로그래밍 언어로 생성되어 컴퓨터에서 실행가능한 형태로 디스크나 비휘발성 메모리에 저장되어 있다. Process는 실행 중인 program을 의미하며 명령 수행에 필요한 메모리와 자원을 할당받아 동작한다. Process는 상호배타적으로 분리된 메모리 공간을 할당받아 실행되어서 다른 process에 직접적인 영향을 주지 않는다. Thread는 process의 실행 단위로 경량화된 process이며, process가 시작되면 이 역시 메모리와 자원을 할당받는다. 하나의 process는 여러개의 thread를 생성할 수 있으며, 이 경우에 각각의 thread는 자신만의 레지스터와 스택을 할당받고 process 내부의 나머지 ..
[ BOJ 백준 1328번 - 고층 빌딩 ] 해설 및 코드 https://www.acmicpc.net/problem/1328 목적 빌딩의 개수 N, 가장 왼쪽 또는 오른쪽에서 봤을 때 보이는 빌딩의 수 L과 R이 주어졌을 때, 가능한 빌딩 순서의 경우의 수를 구하자. 접근법 1. 빌딩을 세우는 과정을 크기가 큰 빌딩부터 작은 빌딩을 하나씩 추가하는 방식으로 진행해보자. 다음과 같이 10개의 빌딩이 세워져 있다. 왼쪽과 오른쪽에서 볼 때 각각 3개, 2개가 보인다. 이러한 경우에 크기가 제일 작은 빌딩 하나를 추가하여 세울 수 있는 경우의 수는 11가지가 된다. 하지만 N,L,R만 고려하면 세가지 경우가 나오게 된다. 가장 왼쪽에 배치하면 이전 경우의 L이 1증가하는 경우가 1개 만들어지고, 가장 오른쪽에 배치하면 이전 경우의 R이 1증가하는 경우가 1개 만들어진..
WHAT HAPPENS WHEN YOU TURN A COMPUTER ON? 컴퓨터 전원을 켜자마자 일어나는 과정은 부팅(Booting)으로, 컴퓨터를 사용 가능한 상태로 만든다. 부팅 과정은 BIOS(Basic Input/Output System, 펌웨어로 마더보드의 ROM 칩에 저장된 프로그램)를 실행하는 것부터 시작한다. 이 프로그램은 컴퓨터의 주변 장치들이 사용 가능한 상태인지 확인하는 POST(Power On Self Test)를 진행하게 된다. 문제가 없다면 장치들을 초기 상태로 세팅을 하며, 다음 단계로 메모리에 적재할 OS를 찾아 실행한다. 이와 관련된 것이GRUB(GRand Unified Bootloader)으로, GRUB은 총 두 단계로 나뉘어 있다. Stage 1은 Stage 2를 실행하기 위한 아주 작은 프로그램이며, MBR(Master Boot Record..
[ BOJ 백준 13398번 - 연속합 2 ] 해설 및 코드 https://www.acmicpc.net/problem/13398 목적 n개의 정수 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하자. (수를 하나 제거할 수 있다.) 접근법 1. 백준 1912번 - 연속합 문제에서 수 제거 조건만 추가된 문제이다. 점화식을 조금만 수정하면 된다. 2. s[i]를 a배열의 i번째 요소를 끝으로 하는 최대 연속합으로 정의하면, s[i]는 a[i] + max(s[i-1], 0) 이다. 3. t[i]는 a의 i번째 원소까지의 최대 연속합에서 1개의 원소를 뺀 최대값으로 정의하면, t[i]는 max(s[i-1], t[i-1] + a[i]) 이다. 4. 구해야 하는 값은 s[1]~s[n], t[1]~t[n]중 최대값이다. 1 2 3 4 5 6 7 8 ..
[ BOJ 백준 1912번 - 연속합 ] 해설 및 코드 https://www.acmicpc.net/problem/1912 목적 n개의 정수 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하자. 접근법 1. s[i]를 a배열의 i번째 원소를 끝으로 하는 최대 연속합이라고 정의할 때, s[i]는 a[i] + max(s[i-1], 0)이다. 2. 최종적으로 구하고자 하는 것은 s[1] ~ s[n]중 최대 값이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,ans,prev,curr; cin>>n>>ans; prev=ans;..
[ BOJ 백준 2482번 - 색상환 ] 해설 및 코드 https://www.acmicpc.net/problem/2482 목적 주어진 정수 N과 K에 대하여, N개의 색으로 구성되어 있는 색상환 (N색상환)에서 어떤 인접한 두 색도 동시에 선택하지 않으면서 서로 다른 K개의 색을 선택하는 경우의 수를 구하자. 접근법 1. s[i][j][k]를 i번째 색을 선택(j==1)하거나 미선택(j==0)할 때, k개의 색을 선택하는 경우의 수라고 가정한다. 그러면 s[i][0][k]는 s[i-1][1][k] + s[i-1][0][k] 이고, s[i][1][k]는 s[i-1][0][k-1] 이다. 2. 마지막 n번째는 1번째 선택에 따라서 결정되므로 애초에 배열을 두종류로 나누어 처리한다. 하나는 1번째 타일이 선택된 경우, 다른 하나는 1번째 타일이 선택되지 않은 경우..