신문

  • 매출 첫 6조 카카오…"3000억 자사주 소각" 주주 달래기

    카카오는 회사가 너무 커졌는데 나온는 얘기들도 너무 많은 것 같다.
    선점의 대표적 주자가 아닌가 싶다. 역시 돈 내고 쓰던거 무료로 쓰게 해주는 건
    우선적으로 할 경우 시장을 먹고 그렇게 뻗어 나가는 것이 가장 좋은 방안인 것 같다.

  • 처음부터 나쁜 AI가 있을까요? 딥페이크도 쓰는 '사람' 문제죠

    AI는 날이 갈수록 발전한다. 이에 의한 데이터 과학자도 많이 필요하고 더 필요한 것은 뭐가 있을까. 머신러닝, 딥러닝 분야도 공부해보고 싶긴 하다. 이번 방학은 실리 + 예습 + 체득의 위주로 수행하고 있지만 다음에는 이거에 취미도 추가해 보고 싶다.
    기술은 언제나 문제 없다. 새로운 기술은 필요에 의해서 만들어지지 않나 자물쇠를 열쇠 없이 여는 것도 어느 사람은 자기 열쇠를 분실해서지만 누군가는 남의 금고를 열려고 하는 것처럼 말이다.

  • '청년 금융상품' 아는만큼 번다…희망적금, KB·신한 금리 높아

    오 기본금리 모두 5%에 우대금리가 0.5 ~ 1.0 % 까지 가능하다고 한다.
    일단 그래도 주식으로 하는 것이 난 더 좋다고 본다. 적금은 본인의 선택지가 너무 수동적인것 같다. 차라리 주식에 묻어 둬는 것이.. 이러다가 손실을 보긴 했는데 적금은 나중에 목돈을 보관하는 용도로 사용해야 겠다.



알고리즘 스터디

ICPC 문제와 SMST를 다시 회고



프로세스의 동기화 문제

운영체제

Cooperating 프로세스

서로에게 영향을 줄 수 있는 프로세스로 공유 자원에 동시에 접근을 하게 된다면 데이터가 불일치 해지는 결과를 가지게 됨.
데이터의 통일성 문제의 원인으로는
1. 동시 실행 : 다른 프로세스의 명령어 수행 과정 중에 interrupt를 해서 결과가 이상해짐
2. 병렬 실행 : 여러 프로세스가 한 번에 접근하는 경우

Race Condition

원인

예제로 드는 코드 중에 count++count--로 이루어진 생산자 - 소비자 프로세스였다.
해당 코드들은 함축적으로 나타낸것 뿐이지 어셈블리로 이를 풀게 되면

load r14, count
add r14. 1
store r14, count

처럼 3개의 부분으로 나뉘게 될 것이고 그 사이사이에서 문맥교환이 이루어질 수 있다.

결과

공유하는 자원에 동시에 접근하게 된다.
이를 통해 해당 하는 자원의 데이터의 불일치가 발생한다.

예방

프로세스의 동기화를 통해 해결하려 한다.

Critical Section Problem

critical section : 공유하는 자원을 접근하고, 업데이팅 하는 코드 부분을 의미
고로 여러 프로세스가 동시에 공유자원을 접근하지 않도록 하는 것이 이 문제의 의의이다.


섹션 분류
entry : critical 섹션 진입을 위한 허가를 요청
critical : 공유 자원에 접근
exit : 진입 허가를 반납
remainder : 남은 코드
일반적으로 코드는 위의 순서를 지키지만 remainder의 경우 맨 처음 오든 끝에 오든 상관 없다.

요구 사항
1. Mutual Exclusion(상호 배제) : 특정 프로세스가 critical section을 실행 중이면 다른 프로세스는 실행할 수 없다.
2. Progress (Avoid DeadLock) : critical section을 실행 중인 프로세스가 없고 여러 프로세스가 실행하기 위해 대기중이라면 프로세스를 선택하는 행위는 무한정으로 연기할 수 없음.
3. Bounded Waiting (Avoid Starvation) : 특정 프로세스가 critical section을 실행해도 된다는 허가를 받은 후에 다른 프로세스들이 먼저 들어갈 수 있는 횟수(Bypass)를 제한하는 것.
우선순위에 따른 CPU점유 횟수에 제한을 둠.

싱글 코어에서의 해결

그저 interrupt를 막아버리기. => 물론 멀티 코어에선 성능의 저하가 발생
이와 같은 방식이 Non - preemptive kernel이 됨.

Peterson's Solution(Preemptive kernel)

근데 결과가 정확하다고 보장할 수는 없음. 결과를 보장할 수 없는 이유
현대의 컴퓨터가 특정 변수를 꺼내는 행위를 할 때 load, store의 순서를 바꿔버릴 수도 있어서 그럼. 어셈블리로 표현할 때 바뀌어 버리기 때문에 해당 코드의 순서가 바뀔 수도 있음.

flag[i] = true;
while (flag[j] && turn == j);

그러나 해당 방식이 요구 사항을 모두 만족하므로 의의가 있음.

Atomicity(원자성)

명령어의 실행을 원자적으로 하여 interrupt가 불가능하게 함.
2개의 함수 test_and_set(), compare_and_swap()
공통적으로 lock이란 전역 변수를 사용함.

Atomic Variable

race condition이 생기지 않도록, 상호배제를 만족시킬 수 있다.
count++count--와 같은 race condition이 생기지 않도록 할 수 있다.

0개의 댓글